Repository files navigation

OpenWolf demo

@alptech/openwolf

The second brain for Claude Code. Now for every AI coding assistant.

Improved context management, optimized architecture scaffolding, and smarter token utilization,
delivered through 7 invisible lifecycle hooks. Zero workflow changes.

npm versionLicense: AGPL-3.0Node.js

English · 中文 · 日本語 · Русский

Quick Start · Supported Agents · Context Management · Token Intelligence · Security · Dashboard · Changelog

This is a fork of openwolf by Cytostack. It tracks upstream business features while keeping the @alptech/openwolf package identity.


Without OpenWolfWith OpenWolf
The agent rereads a file it already saw (~2,000 tokens)It reads the one-line description first, or skips the read entirely
Whole-file reads just to find one functionSymbol-level hints give exact line ranges for offset/limit reads
Context compaction wipes what the session didA PreCompact snapshot and restore keep the work in context
Every agent starts from a cold promptOne shared .wolf/ brain across Codex, OpenCode, Claude Code, Cursor, and Antigravity
No idea where your tokens wentUsage measured from harness transcripts, plus a live local dashboard

Why OpenWolf?

Coding agents are powerful but they work blind. An agent does not know what a file contains until it opens it. It cannot tell a 50-token config from a 2,000-token module. It rereads the same file in one session without noticing, forgets your corrections between sessions, and loses everything when its context window compacts.

OpenWolf gives your agent a second brain that fixes all of that:

  • Context management. A budget-capped digest of your project's most valuable state (current goals, known mistakes, fixed bugs, the project map) is injected at every session start. A PreCompact hook plus a compaction-aware restart mean context compaction no longer erases what the session already did.
  • Architecture scaffolding. A durable, self-healing project index maps every file with a description, a token estimate, and (for large files) its functions and classes with exact line ranges. Agents navigate your codebase instead of rediscovering it.
  • Token utilization. Repeated reads are caught, whole-file reads become targeted slice reads, and real usage is measured from harness transcripts so you can verify the savings instead of trusting an estimate.

Quick Start

npm install -g @alptech/openwolf
cd your-project
openwolf init

That is it. init auto-detects the coding agents installed on your machine and wires each of them to the same .wolf/ brain. Use your agents normally; OpenWolf works underneath.

Supported Agents

One .wolf/ brain, many agents:

AgentIntegrationDepth
Codex CLI.codex/hooks.json lifecycle hooks + AGENTS.mdFull (hooks + context)
OpenCodeNative plugin + AGENTS.mdFull (hooks + context)
Claude Code7 lifecycle hooks + CLAUDE.mdFull (hooks + context)
Cursor.cursor/rules/openwolf.mdc (always applied)Beta (context)
AntigravityAGENTS.md protocol blockBeta (context)
Gemini CLIGEMINI.md protocol blockBeta (context)
openwolf init # auto-detect installed agents (recommended)
openwolf init --agent codex opencode # wire exactly these
openwolf init --agent all # wire every detected agent
openwolf init --agent claude # Claude Code only

Protocol blocks are marker-fenced: your own content in AGENTS.md or GEMINI.md is never touched, and re-running init never duplicates anything.

What It Creates

openwolf init creates a .wolf/ directory in your project:

FilePurpose
anatomy-index.jsonDurable project index: descriptions, token estimates, content hashes, symbols
anatomy.mdHuman-readable render of the index, kept in sync automatically
cerebrum.mdLearned preferences, corrections, Do-Not-Repeat list
memory.mdChronological action log with token estimates
STATUS.mdSession handoff: resume any session in one small read
buglog.jsonBug fix memory, searchable, prevents rediscovery
token-ledger.jsonEstimated and measured token usage, per session and per agent
hooks/7 lifecycle hooks (pure Node.js, zero dependencies)
config.jsonConfiguration, including per-agent context budgets
OPENWOLF.mdThe operating protocol your agents follow

How It Works

Session starts
|
OpenWolf injects a token-budgeted digest: current goals, known mistakes,
recent bug fixes, project map pointer
|
Agent decides to read a big file
|
OpenWolf: "auth.ts (~2,900 tok). Symbols: validateToken L82-140 ~450 tok.
Read with offset/limit to fetch just the part you need."
|
Agent edits files
|
OpenWolf updates the index under a cross-process lock, logs the action,
estimates the cost
|
Context compacts mid-session
|
OpenWolf snapshots state before compaction and re-injects a digest of the
files already modified, so the agent does not redo finished work
|
Session ends
|
OpenWolf reads the real token usage from the transcript into the ledger

Context Management

  • Session digest. The highest-value state is pushed into the model's context at session start, capped to a configurable token budget per agent. The model gets what it needs without reading six files.
  • Compaction survival. The PreCompact hook snapshots in-flight session state; after compaction the digest lists the files already modified with a pointer to the action log. Resume and compaction no longer reset tracking.
  • Staleness detection. Scans pin the git HEAD. If the HEAD moves or the scan ages out, the agent is told to rescan before trusting the map. A wrong index is never silently trusted.
  • STATUS.md handoff. End-of-phase state lives in one small document, so a fresh session reaches productive context in a single read.

Project Anatomy

The index is a durable store (anatomy-index.json) with a rendered, human-readable view (anatomy.md). Writers coordinate through a cross-process lock, so concurrent hook fires cannot lose entries. Edits made to the markdown by hand or by older hook versions are detected by content hash and absorbed additively.

Files above 500 estimated tokens also index their top-level symbols:

- `shared.ts` (~3,200 tok)
- fn `parseAnatomy` L82-104 (~180 tok)
- fn `serializeAnatomy` L106-129 (~200 tok)

Before the agent reads a large file, the hint lists the biggest symbols with line ranges so it can fetch one function with offset/limit instead of the whole file. Hints are suppressed automatically if the file changed since indexing; a stale range is never allowed to misdirect a read. Languages with symbol support today: TypeScript, JavaScript, Python, Go, Rust.

Token Intelligence

Estimates are useful; measurements are trustworthy. At session end OpenWolf reads the real usage from the harness transcript: input tokens, output tokens, cache reads, cache writes, and API calls, attributed to the agent that ran the session.

openwolf report
 Estimated (char-ratio heuristic)
Total tokens: 1,549,658
Est. savings vs bare: 1,772,690
Measured (from harness transcripts)
API calls: 29
Input tokens: 57,489
Cache reads: 309,141

Field results from 1.x deployments (20 projects, 132+ sessions) averaged a 65.8% estimated token reduction, with 71% of repeated file reads caught and blocked. Those figures are heuristic estimates; measured numbers in 2.x let you verify savings on your own workload.

Security

  • Dashboard binds to 127.0.0.1 and requires a per-project token (timing-safe comparison) for all API and WebSocket access.
  • Every dynamic process invocation uses argument arrays; no shell interpolation anywhere.
  • Path traversal guards on all cron file access, realpath-based and symlink-safe.
  • Secret-bearing files (keys, keystores, credential files, .npmrc, .env and friends) never enter the index or the memory log.
  • A security regression suite runs with pnpm test.

Bundled Skills

openwolf init installs two slash commands into every configured agent (Claude Code, Codex, OpenCode):

  • /security-audit [scope]: layered audit covering dependencies, secrets, injection surfaces, and authorization, ending in a severity-ranked report wired into .wolf/buglog.json.
  • /reframe [migrate | audit | fix]: the design brain. Pick or migrate a UI framework using a curated knowledge base of 13 frameworks (shadcn/ui, Aceternity, Magic UI, DaisyUI, HeroUI, Chakra, Flowbite, Preline, Park UI, Origin UI, Headless UI, Cult UI, Astryx), or audit and fix existing UI against an anti-generic design mandate.

Dashboard

openwolf daemon start
openwolf dashboard

A local, token-authenticated dashboard: measured vs estimated tokens, cache economics, per-agent usage, context health, session handoff, live activity, cron control, and the full anatomy browser with per-file symbols.

Commands

openwolf init Initialize .wolf/ and wire detected agents
openwolf status Health, stats, file integrity
openwolf scan Rebuild the project index
openwolf scan --check Verify the index matches the filesystem (CI-friendly)
openwolf report Token report: estimated vs measured
openwolf dashboard Open the web dashboard
openwolf daemon start Start the background daemon
openwolf daemon stop Stop the daemon
openwolf cron list Scheduled tasks
openwolf cron run <id> Trigger a task
openwolf bug search <term> Search the bug memory
openwolf update Update every registered project (with backup)
openwolf restore [backup] Roll back .wolf/ from a timestamped backup

There is also a standalone inspector that needs nothing installed:

node scripts/openwolf-check.mjs [projectDir] # read-only usage report

Requirements

  • Node.js 20+
  • At least one supported coding agent
  • Windows, macOS, or Linux
  • Optional: PM2 for a persistent background daemon

Limitations

  • Estimated figures use a character-ratio heuristic (accurate to roughly 15%); measured figures come from harness transcripts and are exact.
  • Hook coverage varies by agent: Claude Code and Codex have full lifecycle hooks, OpenCode uses its plugin events, Gemini CLI and Cursor are context-only integrations.
  • Protocol compliance (updating cerebrum, logging bugs) depends on the model following instructions; the hooks enforce what can be enforced and remind about the rest.
  • Found something broken? File an issue.

Acknowledgments

This project is based on the original OpenWolf by Cytostack / Farhan Palathinkal Afsal. Thank you to the upstream authors and contributors for the architecture, hooks, and ongoing improvements. This fork tracks upstream business features while publishing as @alptech/openwolf.

Upstream repository: https://github.com/cytostack/openwolf

License

AGPL-3.0

Author

Original project by Farhan Palathinkal Afsal — Cytostack. Maintained as @alptech/openwolf by alptech / @nottyjay.

About

Sharper context. Fewer tokens. Open-source middleware for Claude Code.

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

