fockus/skill-memory-bank

memory-bank

Agent-agnostic long-term project memory through .memory-bank/ + RULES (TDD/SOLID/Clean Architecture/FSD/Mobile) + dev-toolkit commands.

Voir la source
Document Skill original

Rendu depuis le dépôt source en conservant titres, exemples, code, tableaux, liens et images.

Memory Bank Skill

Three-in-one skill for code agents:

  1. Memory Bank — long-term project memory through .memory-bank/ (STATUS, plan, checklist, RESEARCH, BACKLOG, progress, lessons, notes/, plans/, experiments/, reports/, codebase/).
  2. RULES — global engineering rules: TDD, Clean Architecture (backend), FSD (frontend), Mobile (iOS/Android UDF), SOLID, Testing Trophy.
  3. Dev toolkit — 33 commands: /mb, /start, /done, /plan, /brief, /discuss, /groom, /sdd, /work, /drive, /config, /pipeline, /profile, /commit, /pr, /review, /test, /refactor, /doc, /changelog, /catchup, /adr, /contract, /security-review, /api-contract, /db-migration, /observability, /roadmap-sync, /traceability-gen, /analyze-task, /flow, /goal, /agree.
Design contract. Memory Bank rests on one inviolable promise — agents remember — and a stack of fully configurable, token-economical layers above it. Default behaviour never changes without explicit opt-in; user customisations survive upgrades; expensive paths are off by default. See `references/design-principles.md` for the full contract.

Supported host model:

  • Claude Code / OpenCode — native command surface + global install.
  • Cursor — native full support: global skill alias (~/.cursor/skills/memory-bank/), global hooks (~/.cursor/hooks.json), global slash commands (~/.cursor/commands/), ~/.cursor/AGENTS.md with managed section, plus a paste-ready file for Settings → Rules → User Rules. Project-level .cursor/ adapter remains available as an add-on via --clients cursor.
  • Codex — global skill discovery + AGENTS.md hints + project-level .codex/ adapter; no separate native slash-command surface.
  • Other code agents — via adapters, AGENTS.md, local hooks/configs, or direct CLI/script usage.

Development flow — stages a code agent should expect

Work in a Memory Bank project follows this order. Depth scales with task complexity — every stage except development itself can be skipped for trivial work; review and judge are opt-in.

