Docs
Task-based guides. The full command reference lives in the repo README and oce --help; these pages cover the paths people actually walk.
Start free, stay local
Install, get a working model (free tiers first), index, search — no API key required for retrieval.
npm install -g @dhaxor/open-context oce setup # picks a free model if you have one oce index # indexes the current directory oce search "auth middleware"
Plug into Claude Code, Cursor, or any MCP client
The engine speaks MCP over stdio and HTTP. Retrieval, files, and symbol tools become your assistant's ground truth.
claude mcp add oce -- oce mcp # or, for HTTP clients: oce mcp --http --port 8940
Run the Trace workspace
The agent with an evidence rail: see what's in context, pin it, evict it, rewind it.
oce trace # browser workspace oce # same thing, in the terminal
Search modes: pick with intent
OCE degrades, never dies: with no embedding key it runs keyword-only (BM25) and says so on every surface. Adding an embedding provider turns on hybrid search — BM25 fused with vector similarity, with the fusion weights adapting to each query's shape (exact symbols lean lexical; paraphrases lean semantic). Measure both on your own repo:
oce eval --cases eval/oce.eval.json # committed 44-case gold set oce bench # indexing throughput on your machine
Free semantic options: oce setup --embeddings ollama (local, no key) or --embeddings local (in-process, no server). Voyage-code-3 gives the best code-retrieval numbers.
Use with Claude Code
Add the MCP server once per project (or -s user for all of them):
claude mcp add oce --scope project -- oce mcp
Claude Code then gets codebase-retrieval, find-symbol-definition, find-symbol-references, read-file, and index-status — all served from the local index. The first call indexes the workspace; after that, indexing is incremental.
Use with Cursor / other MCP clients
Point the client at the HTTP endpoint with a bearer token, or run stdio:
oce mcp --http --port 8940 --auth-token $OCE_MCP_AUTH_TOKEN
// .cursor/mcp.json
{ "mcpServers": { "oce": { "url": "http://127.0.0.1:8940/mcp",
"headers": { "Authorization": "Bearer $OCE_MCP_TOKEN" } } } }
Share one index across a team (Team plan)
Index once in CI, publish the artifact, and teammates pull it — only their local diff re-embeds, because identical code hashes to identical vectors:
# CI: build and publish (file path, S3, or any HTTP endpoint) oce push-index ./team-index.tar oce push-index https://indexes.example.com/upload --token $OCE_INDEX_TOKEN # Teammate: pull and go (their diff re-embeds, nothing else) oce pull-index https://indexes.example.com/team-index.tar
Team features gate on an offline-verifiable license. See pricing — activation is one command: oce activate polar_lk_….
Activate a license
oce activate polar_lk_xxxxxxxx # the key from your Polar order email oce license # plan, seats, expiry, grace window
The key is verified with Polar once; what gets saved is a signed token that checks out locally forever — air-gapped machines stay activated. A full signed token (xxx.yyy) also activates offline directly.
Troubleshooting
- "keyword-only mode" — no embedding provider configured.
oce setup --embeddings ollamafixes it for free. - Embedding 401 on first local run — you opted into the gated jina model; switch back with
oce setup --embeddings local(MiniLM, ungated). - Search feels lexical only — check
oce status; ifsqlite-veccouldn't load on your platform, the engine runs keyword-only by design. - Agent edits look wrong — every edit is a diff you can undo from the evidence rail;
oce audit --verifyproves the log wasn't touched.