OpenWolf demo

@alptech/openwolf

The second brain for Claude Code. Now for every AI coding assistant.

Improved context management, optimized architecture scaffolding, and smarter token utilization,
delivered through 7 invisible lifecycle hooks. Zero workflow changes.

npm versionLicense: AGPL-3.0Node.js

English · 中文 · 日本語 · Русский

Quick Start · Supported Agents · Context Management · Token Intelligence · Security · Dashboard · Changelog

This is a fork of openwolf by Cytostack. It tracks upstream business features while keeping the @alptech/openwolf package identity.


Without OpenWolfWith OpenWolf
The agent rereads a file it already saw (~2,000 tokens)It reads the one-line description first, or skips the read entirely
Whole-file reads just to find one functionSymbol-level hints give exact line ranges for offset/limit reads
Context compaction wipes what the session didA PreCompact snapshot and restore keep the work in context
Every agent starts from a cold promptOne shared .wolf/ brain across Codex, OpenCode, Claude Code, Cursor, and Antigravity
No idea where your tokens wentUsage measured from harness transcripts, plus a live local dashboard

Why OpenWolf?

Coding agents are powerful but they work blind. An agent does not know what a file contains until it opens it. It cannot tell a 50-token config from a 2,000-token module. It rereads the same file in one session without noticing, forgets your corrections between sessions, and loses everything when its context window compacts.

OpenWolf gives your agent a second brain that fixes all of that:

  • Context management. A budget-capped digest of your project's most valuable state (current goals, known mistakes, fixed bugs, the project map) is injected at every session start. A PreCompact hook plus a compaction-aware restart mean context compaction no longer erases what the session already did.
  • Architecture scaffolding. A durable, self-healing project index maps every file with a description, a token estimate, and (for large files) its functions and classes with exact line ranges. Agents navigate your codebase instead of rediscovering it.
  • Token utilization. Repeated reads are caught, whole-file reads become targeted slice reads, and real usage is measured from harness transcripts so you can verify the savings instead of trusting an estimate.

Quick Start

npm install -g @alptech/openwolf
cd your-project
openwolf init

That is it. init auto-detects the coding agents installed on your machine and wires each of them to the same .wolf/ brain. Use your agents normally; OpenWolf works underneath.

Supported Agents

One .wolf/ brain, many agents:

AgentIntegrationDepth
Codex CLI.codex/hooks.json lifecycle hooks + AGENTS.mdFull (hooks + context)
OpenCodeNative plugin + AGENTS.mdFull (hooks + context)
Claude Code7 lifecycle hooks + CLAUDE.mdFull (hooks + context)
Cursor.cursor/rules/openwolf.mdc (always applied)Beta (context)
AntigravityAGENTS.md protocol blockBeta (context)
Gemini CLIGEMINI.md protocol blockBeta (context)
openwolf init # auto-detect installed agents (recommended)
openwolf init --agent codex opencode # wire exactly these
openwolf init --agent all # wire every detected agent
openwolf init --agent claude # Claude Code only

Protocol blocks are marker-fenced: your own content in AGENTS.md or GEMINI.md is never touched, and re-running init never duplicates anything.

What It Creates

openwolf init creates a .wolf/ directory in your project:

FilePurpose
anatomy-index.jsonDurable project index: descriptions, token estimates, content hashes, symbols
anatomy.mdHuman-readable render of the index, kept in sync automatically
cerebrum.mdLearned preferences, corrections, Do-Not-Repeat list
memory.mdChronological action log with token estimates
STATUS.mdSession handoff: resume any session in one small read
buglog.jsonBug fix memory, searchable, prevents rediscovery
token-ledger.jsonEstimated and measured token usage, per session and per agent
hooks/7 lifecycle hooks (pure Node.js, zero dependencies)
config.jsonConfiguration, including per-agent context budgets
OPENWOLF.mdThe operating protocol your agents follow

How It Works

Session starts
|
OpenWolf injects a token-budgeted digest: current goals, known mistakes,
recent bug fixes, project map pointer
|
Agent decides to read a big file
|
OpenWolf: "auth.ts (~2,900 tok). Symbols: validateToken L82-140 ~450 tok.
Read with offset/limit to fetch just the part you need."
|
Agent edits files
|
OpenWolf updates the index under a cross-process lock, logs the action,
estimates the cost
|
Context compacts mid-session
|
OpenWolf snapshots state before compaction and re-injects a digest of the
files already modified, so the agent does not redo finished work
|
Session ends
|
OpenWolf reads the real token usage from the transcript into the ledger

Context Management

  • Session digest. The highest-value state is pushed into the model's context at session start, capped to a configurable token budget per agent. The model gets what it needs without reading six files.
  • Compaction survival. The PreCompact hook snapshots in-flight session state; after compaction the digest lists the files already modified with a pointer to the action log. Resume and compaction no longer reset tracking.
  • Staleness detection. Scans pin the git HEAD. If the HEAD moves or the scan ages out, the agent is told to rescan before trusting the map. A wrong index is never silently trusted.
  • STATUS.md handoff. End-of-phase state lives in one small document, so a fresh session reaches productive context in a single read.

Project Anatomy

The index is a durable store (anatomy-index.json) with a rendered, human-readable view (anatomy.md). Writers coordinate through a cross-process lock, so concurrent hook fires cannot lose entries. Edits made to the markdown by hand or by older hook versions are detected by content hash and absorbed additively.

Files above 500 estimated tokens also index their top-level symbols:

- `shared.ts` (~3,200 tok)
- fn `parseAnatomy` L82-104 (~180 tok)
- fn `serializeAnatomy` L106-129 (~200 tok)

Before the agent reads a large file, the hint lists the biggest symbols with line ranges so it can fetch one function with offset/limit instead of the whole file. Hints are suppressed automatically if the file changed since indexing; a stale range is never allowed to misdirect a read. Languages with symbol support today: TypeScript, JavaScript, Python, Go, Rust.

Token Intelligence

Estimates are useful; measurements are trustworthy. At session end OpenWolf reads the real usage from the harness transcript: input tokens, output tokens, cache reads, cache writes, and API calls, attributed to the agent that ran the session.

openwolf report
 Estimated (char-ratio heuristic)
Total tokens: 1,549,658
Est. savings vs bare: 1,772,690
Measured (from harness transcripts)
API calls: 29
Input tokens: 57,489
Cache reads: 309,141

Field results from 1.x deployments (20 projects, 132+ sessions) averaged a 65.8% estimated token reduction, with 71% of repeated file reads caught and blocked. Those figures are heuristic estimates; measured numbers in 2.x let you verify savings on your own workload.

Security

  • Dashboard binds to 127.0.0.1 and requires a per-project token (timing-safe comparison) for all API and WebSocket access.
  • Every dynamic process invocation uses argument arrays; no shell interpolation anywhere.
  • Path traversal guards on all cron file access, realpath-based and symlink-safe.
  • Secret-bearing files (keys, keystores, credential files, .npmrc, .env and friends) never enter the index or the memory log.
  • A security regression suite runs with pnpm test.

Bundled Skills

openwolf init installs two slash commands into every configured agent (Claude Code, Codex, OpenCode):

  • /security-audit [scope]: layered audit covering dependencies, secrets, injection surfaces, and authorization, ending in a severity-ranked report wired into .wolf/buglog.json.
  • /reframe [migrate | audit | fix]: the design brain. Pick or migrate a UI framework using a curated knowledge base of 13 frameworks (shadcn/ui, Aceternity, Magic UI, DaisyUI, HeroUI, Chakra, Flowbite, Preline, Park UI, Origin UI, Headless UI, Cult UI, Astryx), or audit and fix existing UI against an anti-generic design mandate.

Dashboard

openwolf daemon start
openwolf dashboard

A local, token-authenticated dashboard: measured vs estimated tokens, cache economics, per-agent usage, context health, session handoff, live activity, cron control, and the full anatomy browser with per-file symbols.

Commands

openwolf init Initialize .wolf/ and wire detected agents
openwolf status Health, stats, file integrity
openwolf scan Rebuild the project index
openwolf scan --check Verify the index matches the filesystem (CI-friendly)
openwolf report Token report: estimated vs measured
openwolf dashboard Open the web dashboard
openwolf daemon start Start the background daemon
openwolf daemon stop Stop the daemon
openwolf cron list Scheduled tasks
openwolf cron run <id> Trigger a task
openwolf bug search <term> Search the bug memory
openwolf update Update every registered project (with backup)
openwolf restore [backup] Roll back .wolf/ from a timestamped backup

There is also a standalone inspector that needs nothing installed:

node scripts/openwolf-check.mjs [projectDir] # read-only usage report

Requirements

  • Node.js 20+
  • At least one supported coding agent
  • Windows, macOS, or Linux
  • Optional: PM2 for a persistent background daemon

Limitations

  • Estimated figures use a character-ratio heuristic (accurate to roughly 15%); measured figures come from harness transcripts and are exact.
  • Hook coverage varies by agent: Claude Code and Codex have full lifecycle hooks, OpenCode uses its plugin events, Gemini CLI and Cursor are context-only integrations.
  • Protocol compliance (updating cerebrum, logging bugs) depends on the model following instructions; the hooks enforce what can be enforced and remind about the rest.
  • Found something broken? File an issue.

Acknowledgments

This project is based on the original OpenWolf by Cytostack / Farhan Palathinkal Afsal. Thank you to the upstream authors and contributors for the architecture, hooks, and ongoing improvements. This fork tracks upstream business features while publishing as @alptech/openwolf.

Upstream repository: https://github.com/cytostack/openwolf

License

AGPL-3.0

Author

Original project by Farhan Palathinkal Afsal — Cytostack. Maintained as @alptech/openwolf by alptech / @nottyjay.

About

Sharper context. Fewer tokens. Open-source middleware for Claude Code.

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenWolf demo

