Browse by type
Your agents change. Your project memory shouldn't.
openwolf keeps one project memory across Claude Code, Codex and OpenCode,
intercepts the reads and command output that quietly fill your context,
and reports what each session actually cost, read from the harness transcript.
Pure local file I/O: no API calls, no telemetry, no added latency.
Full lifecycle hooks: Claude Code, Codex CLI, OpenCode · Context integration: Cursor, Gemini CLI, Antigravity

| Without OpenWolf | With OpenWolf |
|---|---|
| Each agent starts cold and learns your project separately | One .wolf/ brain, shared across Claude Code, Codex and OpenCode |
| Switching agents means losing everything the last one learned | Corrections, bug fixes and project map follow you across tools |
| Your token usage is a monthly invoice with no line items | Real usage read from the transcript, per session, per agent |
| Nobody can tell you what broke the prompt cache | Attributed: model switch, compaction, version change, expiry |
| The agent rereads a file it already saw | Repeated reads caught; oversized Bash output condensed before it enters context |
Coding agents waste tokens in predictable ways. A grep -rn dumps 40,000
tokens into context, and the session re-reads them from cache on every later
API call. The same file gets printed three times with cat. Conventions you
taught the agent last week are gone today. When context compacts, the agent
forgets what it already did.
OpenWolf installs lifecycle hooks into your agent and fixes this underneath your normal workflow:
openwolf find locates any symbol in
under 1k tokens. Large files carry exact line ranges so the agent reads one
function, not the whole file.npm install -g openwolf
cd your-project
openwolf init
init detects the agents installed on your machine and wires each of them.
Then use your agents as normal.
| Agent | Integration |
|---|---|
| Claude Code | Full: 12 hooks, output governor, skills, verified measurement |
| Codex CLI | Lifecycle hooks via .codex/hooks.json + AGENTS.md |
| OpenCode | Native plugin + AGENTS.md |
| Cursor | Rules file (context only) |
| Gemini CLI | GEMINI.md block (context only) |
| Antigravity | AGENTS.md block (context only) |
All agents share the same .wolf/ directory. It ships with a .gitignore
that commits the useful state (conventions, handoff, bug log, index) and
ignores the machine-local runtime (ledgers, caches). On Claude Code the
learned conventions also sync with native auto-memory, in both directions.
openwolf init creates .wolf/ and registers hooks with your agent. The
hooks are plain Node.js scripts: no network, no AI calls, no dependencies.
| File | Purpose |
|---|---|
anatomy-index.json |
Project index: descriptions, sizes, symbols, import graph |
cerebrum.md |
Preferences, conventions, and a Do-Not-Repeat list |
STATUS.md |
Session handoff. Regenerate with /handoff |
buglog.json |
Searchable memory of bugs and their fixes |
memory.md |
Action log per session |
token-ledger.json |
Measured, estimated, and verified usage |
hooks/ |
The 12 lifecycle hooks, with health heartbeats |
cache/bash/ |
Verbatim copies of every condensed Bash output |
During a session:
git show keeps
the header and diff stats, file re-prints keep head and tail. Original
preserved, delta recorded. Test and build output is suggested-only by
default because failure detail matters more than tokens.openwolf report
Measured (all project transcripts, scanned now)
API calls: 814
Output tokens: 737,952
Cache reads: 238,172,904
Cache writes: 3,323,678
Bash governor (measured at the rewrite point)
Governed calls: 12
Original output: 96,410
Entered context: 14,867
Kept out of context: 81,543
Cache rebuilds (last 7 days): 6 events, 1,942,520 tokens re-written
model_switch 3 events 929,737 tok
cache_expired 1 events 524,661 tok
unattributed 2 events 488,122 tok
Three things worth knowing about these numbers:
openwolf bench --repo <fixture> --yes runs the same tasks with and without
OpenWolf and reports each token dimension separately, plus completion rate
and the bash re-run rate. It spends real API budget, so it requires --yes.
Invisible tools need proof of life. Every hook writes a heartbeat. Session
start verifies the installed hooks can load. openwolf update runs a
selfcheck on every hook after install and fails loudly instead of leaving a
broken install. The dashboard shows failing hooks with the error. This
exists because a hook once crashed silently 440 times over three weeks
before anyone noticed.
.env, keys, credentials) never enter any index.Installed for every wired agent:
/handoff regenerates STATUS.md from git, the action log, and open items./security-audit runs a layered audit and files results into the bug log./reframe picks or migrates a UI framework from a curated comparison of
13, with an anti-generic design mandate.On Claude Code, the operating protocol ships as a proper skill so CLAUDE.md stays a five-line stub.
openwolf dashboard
Local, token-authenticated, live. The hero number is tokens verifiably kept out of context. Around it: measured vs estimated usage, cache rebuild attribution, per-agent breakdown, hook health, the anatomy browser, activity, and cron control.
openwolf init Set up .wolf/ and wire detected agents
openwolf status Health, stats, file integrity
openwolf scan Rebuild the project index
openwolf scan --check CI check: does the index match the tree
openwolf find <query> Locate a symbol or file (ranked, ~1k tokens max)
openwolf find --file
One file's description, size, and symbol map
openwolf map Token-budgeted overview of the important files
openwolf report Measured, verified, governed, attributed usage
openwolf bench A/B benchmark with and without OpenWolf (--yes)
openwolf bug search <term> Full-text search over the bug memory
openwolf dashboard Open the dashboard
openwolf cron list Scheduled maintenance tasks
openwolf update Update every registered project (backup first)
openwolf restore [backup] Roll back .wolf/ from a backup
Node.js 20+ and at least one supported agent. Works on macOS, Linux, and Windows. Bug-log full-text search uses Node's built-in SQLite on 22.5+ and falls back to a simpler matcher below that.
Found something broken? File an issue.
OpenWolf is better because people fixed it. Every merged contribution is credited here. Kindly let us know if we have missed a contribution.
![]() |
aevnar | | |
Built by Farhan Palathinkal, Cytostack
browse all types & interfaces →
$ claude mcp add openwolf \
-- python -m otcore.mcp_server <graph>