Command-Line Interface
cortexdb — a fast, full-coverage CLI for the v1 memory API.
cortexdb-cli is a Click + Rich CLI that wraps the v1 HTTP API in a small, fast binary. Anonymous
signup in one command, no email or card; works against the public SaaS or any self-hosted CortexDB
deployment.
pip install cortexdb-cliRequires Python 3.10+ (current release: 0.6.0). The cortexdb-cli version line is independent of
the CortexDB server version (this reference targets server v0.10.2) — see
Versioning and SDK compatibility.
The three-line happy path
cortexdb init # anonymous signup, writes ~/.cortexdb/state.json
cortexdb experience "Q3 revenue: $2.4M, $10M ARR target" # store
cortexdb recall "Q3 revenue?" # retrieveinit posts to /v1/auth/signup, gets a token + actor + scope, and persists everything to
~/.cortexdb/state.json (mode 0600 on POSIX). The token has a 7-day TTL on the free tier — re-run
init to refresh, or pass --api-key + --actor when you have a permanent identity from your IdP.
Commands
This table is a curated subset
The CLI ships more commands than are listed here. As of the 0.5.x line the full set also includes
audit, claims, code, compose, concepts, conflicts, and wire — run
cortexdb --help for the authoritative list. code is the Code Intelligence Plane CLI.
| Command | What it does | v1 endpoint |
|---|---|---|
cortexdb init | Anonymous signup; persist state.json | POST /v1/auth/signup |
cortexdb preflight | Read-only environment checks | GET /v1/admin/health |
cortexdb plan | What apply would do; writes nothing | (local) |
cortexdb apply / resume / status | Run onboarding, checkpointed | /v1/auth/signup, /v1/admin/ready |
cortexdb doctor | Diagnose an existing install | /v1/admin/{health,ready}, /v1/auth/whoami |
cortexdb verify | Prove write → recall → cleanup | /v1/experience, /v1/recall, /v1/forget |
cortexdb cleanup | Remove what verify/apply created | POST /v1/forget |
cortexdb experience "..." | Store a memory | POST /v1/experience |
cortexdb experience bulk file.jsonl | Bulk-load envelopes | POST /v1/experience/bulk |
cortexdb recall "..." | Stratified context pack | POST /v1/recall (holistic) |
cortexdb search "..." | Granular event hits | POST /v1/recall (granular) |
cortexdb answer "..." | Recall + LLM answer | POST /v1/answer |
cortexdb forget --memory-id ... --reason ... | Delete with audit | POST /v1/forget |
cortexdb episodes {list,get,delete} | Episode + event ops | /v1/episodes, /v1/events/{id} |
cortexdb entities {list,get,link} | Entity rollups | /v1/facts |
cortexdb facts {list,timeline} | Typed triples + bi-temporal lineage | /v1/facts, /v1/facts/timeline |
cortexdb beliefs {list,why,build} | Aggregated beliefs + provenance | /v1/beliefs* |
cortexdb understanding {list,coverage,synthesize} | Synthesized concepts | /v1/concepts, /v1/concepts/coverage, /v1/understanding/synthesize |
cortexdb scopes {list,register,members} | Hierarchical scopes | /v1/scopes* |
cortexdb auth {whoami,signup,tokens,revoke} | Identity + mint + revoke | /v1/auth* |
cortexdb policy {effective,deployment} | What can this actor do, where? | /v1/policy* |
cortexdb admin {health,usage,layers} | Diagnostics | /v1/auth/whoami, /v1/admin/layers/stats |
cortexdb admin retention {show,set,sweep,delete} | Retention rules and the expiry sweep (0.5.4+, server v0.9.10+) | /v1/admin/retention, /v1/admin/retention/policies, /v1/admin/retention/sweep — see Retention & WAL |
cortexdb admin wal {status,compact} | Unified WAL census and dead-row compaction (0.5.4+) | /v1/admin/wal, /v1/admin/wal/compact |
cortexdb audit {status,verify} | Audit hash-chain integrity | /v1/audit* |
cortexdb claims / conflicts | Bi-temporal record history; contradiction detection | /v1/claims/history, /v1/conflicts |
cortexdb concepts | LLM-synthesized concepts and themes | /v1/concepts |
cortexdb code {...} | Code-plane repos, imports, bundles | /v1/code/* |
cortexdb compose | Structured markdown document from memory | POST /v1/compose |
cortexdb wire | Wire an agent harness to CortexDB, and prove it | (local) |
cortexdb import data.{json,jsonl,csv,txt} | Bulk ingest | POST /v1/experience per row (or one POST /v1/import with the server-side option) |
cortexdb export -o backup.json | Export memories | POST /v1/export |
cortexdb config {show,set} | Edit ~/.cortexdb/config.toml | (local) |
cortexdb (no args) | Interactive REPL | (wraps the above) |
cortexdb auth tokens: --scope does not confine (0.6.0)
In 0.6.0 cortexdb auth tokens --scope PATH only says where your own auth.mint is checked; it does not
confine the token. To confine it, pass --confine CAP:PREFIX (repeatable), which is sent as the token's
scopes claim:
cortexdb auth tokens --subject agent:b --ttl 3600 --confine 'scope.read:org:acme/team:b/*'In 0.5.4 --scope sent scopes entries directly. 0.6.0 refuses a --scope value that looks like a
CAP:PREFIX entry and points you at --confine. See Auth for how scope,
scopes and caps differ.
cortexdb remember "..." is a hidden alias for experience — kept so old scripts and muscle memory
keep working.
--wait indexed against server v0.10.2
The CLI's HTTP timeout is 30 s, the same as server v0.10.2's wait budget, so
cortexdb experience --wait indexed "…" against a server that can't index in time ends with the CLI's
own Request timed out. (exit code 2) after about 30 s, not the server's 408 WAIT_TIMEOUT. The write is
captured and durable either way. The CLI derives each write's idempotency_key from the scope and the
text, so re-running the same command replays that write instead of storing it twice.
Onboarding and diagnostics
Eight commands exist specifically so a coding agent can install, verify and diagnose CortexDB without guessing. They share one output envelope and one exit-code contract.
cortexdb preflight # can this machine talk to CortexDB at all?
cortexdb plan # what would apply do? (no writes)
cortexdb apply # do it, checkpointing after each stage
cortexdb resume # continue after an interruption
cortexdb doctor # why is my existing install unhappy?
cortexdb verify # prove write -> recall -> cleanup end to end
cortexdb cleanup # remove what verify/apply createdOne envelope
Every one of them emits the same document, so you parse one shape rather than eight. --json works
before or after the subcommand, and is implied when stdout is not a TTY.
{
"schema": "cortexdb.cli.diagnostic/v1",
"command": "doctor",
"ok": false,
"exit_code": 11,
"outcome": "failure",
"first_failing_stage": "authenticated",
"counts": { "pass": 4, "fail": 1, "skip": 0, "blocked": 1 },
"stages": [
{
"id": "authenticated",
"title": "Token is accepted",
"state": "fail",
"detail": "HTTP 401: token expired",
"retriable": false,
"remediation": "The token is missing, expired or revoked. Run `cortexdb init`.",
"doc_url": "https://cortexdb.ai/docs/api-reference/auth"
}
]
}Every stage that is not pass carries retriable, remediation and doc_url.
Exit codes
Branch on these instead of parsing the message:
| Code | Meaning | What to do |
|---|---|---|
0 | Everything passed | Continue |
2 | Usage error | Fix the command line |
10 | A stage failed transiently | Retry |
11 | A stage failed permanently | Act on remediation |
12 | Blocked — a prerequisite is absent, nothing was attempted | Satisfy the prerequisite |
1 | Unexpected internal error | Report the JSON |
blocked is deliberately distinct from fail: "you have no credentials" and "your credentials were
rejected" need different responses.
Stages are idempotent
Each stage probes before it acts, so a stage that is already satisfied reports skip with the reason.
Re-running a partial onboarding is safe, apply never mints a second identity, and resume is simply
apply reading the checkpoint at ~/.cortexdb/onboarding.json.
apply stops at the first failing stage rather than continuing.
verify is safe against a real deployment
verify writes one synthetic marker with ?wait=indexed, so read-your-writes is guaranteed by the
time the write returns. Everything it writes goes into a cortexdb-cli-verify leaf subtree of your
scope, and cleanup removes exactly that subtree — it cannot reach your real data. Pass --keep to
leave the marker in place for inspection.
Pipe-friendly
Auto-detects when stdout isn't a TTY and switches to JSON:
cortexdb recall "Q3 revenue" | jq .context_block
cortexdb facts list | jq '.items[] | {predicate, object}'
echo "remember this" | cortexdb experience -
cat envelopes.jsonl | cortexdb experience bulk -Force JSON any time with --json.
Configuration
Three layers, in precedence order (high to low):
- CLI flags —
--api-key,--endpoint,--actor,--scope,--profile - Environment —
CORTEXDB_API_KEY,CORTEXDB_URL,CORTEXDB_ACTOR,CORTEXDB_SCOPE - Persisted state:
~/.cortexdb/config.toml— endpoint, profile names (human-editable)~/.cortexdb/state.json— token, actor, scope, expiry (managed byinit;0600on POSIX)
state.json is not a drop-in copy to the MCP server
The CLI and connectors use ~/.cortexdb/state.json, while cortexdb-mcp reads
<APPDATA|XDG>/cortexdb-mcp/state.json — and the key names differ: the CLI writes
{ token, user_id, scope, expires_at }, the MCP server reads { token, actor, scope }. Reusing one anonymous identity across both tools means copying
the file to the other tool's path and renaming user_id ↔ actor; a straight copy leaves the MCP
server without an actor, so its calls fail the actor-vs-token check.
Also available: --config-dir (env CORTEXDB_HOME) isolates one project's identity and checkpoints
from another's — --profile alone does not.
Auth notes
Against the cloud (and any server with CORTEX_API_KEY set), authenticated requests carry both
Authorization: Bearer <token> and X-Cortex-Actor — the bearer is a PASETO v4 token, or the
CORTEX_API_KEY value itself on self-hosted servers. The CLI stamps both for you.
Local no-auth mode is opt-in
A self-hosted server started with CORTEX_INSECURE_NO_AUTH=1 serves everything as user:local —
no headers required (and /v1/admin/health / ready never need auth). Otherwise the CLI sends the
CORTEX_API_KEY value as the bearer for you; a keyless, network-exposed server auto-generates a key and
requires it.
- 401s show the specific error code (
TOKEN_EXPIRED,ACTOR_MISMATCH,INVALID_TOKEN_SIGNATURE) and the remediation: usuallycortexdb init. - 403s cite the missing capability and the policy tier that denied. If a recall returns
diagnostics.readdenied, pass--diagnostics none— free-tier tokens don't carrydiagnostics.read(the CLI defaults tonone). - Every authenticated response carries
X-RateLimit-Limit,X-RateLimit-Reset,X-Cortex-Token-Expires-In, andX-Cortex-Token-Expires-At;cortexdb admin usagesurfaces them.
Profiles
Run against multiple deployments by passing --profile:
cortexdb --profile prod init --endpoint https://api-v1.cortexdb.ai
cortexdb --profile staging init --endpoint https://staging.cortexdb.example
cortexdb --profile staging experience "test memory"Each profile gets its own block in ~/.cortexdb/config.toml. The state.json is shared — if you need
separate identities per profile, run cortexdb auth signup --save after switching, or isolate with
--config-dir.
See also
- Python SDK — programmatic access from Python.
- TypeScript SDK — programmatic access from JS/TS.
- MCP Server — same v1 surface exposed to Claude / Cursor / VS Code Copilot.
- Auth — how tokens, actors, and capabilities fit together.