Your model, on your machine
Built for local open-weight models first — llama-server, vLLM, Ollama — with Anthropic there when you want a ceiling to measure against. Your mail and your calendar never have to leave the house to be useful.
Your context, connected
Mail and calendar behind one surface, a personalized knowledge graph for who people are and what happened when, and anything else you can expose over MCP. An assistant is only as good as what it knows about you.
Built for the lethal trifecta
A personal assistant holds private data, reads other people's words, and can send — all three, by definition. So the interlock is structural: tools declare capabilities, the conversation carries the taint, and a send is refused before the human is ever asked.
Nothing leaves without you
Name a tool in the outbox and its calls are staged as drafts instead of executed. Overnight inbox triage leaves you a review queue rather than sent mail — and it needs no write permission at all, because staging executes nothing.
A public surface, both directions
What the agent makes becomes a durable, versioned URL. What people need from you arrives as a typed request rather than free-form prose, so a stranger's words never reach a privileged run.
Graded on the trace, not the claim
The eval rig checks the tool calls first and the prose second, runs a verify command for ground truth, and reports pass^k beside pass@k. Everything a model says about its own work is hearsay.
And carry it
mecha serve puts the same agent behind a web app on your tailnet — bound to loopback, fronted by Tailscale, opened by your network identity rather than a password. It is where drafts get approved, mail gets read and queues get cleared, and it is the only door voice opens through.
Run it
One binary, five front ends — four in a terminal and one in a browser. mecha run answers and exits; mecha tui and mecha serve keep the input live, so you can redirect a run without stopping it.
mecha tools # no provider needed: lists the surface
mecha run "summarise the notes directory"
mecha tui # full screen; steer a run in flight
mecha serve # the same agent, on your phone
mecha trigger add briefing --schedule "0 7 * * 1-5" \
--prompt "What is on my calendar today?"
Connect it
An assistant is only as good as what it knows about you. Personal context arrives over MCP, so adding a source is configuration rather than a code change — and [outbox] means the ones that can send stage drafts for you instead.
[[mcp]]
name = "mail" # every account behind one surface
command = "mecha-mail"
[mcp.capabilities] # other people's words: config says so, no annotation can
untrusted_input = true
[[mcp]]
name = "graph" # who people are, and what happened when
command = "mecha-graph-mcp"
prefix_tools = false # its kg_* tools carry their own namespace
[mcp.capabilities] # the graph holds what mail said, so the same override
untrusted_input = true
[outbox] # staged for review, never sent outright
tools = ["mail__mail_send", "mail__mail_reply"]