opencrow is a thin wrapper around the interactive Claude Code CLI. You launch opencrow instead of claude: the foreground session is your normal terminal claude, but it can now recall relevant work from past sessions, and when the conversation ends it learns in the background: it indexes your past conversations so they stay searchable, remembers your preferences and how you like to work, and turns recurring tasks into reusable skills (pruning the ones you stop using).

No extra API key. Your Claude subscription stays the core — opencrow only attaches hooks and an MCP server to the claude you already log into.

Claude Code already ships the building blocks — hooks, skills, memory files, and MCP. opencrow uses them to add what isn't built in: automatic cross-session recall and a learning loop that runs every time you finish a conversation.

日本語版の README は README.ja.md にあります。

How it works

opencrow has two faces:

Foreground (your terminal)opencrow spawns claude with stdio inherited (a normal interactive session) and injects:

  • a UserPromptSubmit hook that prefetches related past work into the prompt each turn,
  • an MCP server exposing recall_search (search your own history) and skill_save (let the model persist/refine its own skills).

Background (unattended) — when the session ends (/exit, Ctrl+D, Ctrl+C), a detached process runs one learning pass:

  1. Recall index — transcripts → SQLite + FTS5.
  2. Learning loop — extracts durable user-model facts and generates/merges skills, a few items at a time, by driving a headless claude over a PTY (text-in / text-out, still on your subscription).

Everything accumulated is inspectable and reversible via the CLI.

Where things accumulate

opencrow does the learning, but the generated skills are written into your global claude (~/.claude/skills/, or CLAUDE_CONFIG_DIR if set) — so any claude session can use them, whether or not you launched it through opencrow. The recall index (recall.db) and the preferences it remembers (user-model.json) live in opencrow's own directory (~/.opencrow) and are surfaced into your live session via the hook and MCP.

Principles

  • The core is the interactive claude (subscription). A /login-ed claude is launched as-is. No claude -p, SDK, or API key.
  • The foreground stays your normal claude. opencrow doesn't intercept or re-render your session — it just passes claude the hooks and MCP server that power the learning layer (context injection, history search, skill save), so it feels exactly like the claude you already use.
  • The background is unattended PTY-driven. Learning inference runs a headless claude for one turn at a time.
  • Automatic, incremental, non-destructive. Generation needs no approval, runs a few items per pass, and skills are archived (never hard-deleted).
  • Management is visible and reversible. opencrow memory / opencrow skills let you view and remove what was learned.

Requirements

  • Node.js >= 20
  • The claude CLI, already logged in (claude /login). opencrow drives the claude on your PATH.
  • Native modules (@lydell/node-pty, better-sqlite3) are built/downloaded on install. Primary target is macOS (arm64); other platforms may work but are less tested.

Install

git clone https://github.com/opencrow-ai/opencrow.git
cd opencrow
npm install
npm run build
npm link            # put the `opencrow` command on your PATH (optional)

Without npm link, run it as node dist/cli/main.cjs … (or npm run cli … in dev).

Usage

Run opencrow instead of claude. It launches your normal interactive session with the learning layer attached (prefetch hook + recall MCP):

opencrow                 # launch claude with learning attached
opencrow --resume        # any claude flag passes straight through
opencrow --model <name>  # e.g. --model, -c, --resume — forwarded to claude

When the conversation ends, a background learning pass runs automatically.

Search your history and manage what opencrow has learned, all from the terminal:

opencrow recall <query>          # full-text search your past sessions
opencrow memory                  # show remembered preferences & facts
opencrow memory clear            # forget them all
opencrow skills                  # list auto-generated skills
opencrow skills archive <name>   # archive one (reversible, non-destructive)
opencrow skills rm <name>        # remove one
opencrow status                  # recall store dashboard
opencrow learn                   # run a learning pass now (normally automatic on exit)
opencrow --help

Unrecognized arguments are forwarded to claude. To pass one that collides with a subcommand name, prefix it with -- — e.g. opencrow -- status launches claude with status as a claude argument. OPENCROW_DRY_RUN=1 prints the resolved launch without spawning.

Documentation

Japanese versions live next to each file as *.ja.md under docs/.

A note on usage

opencrow runs against your own Claude account and claude CLI login. Use it in accordance with Anthropic's terms of service. This project is not affiliated with or endorsed by Anthropic.

License

MIT © Gekko0114