@alptech/openwolf

The second brain for Claude Code. Now for every AI coding assistant.

Improved context management, optimized architecture scaffolding, and smarter token utilization,
delivered through 7 invisible lifecycle hooks. Zero workflow changes.

npm versionLicense: AGPL-3.0Node.js

English · 中文 · 日本語 · Русский

Quick Start · Supported Agents · Context Management · Token Intelligence · Security · Dashboard · Changelog

This is a fork of openwolf by Cytostack. It tracks upstream business features while keeping the @alptech/openwolf package identity.


Without OpenWolfWith OpenWolf
The agent rereads a file it already saw (~2,000 tokens)It reads the one-line description first, or skips the read entirely
Whole-file reads just to find one functionSymbol-level hints give exact line ranges for offset/limit reads
Context compaction wipes what the session didA PreCompact snapshot and restore keep the work in context
Every agent starts from a cold promptOne shared .wolf/ brain across Codex, OpenCode, Claude Code, Cursor, and Antigravity
No idea where your tokens wentUsage measured from harness transcripts, plus a live local dashboard

Why OpenWolf?

Coding agents are powerful but they work blind. An agent does not know what a file contains until it opens it. It cannot tell a 50-token config from a 2,000-token module. It rereads the same file in one session without noticing, forgets your corrections between sessions, and loses everything when its context window compacts.

OpenWolf gives your agent a second brain that fixes all of that:

  • Context management. A budget-capped digest of your project's most valuable state (current goals, known mistakes, fixed bugs, the project map) is injected at every session start. A PreCompact hook plus a compaction-aware restart mean context compaction no longer erases what the session already did.
  • Architecture scaffolding. A durable, self-healing project index maps every file with a description, a token estimate, and (for large files) its functions and classes with exact line ranges. Agents navigate your codebase instead of rediscovering it.
  • Token utilization. Repeated reads are caught, whole-file reads become targeted slice reads, and real usage is measured from harness transcripts so you can verify the savings instead of trusting an estimate.

Quick Start

npm install -g @alptech/openwolf
cd your-project
openwolf init

That is it. init auto-detects the coding agents installed on your machine and wires each of them to the same .wolf/ brain. Use your agents normally; OpenWolf works underneath.

Supported Agents

One .wolf/ brain, many agents:

AgentIntegrationDepth
Codex CLI.codex/hooks.json lifecycle hooks + AGENTS.mdFull (hooks + context)
OpenCodeNative plugin + AGENTS.mdFull (hooks + context)
Claude Code7 lifecycle hooks + CLAUDE.mdFull (hooks + context)
Cursor.cursor/rules/openwolf.mdc (always applied)Beta (context)
AntigravityAGENTS.md protocol blockBeta (context)
Gemini CLIGEMINI.md protocol blockBeta (context)
openwolf init # auto-detect installed agents (recommended)
openwolf init --agent codex opencode # wire exactly these
openwolf init --agent all # wire every detected agent
openwolf init --agent claude # Claude Code only

Protocol blocks are marker-fenced: your own content in AGENTS.md or GEMINI.md is never touched, and re-running init never duplicates anything.

What It Creates

openwolf init creates a .wolf/ directory in your project:

FilePurpose
anatomy-index.jsonDurable project index: descriptions, token estimates, content hashes, symbols
anatomy.mdHuman-readable render of the index, kept in sync automatically
cerebrum.mdLearned preferences, corrections, Do-Not-Repeat list
memory.mdChronological action log with token estimates
STATUS.mdSession handoff: resume any session in one small read
buglog.jsonBug fix memory, searchable, prevents rediscovery
token-ledger.jsonEstimated and measured token usage, per session and per agent
hooks/7 lifecycle hooks (pure Node.js, zero dependencies)
config.jsonConfiguration, including per-agent context budgets
OPENWOLF.mdThe operating protocol your agents follow

How It Works

Session starts
|
OpenWolf injects a token-budgeted digest: current goals, known mistakes,
recent bug fixes, project map pointer
|
Agent decides to read a big file
|
OpenWolf: "auth.ts (~2,900 tok). Symbols: validateToken L82-140 ~450 tok.
Read with offset/limit to fetch just the part you need."
|
Agent edits files
|
OpenWolf updates the index under a cross-process lock, logs the action,
estimates the cost
|
Context compacts mid-session
|
OpenWolf snapshots state before compaction and re-injects a digest of the
files already modified, so the agent does not redo finished work
|
Session ends
|
OpenWolf reads the real token usage from the transcript into the ledger

Context Management

  • Session digest. The highest-value state is pushed into the model's context at session start, capped to a configurable token budget per agent. The model gets what it needs without reading six files.
  • Compaction survival. The PreCompact hook snapshots in-flight session state; after compaction the digest lists the files already modified with a pointer to the action log. Resume and compaction no longer reset tracking.
  • Staleness detection. Scans pin the git HEAD. If the HEAD moves or the scan ages out, the agent is told to rescan before trusting the map. A wrong index is never silently trusted.
  • STATUS.md handoff. End-of-phase state lives in one small document, so a fresh session reaches productive context in a single read.

Project Anatomy

The index is a durable store (anatomy-index.json) with a rendered, human-readable view (anatomy.md). Writers coordinate through a cross-process lock, so concurrent hook fires cannot lose entries. Edits made to the markdown by hand or by older hook versions are detected by content hash and absorbed additively.

Files above 500 estimated tokens also index their top-level symbols:

- `shared.ts` (~3,200 tok)
- fn `parseAnatomy` L82-104 (~180 tok)
- fn `serializeAnatomy` L106-129 (~200 tok)

Before the agent reads a large file, the hint lists the biggest symbols with line ranges so it can fetch one function with offset/limit instead of the whole file. Hints are suppressed automatically if the file changed since indexing; a stale range is never allowed to misdirect a read. Languages with symbol support today: TypeScript, JavaScript, Python, Go, Rust.

Token Intelligence

Estimates are useful; measurements are trustworthy. At session end OpenWolf reads the real usage from the harness transcript: input tokens, output tokens, cache reads, cache writes, and API calls, attributed to the agent that ran the session.

openwolf report
 Estimated (char-ratio heuristic)
Total tokens: 1,549,658
Est. savings vs bare: 1,772,690
Measured (from harness transcripts)
API calls: 29
Input tokens: 57,489
Cache reads: 309,141

Field results from 1.x deployments (20 projects, 132+ sessions) averaged a 65.8% estimated token reduction, with 71% of repeated file reads caught and blocked. Those figures are heuristic estimates; measured numbers in 2.x let you verify savings on your own workload.

Security

  • Dashboard binds to 127.0.0.1 and requires a per-project token (timing-safe comparison) for all API and WebSocket access.
  • Every dynamic process invocation uses argument arrays; no shell interpolation anywhere.
  • Path traversal guards on all cron file access, realpath-based and symlink-safe.
  • Secret-bearing files (keys, keystores, credential files, .npmrc, .env and friends) never enter the index or the memory log.
  • A security regression suite runs with pnpm test.

Bundled Skills

openwolf init installs two slash commands into every configured agent (Claude Code, Codex, OpenCode):

  • /security-audit [scope]: layered audit covering dependencies, secrets, injection surfaces, and authorization, ending in a severity-ranked report wired into .wolf/buglog.json.
  • /reframe [migrate | audit | fix]: the design brain. Pick or migrate a UI framework using a curated knowledge base of 13 frameworks (shadcn/ui, Aceternity, Magic UI, DaisyUI, HeroUI, Chakra, Flowbite, Preline, Park UI, Origin UI, Headless UI, Cult UI, Astryx), or audit and fix existing UI against an anti-generic design mandate.

Dashboard

openwolf daemon start
openwolf dashboard

A local, token-authenticated dashboard: measured vs estimated tokens, cache economics, per-agent usage, context health, session handoff, live activity, cron control, and the full anatomy browser with per-file symbols.

Commands

openwolf init Initialize .wolf/ and wire detected agents
openwolf status Health, stats, file integrity
openwolf scan Rebuild the project index
openwolf scan --check Verify the index matches the filesystem (CI-friendly)
openwolf report Token report: estimated vs measured
openwolf dashboard Open the web dashboard
openwolf daemon start Start the background daemon
openwolf daemon stop Stop the daemon
openwolf cron list Scheduled tasks
openwolf cron run <id> Trigger a task
openwolf bug search <term> Search the bug memory
openwolf update Update every registered project (with backup)
openwolf restore [backup] Roll back .wolf/ from a timestamped backup

There is also a standalone inspector that needs nothing installed:

node scripts/openwolf-check.mjs [projectDir] # read-only usage report

Requirements

  • Node.js 20+
  • At least one supported coding agent
  • Windows, macOS, or Linux
  • Optional: PM2 for a persistent background daemon

Limitations

  • Estimated figures use a character-ratio heuristic (accurate to roughly 15%); measured figures come from harness transcripts and are exact.
  • Hook coverage varies by agent: Claude Code and Codex have full lifecycle hooks, OpenCode uses its plugin events, Gemini CLI and Cursor are context-only integrations.
  • Protocol compliance (updating cerebrum, logging bugs) depends on the model following instructions; the hooks enforce what can be enforced and remind about the rest.
  • Found something broken? File an issue.

Acknowledgments

This project is based on the original OpenWolf by Cytostack / Farhan Palathinkal Afsal. Thank you to the upstream authors and contributors for the architecture, hooks, and ongoing improvements. This fork tracks upstream business features while publishing as @alptech/openwolf.

Upstream repository: https://github.com/cytostack/openwolf

License

AGPL-3.0

Author

Original project by Farhan Palathinkal Afsal — Cytostack. Maintained as @alptech/openwolf by alptech / @nottyjay.

About

Sharper context. Fewer tokens. Open-source middleware for Claude Code.

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenWolf demo

