Your context, one command away.
ctxindex is a local personal-context gateway for agents. One deterministic CLI to discover, retrieve, and act on your mail, calendars, and files — across every account, without giving anything up.
{ "results": [{ "ref": "ctx://01JG…9QK4/message/mid-7f3a", "profile": { "id": "communication.message", "version": 1 }, "title": "Flight to Berlin" }], "warnings": [] }
{ "mode": "tree", "messages": [{ "resource": { "ref": "ctx://01JG…9QK4/message/mid-7f3a" }, "children": [] }], "warnings": [] }
A context layer, not another inbox
Indexing is a strategy, not the product. The product is one coherent access model over everything you already have.
One vocabulary, every provider
search, get, thread, export, action. Mail, calendars, files, and extension domains answer to the same commands with the same Ref shapes.
Realms keep contexts apart
personal, company, university. Every Source belongs to exactly one Realm, so agents reason about the right slice of your life.
Built for coding agents
No MCP server or agent-specific SDK. Deterministic commands, --json output, and stable exit codes are the whole integration contract. Any shell-capable agent already integrates.
Providers stay canonical
ctxindex keeps local projections in SQLite for fast search; your mail and files never stop living where they live.
Typed, reversible Actions
Provider mutations stop at reversible email Drafts. Agents can prepare work for you; they never send on your behalf.
Profiles as portable semantics
Versioned domain contracts define shapes, relations, and Actions once — adapters plug providers into them without core branches.
Zero integration work for agents
Claude Code, Codex CLI, OpenClaw — any agent that can run a shell command can use ctxindex today. Compose search, get, and export with machine-readable output and stable exit codes. Most commands use --json; byte-stream exports use --format json.
# what an agent actually runs
ctxindex search "invoice acme" \
--realm company --json
ctxindex get \
ctx://01J00000000000000000000000/message/stable-message-id \
--json
ctxindex action describe \
communication.message.draft.create \
--source work-mail --json