#StageCommandNotes
1Interview/mb discuss <topic> (alias /mb ask_me)Grilling interview → decisions + EARS-validated requirements draft in context/<topic>.md
2Spec or plan/mb sdd <topic> · /mb plan <type> <topic>Pick by complexity: feature/multi-task → spec triple (specs/<topic>/requirements+design+tasks.md, executable <!-- mb-task:N -->); smaller bounded change → plan (plans/*.md, <!-- mb-stage:N -->); trivial fix → no artifact (rules still apply)
3Development/mb work <target>Executes spec tasks / plan stages one by one through an implement → verify loop with role subagents (TDD, contract-first)
4Verification/mb verifyplan-verifier audits diff vs plan/spec DoD; mandatory before `/mb done` when work followed a plan/spec
5Review (optional)/mb work <target> --reviewReviewer verdict (subagent ensemble or external codex) + severity gate; off by default
6Judge (optional)/mb work <target> --judgemb-judge decides GO / GOWITHBACKLOG / NO_GO and terminates the review loop
7Close/mb doneActualize bank: progress append, checklist/status update

Grooming (any stage). /mb groom <topic> (also grooming) runs a critical grooming session outside the fixed order — for a raw idea, a task that already has a spec, or a decision worth revisiting. Unlike /mb discuss, the goal is not a spec: the agent challenges necessity and approach, proposes its own solutions, covers white spots; the summary lands in context/<topic>-groom.md, confirmed decisions go to agreements.md / backlog (ADR/Ideas), and the session ends with proposed next steps (e.g. /mb sdd).

Pipeline. The whole chain can be encoded in <bank>/pipeline.yaml as a named workflow (steps, per-role model/thinking, severity gates, protected paths, budget). When present, /mb work resolves it automatically (mb-workflow.sh) and follows the configured steps — e.g. governed implement → verify → review → judge → fix → done — without per-run flags. Manage with /mb pipeline / /mb config; validate with /mb config validate. Defaults never change without opt-in: no pipeline and no flags = simple implement → verify.

Command index — all `/mb` subcommands (know these exist; suggest them to the user when relevant; details per subcommand → commands/mb.md or /mb help <sub>):

  • Session & context: context (default, empty arg) · start · done · update · tasks · note <topic> · index
  • Requirements & decisions: discuss <topic> (alias ask_me) · groom <topic> (alias grooming) · sdd <topic> · openspec <import|list|status|sync> · plan <type> <topic> · idea <title> · idea-promote <I-NNN> · adr <title> · agree <sub> · goal
  • Execution: work [target] · verify · config <sub> · pipeline <sub> · flow <route> · analyze-task
  • Codebase intelligence & memory: map [focus] · graph · wiki · research <query> · search <query> · recall <query> · recap <sid> · conflicts · consolidate · tags
  • Setup & maintenance: init · install · profile <sub> · doctor · compact · migrate-structure · import · upgrade · deps · statusline · help [sub]

Beyond /mb, the toolkit ships standalone commands (see the list in the intro above): /commit, /pr, /review, /test, /refactor, /doc, /changelog, /catchup, /contract, /security-review, /api-contract, /db-migration, /observability, /roadmap-sync, /traceability-gen.


Quick start

bash
# Storage modes — pick one per project:
/mb init                                      # local mode (default) — bank in repo (.memory-bank/)
/mb init --storage=local                      # explicit local mode — same as above
/mb init --storage=global --agent=claude-code # global mode — bank in ~/.claude/memory-bank/...
                                              # (personal, NOT committed to the repo)
# Rules-only mode: no /mb init at all — [MEMORY BANK: ABSENT] state;
# /mb lifecycle stays inactive; all TDD/SOLID/Clean Architecture/DRY/KISS/YAGNI rules still apply.

# Initialization flags
/mb init --full          # same as /mb init (stack auto-detect + CLAUDE.md generation)
/mb init --minimal       # only the .memory-bank/ structure

# Session flow (basic)
/mb start                # load context
# ... work, checklist.md updates as tasks complete ...
/mb verify               # verify plan alignment (if there was a plan)
/mb done                 # actualize + note + progress

# Unified SDD flow (spec-driven features)
/mb discuss <topic>      # EARS-validated requirements → context/<topic>.md
/mb sdd <topic>          # spec triple: requirements / design / tasks.md (executable)
# specs/<topic>/tasks.md is a first-class executable artifact with <!-- mb-task:N --> markers,
# NOT a scaffold — each block is resolved by /mb work <topic> as a work item.
# requirements.md may add an optional `## Scenarios` layer: <!-- mb-scenario:N --> blocks
# (### Scenario: + **Covers:** REQ-x + GIVEN/WHEN/THEN). They become a test-plan
# (mb-scenario-extract.py) that /mb plan links and /mb work turns into one real test
# per scenario in the project's stack. Enforce coverage with
# `mb-spec-validate.sh --require-scenarios`; off by default (EARS-only specs stay valid).
/mb work <topic>         # execute spec tasks one by one (reads <!-- mb-task:N --> blocks)
/mb verify               # verify against spec + plan
/mb done                 # actualize + progress

Personalize rules for your stack (optional):

/mb profile init --scope=project --role=backend --stack=go --architecture=microservices --delivery=contract-first

or user-global (works even without a project Memory Bank):

/mb profile init --scope=user --role=frontend --stack=typescript

If the host does not support native slash commands, use:

  • commands/mb.md as the workflow entrypoint;
  • the memory-bank ... CLI for install/init/doctor flows;
  • bundled scripts and agent prompts from this skill bundle.

Workspace resolution — agent-agnostic storage

Memory Bank resolves its active bank through scripts/_lib.sh::mb_resolve_path. The precedence is fixed and explicit:

  1. Explicit argumentmb-*.sh <mb_path> always wins.
  2. `MB_PATH` env override — for ad-hoc redirection in shell sessions.
  3. Local mode<project>/.memory-bank/ (default of /mb init, team-shared, committable).
  4. Global mode — registered in <agent_config>/memory-bank/registry.json. Requires --storage=global --agent=<name> on init (or $MB_AGENT env). Per supported agent:
  • claude-code$HOME/.claude/memory-bank/projects/<id>/.memory-bank
  • cursor$HOME/.cursor/memory-bank/projects/<id>/.memory-bank
  • codex$HOME/.codex/memory-bank/projects/<id>/.memory-bank
  • opencode$HOME/.config/opencode/memory-bank/projects/<id>/.memory-bank
  • pi$HOME/.pi/agent/memory-bank/projects/<id>/.memory-bank
  • windsurf/cline/kilo → analogous under the respective config dir
  1. Legacy `.claude-workspace` — kept for backward compatibility (storage: external + project_id: <id>~/.claude/workspaces/<id>/.memory-bank). New projects should use --storage=global instead.
  2. Fallback — relative .memory-bank (compat with existing scripts).

Active-state semantics

  • [MEMORY BANK: ACTIVE] — when the resolver returns an existing bank (local or registered global).
  • [MEMORY BANK: ABSENT] — when no bank exists for the current project. Surface this and stop the Memory Bank lifecycle — do not silently initialize.
  • [MEMORY BANK: INITIALIZED] — only after a successful explicit /mb init.

Rules-only mode

A project may intentionally have no Memory Bank ([MEMORY BANK: ABSENT]). In that case:

  • /mb lifecycle commands stay inactive until the user explicitly runs /mb init.
  • The engineering rules baseline still applies: TDD, SOLID, Clean Architecture / FSD, DRY/KISS/YAGNI, Testing Trophy, protected files, no placeholders, verification before completion. Global skill installation never auto-enables Memory Bank state.

When invoking MB Manager or scripts, always pass the resolved mb_path.


Tools — shell scripts

All scripts live in scripts/ next to this SKILL.md. In global installs, the bundle is typically available through host aliases:

  • Claude Code: ~/.claude/skills/memory-bank/
  • Codex: ~/.codex/skills/memory-bank/
  • Cursor: ~/.cursor/skills/memory-bank/

Scripts work with .memory-bank/ in the current directory or through the mb_path argument.

GraphRAG-lite retrieval routing

code_context is the default for ambiguous code-understanding questions such as "where is the logic for X?" or "find similar implementation". Exact structural questions route directly to graph tools: "who calls/imports/defines X?" → graph_neighbors, "reverse deps" or change impact → graph_impact, and "what tests cover this file/symbol?" → graph_tests. User explicitly asks "semantic search" → search_code because explicit tool intent wins.

Fail open: missing graph, stale graph, missing semantic provider, or unavailable native extension must not block the agent. Use scripts/mb-graph-query.py and scripts/mb-code-context.py as the universal CLI fallback; Pi and OpenCode may expose native tool wrappers, while Claude Code, Codex, and generic AGENTS.md agents can call the scripts directly.

ScriptPurpose
_lib.shShared helpers sourced by other scripts
mb-context.sh [--deep]Build context from core files (STATUS + plan + checklist + RESEARCH + codebase summary). --deep shows full codebase docs
mb-statusline.py [--install]Claude Code statusline showing context-window fill % (used/limit, 1M-aware) + model · branch · project. Reads the status JSON on stdin; --install wires it into ~/.claude/settings.json (backup, no clobber)
mb-search.sh <q> [--tag t]Keyword search across the memory bank. --tag filters via index.json
mb-note.sh <topic>Create notes/YYYY-MM-DD_HH-MM_<topic>.md. Collision-safe (_2 / _3)
mb-plan.sh <type> <topic>Create plans/YYYY-MM-DD_<type>_<topic>.md with <!-- mb-stage:N --> markers
mb-plan-sync.sh <plan>Synchronize a plan ↔ checklist + roadmap + status (idempotent)
mb-plan-done.sh <plan>Close a plan: ⬜→✅ + move to plans/done/
`mb-idea.sh <title> [HIGH\MED\LOW]`Capture a new idea in backlog.md with monotonic I-NNN
mb-idea-promote.sh <I-NNN>Promote an idea (I-NNN) into an active plan
mb-adr.sh <title>Capture an Architecture Decision Record in backlog.md (ADR-NNN)
mb-init-bank.shDeterministic, locale-aware .memory-bank/ scaffolder
mb-config.shMemory Bank config resolver + locale auto-detector
mb-metrics.sh [--run]Language-agnostic metrics (12 stacks). --run captures `test_status=pass\fail`
mb-index.shRegistry of all entries (core + notes/plans/experiments/reports)
mb-index-json.pyBuild index.json (frontmatter notes + lessons headings). Atomic write
mb-drift.sh8 deterministic drift checkers (path, staleness, script coverage, dependency, cross-file, index sync, command, frontmatter)
mb-progress-chain.sh--rebuild-tail / --verify the progress.md append-only hash chain (index.json:progress_chain); CRITICAL drift on tamper (handoff-v2)
mb-rules-check.shDeterministic rules enforcement (SRP / Clean Architecture / TDD delta)
mb_rules_check_lib.shShared helper library for mb-rules-check.sh
mb_rules_check_profile.shProfile resolution and output emitters for mb-rules-check.sh
mb_rules_check_baseline.shBaseline SRP / Clean Architecture / TDD checks for mb-rules-check.sh
mb_rules_check_stack.shStack-aware and FSD checks for mb-rules-check.sh
mb-done-gates.shMandatory /mb done gate set (tests + rules + placeholder scan); --force --reason records a NOTE in progress.md (handoff-v2)
mb-test-run.shStructured test runner with per-stack output parsing → strict JSON
mb-deps-check.sh [--install-hints]Preflight dependency checker (python3, jq, git + optional tree-sitter, networkx)
mb-checklist-prune.sh [--apply]Collapse completed sections in checklist.md to one-liners (≤120-line cap). Rule: `checklist.md` = open TODO only; commit hashes / test counts / closeouts go to `progress.md`. Opt-in SessionEnd autoprune when it exceeds the cap via MB_CHECKLIST_AUTOPRUNE=on (hooks/mb-checklist-autoprune.sh)
mb-compact.sh [--apply]Status-based compaction decay — archive old done plans + low-importance notes
mb-handoff.shHandoff capsule manager — --actualize / --read / --rotate a ≤1500-byte session capsule under handoff/ (handoff-v2)
mb-tags-normalize.sh [--apply]Levenshtein-based tag synonym detection + merge across notes/
mb-roadmap-sync.shRegenerate roadmap.md autosync block from plans/*.md frontmatter
mb-traceability-gen.shRegenerate traceability.md from specs + plans + tests
mb-ears-validate.sh <file>Validate REQ bullets against the 5 EARS patterns
mb-req-next-id.shEmit the next monotonic REQ-NNN identifier
mb-sdd.sh <topic>Create a Kiro-style spec triple under specs/<topic>/ (requirements / design / tasks). Scaffolds an optional ## Scenarios (GIVEN/WHEN/THEN) section
mb-scenario-extract.py <file>Extract <!-- mb-scenario:N --> GIVEN/WHEN/THEN blocks → normalized test-plan (JSON Lines: covers + steps + stable test_id). --validate checks present scenarios are well-formed. Opt-in layer; absent scenarios → empty/no-op
mb_work_items.pyShared parser for plan stages (<!-- mb-stage:N -->) and spec tasks (<!-- mb-task:N -->); CLI emits JSON Lines
mb_req_id.pyShared REQ-ID grammar (single source of truth) used by traceability / spec-validate / ears-validate. Supports prefixed schemes (REQ-RS-008), distinguishes a definition from a mid-line mention, expands REQ-RS-002/003 slash-shorthand, and maps pytest identifiers (req_rs_008) onto canonical ids
`mb-spec-validate.sh <topic\spec-dir\spec-file>`Validate spec triple integrity (EARS, parseable tasks, per-task Covers/DoD/Testing, no REQ orphans). Present GIVEN/WHEN/THEN scenarios are structure-checked; --require-scenarios (opt-in) enforces ≥1 scenario per REQ; --require-tests (opt-in) enforces ≥1 covering test per REQ (scans <repo>/tests, <mb>/tests, or MB_TEST_ROOTS). --json mode for structured output
`mb-spec-tasks-migrate.sh <topic\tasks-file> [--apply\--dry-run]`Migrate legacy ## N. ... tasks to <!-- mb-task:N --> format. Dry-run default, --apply writes backup before changes, idempotent
mb-pipeline.shManage the project's pipeline.yaml (spec §9)
mb-pipeline-validate.shStructural validation for pipeline.yaml (spec §9)
mb-work-resolve.shResolve <target> arg into a plan/spec path (spec §8.2)
mb-work-range.shEmit per-stage indices (plan mode) or per-sprint paths
mb-work-plan.shEmit per-stage execution plan as JSON Lines (spec §8)
mb-work-budget.shToken budget tracker for /mb work --budget
mb-work-protected-check.shMatch files against pipeline.yaml:protected_paths
mb-work-review-parse.shValidate reviewer output for /mb work review-loop
mb-work-severity-gate.shApply pipeline.yaml:severity_gate to review counts
mb-work-trend.shReview-cycle trend: weighted score (10×blocker + 3×major + 1×minor) vs the previous cycle → improving / stagnant / regressing / null (work-loop-v2 G2)
mb-work-pivot.shDecide refine / pivot_in_role / pivot_via_architect from the trend + cycle count, instead of grinding the same fix (pivot_after_cycles, pivot_escalate_to_architect_on)
mb-work-contract.shPer-stage "what done means" contract under <bank>/contracts/<topic>_stage-<N>.mdcreate / read / validate / path; the reviewer can judge against it
mb-workflow.shResolve the active workflow + per-step model/thinking config from pipeline.yaml for /mb work
mb-drive.shAutonomous goal-driven loop: next reads goal-acceptance + the firewall + work-state + budget and emits exactly one action (implement / repair / pivot / stop_*). Stateless, fail-closed — stop_success requires a green firewall AND 100% acceptance (REQ-DR-014)
mb-drive-stop.shDrive-loop stop telemetry + per-run drive state: arm marks a drive live (arms the Stop-hook resume-gate), `record --reason\--action writes the stop reason once into the mb-flow fence, progress.md`, and the run's state slot (REQ-DR-033/034)
mb-work-state.shDurable /mb work loop-state + max_cycles enforcement; optional per-run isolation/claim under MB_WORK_PARALLEL
mb-work-slots.shSourced helper: per-run state/budget/drive slot-path resolution + source→run claim index (gated behind MB_WORK_PARALLEL)
mb-work-checkbox.shDeterministic DoD-checkbox flip, gated on the run's work-state phase (single-writer for checklist.md)
mb-work-diff.shBaseline-scoped diff for a /mb work run — feeds verify/review with the stage's own changes only
mb-work-progress-append.shLocked, atomic, append-only writer for <bank>/progress.md (safe under concurrent runs)
mb-work-codex-preflight.shFail-safe codex CLI availability/auth health-check before a cross-model review wave
mb-session-doctor.shDiagnose session-memory subsystem health (unsummarized sessions, missing index/adapters, legacy stubs)
mb-agent-caps.shCapability-aware dispatch: resolve CLI transport (pi/opencode/codex/claude-agent) + concrete model per role by probing CLI presence and model availability
mb-reviewer-resolve.shPick the active reviewer agent name
mb-review.shReview orchestrator entry point: deterministic 5-section payload assembly (diff + calibration examples + test evidence + auto-findings), model-agnostic, --emit-payload/--input
mb-review-cache.shTouched-file test-evidence cache: compute_touched_sha + TTL HIT/MISS resolution under .memory-bank/tmp/
mb-review-examples.shLayered calibration-example loader: project-over-skill precedence by example_id, fence-aware parser, per-category rotation, path-traversal/symlink-safe; renders the ## Calibration examples payload section
mb-session-spend.shSession token-spend tracker (sprint context guard)
mb-session-recent-rebuild.shRegenerate session/_recent.md from session/*.md (keeps newest MB_RECENT_KEEP; deterministic, idempotent)
mb-recap.sh <sid>/mb recap: reconstruct a full progress.md entry from session/<sid>*.md via one Haiku call, replacing that session's auto-capture stub idempotently (recapped frontmatter). Missing session → exit non-zero, no writes; real entry already present → refuse
mb-conflicts.sh [--judge] [--threshold N]/mb conflicts: report memory entries with high lexical overlap and opposing/replacement assertions (en+ru markers) as conflict candidates — $0 pass (token-set Jaccard > N, default 0.3) over notes/ + lessons.md + recent progress.md, zero LLM calls. --judge confirms/rejects each pair via one Sonnet call + prints a suggested [SUPERSEDED: YYYY-MM-DD -> <ref>] marker. PRINT-ONLY — never writes to any bank file
mb-consolidate.sh [--apply] [--days N]/mb consolidate: fold sessions older than N days (default 30) that cluster by shared files / lexical overlap into 5–15 line notes/ candidates, archive those session files VERBATIM → session/archive/, and move their contiguous auto-capture progress STUBS VERBATIM → progress-archive.md. Zero LLM calls. Dry-run is the DEFAULT (writes nothing — bank byte-identical); --apply performs it. Real progress entries are immutable and never move
mb-auto-commit.shOpt-in auto-commit of .memory-bank/ after /mb done (MB_AUTO_COMMIT=1 or --force) — 4 safety gates, MB-only staging, never pushes
`mb-freshness.sh [--porcelain\--stop-nudge\--banner]`Deterministic MB-vs-code drift alarm (behind/dirty); drift-gated Stop nudge + SessionStart banner (MB_DRIFT_WARN_COMMITS/MB_DRIFT_WARN_DIRTY_LINES, opt-out MB_FRESHNESS_BANNER=off). See docs/concepts/session-memory.md for the auto-commit recipe
mb-migrate-v2.shOne-shot v1 → v2 migrator for .memory-bank/
mb-migrate-structure.shOne-shot v3.0 → v3.1 structure migrator for .memory-bank/
mb-import.pyClaude Code JSONL → Memory Bank bootstrap importer
mb-openspec.shThin dispatcher for the OpenSpec import adapter: `import\list\status\syncmb-openspec.py`
mb-openspec.pyOne-way OpenSpec changes/<id>/ → MB spec triple specs/<topic>/ import + drift-aware list/status/sync (opt-in --normalize LLM slot layer)
mb_openspec_model.pyDataclasses shared by the OpenSpec adapter's parser/converter
mb_openspec_parse.pyRead-only OpenSpec change parser (parse_change, compute_source_hash)
mb_openspec_convert.pyDeterministic OpenSpec → MB spec-triple converter (anchors, EARS classify, re-import anchor reuse)
mb_openspec_normalize.pyOpt-in --normalize LLM slot layer + source-hash cache for the OpenSpec adapter (fail-open)
mb-agree.shSingle writer for the running list of agreements (agreements.md): `add\defer\reject\question\resolve\list\sync` + managed-block sync
mb-codegraph.pyCode graph orchestrator. Extractors in memory_bank_skill/: codegraph_python (stdlib ast), codegraph_treesitter (multi-language, opt-in), codegraph_analytics (communities/cohesion/betweenness, optional networkx), codegraph_cochange (git co-change edges via opt-in --cochange)
mb-graph-query.pyQuery codebase/graph.json: neighbors, impact, tests, explain, summary with JSON/markdown output
mb_graph_query_core.pyCore graph loading, matching and payload builders for mb-graph-query.py
mb_graph_query_render.pyMarkdown summary renderers for graph-query output
mb-code-context.pyGraphRAG-lite evidence pack: optional semantic candidates + graph expansion + text/read fallback
mb_code_context_core.pyCore evidence-pack orchestration for mb-code-context.py
mb-semantic-search.pySemantic code search over graph.json (+ wiki): --backend auto (embeddings when sentence-transformers installed, else pure-Python BM25 — the $0 zero-dep base), --source-only, disk cache in .index/codesearch/. Modules in memory_bank_skill/: semantic_search, semantic_embeddings, codegraph_loader
mb-wiki.py/mb wiki engine (deterministic prep): plan/packs/write-article/merge-edges/index. LLM articles + surprising-connection edges via host subagents. Modules: wiki_evidence, wiki_store
mb-context-slim.pySlim a full agent prompt on stdin → terse version on stdout
mb-cost-report.py [--project <dir>] [--since N] [--json]/mb cost engine: mine Claude Code transcripts (~/.claude/projects/<slug>/) into per-session, per-subagent-role and per-work-item (mb-work-state.sh initmb-work-checkbox.sh flip) cost. Parsing in memory_bank_skill/cost_report.py
`mb-upgrade.sh [--check\--force]`Self-update the skill from GitHub
mb-version-check.sh [--force]Is a newer release out? Compares local VERSION against the latest GitHub Release (PyPI JSON as fallback), cached with a TTL. Prints strict JSON (current/latest/update_available/flavor/upgrade_command/checked_at/source). Always fail-open — exit 0, silent, never blocks a session. Off: MB_UPDATE_CHECK=off
mb-profile.shRule profile manager: init, show, path, validate, set — user/project scopes
mb-diff-scope.shL5 diff-scope backstop: compare changed files against an allowed glob scope and report out-of-scope changes (exits 0, JSON report; ADR-4)
mb-fanout.shStateless fan-out helper: run N branch prompts concurrently via background jobs, capture JSON results, and aggregate into one object — exit-code authority for failed branches (REQ-DF-084)
mb-flow-branch-sink.shPer-branch result sinks with write-once discipline for <!-- mb-flow --> fence: each parallel branch writes to its own .mb-flow/branch-<i>.json to prevent races (ADR-9)
mb-flow-route.shDeterministic route resolver: apply route-floor rules (REQ-DF-022) to an LLM-proposed or user-supplied route and write the resolved route: into the <!-- mb-flow --> fence in status.md
mb-flow-sync.shRegenerate the <!-- mb-flow --> runtime fence in status.md: emit route, phase, checks, gate, last-verify-sha, stall-count, and stop-reason fields (REQ-DF-030/031/032, REQ-DR-033)
mb-flow-verify.shTHE firewall fan-out: run route-relevant check runners, normalize verdicts via mb-work-severity-gate.sh, and exit 0/1/2 — the sole exit-code authority of the dynamic-flow firewall (ADR-3)
mb-goal-acceptance.shL5 goal-acceptance aggregator: parse ## Acceptance criteria checkboxes in goal.md and report whether every criterion is satisfied (exits 0, JSON report; REQ-DF-042)
mb-goal-validate.shValidate a goal.md before a Dynamic Flow run: enforce required sections, acceptance-criteria items, and field completeness — fail-loud exit 1 on malformed goals (REQ-DF-004)
mb-lint-run.shL5 lint runner: auto-detect project stack via mb-metrics.sh, map to linter (ruff/shellcheck), run it, and report findings (exits 0, JSON report; ADR-3; unknown stack = SKIP)
mb-no-todo.shL5 residual-placeholder runner: scan target files for TODO/FIXME/HACK markers, reusing mb_rules_check_lib.sh::scan_placeholders patterns and exemptions (exits 0, JSON report; REQ-DF-042)
mb-session-prune.shArchive contentless session stubs out of <bank>/session/ into session/archive/stubs/; dry-run is the default, --apply performs the move. Also flags/repairs bloated files (>MB_SESSION_BLOAT_BYTES) with post-## Summary bullets
mb-session-repair.sh [--apply] <file>Repair a session file corrupted by the legacy append-after-## Summary bug: move turn-bullets back into ## Live log, reset summarized=false, re-cap over-long bullets, keep a archive/pre-repair/ backup. Dry-run default, idempotent, fail-safe
mb-settings-ensure-timeout.pySurgically ensure the SessionEnd mb-session-end.sh hook command carries a per-command timeout so the Haiku summarizer is not SIGKILLed before writing ## Summary
mb-subinvoke-resolve.shResolve the per-agent shell sub-invoke command template for the active agent (mirrors mb-reviewer-resolve.sh); used by mb-fanout.sh to bake --cmd when the operator does not supply one (REQ-DF-082)
mb-brief.shDeterministic helper behind /mb brief: create (topic + candidate + --input documents), context, accept — the file effects of the brief stage live in a script, not a prompt
mb-brief-validate.shStructural validator for a brief one-pager — section order, required fields, single-page budget
mb_brief_candidate.pyCandidate inspection for mb-brief.sh (contract C6 steps 4–5)
mb-glossary.shAtomic upsert of a single <term> — <definition> line in <bank>/glossary.md; term and definition are read from files, so no quoting loss (REQ-017)
mb-estimate-check.shDeterministic size-estimate validator: the /mb discuss context estimate and the spec-triple / candidate budget gate. No LLM, no PyYAML
mb-estimate-lib.shSourced parsers for mb-estimate-check.sh (context-file and spec/candidate estimates). Not a standalone entry point
mb-interview-artifact-check.shDeterministic structural validator for /mb discuss interview artifacts — plan, --require-closed, --print-digest. No LLM
mb-interview-artifact-write.shDeterministic writer for /mb discuss file effects: atomic publish, and byte-identity of a rejected target is a script-proven fact rather than a prompt promise
mb-secret-scan.shCanonical secret-scan dispatcher (transcript and brief-input policies); patterns are single-sourced from mb-import.py, never a second regex set
mb-sdd-candidate.shCandidate lifecycle for /mb sdd generation: the seam separating a GENERATED tasks.md from an ACCEPTED one (<bank>/tmp/sdd/<topic>/tasks.candidate.md)
mb-sdd-self-check.shDeterministic executor of the C8 generation self-check battery over a published draft triple, so commands/sdd.md decides draft→ready by exit code, not prompt judgement. Pure checker — writes nothing
mb-sdd-self-check-eval.shSourced half of the C8a battery: how ONE **Eval:** declaration is classified in a given phase (--phase generation requires red, --phase done requires green)
mb-sdd-review-result.shExecutable owner of the spec-review exit codes: validation, the append-only record, and 0/1/2 — commands/sdd.md owns only the model dispatch
mb_sdd_judge_journal.pyJudge / override / status half of the spec-review journal (append-only, symlink-safe)
mb-sdd-layers-render.pyDeterministic renderer for the test-layer tasks and the ## Quality DoD block
mb-quality-dod.shRender the one canonical ## Quality DoD block; the orchestrator runs it ONCE per item and hands the same file to implementer, reviewer, and judge
mb_quality_dod.pyThe ## Quality DoD renderer core — one renderer, three receivers
mb-rules-resolve.shResolve the rule sources a spec is judged against — discovery and validation modes behind one JSON contract
mb_rules_resolve.pyRule-source resolution core for mb-rules-resolve.sh
mb-contract-gate.shExecute a spec's Contract-checkers registry (the fenced ``json block of the Layer: contract` task)
mb_contract_gate.pyRunner for the Contract-checkers registry
mb_contract_registry.pyThe Contract-checkers registry — one reader, one schema, two consumers
mb-work-state-eval.shSourced eval-first layer for mb-work-state.sh: the red→green Eval gate. Not a standalone entry point
mb-work-state-lib.shSourced helpers for mb-work-state.sh that shell out to external tooling (pipeline YAML, uuid). Not a standalone entry point
mb_work_eval_proof.pyCanonical eval-proof payload for the mb-work-state red→green gate
mb_work_plan_wrapper.pyWrapper-plan resolution for mb-work-plan.sh (linked_spec / <!-- mb-stage:N -->)
mb-backlog-state.shBacklog state machine, hierarchy, and briefs: transition <I-NNN> <STATE>, annotate --brief --parent
mb_backlog_state_engine.pyBacklog parser + state engine behind the backlog scripts
mb_backlog_validate.pyBacklog metadata validation: the brief gate (REQ-007) + single-line safety
mb_roadmap_group.pyGroup-section rendering + progress aggregation for mb-roadmap-sync.sh
mb_roadmap_order.pyPure ICE-component parsing + priority ordering for mb-roadmap-sync.sh
mb_roadmap_plans.pyPlan-frontmatter parsing + collection for mb-roadmap-sync.sh
mb_roadmap_render.pyFence handling, bootstrap transfer, and atomic publish for mb-roadmap-sync.sh
mb_spec_validate_v2.pyv2 / C8 battery gates for mb-spec-validate.sh
mb_spec_validate_tasks.pyPer-task structural checks 3–6 for mb-spec-validate.sh
mb_spec_validate_structural.pyScope classification + structural Eval grammar (REQ-049)
mb_spec_validate_scope_eval.pyI-174 gate: a task's **Eval:** must actually run the test files its **Scope:** claims
mb_spec_validate_layers.pyTest-layer gates C3/C4 and the Contract-checkers schema
mb_spec_validate_graph.pyblocked_by dependency-graph gates (REQ-052 / C8.5)
mb_pipeline_validate_core.pyPipeline config validation core for mb-pipeline-validate.sh
mb_pipeline_validate_blocks.pyPer-block pipeline validators (budget … named-pipeline metadata)
mb_pipeline_minimal_yaml.pyPyYAML-optional minimal loader for pipeline.yaml — the zero-dep base
mb_fs_atomic.pyOne atomic file-publish primitive, shared by every writer

Agents — subagents (sonnet)

AgentWhen to invokePrompt
mb-manager/mb context, search, note, tasks, done, update, PreCompact hookagents/mb-manager.md
mb-doctor/mb doctor — memory-bank inconsistencies (use mb-plan-sync.sh first, only edit for semantic drift)agents/mb-doctor.md
mb-codebase-mapper/mb map [focus] — scan the codebase → .memory-bank/codebase/{STACK,ARCHITECTURE,CONVENTIONS,CONCERNS}.mdagents/mb-codebase-mapper.md
plan-verifier/mb verify — required before /mb done when work followed a plan. Uses **Baseline commit:** from plan header for git diff, delegates tests to mb-test-runner, enforces RULES.md via mb-rules-enforceragents/plan-verifier.md
mb-rules-enforcer/review, /commit, /pr, plan-verifier step 3.6 — runs mb-rules-check.sh (solid/srp, clean_arch/direction, tdd/delta) + LLM ISP/DRY judgment. Returns strict JSON + summaryagents/mb-rules-enforcer.md
mb-test-runner/test, plan-verifier step 3.5 — runs mb-test-run.sh, correlates failures with session diff. Returns JSON {stack, tests_pass, tests_total, failures[], coverage, duration_ms}agents/mb-test-runner.md
mb-reviewer/mb work legacy single-reviewer fallback — reads stage diff + pipeline.yaml:review_rubric, emits structured JSON verdictagents/mb-reviewer.md
mb-reviewer-logic/mb work governed review ensemble — correctness / logic aspect reviewer with scoped contextagents/mb-reviewer-logic.md
mb-reviewer-tests/mb work governed review ensemble — test-coverage / quality-of-tests aspect revieweragents/mb-reviewer-tests.md
mb-reviewer-quality/mb work governed review ensemble — code-quality / maintainability aspect revieweragents/mb-reviewer-quality.md
mb-reviewer-security/mb work governed review ensemble — security aspect revieweragents/mb-reviewer-security.md
mb-reviewer-scalability/mb work governed review ensemble — performance / scalability aspect revieweragents/mb-reviewer-scalability.md
mb-reviewer-lead/mb work governed review — synthesizes aspect reports, verifies previous master report closure, separates blockers from backlogagents/mb-reviewer-lead.md
mb-judge/mb work governed final gate — decides GO / GOWITHBACKLOG / NO_GO from plan, verifier, lead-review, and evidenceagents/mb-judge.md
mb-engineering-core[partial — not dispatched directly] Prepended by /mb work ahead of every dev-role agent below. Carries the shared discipline: TDD, Contract-First, Clean Architecture, production-wiring, evidence-before-claims (Iron Law), escalation, STATUS contract, anti-rationalization. Excluded from the ~/.claude/agents/ registry via partial: true frontmatter.agents/mb-engineering-core.md
mb-tooling-core[partial — not dispatched directly] Prepended by /mb work alongside mb-engineering-core. Carries the graph-first, fail-open code-understanding routing (code_context / graph_neighbors / graph_impact / graph_tests / search_code / recall). Optional indexes degrade to Grep/Read. Excluded from the registry via partial: true.agents/mb-tooling-core.md
mb-developer/mb work — generic implementer when no specialist role matches. Discipline from mb-engineering-core + DoD-driven implementationagents/mb-developer.md
mb-architect/mb work — architecture / ADR / system-design specialist. Domain modelling, interface definition, refactoring strategyagents/mb-architect.md
mb-backend/mb work — APIs, services, database, async/concurrency, server-side business logicagents/mb-backend.md
mb-frontend/mb work — React/Vue/Svelte/Solid components, browser UI, accessibility, responsive layoutsagents/mb-frontend.md
mb-ios/mb work — SwiftUI/UIKit, Combine, async/await, Apple platform conventionsagents/mb-ios.md
mb-android/mb work — Jetpack Compose, Kotlin coroutines, Hilt/DI, Room, Material3agents/mb-android.md
mb-devops/mb work — CI/CD, Docker, Kubernetes, Terraform, observability, release engineeringagents/mb-devops.md
mb-qa/mb work — test design, coverage strategy, edge-case enumeration, flake elimination, contract testsagents/mb-qa.md
mb-analyst/mb work — data / analytics / metrics: SQL, dashboards, cohorts, ETL pipelines, instrumentationagents/mb-analyst.md
mb-research/mb research (and broad /mb work research steps) — graph-first, multi-source research over codebase + project memory + library docs + GitHub prior-art + open web; read-only (no Write/Edit), returns file:line / source-grounded conclusions, degrades to Grep when indexes are absentagents/mb-research.md
mb-researcher/mb work governed research role (wired in pipeline.default.yaml) — ecosystem research, implementation reconnaissance, source comparisons, technical due diligence, and evidence-backed option matrices before planning or implementationagents/mb-researcher.md
mb-wiki-author/mb wikiHaiku tier. Writes one codebase-wiki article per community from a deterministic evidence packagents/mb-wiki-author.md
mb-wiki-synthesizer/mb wikiSonnet tier. Finds surprising cross-community connections, emits strict-JSON semantic edgesagents/mb-wiki-synthesizer.md
Composition (dev-role agents). When /mb work dispatches a dev-role agent (developer / backend / frontend / ios / android / architect / devops / qa / analyst), it inlines mb-engineering-core.md first, then the role file, then the work item — prompt = core + "\n---\n" + role + body. The role files carry only their domain delta and reference the core; the prepend is what delivers the shared discipline. A role file dispatched alone (outside /mb work) is discipline-thin by design — read the core first if you invoke one standalone.

Do NOT delegate plan creation, architectural decisions, or ML-result evaluation to a subagent — that is main-agent work.

Plan hierarchy: Phase → Sprint → Stage. See references/templates.md § Plan decomposition for size thresholds, terminology, and when to use which level. Cyrillic «Этап / Спринт / Фаза» — legacy alias, allowed only in plans/done/*.md.

Invocation format

Agent(
  subagent_type="general-purpose",
  model="sonnet",
  description="<description>",
  prompt="<contents of agents/<agent>.md>\n\naction: <action>\n\n<context>"
)

Hooks

Lifecycle hooks shipped in hooks/. Installed automatically by install.sh (Claude Code, Cursor, Codex, OpenCode); see references/hooks.md for per-host wiring details.

HookTriggerPurpose
_skill_root.shsourced helperResolve bundled skill root and effective Memory Bank path for hook scripts
block-dangerous.shPreToolUse (Bash)Block dangerous shell patterns (rm -rf /, ~, /*) — best-effort guardrail
mb-protected-paths-guard.shPreToolUse (Write/Edit)Block writes to pipeline.yaml:protected_paths (e.g. .env, CI configs)
mb-ears-pre-write.shPreToolUse (Write)Validate REQ bullets in context/<topic>.md against EARS patterns before save
mb-context-slim-pre-agent.shPreToolUse (Task)Slim oversized agent prompts on subagent dispatch
mb-sprint-context-guard.shPreToolUse (Task)Hard-stop subagent dispatch if mb-session-spend.sh shows budget exhaustion
mb-graph-nudge.shPreToolUse (Grep/Bash)Non-blocking nudge toward mb-graph-query on structural greps, only when the code graph is fresh; throttled 1×/session, MB_GRAPH_NUDGE=off, fail-safe
mb-plan-sync-post-write.shPostToolUse (Write)Auto-sync plan ↔ checklist + roadmap after editing a plan file
file-change-log.shPostToolUse (Write/Edit)Append change log + scan for placeholders / secrets in committed files
session-end-autosave.shSessionEndMemory Bank auto-capture (`MBAUTOCAPTURE=auto\strict\off) when /mb done` was skipped
mb-checklist-autoprune.shSessionEndOpt-in (MB_CHECKLIST_AUTOPRUNE=on, default off) collapse of a checklist.md past the 120-line cap via mb-checklist-prune.sh --apply, under a lock, fail-safe
mb-pre-compact.shPreCompact (Claude Code) / preCompact (Cursor)Handoff-v2: runs mb-handoff.sh --actualize to write a fresh handoff/latest.md capsule before compaction. Bounded to ~2s, never blocks (MB_PRECOMPACT_HANDOFF=off to disable)
mb-session-start-context.shsessionStart (Cursor)Auto-inject compact Memory Bank context at session start (MB_AUTOLOAD_CONTEXT=off to disable)
mb-session-turn.shStopSession memory: append one per-turn bullet (request + tools + files) to session/*.md, no LLM (MB_SESSION_CAPTURE=off to disable)
mb-session-end.shSessionEndSession memory: Haiku summary + gated Sonnet auto-notes; updates session/_recent.md
mb-session-start.shSessionStartSession memory: inject # Recent Sessions from session/_recent.md + a how-to cheat-sheet (graph / /mb recall / /mb context quick ref), read-only (MB_SESSION_CHEATSHEET=off to drop the cheat-sheet)
mb-update-notify.shSessionStart"A newer release is out?" notice: silent when current, else a ≤3-line notice with current -> latest + the exact upgrade command for the detected install flavor (git/pipx/pip/brew), local-only (--cache-only, no network), fail-open, never blocks (MB_UPDATE_CHECK=off to disable). Opt-in MB_AUTO_UPDATE=on auto-applies for a clean git-clone install only
mb-recall.sh/mb recall <query>Session memory: hybrid recall — model-free BM25 matches first (over agreements.md + progress.md + notes/ + session/; embeddings opt-in via MB_SEMANTIC_BACKEND=embeddings) + ripgrep lexical fallback
mb-semantic-recall.shUserPromptSubmitSession memory: inject # Relevant Memory — top-K relevant past-chat snippets via the model-free BM25 index (I-132: ~50 MB / <0.5 s per prompt; prompt-gated — slash-commands and prompts under MB_SEMANTIC_MIN_PROMPT chars skip the spawn); fail-safe (MB_SEMANTIC=off to disable)
mb-reindex.sh/mb reindexSession memory: (re)build the per-project semantic vector index (--full/--incremental); bootstraps the venv if needed
mb-semantic-bootstrap.shsourced by /mb reindexSession memory: idempotent venv + fastembed/numpy installer (opt-in; semantic layer falls back to lexical without it)
mb-flow-closure-guard.shStopDynamic-flow closure gate: when a flow is active, blocks the Stop event if mb-flow-verify.sh exits non-zero, preventing the agent from declaring done on a red firewall (REQ-DF-045)
mb-drive-resume-gate.shStopDrive-loop resume-gate: while a /mb drive loop is armed, blocks a stop when the goal is not done AND no stop condition fired, so the loop resumes instead of ending early (REQ-DR-032). Decides by reading files only — never runs the firewall or a test battery (MB_DRIVE_RESUME_GATE=off to disable)
mb-session-catchup.shSessionStartLazy summarize sessions left summarized:false by a prior SIGKILLed SessionEnd; dispatched in the background so session startup is never delayed (MB_CATCHUP_MAX tuneable, off via MB_SESSION_CAPTURE=off)
mb-session-summarize.shsourced/dispatched (not directly registered)Generate the Haiku ## Summary for one session file and rotate _recent.md; extracted from mb-session-end.sh (DRY) and driven by both the SessionEnd hook and mb-session-catchup.sh

Host-specific notes

Claude Code and native memory

Claude Code has built-in auto memory (user-level cross-project memory in ~/.claude/projects/.../memory/). This skill does not replace it — the two complement each other:

Aspect.memory-bank/Native auto memory
ScopeProjectUser, cross-project
StoresStatus, plans, checklists, research, ADRs, lessonsPreferences, role, feedback
OwnerTeam (via git)Individual user

Rule of thumb: if it helps a teammate pick up the project tomorrow, store it in .memory-bank/. If it helps you in another project, store it in native memory. They can coexist without conflict.

Codex

For Codex, this skill is positioned as a global skill bundle plus a guidance layer:

  • discovery goes through ~/.codex/skills/memory-bank/
  • global entrypoint/guidance goes through ~/.codex/AGENTS.md
  • hook/config integration remains primarily project-level through .codex/

Codex therefore uses the same Memory Bank workflow, but it does not need to expose the same native command surface as Claude Code/OpenCode.

Cursor

Cursor is a first-class global target. install.sh writes five artifacts to ~/.cursor/:

ArtifactPurpose
~/.cursor/skills/memory-bank/Personal skill alias — Cursor auto-discovers it by description
~/.cursor/hooks.jsonGlobal hooks (10 commands → skill bundle hooks/): sessionStart (auto-context), sessionEnd, preCompact, beforeShellExecution, four preToolUse matchers (`WriteEdit, Write, Task×2), two postToolUse matchers. Each command runs ~/.cursor/skills/memory-bank/hooks/<script>.sh with MBAGENT=cursor`. Tagged `mb_owned: true` so user hooks are preserved
~/.cursor/commands/*.mdUser-level slash commands mirrored from the skill commands/ directory
~/.cursor/AGENTS.mdMarker section memory-bank-cursor:start/end — entrypoint for future Cursor versions that read global AGENTS.md
~/.cursor/memory-bank-user-rules.mdPaste-ready rules bundle for Settings → Rules → User Rules (Cursor exposes no file API for global User Rules, so this is a one-time manual step)

Cursor User Rules paste flow:

bash
# macOS
pbcopy < ~/.cursor/memory-bank-user-rules.md
# Linux
xclip -selection clipboard < ~/.cursor/memory-bank-user-rules.md

The project-level adapter (.cursor/rules/memory-bank.mdc + .cursor/hooks.json) remains available and is installed only when the user passes --clients cursor. Global and project-level installs coexist — Cursor merges hooks from both.


Private content — <private>...</private> (since v2.1)

Markdown syntax for excluding sensitive information (client data, API keys, partner names) from indexing and search:

markdown
---
type: note
tags: [auth, partner-x]
importance: high
---

Discussed with client <private>Jane Doe, +1-555-***</private>.
Integration with <private>api_key=sk-abc123...</private> is scheduled for Tuesday.

Protection model:

  • Content inside <private>...</private> does not go into index.json (neither summary nor tags)
  • mb-search output redacts it as [REDACTED] (inline) or [REDACTED match in private block] (multi-line)
  • The entry gets a has_private: true flag for downstream filtering
  • An unclosed <private> without </private> makes the rest of the file private (fail-safe)
  • hooks/file-change-log.sh warns when committing a file containing <private> blocks (reminder to review git exposure)

Double confirmation for reveal:

bash
# Rejected without env:
mb-search --show-private <query>
# [error] --show-private requires MB_SHOW_PRIVATE=1

# Only with explicit opt-in:
MB_SHOW_PRIVATE=1 mb-search --show-private <query>

Important: <private> protects against leakage through index.json / mb-search, but it does not filter git diff. For full protection, consider .gitattributes filters or git hooks.


Auto-capture (since v2.1)

The SessionEnd hook automatically appends a placeholder entry to progress.md when a session ends without an explicit /mb done. Work is not lost even if manual actualization was skipped.

Modes (`MB_AUTO_CAPTURE` env):

  • auto (default) — hook writes an entry on session end
  • strict — hook skips but prints a warning to stderr (for flows where manual actualization is required)
  • off — full noop

How it works:

  • After successful /mb done, the command writes .memory-bank/.session-lock → the hook sees the fresh lock (<1h) and skips auto-capture (manual actualization already happened)
  • Without a lock, the hook adds a short note to progress.md. Full details can be reconstructed by /mb start in the next session (MB Manager can read the JSONL transcript)
  • Concurrency-safe through a short .auto-lock (30 seconds) — prevents duplicates on parallel invocations
  • Idempotent by session_id — same session + same day = one entry

Opt-out: export MB_AUTO_CAPTURE=off in ~/.zshrc or disable the hook via /mb upgrade once that flag is available.


Session memory — native session logging (session-memory subsystem)

A richer, native alternative to the placeholder auto-capture above. Logs every session to .memory-bank/session/*.md (markdown, git-tracked) and auto-curates notes. Scripts live in ~/.claude/hooks/ (and the repo's .memory-bank/bin/ when present); registered in settings.json.

  • Stop → `mb-session-turn.sh` — appends one ## Live log bullet per turn (last user request,

tools, touched files) without an LLM; persists the transcript path to frontmatter; deduped by turn uuid so duplicate (project + global) registration is safe. Guards: stop_hook_active, MB_CAPTURE_SUBPROCESS, MB_SESSION_CAPTURE=off, missing jq → exit 0.

  • SessionEnd → `mb-session-end.sh` — a Haiku claude -p writes ## Summary + updates

_recent.md; then a gated Sonnet judge (only if the session had Write/Edit or ≥4 turns) writes 0–2 durable notes/. Idempotent by session_id (summarized frontmatter flag). Anti-recursion: env -u CLAUDECODE MB_CAPTURE_SUBPROCESS=1 claude -p --strict-mcp-config --no-session-persistence --no-chrome.

  • SessionStart → `mb-session-start.sh` — injects # Recent Sessions from _recent.md;

drains stdin (exec < /dev/null) to avoid hanging on claude --resume (macOS). Read-only (runs even while capture is off).

  • Recall: /mb recall <query> → hybrid semantic + lexical search over session/ + notes/,

fused by RRF (Reciprocal Rank Fusion) when the semantic backend is available; fails open to lexical-only otherwise.

Off-switch: export MB_SESSION_CAPTURE=off. Suppress the legacy stub (above) with MB_AUTO_CAPTURE=off so progress.md is not double-written once this subsystem owns capture. Cost: a significant session spends 2 claude -p calls on SessionEnd (Haiku summary + Sonnet judge); trivial sessions spend only the summary. Portable lock: mkdir-based (no flock on macOS). Active only where an active Memory Bank resolves.


PreCompact handoff capsule (handoff-v2)

The PreCompact hook hooks/mb-pre-compact.sh runs just before context compaction. It invokes scripts/mb-handoff.sh --actualize <bank> pre_compact, which writes a fresh handoff capsule to .memory-bank/handoff/latest.md. The NEXT session's SessionStart hook (hooks/mb-session-start-context.sh) prepends that capsule when it is newer than the most recent progress.md entry, so the agent resumes from an up-to-date snapshot instead of stale state.

Never blocks compaction (design §9):

  • bounded to ~2s via a portable background-poll-and-kill loop (no timeout/flock, macOS-safe)
  • on timeout, actualize failure, or missing handoff script → one-line stderr WARN and exit 0
  • on no resolvable bank → silent exit 0
  • on success → one-line stderr marker [mb] handoff capsule actualized (pre_compact)

Opt-out: export MB_PRECOMPACT_HANDOFF=off.


Cross-session coordination — .memory-bank/COORDINATION.md

When two or more sessions work in the same working tree in parallel (two agent CLIs, or agent + human), they coordinate through a single append-only board file at the bank root — COORDINATION.md. Opt-in by nature: the first session that learns about a parallel session creates it; no board file → no protocol overhead.

  • Entries ## [FROM → TO] YYYY-MM-DD HH:MM — topic, never edited after append (same invariant as progress.md); typed prefixes: STATUS / QUESTION / ANSWER / FREEZE / HANDOVER / ACK / COMMIT / ESCALATION.
  • Checkpoints — every session reads the board: at session start (/mb start / /mb context surface it when present), before starting a stage/plan item, before ANY commit, before editing a shared-watchlist file; and appends a COMMIT entry (hash + scoped file list) after committing.
  • Shared-tree hard rules: never git add -A; commit only your own work with ordering for interleaved files agreed on the board; full suite green before commit; surprise foreign diffs escalate on the board instead of being reverted; affected plans carry a ⚠️ pointer to the board (compaction-proof).
  • Full protocol (entry conventions, race handling, trust rules, hookup prompt for a new session): references/coordination.md.

Running list of agreements — .memory-bank/agreements.md

The canonical registry of confirmed decisions currently in force, distinct from progress.md (narrative history) and ADRs (rationale for the hard-to-reverse subset). Every mutation goes through scripts/mb-agree.sh (add | supersede | defer | reject | question | resolve | list | sync) — never a direct model edit — and auto-syncs a managed block (<!-- mb-agreements:start/end -->) into project-root CLAUDE.md/AGENTS.md so a fresh session sees every active agreement without being reminded.

  • Lazy activation, opt-in by nature: the rules trigger ships with the skill for every project,

but zero files/blocks exist until the first /mb agree add — no added tokens in banks that never use the feature. Kill-switch: MB_AGREEMENTS=off (env or .mb-config).

  • Model conduct: only an explicitly confirmed user decision is written, announced visibly as

→ AGR-NNN записано: <statement>; unconfirmed hypotheses go to Open Questions instead.

  • `/mb verify` integration: when agreements.md exists, the Plan Verifier classifies every

active agreement as satisfied / violated / not-applicable; a violation fails the verdict.

  • Full protocol (what is/isn't an agreement, anti-examples, statuses, ADR routing): references/agreements.md. Command reference: commands/agree.md.

References

  • Rule profiles schema (dimensions, immutable baseline, precedence, validation): references/rules-profile.schema.md
  • Design principles (inviolable memory promise + configurable layers): references/design-principles.md
  • Metadata protocol + index.json + 8 key rules: references/metadata.md
  • Plan decomposition (Phase / Sprint / Stage), templates, drift checks: references/templates.md
  • Planning + Plan Verifier workflow: references/planning-and-verification.md
  • /mb work reference material (workflow modes, JSON schema, examples, scripts, parallel runs): references/work-reference.md
  • /mb work sprint contracts, progress trend, strategic pivoting: references/work-loop-v2.md
  • Structure of .memory-bank/: references/structure.md
  • Code graph cookbook (jq library, graph.json schema, intelligence layer, semantic-search routing): references/code-graph.md
  • Workflow (session lifecycle): references/workflow.md
  • Session memory (cross-chat capture, /mb recall, session-doctor): references/session-memory.md
  • Cross-session coordination board (COORDINATION.md protocol): references/coordination.md
  • Running list of agreements (agreements.md protocol, statuses, anti-examples): references/agreements.md
  • Command file template: references/command-template.md
  • Hooks (per-host wiring + lifecycle): references/hooks.md
  • Adapter manifest schema: references/adapter-manifest-schema.md
  • Tags vocabulary: references/tags-vocabulary.md
  • CLAUDE.md auto-generation template: references/claude-md-template.md
  • CHANGELOG: CHANGELOG.md
  • Migration v1→v2: docs/MIGRATION-v1-v2.md
  • Primary entrypoint:
  • /mb — if the host supports native commands
  • commands/mb.md / memory-bank CLI — if native command surface is unavailable