@alptech/openwolf

The second brain for Claude Code. Now for every AI coding assistant.

Improved context management, optimized architecture scaffolding, and smarter token utilization,
delivered through 7 invisible lifecycle hooks. Zero workflow changes.

npm versionLicense: AGPL-3.0Node.js

English · 中文 · 日本語 · Русский

Quick Start · Supported Agents · Context Management · Token Intelligence · Security · Dashboard · Changelog

This is a fork of openwolf by Cytostack. It tracks upstream business features while keeping the @alptech/openwolf package identity.


Without OpenWolfWith OpenWolf
The agent rereads a file it already saw (~2,000 tokens)It reads the one-line description first, or skips the read entirely
Whole-file reads just to find one functionSymbol-level hints give exact line ranges for offset/limit reads
Context compaction wipes what the session didA PreCompact snapshot and restore keep the work in context
Every agent starts from a cold promptOne shared .wolf/ brain across Codex, OpenCode, Claude Code, Cursor, and Antigravity
No idea where your tokens wentUsage measured from harness transcripts, plus a live local dashboard

Why OpenWolf?

Coding agents are powerful but they work blind. An agent does not know what a file contains until it opens it. It cannot tell a 50-token config from a 2,000-token module. It rereads the same file in one session without noticing, forgets your corrections between sessions, and loses everything when its context window compacts.

OpenWolf gives your agent a second brain that fixes all of that:

  • Context management. A budget-capped digest of your project's most valuable state (current goals, known mistakes, fixed bugs, the project map) is injected at every session start. A PreCompact hook plus a compaction-aware restart mean context compaction no longer erases what the session already did.
  • Architecture scaffolding. A durable, self-healing project index maps every file with a description, a token estimate, and (for large files) its functions and classes with exact line ranges. Agents navigate your codebase instead of rediscovering it.
  • Token utilization. Repeated reads are caught, whole-file reads become targeted slice reads, and real usage is measured from harness transcripts so you can verify the savings instead of trusting an estimate.

Quick Start

npm install -g @alptech/openwolf
cd your-project
openwolf init

That is it. init auto-detects the coding agents installed on your machine and wires each of them to the same .wolf/ brain. Use your agents normally; OpenWolf works underneath.

Supported Agents

One .wolf/ brain, many agents:

AgentIntegrationDepth
Codex CLI.codex/hooks.json lifecycle hooks + AGENTS.mdFull (hooks + context)
OpenCodeNative plugin + AGENTS.mdFull (hooks + context)
Claude Code7 lifecycle hooks + CLAUDE.mdFull (hooks + context)
Cursor.cursor/rules/openwolf.mdc (always applied)Beta (context)
AntigravityAGENTS.md protocol blockBeta (context)
Gemini CLIGEMINI.md protocol blockBeta (context)
openwolf init # auto-detect installed agents (recommended)
openwolf init --agent codex opencode # wire exactly these
openwolf init --agent all # wire every detected agent
openwolf init --agent claude # Claude Code only

Protocol blocks are marker-fenced: your own content in AGENTS.md or GEMINI.md is never touched, and re-running init never duplicates anything.

What It Creates

openwolf init creates a .wolf/ directory in your project:

FilePurpose
anatomy-index.jsonDurable project index: descriptions, token estimates, content hashes, symbols
anatomy.mdHuman-readable render of the index, kept in sync automatically
cerebrum.mdLearned preferences, corrections, Do-Not-Repeat list
memory.mdChronological action log with token estimates
STATUS.mdSession handoff: resume any session in one small read
buglog.jsonBug fix memory, searchable, prevents rediscovery
token-ledger.jsonEstimated and measured token usage, per session and per agent
hooks/7 lifecycle hooks (pure Node.js, zero dependencies)
config.jsonConfiguration, including per-agent context budgets
OPENWOLF.mdThe operating protocol your agents follow

How It Works

Session starts
|
OpenWolf injects a token-budgeted digest: current goals, known mistakes,
recent bug fixes, project map pointer
|
Agent decides to read a big file
|
OpenWolf: "auth.ts (~2,900 tok). Symbols: validateToken L82-140 ~450 tok.
Read with offset/limit to fetch just the part you need."
|
Agent edits files
|
OpenWolf updates the index under a cross-process lock, logs the action,
estimates the cost
|
Context compacts mid-session
|
OpenWolf snapshots state before compaction and re-injects a digest of the
files already modified, so the agent does not redo finished work
|
Session ends
|
OpenWolf reads the real token usage from the transcript into the ledger

Context Management

  • Session digest. The highest-value state is pushed into the model's context at session start, capped to a configurable token budget per agent. The model gets what it needs without reading six files.
  • Compaction survival. The PreCompact hook snapshots in-flight session state; after compaction the digest lists the files already modified with a pointer to the action log. Resume and compaction no longer reset tracking.
  • Staleness detection. Scans pin the git HEAD. If the HEAD moves or the scan ages out, the agent is told to rescan before trusting the map. A wrong index is never silently trusted.
  • STATUS.md handoff. End-of-phase state lives in one small document, so a fresh session reaches productive context in a single read.

Project Anatomy

The index is a durable store (anatomy-index.json) with a rendered, human-readable view (anatomy.md). Writers coordinate through a cross-process lock, so concurrent hook fires cannot lose entries. Edits made to the markdown by hand or by older hook versions are detected by content hash and absorbed additively.

Files above 500 estimated tokens also index their top-level symbols:

- `shared.ts` (~3,200 tok)
- fn `parseAnatomy` L82-104 (~180 tok)
- fn `serializeAnatomy` L106-129 (~200 tok)

Before the agent reads a large file, the hint lists the biggest symbols with line ranges so it can fetch one function with offset/limit instead of the whole file. Hints are suppressed automatically if the file changed since indexing; a stale range is never allowed to misdirect a read. Languages with symbol support today: TypeScript, JavaScript, Python, Go, Rust.

Token Intelligence

Estimates are useful; measurements are trustworthy. At session end OpenWolf reads the real usage from the harness transcript: input tokens, output tokens, cache reads, cache writes, and API calls, attributed to the agent that ran the session.

openwolf report
 Estimated (char-ratio heuristic)
Total tokens: 1,549,658
Est. savings vs bare: 1,772,690
Measured (from harness transcripts)
API calls: 29
Input tokens: 57,489
Cache reads: 309,141

Field results from 1.x deployments (20 projects, 132+ sessions) averaged a 65.8% estimated token reduction, with 71% of repeated file reads caught and blocked. Those figures are heuristic estimates; measured numbers in 2.x let you verify savings on your own workload.

Security

  • Dashboard binds to 127.0.0.1 and requires a per-project token (timing-safe comparison) for all API and WebSocket access.
  • Every dynamic process invocation uses argument arrays; no shell interpolation anywhere.
  • Path traversal guards on all cron file access, realpath-based and symlink-safe.
  • Secret-bearing files (keys, keystores, credential files, .npmrc, .env and friends) never enter the index or the memory log.
  • A security regression suite runs with pnpm test.

Bundled Skills

openwolf init installs two slash commands into every configured agent (Claude Code, Codex, OpenCode):

  • /security-audit [scope]: layered audit covering dependencies, secrets, injection surfaces, and authorization, ending in a severity-ranked report wired into .wolf/buglog.json.
  • /reframe [migrate | audit | fix]: the design brain. Pick or migrate a UI framework using a curated knowledge base of 13 frameworks (shadcn/ui, Aceternity, Magic UI, DaisyUI, HeroUI, Chakra, Flowbite, Preline, Park UI, Origin UI, Headless UI, Cult UI, Astryx), or audit and fix existing UI against an anti-generic design mandate.

Dashboard

openwolf daemon start
openwolf dashboard

A local, token-authenticated dashboard: measured vs estimated tokens, cache economics, per-agent usage, context health, session handoff, live activity, cron control, and the full anatomy browser with per-file symbols.

Commands

openwolf init Initialize .wolf/ and wire detected agents
openwolf status Health, stats, file integrity
openwolf scan Rebuild the project index
openwolf scan --check Verify the index matches the filesystem (CI-friendly)
openwolf report Token report: estimated vs measured
openwolf dashboard Open the web dashboard
openwolf daemon start Start the background daemon
openwolf daemon stop Stop the daemon
openwolf cron list Scheduled tasks
openwolf cron run <id> Trigger a task
openwolf bug search <term> Search the bug memory
openwolf update Update every registered project (with backup)
openwolf restore [backup] Roll back .wolf/ from a timestamped backup

There is also a standalone inspector that needs nothing installed:

node scripts/openwolf-check.mjs [projectDir] # read-only usage report

Requirements

  • Node.js 20+
  • At least one supported coding agent
  • Windows, macOS, or Linux
  • Optional: PM2 for a persistent background daemon

Limitations

  • Estimated figures use a character-ratio heuristic (accurate to roughly 15%); measured figures come from harness transcripts and are exact.
  • Hook coverage varies by agent: Claude Code and Codex have full lifecycle hooks, OpenCode uses its plugin events, Gemini CLI and Cursor are context-only integrations.
  • Protocol compliance (updating cerebrum, logging bugs) depends on the model following instructions; the hooks enforce what can be enforced and remind about the rest.
  • Found something broken? File an issue.

Acknowledgments

This project is based on the original OpenWolf by Cytostack / Farhan Palathinkal Afsal. Thank you to the upstream authors and contributors for the architecture, hooks, and ongoing improvements. This fork tracks upstream business features while publishing as @alptech/openwolf.

Upstream repository: https://github.com/cytostack/openwolf

License

AGPL-3.0

Author

Original project by Farhan Palathinkal Afsal — Cytostack. Maintained as @alptech/openwolf by alptech / @nottyjay.

About

Sharper context. Fewer tokens. Open-source middleware for Claude Code.

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

