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.

Example agent session: the ctxindex CLI returns machine-readable JSON with stable Refs that later commands consume.
ctxindex search "flight to berlin" --realm personal --json
{
  "results": [{
    "ref": "ctx://01JG…9QK4/message/mid-7f3a",
    "profile": { "id": "communication.message", "version": 1 },
    "title": "Flight to Berlin"
  }],
  "warnings": []
}
ctxindex thread get 'ctx://01JG…9QK4/message/mid-7f3a' --json
{
  "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.

Agent integration guide →
# 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