Skip to content

Quickstart

Persistent project memory for Claude Code. Captures decisions, bugs, deploys across sessions so any new agent picks up exactly where the last one stopped.

You’ll need:

Verify:

Terminal window
node --version && jq --version && command -v secret
Terminal window
secret set erold.api-key # paste API key, hit enter
secret set erold.tenant # paste tenant ID, hit enter

The values never touch disk outside Keychain. They are not in .env, not in .mcp.json, not in shell history.

Terminal window
claude plugin install erold-dev/claude-plugin --scope user

The plugin ships an MCP launcher that reads credentials from Keychain at startup — no claude mcp add needed.

Verify:

Terminal window
claude mcp list # erold-pm: ✓ Connected

In any repo:

/erold:init

This creates .erold.json at the project root with only a projectId — no secrets, safe to commit.

From here, just work. Hooks capture activity passively; the local outbox ships events to the backend in the background. Latency is <60 ms per hook.

Every Claude Code session you open in that project:

  • The agent calls get_context() at startup and inherits: open tasks, open + recently-resolved bugs (with fix narratives), recent deploys, every decision ever made, credential references — and gaps flags telling it what was NOT logged so it can ask you.
  • Hooks capture: file edits (paths only — never contents), Bash commands (hashed + service detection), prompt metadata (hash + intent), subagent starts/stops, compaction checkpoints, session lifecycle.
  • Two redaction layers protect you from accidental secret leaks: path denylist drops .env / .ssh/ / *.pem / secrets/ events entirely; pattern blocklist redacts AWS / Scaleway / Stripe / GitHub / Anthropic / OpenAI keys + JWTs + PEM blocks before they leave your machine.

Four things the plugin cannot infer and that the agent should record explicitly. See AGENT_PLAYBOOK.md for triggers:

  • Decisionslog(content, type="decision") or decision_log(...).
  • Bug fix narrativebug_resolve(root_cause, fix_narrative).
  • Deploy outcomedeploy_log(status=succeeded|failed|...).
  • Credential refscredential_ref_upsert(name, store, lookup_key, …).

If the agent forgets, the next session’s get_context() returns gaps[] with the missing categories — a built-in safety net.

Terminal window
tail -n 3 ~/.erold/outbox/events.jsonl # recent events queued locally
tail -n 5 ~/.erold/error.log # any transmission errors