OpenWolf demo

@alptech/openwolf

The second brain for Claude Code. Now for every AI coding assistant.

Improved context management, optimized architecture scaffolding, and smarter token utilization,
delivered through 7 invisible lifecycle hooks. Zero workflow changes.

npm versionLicense: AGPL-3.0Node.js

English · 中文 · 日本語 · Русский

Quick Start · Supported Agents · Context Management · Token Intelligence · Security · Dashboard · Changelog

This is a fork of openwolf by Cytostack. It tracks upstream business features while keeping the @alptech/openwolf package identity.


Without OpenWolfWith OpenWolf
The agent rereads a file it already saw (~2,000 tokens)It reads the one-line description first, or skips the read entirely
Whole-file reads just to find one functionSymbol-level hints give exact line ranges for offset/limit reads
Context compaction wipes what the session didA PreCompact snapshot and restore keep the work in context
Every agent starts from a cold promptOne shared .wolf/ brain across Codex, OpenCode, Claude Code, Cursor, and Antigravity
No idea where your tokens wentUsage measured from harness transcripts, plus a live local dashboard

Why OpenWolf?

Coding agents are powerful but they work blind. An agent does not know what a file contains until it opens it. It cannot tell a 50-token config from a 2,000-token module. It rereads the same file in one session without noticing, forgets your corrections between sessions, and loses everything when its context window compacts.

OpenWolf gives your agent a second brain that fixes all of that:

  • Context management. A budget-capped digest of your project's most valuable state (current goals, known mistakes, fixed bugs, the project map) is injected at every session start. A PreCompact hook plus a compaction-aware restart mean context compaction no longer erases what the session already did.
  • Architecture scaffolding. A durable, self-healing project index maps every file with a description, a token estimate, and (for large files) its functions and classes with exact line ranges. Agents navigate your codebase instead of rediscovering it.
  • Token utilization. Repeated reads are caught, whole-file reads become targeted slice reads, and real usage is measured from harness transcripts so you can verify the savings instead of trusting an estimate.

Quick Start

npm install -g @alptech/openwolf
cd your-project
openwolf init

That is it. init auto-detects the coding agents installed on your machine and wires each of them to the same .wolf/ brain. Use your agents normally; OpenWolf works underneath.

Supported Agents

One .wolf/ brain, many agents:

AgentIntegrationDepth
Codex CLI.codex/hooks.json lifecycle hooks + AGENTS.mdFull (hooks + context)
OpenCodeNative plugin + AGENTS.mdFull (hooks + context)
Claude Code7 lifecycle hooks + CLAUDE.mdFull (hooks + context)
Cursor.cursor/rules/openwolf.mdc (always applied)Beta (context)
AntigravityAGENTS.md protocol blockBeta (context)
Gemini CLIGEMINI.md protocol blockBeta (context)
openwolf init # auto-detect installed agents (recommended)
openwolf init --agent codex opencode # wire exactly these
openwolf init --agent all # wire every detected agent
openwolf init --agent claude # Claude Code only

Protocol blocks are marker-fenced: your own content in AGENTS.md or GEMINI.md is never touched, and re-running init never duplicates anything.

What It Creates

openwolf init creates a .wolf/ directory in your project:

FilePurpose
anatomy-index.jsonDurable project index: descriptions, token estimates, content hashes, symbols
anatomy.mdHuman-readable render of the index, kept in sync automatically
cerebrum.mdLearned preferences, corrections, Do-Not-Repeat list
memory.mdChronological action log with token estimates
STATUS.mdSession handoff: resume any session in one small read
buglog.jsonBug fix memory, searchable, prevents rediscovery
token-ledger.jsonEstimated and measured token usage, per session and per agent
hooks/7 lifecycle hooks (pure Node.js, zero dependencies)
config.jsonConfiguration, including per-agent context budgets
OPENWOLF.mdThe operating protocol your agents follow

How It Works

Session starts
|
OpenWolf injects a token-budgeted digest: current goals, known mistakes,
recent bug fixes, project map pointer
|
Agent decides to read a big file
|
OpenWolf: "auth.ts (~2,900 tok). Symbols: validateToken L82-140 ~450 tok.
Read with offset/limit to fetch just the part you need."
|
Agent edits files
|
OpenWolf updates the index under a cross-process lock, logs the action,
estimates the cost
|
Context compacts mid-session
|
OpenWolf snapshots state before compaction and re-injects a digest of the
files already modified, so the agent does not redo finished work
|
Session ends
|
OpenWolf reads the real token usage from the transcript into the ledger

Context Management

  • Session digest. The highest-value state is pushed into the model's context at session start, capped to a configurable token budget per agent. The model gets what it needs without reading six files.
  • Compaction survival. The PreCompact hook snapshots in-flight session state; after compaction the digest lists the files already modified with a pointer to the action log. Resume and compaction no longer reset tracking.
  • Staleness detection. Scans pin the git HEAD. If the HEAD moves or the scan ages out, the agent is told to rescan before trusting the map. A wrong index is never silently trusted.
  • STATUS.md handoff. End-of-phase state lives in one small document, so a fresh session reaches productive context in a single read.

Project Anatomy

The index is a durable store (anatomy-index.json) with a rendered, human-readable view (anatomy.md). Writers coordinate through a cross-process lock, so concurrent hook fires cannot lose entries. Edits made to the markdown by hand or by older hook versions are detected by content hash and absorbed additively.

Files above 500 estimated tokens also index their top-level symbols:

- `shared.ts` (~3,200 tok)
- fn `parseAnatomy` L82-104 (~180 tok)
- fn `serializeAnatomy` L106-129 (~200 tok)

Before the agent reads a large file, the hint lists the biggest symbols with line ranges so it can fetch one function with offset/limit instead of the whole file. Hints are suppressed automatically if the file changed since indexing; a stale range is never allowed to misdirect a read. Languages with symbol support today: TypeScript, JavaScript, Python, Go, Rust.

Token Intelligence

Estimates are useful; measurements are trustworthy. At session end OpenWolf reads the real usage from the harness transcript: input tokens, output tokens, cache reads, cache writes, and API calls, attributed to the agent that ran the session.

openwolf report
 Estimated (char-ratio heuristic)
Total tokens: 1,549,658
Est. savings vs bare: 1,772,690
Measured (from harness transcripts)
API calls: 29
Input tokens: 57,489
Cache reads: 309,141

Field results from 1.x deployments (20 projects, 132+ sessions) averaged a 65.8% estimated token reduction, with 71% of repeated file reads caught and blocked. Those figures are heuristic estimates; measured numbers in 2.x let you verify savings on your own workload.

Security

  • Dashboard binds to 127.0.0.1 and requires a per-project token (timing-safe comparison) for all API and WebSocket access.
  • Every dynamic process invocation uses argument arrays; no shell interpolation anywhere.
  • Path traversal guards on all cron file access, realpath-based and symlink-safe.
  • Secret-bearing files (keys, keystores, credential files, .npmrc, .env and friends) never enter the index or the memory log.
  • A security regression suite runs with pnpm test.

Bundled Skills

openwolf init installs two slash commands into every configured agent (Claude Code, Codex, OpenCode):

  • /security-audit [scope]: layered audit covering dependencies, secrets, injection surfaces, and authorization, ending in a severity-ranked report wired into .wolf/buglog.json.
  • /reframe [migrate | audit | fix]: the design brain. Pick or migrate a UI framework using a curated knowledge base of 13 frameworks (shadcn/ui, Aceternity, Magic UI, DaisyUI, HeroUI, Chakra, Flowbite, Preline, Park UI, Origin UI, Headless UI, Cult UI, Astryx), or audit and fix existing UI against an anti-generic design mandate.

Dashboard

openwolf daemon start
openwolf dashboard

A local, token-authenticated dashboard: measured vs estimated tokens, cache economics, per-agent usage, context health, session handoff, live activity, cron control, and the full anatomy browser with per-file symbols.

Commands

openwolf init Initialize .wolf/ and wire detected agents
openwolf status Health, stats, file integrity
openwolf scan Rebuild the project index
openwolf scan --check Verify the index matches the filesystem (CI-friendly)
openwolf report Token report: estimated vs measured
openwolf dashboard Open the web dashboard
openwolf daemon start Start the background daemon
openwolf daemon stop Stop the daemon
openwolf cron list Scheduled tasks
openwolf cron run <id> Trigger a task
openwolf bug search <term> Search the bug memory
openwolf update Update every registered project (with backup)
openwolf restore [backup] Roll back .wolf/ from a timestamped backup

There is also a standalone inspector that needs nothing installed:

node scripts/openwolf-check.mjs [projectDir] # read-only usage report

Requirements

  • Node.js 20+
  • At least one supported coding agent
  • Windows, macOS, or Linux
  • Optional: PM2 for a persistent background daemon

Limitations

  • Estimated figures use a character-ratio heuristic (accurate to roughly 15%); measured figures come from harness transcripts and are exact.
  • Hook coverage varies by agent: Claude Code and Codex have full lifecycle hooks, OpenCode uses its plugin events, Gemini CLI and Cursor are context-only integrations.
  • Protocol compliance (updating cerebrum, logging bugs) depends on the model following instructions; the hooks enforce what can be enforced and remind about the rest.
  • Found something broken? File an issue.

Acknowledgments

This project is based on the original OpenWolf by Cytostack / Farhan Palathinkal Afsal. Thank you to the upstream authors and contributors for the architecture, hooks, and ongoing improvements. This fork tracks upstream business features while publishing as @alptech/openwolf.

Upstream repository: https://github.com/cytostack/openwolf

License

AGPL-3.0

Author

Original project by Farhan Palathinkal Afsal — Cytostack. Maintained as @alptech/openwolf by alptech / @nottyjay.

About

Sharper context. Fewer tokens. Open-source middleware for Claude Code.

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenWolf demo

@alptech/openwolf

The second brain for Claude Code. Now for every AI coding assistant.

Improved context management, optimized architecture scaffolding, and smarter token utilization,
delivered through 7 invisible lifecycle hooks. Zero workflow changes.

npm versionLicense: AGPL-3.0Node.js

English · 中文 · 日本語 · Русский

Quick Start · Supported Agents · Context Management · Token Intelligence · Security · Dashboard · Changelog

This is a fork of openwolf by Cytostack. It tracks upstream business features while keeping the @alptech/openwolf package identity.


Without OpenWolfWith OpenWolf
The agent rereads a file it already saw (~2,000 tokens)It reads the one-line description first, or skips the read entirely
Whole-file reads just to find one functionSymbol-level hints give exact line ranges for offset/limit reads
Context compaction wipes what the session didA PreCompact snapshot and restore keep the work in context
Every agent starts from a cold promptOne shared .wolf/ brain across Codex, OpenCode, Claude Code, Cursor, and Antigravity
No idea where your tokens wentUsage measured from harness transcripts, plus a live local dashboard

Why OpenWolf?

Coding agents are powerful but they work blind. An agent does not know what a file contains until it opens it. It cannot tell a 50-token config from a 2,000-token module. It rereads the same file in one session without noticing, forgets your corrections between sessions, and loses everything when its context window compacts.

OpenWolf gives your agent a second brain that fixes all of that:

  • Context management. A budget-capped digest of your project's most valuable state (current goals, known mistakes, fixed bugs, the project map) is injected at every session start. A PreCompact hook plus a compaction-aware restart mean context compaction no longer erases what the session already did.
  • Architecture scaffolding. A durable, self-healing project index maps every file with a description, a token estimate, and (for large files) its functions and classes with exact line ranges. Agents navigate your codebase instead of rediscovering it.
  • Token utilization. Repeated reads are caught, whole-file reads become targeted slice reads, and real usage is measured from harness transcripts so you can verify the savings instead of trusting an estimate.

Quick Start

npm install -g @alptech/openwolf
cd your-project
openwolf init

That is it. init auto-detects the coding agents installed on your machine and wires each of them to the same .wolf/ brain. Use your agents normally; OpenWolf works underneath.

Supported Agents

One .wolf/ brain, many agents:

AgentIntegrationDepth
Codex CLI.codex/hooks.json lifecycle hooks + AGENTS.mdFull (hooks + context)
OpenCodeNative plugin + AGENTS.mdFull (hooks + context)
Claude Code7 lifecycle hooks + CLAUDE.mdFull (hooks + context)
Cursor.cursor/rules/openwolf.mdc (always applied)Beta (context)
AntigravityAGENTS.md protocol blockBeta (context)
Gemini CLIGEMINI.md protocol blockBeta (context)
openwolf init # auto-detect installed agents (recommended)
openwolf init --agent codex opencode # wire exactly these
openwolf init --agent all # wire every detected agent
openwolf init --agent claude # Claude Code only

Protocol blocks are marker-fenced: your own content in AGENTS.md or GEMINI.md is never touched, and re-running init never duplicates anything.

What It Creates

openwolf init creates a .wolf/ directory in your project:

FilePurpose
anatomy-index.jsonDurable project index: descriptions, token estimates, content hashes, symbols
anatomy.mdHuman-readable render of the index, kept in sync automatically
cerebrum.mdLearned preferences, corrections, Do-Not-Repeat list
memory.mdChronological action log with token estimates
STATUS.mdSession handoff: resume any session in one small read
buglog.jsonBug fix memory, searchable, prevents rediscovery
token-ledger.jsonEstimated and measured token usage, per session and per agent
hooks/7 lifecycle hooks (pure Node.js, zero dependencies)
config.jsonConfiguration, including per-agent context budgets
OPENWOLF.mdThe operating protocol your agents follow

How It Works

Session starts
|
OpenWolf injects a token-budgeted digest: current goals, known mistakes,
recent bug fixes, project map pointer
|
Agent decides to read a big file
|
OpenWolf: "auth.ts (~2,900 tok). Symbols: validateToken L82-140 ~450 tok.
Read with offset/limit to fetch just the part you need."
|
Agent edits files
|
OpenWolf updates the index under a cross-process lock, logs the action,
estimates the cost
|
Context compacts mid-session
|
OpenWolf snapshots state before compaction and re-injects a digest of the
files already modified, so the agent does not redo finished work
|
Session ends
|
OpenWolf reads the real token usage from the transcript into the ledger

Context Management

  • Session digest. The highest-value state is pushed into the model's context at session start, capped to a configurable token budget per agent. The model gets what it needs without reading six files.
  • Compaction survival. The PreCompact hook snapshots in-flight session state; after compaction the digest lists the files already modified with a pointer to the action log. Resume and compaction no longer reset tracking.
  • Staleness detection. Scans pin the git HEAD. If the HEAD moves or the scan ages out, the agent is told to rescan before trusting the map. A wrong index is never silently trusted.
  • STATUS.md handoff. End-of-phase state lives in one small document, so a fresh session reaches productive context in a single read.

Project Anatomy

The index is a durable store (anatomy-index.json) with a rendered, human-readable view (anatomy.md). Writers coordinate through a cross-process lock, so concurrent hook fires cannot lose entries. Edits made to the markdown by hand or by older hook versions are detected by content hash and absorbed additively.

Files above 500 estimated tokens also index their top-level symbols:

- `shared.ts` (~3,200 tok)
- fn `parseAnatomy` L82-104 (~180 tok)
- fn `serializeAnatomy` L106-129 (~200 tok)

Before the agent reads a large file, the hint lists the biggest symbols with line ranges so it can fetch one function with offset/limit instead of the whole file. Hints are suppressed automatically if the file changed since indexing; a stale range is never allowed to misdirect a read. Languages with symbol support today: TypeScript, JavaScript, Python, Go, Rust.

Token Intelligence

Estimates are useful; measurements are trustworthy. At session end OpenWolf reads the real usage from the harness transcript: input tokens, output tokens, cache reads, cache writes, and API calls, attributed to the agent that ran the session.

openwolf report
 Estimated (char-ratio heuristic)
Total tokens: 1,549,658
Est. savings vs bare: 1,772,690
Measured (from harness transcripts)
API calls: 29
Input tokens: 57,489
Cache reads: 309,141

Field results from 1.x deployments (20 projects, 132+ sessions) averaged a 65.8% estimated token reduction, with 71% of repeated file reads caught and blocked. Those figures are heuristic estimates; measured numbers in 2.x let you verify savings on your own workload.

Security

  • Dashboard binds to 127.0.0.1 and requires a per-project token (timing-safe comparison) for all API and WebSocket access.
  • Every dynamic process invocation uses argument arrays; no shell interpolation anywhere.
  • Path traversal guards on all cron file access, realpath-based and symlink-safe.
  • Secret-bearing files (keys, keystores, credential files, .npmrc, .env and friends) never enter the index or the memory log.
  • A security regression suite runs with pnpm test.

Bundled Skills

openwolf init installs two slash commands into every configured agent (Claude Code, Codex, OpenCode):

  • /security-audit [scope]: layered audit covering dependencies, secrets, injection surfaces, and authorization, ending in a severity-ranked report wired into .wolf/buglog.json.
  • /reframe [migrate | audit | fix]: the design brain. Pick or migrate a UI framework using a curated knowledge base of 13 frameworks (shadcn/ui, Aceternity, Magic UI, DaisyUI, HeroUI, Chakra, Flowbite, Preline, Park UI, Origin UI, Headless UI, Cult UI, Astryx), or audit and fix existing UI against an anti-generic design mandate.

Dashboard

openwolf daemon start
openwolf dashboard

A local, token-authenticated dashboard: measured vs estimated tokens, cache economics, per-agent usage, context health, session handoff, live activity, cron control, and the full anatomy browser with per-file symbols.

Commands

openwolf init Initialize .wolf/ and wire detected agents
openwolf status Health, stats, file integrity
openwolf scan Rebuild the project index
openwolf scan --check Verify the index matches the filesystem (CI-friendly)
openwolf report Token report: estimated vs measured
openwolf dashboard Open the web dashboard
openwolf daemon start Start the background daemon
openwolf daemon stop Stop the daemon
openwolf cron list Scheduled tasks
openwolf cron run <id> Trigger a task
openwolf bug search <term> Search the bug memory
openwolf update Update every registered project (with backup)
openwolf restore [backup] Roll back .wolf/ from a timestamped backup

There is also a standalone inspector that needs nothing installed:

node scripts/openwolf-check.mjs [projectDir] # read-only usage report

Requirements

  • Node.js 20+
  • At least one supported coding agent
  • Windows, macOS, or Linux
  • Optional: PM2 for a persistent background daemon

Limitations

  • Estimated figures use a character-ratio heuristic (accurate to roughly 15%); measured figures come from harness transcripts and are exact.
  • Hook coverage varies by agent: Claude Code and Codex have full lifecycle hooks, OpenCode uses its plugin events, Gemini CLI and Cursor are context-only integrations.
  • Protocol compliance (updating cerebrum, logging bugs) depends on the model following instructions; the hooks enforce what can be enforced and remind about the rest.
  • Found something broken? File an issue.

Acknowledgments

This project is based on the original OpenWolf by Cytostack / Farhan Palathinkal Afsal. Thank you to the upstream authors and contributors for the architecture, hooks, and ongoing improvements. This fork tracks upstream business features while publishing as @alptech/openwolf.

Upstream repository: https://github.com/cytostack/openwolf

License

AGPL-3.0

Author

Original project by Farhan Palathinkal Afsal — Cytostack. Maintained as @alptech/openwolf by alptech / @nottyjay.

About

Sharper context. Fewer tokens. Open-source middleware for Claude Code.

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenWolf demo

@alptech/openwolf

The second brain for Claude Code. Now for every AI coding assistant.

Improved context management, optimized architecture scaffolding, and smarter token utilization,
delivered through 7 invisible lifecycle hooks. Zero workflow changes.

npm versionLicense: AGPL-3.0Node.js

English · 中文 · 日本語 · Русский

Quick Start · Supported Agents · Context Management · Token Intelligence · Security · Dashboard · Changelog

This is a fork of openwolf by Cytostack. It tracks upstream business features while keeping the @alptech/openwolf package identity.


Without OpenWolfWith OpenWolf
The agent rereads a file it already saw (~2,000 tokens)It reads the one-line description first, or skips the read entirely
Whole-file reads just to find one functionSymbol-level hints give exact line ranges for offset/limit reads
Context compaction wipes what the session didA PreCompact snapshot and restore keep the work in context
Every agent starts from a cold promptOne shared .wolf/ brain across Codex, OpenCode, Claude Code, Cursor, and Antigravity
No idea where your tokens wentUsage measured from harness transcripts, plus a live local dashboard

Why OpenWolf?

Coding agents are powerful but they work blind. An agent does not know what a file contains until it opens it. It cannot tell a 50-token config from a 2,000-token module. It rereads the same file in one session without noticing, forgets your corrections between sessions, and loses everything when its context window compacts.

OpenWolf gives your agent a second brain that fixes all of that:

  • Context management. A budget-capped digest of your project's most valuable state (current goals, known mistakes, fixed bugs, the project map) is injected at every session start. A PreCompact hook plus a compaction-aware restart mean context compaction no longer erases what the session already did.
  • Architecture scaffolding. A durable, self-healing project index maps every file with a description, a token estimate, and (for large files) its functions and classes with exact line ranges. Agents navigate your codebase instead of rediscovering it.
  • Token utilization. Repeated reads are caught, whole-file reads become targeted slice reads, and real usage is measured from harness transcripts so you can verify the savings instead of trusting an estimate.

Quick Start

npm install -g @alptech/openwolf
cd your-project
openwolf init

That is it. init auto-detects the coding agents installed on your machine and wires each of them to the same .wolf/ brain. Use your agents normally; OpenWolf works underneath.

Supported Agents

One .wolf/ brain, many agents:

AgentIntegrationDepth
Codex CLI.codex/hooks.json lifecycle hooks + AGENTS.mdFull (hooks + context)
OpenCodeNative plugin + AGENTS.mdFull (hooks + context)
Claude Code7 lifecycle hooks + CLAUDE.mdFull (hooks + context)
Cursor.cursor/rules/openwolf.mdc (always applied)Beta (context)
AntigravityAGENTS.md protocol blockBeta (context)
Gemini CLIGEMINI.md protocol blockBeta (context)
openwolf init # auto-detect installed agents (recommended)
openwolf init --agent codex opencode # wire exactly these
openwolf init --agent all # wire every detected agent
openwolf init --agent claude # Claude Code only

Protocol blocks are marker-fenced: your own content in AGENTS.md or GEMINI.md is never touched, and re-running init never duplicates anything.

What It Creates

openwolf init creates a .wolf/ directory in your project:

FilePurpose
anatomy-index.jsonDurable project index: descriptions, token estimates, content hashes, symbols
anatomy.mdHuman-readable render of the index, kept in sync automatically
cerebrum.mdLearned preferences, corrections, Do-Not-Repeat list
memory.mdChronological action log with token estimates
STATUS.mdSession handoff: resume any session in one small read
buglog.jsonBug fix memory, searchable, prevents rediscovery
token-ledger.jsonEstimated and measured token usage, per session and per agent
hooks/7 lifecycle hooks (pure Node.js, zero dependencies)
config.jsonConfiguration, including per-agent context budgets
OPENWOLF.mdThe operating protocol your agents follow

How It Works

Session starts
|
OpenWolf injects a token-budgeted digest: current goals, known mistakes,
recent bug fixes, project map pointer
|
Agent decides to read a big file
|
OpenWolf: "auth.ts (~2,900 tok). Symbols: validateToken L82-140 ~450 tok.
Read with offset/limit to fetch just the part you need."
|
Agent edits files
|
OpenWolf updates the index under a cross-process lock, logs the action,
estimates the cost
|
Context compacts mid-session
|
OpenWolf snapshots state before compaction and re-injects a digest of the
files already modified, so the agent does not redo finished work
|
Session ends
|
OpenWolf reads the real token usage from the transcript into the ledger

Context Management

  • Session digest. The highest-value state is pushed into the model's context at session start, capped to a configurable token budget per agent. The model gets what it needs without reading six files.
  • Compaction survival. The PreCompact hook snapshots in-flight session state; after compaction the digest lists the files already modified with a pointer to the action log. Resume and compaction no longer reset tracking.
  • Staleness detection. Scans pin the git HEAD. If the HEAD moves or the scan ages out, the agent is told to rescan before trusting the map. A wrong index is never silently trusted.
  • STATUS.md handoff. End-of-phase state lives in one small document, so a fresh session reaches productive context in a single read.

Project Anatomy

The index is a durable store (anatomy-index.json) with a rendered, human-readable view (anatomy.md). Writers coordinate through a cross-process lock, so concurrent hook fires cannot lose entries. Edits made to the markdown by hand or by older hook versions are detected by content hash and absorbed additively.

Files above 500 estimated tokens also index their top-level symbols:

- `shared.ts` (~3,200 tok)
- fn `parseAnatomy` L82-104 (~180 tok)
- fn `serializeAnatomy` L106-129 (~200 tok)

Before the agent reads a large file, the hint lists the biggest symbols with line ranges so it can fetch one function with offset/limit instead of the whole file. Hints are suppressed automatically if the file changed since indexing; a stale range is never allowed to misdirect a read. Languages with symbol support today: TypeScript, JavaScript, Python, Go, Rust.

Token Intelligence

Estimates are useful; measurements are trustworthy. At session end OpenWolf reads the real usage from the harness transcript: input tokens, output tokens, cache reads, cache writes, and API calls, attributed to the agent that ran the session.

openwolf report
 Estimated (char-ratio heuristic)
Total tokens: 1,549,658
Est. savings vs bare: 1,772,690
Measured (from harness transcripts)
API calls: 29
Input tokens: 57,489
Cache reads: 309,141

Field results from 1.x deployments (20 projects, 132+ sessions) averaged a 65.8% estimated token reduction, with 71% of repeated file reads caught and blocked. Those figures are heuristic estimates; measured numbers in 2.x let you verify savings on your own workload.

Security

  • Dashboard binds to 127.0.0.1 and requires a per-project token (timing-safe comparison) for all API and WebSocket access.
  • Every dynamic process invocation uses argument arrays; no shell interpolation anywhere.
  • Path traversal guards on all cron file access, realpath-based and symlink-safe.
  • Secret-bearing files (keys, keystores, credential files, .npmrc, .env and friends) never enter the index or the memory log.
  • A security regression suite runs with pnpm test.

Bundled Skills

openwolf init installs two slash commands into every configured agent (Claude Code, Codex, OpenCode):

  • /security-audit [scope]: layered audit covering dependencies, secrets, injection surfaces, and authorization, ending in a severity-ranked report wired into .wolf/buglog.json.
  • /reframe [migrate | audit | fix]: the design brain. Pick or migrate a UI framework using a curated knowledge base of 13 frameworks (shadcn/ui, Aceternity, Magic UI, DaisyUI, HeroUI, Chakra, Flowbite, Preline, Park UI, Origin UI, Headless UI, Cult UI, Astryx), or audit and fix existing UI against an anti-generic design mandate.

Dashboard

openwolf daemon start
openwolf dashboard

A local, token-authenticated dashboard: measured vs estimated tokens, cache economics, per-agent usage, context health, session handoff, live activity, cron control, and the full anatomy browser with per-file symbols.

Commands

openwolf init Initialize .wolf/ and wire detected agents
openwolf status Health, stats, file integrity
openwolf scan Rebuild the project index
openwolf scan --check Verify the index matches the filesystem (CI-friendly)
openwolf report Token report: estimated vs measured
openwolf dashboard Open the web dashboard
openwolf daemon start Start the background daemon
openwolf daemon stop Stop the daemon
openwolf cron list Scheduled tasks
openwolf cron run <id> Trigger a task
openwolf bug search <term> Search the bug memory
openwolf update Update every registered project (with backup)
openwolf restore [backup] Roll back .wolf/ from a timestamped backup

There is also a standalone inspector that needs nothing installed:

node scripts/openwolf-check.mjs [projectDir] # read-only usage report

Requirements

  • Node.js 20+
  • At least one supported coding agent
  • Windows, macOS, or Linux
  • Optional: PM2 for a persistent background daemon

Limitations

  • Estimated figures use a character-ratio heuristic (accurate to roughly 15%); measured figures come from harness transcripts and are exact.
  • Hook coverage varies by agent: Claude Code and Codex have full lifecycle hooks, OpenCode uses its plugin events, Gemini CLI and Cursor are context-only integrations.
  • Protocol compliance (updating cerebrum, logging bugs) depends on the model following instructions; the hooks enforce what can be enforced and remind about the rest.
  • Found something broken? File an issue.

Acknowledgments

This project is based on the original OpenWolf by Cytostack / Farhan Palathinkal Afsal. Thank you to the upstream authors and contributors for the architecture, hooks, and ongoing improvements. This fork tracks upstream business features while publishing as @alptech/openwolf.

Upstream repository: https://github.com/cytostack/openwolf

License

AGPL-3.0

Author

Original project by Farhan Palathinkal Afsal — Cytostack. Maintained as @alptech/openwolf by alptech / @nottyjay.

About

Sharper context. Fewer tokens. Open-source middleware for Claude Code.

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

OpenWolf demo

@alptech/openwolf

The second brain for Claude Code. Now for every AI coding assistant.

Improved context management, optimized architecture scaffolding, and smarter token utilization,
delivered through 7 invisible lifecycle hooks. Zero workflow changes.

npm versionLicense: AGPL-3.0Node.js

English · 中文 · 日本語 · Русский

Quick Start · Supported Agents · Context Management · Token Intelligence · Security · Dashboard · Changelog

This is a fork of openwolf by Cytostack. It tracks upstream business features while keeping the @alptech/openwolf package identity.


Without OpenWolfWith OpenWolf
The agent rereads a file it already saw (~2,000 tokens)It reads the one-line description first, or skips the read entirely
Whole-file reads just to find one functionSymbol-level hints give exact line ranges for offset/limit reads
Context compaction wipes what the session didA PreCompact snapshot and restore keep the work in context
Every agent starts from a cold promptOne shared .wolf/ brain across Codex, OpenCode, Claude Code, Cursor, and Antigravity
No idea where your tokens wentUsage measured from harness transcripts, plus a live local dashboard

Why OpenWolf?

Coding agents are powerful but they work blind. An agent does not know what a file contains until it opens it. It cannot tell a 50-token config from a 2,000-token module. It rereads the same file in one session without noticing, forgets your corrections between sessions, and loses everything when its context window compacts.

OpenWolf gives your agent a second brain that fixes all of that:

  • Context management. A budget-capped digest of your project's most valuable state (current goals, known mistakes, fixed bugs, the project map) is injected at every session start. A PreCompact hook plus a compaction-aware restart mean context compaction no longer erases what the session already did.
  • Architecture scaffolding. A durable, self-healing project index maps every file with a description, a token estimate, and (for large files) its functions and classes with exact line ranges. Agents navigate your codebase instead of rediscovering it.
  • Token utilization. Repeated reads are caught, whole-file reads become targeted slice reads, and real usage is measured from harness transcripts so you can verify the savings instead of trusting an estimate.

Quick Start

npm install -g @alptech/openwolf
cd your-project
openwolf init

That is it. init auto-detects the coding agents installed on your machine and wires each of them to the same .wolf/ brain. Use your agents normally; OpenWolf works underneath.

Supported Agents

One .wolf/ brain, many agents:

AgentIntegrationDepth
Codex CLI.codex/hooks.json lifecycle hooks + AGENTS.mdFull (hooks + context)
OpenCodeNative plugin + AGENTS.mdFull (hooks + context)
Claude Code7 lifecycle hooks + CLAUDE.mdFull (hooks + context)
Cursor.cursor/rules/openwolf.mdc (always applied)Beta (context)
AntigravityAGENTS.md protocol blockBeta (context)
Gemini CLIGEMINI.md protocol blockBeta (context)
openwolf init # auto-detect installed agents (recommended)
openwolf init --agent codex opencode # wire exactly these
openwolf init --agent all # wire every detected agent
openwolf init --agent claude # Claude Code only

Protocol blocks are marker-fenced: your own content in AGENTS.md or GEMINI.md is never touched, and re-running init never duplicates anything.

What It Creates

openwolf init creates a .wolf/ directory in your project:

FilePurpose
anatomy-index.jsonDurable project index: descriptions, token estimates, content hashes, symbols
anatomy.mdHuman-readable render of the index, kept in sync automatically
cerebrum.mdLearned preferences, corrections, Do-Not-Repeat list
memory.mdChronological action log with token estimates
STATUS.mdSession handoff: resume any session in one small read
buglog.jsonBug fix memory, searchable, prevents rediscovery
token-ledger.jsonEstimated and measured token usage, per session and per agent
hooks/7 lifecycle hooks (pure Node.js, zero dependencies)
config.jsonConfiguration, including per-agent context budgets
OPENWOLF.mdThe operating protocol your agents follow

How It Works

Session starts
|
OpenWolf injects a token-budgeted digest: current goals, known mistakes,
recent bug fixes, project map pointer
|
Agent decides to read a big file
|
OpenWolf: "auth.ts (~2,900 tok). Symbols: validateToken L82-140 ~450 tok.
Read with offset/limit to fetch just the part you need."
|
Agent edits files
|
OpenWolf updates the index under a cross-process lock, logs the action,
estimates the cost
|
Context compacts mid-session
|
OpenWolf snapshots state before compaction and re-injects a digest of the
files already modified, so the agent does not redo finished work
|
Session ends
|
OpenWolf reads the real token usage from the transcript into the ledger

Context Management

  • Session digest. The highest-value state is pushed into the model's context at session start, capped to a configurable token budget per agent. The model gets what it needs without reading six files.
  • Compaction survival. The PreCompact hook snapshots in-flight session state; after compaction the digest lists the files already modified with a pointer to the action log. Resume and compaction no longer reset tracking.
  • Staleness detection. Scans pin the git HEAD. If the HEAD moves or the scan ages out, the agent is told to rescan before trusting the map. A wrong index is never silently trusted.
  • STATUS.md handoff. End-of-phase state lives in one small document, so a fresh session reaches productive context in a single read.

Project Anatomy

The index is a durable store (anatomy-index.json) with a rendered, human-readable view (anatomy.md). Writers coordinate through a cross-process lock, so concurrent hook fires cannot lose entries. Edits made to the markdown by hand or by older hook versions are detected by content hash and absorbed additively.

Files above 500 estimated tokens also index their top-level symbols:

- `shared.ts` (~3,200 tok)
- fn `parseAnatomy` L82-104 (~180 tok)
- fn `serializeAnatomy` L106-129 (~200 tok)

Before the agent reads a large file, the hint lists the biggest symbols with line ranges so it can fetch one function with offset/limit instead of the whole file. Hints are suppressed automatically if the file changed since indexing; a stale range is never allowed to misdirect a read. Languages with symbol support today: TypeScript, JavaScript, Python, Go, Rust.

Token Intelligence

Estimates are useful; measurements are trustworthy. At session end OpenWolf reads the real usage from the harness transcript: input tokens, output tokens, cache reads, cache writes, and API calls, attributed to the agent that ran the session.

openwolf report
 Estimated (char-ratio heuristic)
Total tokens: 1,549,658
Est. savings vs bare: 1,772,690
Measured (from harness transcripts)
API calls: 29
Input tokens: 57,489
Cache reads: 309,141

Field results from 1.x deployments (20 projects, 132+ sessions) averaged a 65.8% estimated token reduction, with 71% of repeated file reads caught and blocked. Those figures are heuristic estimates; measured numbers in 2.x let you verify savings on your own workload.

Security

  • Dashboard binds to 127.0.0.1 and requires a per-project token (timing-safe comparison) for all API and WebSocket access.
  • Every dynamic process invocation uses argument arrays; no shell interpolation anywhere.
  • Path traversal guards on all cron file access, realpath-based and symlink-safe.
  • Secret-bearing files (keys, keystores, credential files, .npmrc, .env and friends) never enter the index or the memory log.
  • A security regression suite runs with pnpm test.

Bundled Skills

openwolf init installs two slash commands into every configured agent (Claude Code, Codex, OpenCode):

  • /security-audit [scope]: layered audit covering dependencies, secrets, injection surfaces, and authorization, ending in a severity-ranked report wired into .wolf/buglog.json.
  • /reframe [migrate | audit | fix]: the design brain. Pick or migrate a UI framework using a curated knowledge base of 13 frameworks (shadcn/ui, Aceternity, Magic UI, DaisyUI, HeroUI, Chakra, Flowbite, Preline, Park UI, Origin UI, Headless UI, Cult UI, Astryx), or audit and fix existing UI against an anti-generic design mandate.

Dashboard

openwolf daemon start
openwolf dashboard

A local, token-authenticated dashboard: measured vs estimated tokens, cache economics, per-agent usage, context health, session handoff, live activity, cron control, and the full anatomy browser with per-file symbols.

Commands

openwolf init Initialize .wolf/ and wire detected agents
openwolf status Health, stats, file integrity
openwolf scan Rebuild the project index
openwolf scan --check Verify the index matches the filesystem (CI-friendly)
openwolf report Token report: estimated vs measured
openwolf dashboard Open the web dashboard
openwolf daemon start Start the background daemon
openwolf daemon stop Stop the daemon
openwolf cron list Scheduled tasks
openwolf cron run <id> Trigger a task
openwolf bug search <term> Search the bug memory
openwolf update Update every registered project (with backup)
openwolf restore [backup] Roll back .wolf/ from a timestamped backup

There is also a standalone inspector that needs nothing installed:

node scripts/openwolf-check.mjs [projectDir] # read-only usage report

Requirements

  • Node.js 20+
  • At least one supported coding agent
  • Windows, macOS, or Linux
  • Optional: PM2 for a persistent background daemon

Limitations

  • Estimated figures use a character-ratio heuristic (accurate to roughly 15%); measured figures come from harness transcripts and are exact.
  • Hook coverage varies by agent: Claude Code and Codex have full lifecycle hooks, OpenCode uses its plugin events, Gemini CLI and Cursor are context-only integrations.
  • Protocol compliance (updating cerebrum, logging bugs) depends on the model following instructions; the hooks enforce what can be enforced and remind about the rest.
  • Found something broken? File an issue.

Acknowledgments

This project is based on the original OpenWolf by Cytostack / Farhan Palathinkal Afsal. Thank you to the upstream authors and contributors for the architecture, hooks, and ongoing improvements. This fork tracks upstream business features while publishing as @alptech/openwolf.

Upstream repository: https://github.com/cytostack/openwolf

License

AGPL-3.0

Author

Original project by Farhan Palathinkal Afsal — Cytostack. Maintained as @alptech/openwolf by alptech / @nottyjay.

About

Sharper context. Fewer tokens. Open-source middleware for Claude Code.

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages