Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
cb04031
feat(feature-kb): add per-feature knowledge base foundation layer
Apr 23, 2026
1433968
feat(feature-kb): wire FEATURE_KNOWLEDGE through all orchestration sk…
Apr 23, 2026
5b61071
fix: address self-review issues
Apr 23, 2026
b70a1a6
fix: add FEATURE_KNOWLEDGE delegation note to pipeline:orch
Apr 23, 2026
b2f9cc7
feat(feature-kb): add KB Builder agent to ambient and plan plugins
Apr 23, 2026
a15d49f
fix(feature-kb): resolve runtime review issues (H5-H9, M2-M3, S2-S4)
Apr 24, 2026
e2d8a09
fix(kb): harden CLI permissions and validation (H1, H8, S6)
Apr 24, 2026
e14f99d
fix(skills): align feature-kb skill consistency (M4-M6, S1)
Apr 24, 2026
e603e6b
fix(hooks): harden background scripts with --allowedTools (H1)
Apr 24, 2026
dbc0805
fix(tests): update tests for markStale→findOverlapping rename and plu…
Apr 24, 2026
c49fb9e
refactor(orch): renumber all phases to sequential integers (M7)
Apr 24, 2026
092319a
fix(pipeline:orch): update phase references to match renumbered orch …
Apr 24, 2026
6cd2741
fix(commands): add FEATURE_KNOWLEDGE to all Coder templates, update p…
Apr 24, 2026
8c9c73a
docs: update CLAUDE.md with kb.lock gitignore note, debug:orch patter…
Apr 24, 2026
365e0d6
test(feature-kb): add lock failure, staleness, directory boundary, an…
Apr 24, 2026
60b9196
fix: address self-review issues
Apr 24, 2026
3107d8f
docs: fix stale phase reference in file-organization.md
Apr 24, 2026
d918bb7
docs(skills): fix stale phase numbers in plan:orch, pipeline:orch, re…
Apr 24, 2026
031ba17
refactor(feature-kb): extract checkEntryFiles helper and fix removeEn…
Apr 24, 2026
33048f3
refactor: rename kb-builder agent to knowledge
Apr 24, 2026
3bf20eb
test(feature-kb): batch-D test improvements
Apr 24, 2026
486a698
fix: final cleanup — missed rename in CLAUDE.md, simplifier fixes
Apr 24, 2026
67f9ff9
feat(agents): add KNOWLEDGE_CONTEXT to Coder, FEATURE_KNOWLEDGE to Ev…
Apr 26, 2026
01ce3a8
feat(explore:orch): add full knowledge loading with orchestrator-loca…
Apr 26, 2026
bc79274
feat(implement): add KNOWLEDGE_CONTEXT loading and pass to Coder, Scr…
Apr 26, 2026
c76bbcd
fix(kb-cli): remove hardcoded referencedFiles/category from create pr…
Apr 26, 2026
8d41b60
feat(kb): add toggle mechanism — manifest field, init flow, enable/di…
Apr 26, 2026
ac0b0b6
feat(kb): add automated staleness refresh via SessionEnd hook
Apr 26, 2026
dbf2f36
fix(hooks): heal missing .memory/knowledge dir in session-start-memory
Apr 26, 2026
fd7e6bb
docs: update CLAUDE.md with KB toggleability and auto-refresh
Apr 26, 2026
ea7c4d1
test(kb): add stale-slugs and refresh-context CLI tests
Apr 26, 2026
e422522
refactor(kb): simplify hook functions and extract shared variables
Apr 26, 2026
998f2b2
fix: address self-review issues
Apr 26, 2026
dcee61b
fix(kb): harden background and CLI KB refresh
Apr 27, 2026
b4fcd6e
test(kb): replace try/catch+boolean with toThrow, remove duplicates
Apr 27, 2026
2cc137a
test(hooks): add session-end-kb-refresh behavioral tests
Apr 27, 2026
cfd6dd4
docs: add KNOWLEDGE_CONTEXT to plan:orch GUIDED, update file-organiza…
Apr 27, 2026
8358e70
fix(hooks): add source guards to background hooks
Apr 27, 2026
f769333
fix(kb): remove Bash from knowledge agent, update sidecar docs
Apr 27, 2026
a2a59bd
fix(kb): add read-sidecar to json-helper, fix shell injection
Apr 27, 2026
0fb3c8e
refactor(kb): remove category field from KB system
Apr 27, 2026
dfd93a8
refactor(kb): extract readSidecar helper, fix types, reuse staleness,…
Apr 27, 2026
a2e19de
test(kb): add sidecar and empty-index tests
Apr 27, 2026
287a532
fix: address self-review issues
Apr 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ Commands with Teams Variant ship as `{name}.md` (parallel subagents) and `{name}

**Claude Code Flags**: Typed registry (`src/cli/utils/flags.ts`) for managing Claude Code feature flags (env vars and top-level settings). Pure functions `applyFlags`/`stripFlags`/`getDefaultFlags` follow the `applyTeamsConfig`/`stripTeamsConfig` pattern. Initial flags: `tool-search`, `lsp`, `clear-context-on-plan` (default ON), `brief`, `disable-1m-context` (default OFF). Manageable via `devflow flags --enable/--disable/--status/--list`. Stored in manifest `features.flags: string[]`.

**Feature Knowledge Bases**: Per-feature `.features/` directory containing KNOWLEDGE.md files that capture area-specific patterns, conventions, architecture, and gotchas. KBs are created as side-effects of planning (plan:orch Phase 12), loaded automatically across all workflows via `FEATURE_KNOWLEDGE` variable (companion to `KNOWLEDGE_CONTEXT`), and use staleness detection via git log against `referencedFiles`. Index at `.features/index.json` (object keyed by slug). Managed via `devflow kb list|create|check|refresh|remove`. Knowledge agent (sonnet) structures exploration outputs into KNOWLEDGE.md. `apply-feature-kb` skill provides consumption algorithm for agents. `.features/.kb.lock` is gitignored (transient lock directory for concurrent index writes, added automatically by `devflow init`). `devflow kb list` — List all feature KBs with staleness status. `devflow kb create <slug>` — Create a new KB via claude -p exploration. `devflow kb check` — Check all KBs for staleness. `devflow kb refresh [slug]` — Refresh stale KB(s). `devflow kb remove <slug>` — Remove a KB and its index entry. Note: debug:orch keeps FEATURE_KNOWLEDGE orchestrator-local (investigation workers examine code without pre-loaded context). Toggleable via `devflow kb --enable/--disable/--status` or `devflow init --kb/--no-kb`. SessionEnd hook auto-refreshes stale KBs (throttled to once per 2 hours, max 3 per run). `.features/.disabled` sentinel gates Phase 12 generation and refresh hook.

**Two-Mode Init**: `devflow init` offers Recommended (sensible defaults, quick setup) or Advanced (full interactive flow) after plugin selection. `--recommended` / `--advanced` CLI flags for non-interactive use. Recommended applies: ambient ON, memory ON, learn ON, HUD ON, teams OFF, default-ON flags, .claudeignore ON, auto-install safe-delete if trash CLI detected, user-mode security deny list.

**Migrations**: Run-once migrations execute automatically on `devflow init`, tracked at `~/.devflow/migrations.json` (scope-independent; single file regardless of user-scope vs local-scope installs). Registry: append an entry to `MIGRATIONS` in `src/cli/utils/migrations.ts`. Scopes: `global` (runs once per machine, no project context) vs `per-project` (sweeps all discovered Claude-enabled projects in parallel). Failures are non-fatal — migrations retry on next init. Currently registered per-project migrations include `purge-legacy-knowledge-v2` (removes 4 hardcoded pre-v2 ADR/PF IDs and orphan `PROJECT-PATTERNS.md`) and `purge-legacy-knowledge-v3` (v3: sweeps all remaining pre-v2 seeded entries using the `- **Source**: self-learning:` format discriminator — any ADR/PF section lacking this marker is removed; entries the user edited to include the marker survive). **D37 edge case**: a project cloned *after* migrations have run won't be swept (the marker is global, not per-project). Recovery: `rm ~/.devflow/migrations.json` forces a re-sweep on next `devflow init`.
Expand All @@ -54,15 +56,16 @@ Commands with Teams Variant ship as `{name}.md` (parallel subagents) and `{name}

```
devflow/
├── shared/skills/ # 41 skills (single source of truth)
├── shared/agents/ # 12 shared agents (single source of truth)
├── shared/skills/ # 44 skills (single source of truth)
├── shared/agents/ # 13 shared agents (single source of truth)
├── plugins/devflow-*/ # 17 plugins (8 core + 9 optional language/ecosystem)
├── docs/reference/ # Detailed reference documentation
├── scripts/ # Helper scripts (statusline, docs-helpers)
│ └── hooks/ # Working Memory + ambient + learning hooks (prompt-capture-memory, stop-update-memory, background-memory-update, session-start-memory, session-start-classification, pre-compact-memory, preamble, session-end-learning, stop-update-learning [deprecated], background-learning, get-mtime)
├── src/cli/ # TypeScript CLI (init, list, uninstall, ambient, learn, flags)
│ └── hooks/ # Working Memory + ambient + learning hooks (prompt-capture-memory, stop-update-memory, background-memory-update, session-start-memory, session-start-classification, pre-compact-memory, preamble, session-end-learning, stop-update-learning [deprecated], background-learning, get-mtime, session-end-kb-refresh, background-kb-refresh)
├── src/cli/ # TypeScript CLI (init, list, uninstall, ambient, learn, flags, kb)
├── .claude-plugin/ # Marketplace registry
├── .docs/ # Project docs (reviews, design) — per-project
├── .features/ # Per-feature knowledge bases (committed to git)
└── .memory/ # Working memory files — per-project
```

Expand Down Expand Up @@ -150,7 +153,7 @@ Working memory files live in a dedicated `.memory/` directory:
- `/self-review` — Simplifier then Scrutinizer (sequential); consumes knowledge via index + on-demand Read via `devflow:apply-knowledge`
- `/audit-claude` — CLAUDE.md audit (optional plugin)

**Shared agents** (12): git, synthesizer, skimmer, simplifier, coder, reviewer, resolver, evaluator, tester, scrutinizer, validator, designer
**Shared agents** (13): git, synthesizer, skimmer, simplifier, coder, reviewer, resolver, evaluator, tester, scrutinizer, validator, designer, knowledge

**Plugin-specific agents** (1): claude-md-auditor

Expand Down
29 changes: 20 additions & 9 deletions docs/reference/file-organization.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ devflow/
├── .claude-plugin/ # Marketplace registry (repo root)
│ └── marketplace.json
├── shared/
│ ├── skills/ # SINGLE SOURCE OF TRUTH (41 skills)
│ ├── skills/ # SINGLE SOURCE OF TRUTH (44 skills)
│ │ ├── git/
│ │ │ ├── SKILL.md
│ │ │ └── references/
│ │ ├── software-design/
│ │ └── ...
│ └── agents/ # SINGLE SOURCE OF TRUTH (12 shared agents)
│ └── agents/ # SINGLE SOURCE OF TRUTH (13 shared agents)
│ ├── git.md
│ ├── synthesizer.md
│ ├── coder.md
Expand All @@ -42,7 +42,7 @@ devflow/
│ ├── build-hud.js # Copies dist/hud/ → scripts/hud/
│ ├── hud.sh # Thin wrapper: exec node hud/index.js
│ ├── hud/ # GENERATED — compiled HUD module (gitignored)
│ └── hooks/ # Working Memory + ambient + learning hooks
│ └── hooks/ # Working Memory + ambient + learning + KB hooks
│ ├── stop-update-memory # Stop hook: writes WORKING-MEMORY.md
│ ├── session-start-memory # SessionStart hook: injects memory + git state
│ ├── pre-compact-memory # PreCompact hook: saves git state backup
Expand All @@ -52,9 +52,16 @@ devflow/
│ ├── session-end-learning # SessionEnd hook: batched learning trigger
│ ├── stop-update-learning # Stop hook: deprecated stub (upgrade via devflow learn)
│ ├── background-learning # Background: pattern detection via Sonnet
│ ├── session-end-kb-refresh # SessionEnd hook: stale KB detection + background spawn
│ ├── background-kb-refresh # Background: KB refresher via Sonnet
│ ├── get-mtime # Shared helper: portable mtime (BSD/GNU stat)
│ ├── json-helper.cjs # Node.js jq-equivalent operations
│ └── json-parse # Shell wrapper: jq with node fallback
│ ├── json-parse # Shell wrapper: jq with node fallback
│ └── lib/ # Node.js helper modules
│ ├── feature-kb.cjs # Feature KB index operations (CRUD, staleness)
│ ├── knowledge-context.cjs # Knowledge context index builder
│ ├── staleness.cjs # Code reference staleness checker
│ └── transcript-filter.cjs # Transcript channel extractor
└── src/
└── cli/
├── commands/
Expand Down Expand Up @@ -138,7 +145,7 @@ Skills and agents are **not duplicated** in git. Instead:

### Shared vs Plugin-Specific Agents

- **Shared** (12): `git`, `synthesizer`, `skimmer`, `simplifier`, `coder`, `reviewer`, `resolver`, `evaluator`, `tester`, `scrutinizer`, `validator`, `designer`
- **Shared** (13): `git`, `synthesizer`, `skimmer`, `simplifier`, `coder`, `reviewer`, `resolver`, `evaluator`, `tester`, `scrutinizer`, `validator`, `designer`, `knowledge`
- **Plugin-specific** (1): `claude-md-auditor` — committed directly in its plugin

## Settings Override
Expand All @@ -147,7 +154,7 @@ Skills and agents are **not duplicated** in git. Instead:

Included settings:
- `statusLine` - Configurable HUD with presets (replaces legacy statusline.sh)
- `hooks` - Working Memory hooks (UserPromptSubmit, Stop, SessionStart, PreCompact) + Learning Stop hook
- `hooks` - Working Memory hooks (UserPromptSubmit, Stop, SessionStart, PreCompact) + Learning SessionEnd hook + KB SessionEnd hook
- `env.ENABLE_TOOL_SEARCH` - Deferred MCP tool loading (~85% token savings)
- `env.ENABLE_LSP_TOOL` - Language Server Protocol support
- `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` - Agent Teams for peer-to-peer collaboration
Expand All @@ -158,7 +165,9 @@ Included settings:

Four hooks in `scripts/hooks/` provide automatic session continuity. Toggleable via `devflow memory --enable/--disable/--status` or `devflow init --memory/--no-memory`.

A fifth hook (`session-end-learning`) provides self-learning. Toggleable via `devflow learn --enable/--disable/--status` or `devflow init --learn/--no-learn`:
A fifth hook (`session-end-kb-refresh`) provides feature KB maintenance. Toggleable via `devflow kb --enable/--disable/--status` or `devflow init --kb/--no-kb`.

A sixth hook (`session-end-learning`) provides self-learning. Toggleable via `devflow learn --enable/--disable/--status` or `devflow init --learn/--no-learn`:

| Hook | Event | File | Purpose |
|------|-------|------|---------|
Expand All @@ -167,6 +176,8 @@ A fifth hook (`session-end-learning`) provides self-learning. Toggleable via `de
| `background-memory-update` | (background) | `.memory/WORKING-MEMORY.md` | Queue-based updater spawned by stop-update-memory. Reads queued turns + git state, writes WORKING-MEMORY.md via `claude -p --model haiku`. |
| `session-start-memory` | SessionStart | reads WORKING-MEMORY.md | Injects previous memory + git state as `additionalContext`. Warns if >1h stale. Injects pre-compact snapshot when compaction occurred mid-session. |
| `pre-compact-memory` | PreCompact | `.memory/backup.json` | Saves git state + WORKING-MEMORY.md snapshot. Bootstraps minimal WORKING-MEMORY.md if none exists. |
| `session-end-kb-refresh` | SessionEnd | `.features/index.json` | Checks for stale feature KBs. Throttled (<2h). Spawns background-kb-refresh. |
| `background-kb-refresh` | (background) | `.features/{slug}/KNOWLEDGE.md` | KB refresher. Up to 3 stale KBs via `claude -p --model sonnet`. |

**Flow**: User sends prompt → UserPromptSubmit hook (prompt-capture-memory) appends user turn to `.memory/.pending-turns.jsonl`. Session ends → Stop hook appends assistant turn to queue, checks throttle (skips if <2min fresh), spawns background updater → background updater reads queued turns + git state → fresh `claude -p --model haiku` writes WORKING-MEMORY.md. On `/clear` or new session → SessionStart injects memory as `additionalContext` (system context, not user-visible) with staleness warning if >1h old.

Expand All @@ -180,8 +191,8 @@ Knowledge files in `.memory/knowledge/` capture decisions and pitfalls that agen

| File | Format | Source | Purpose |
|------|--------|--------|---------|
| `decisions.md` | ADR-NNN (sequential) | `/implement` Phase 11.5 | Architectural decisions — why choices were made |
| `pitfalls.md` | PF-NNN (sequential) | `/code-review`, `/debug`, `/resolve` | Known gotchas, fragile areas, past bugs |
| `decisions.md` | ADR-NNN (sequential) | `background-learning` | Architectural decisions — why choices were made |
| `pitfalls.md` | PF-NNN (sequential) | `background-learning` | Known gotchas, fragile areas, past bugs |

Each file has a `<!-- TL;DR: ... -->` comment on line 1. SessionStart injects TL;DR headers only (~30-50 tokens). Agents read full files when relevant to their work. Cap: 50 entries per file.

Expand Down
7 changes: 5 additions & 2 deletions plugins/devflow-ambient/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@
"git",
"synthesizer",
"resolver",
"designer"
"designer",
"knowledge"
],
"skills": [
"router",
Expand All @@ -53,6 +54,8 @@
"qa",
"worktree-support",
"gap-analysis",
"design-review"
"design-review",
"feature-kb",
"apply-feature-kb"
]
}
58 changes: 58 additions & 0 deletions plugins/devflow-ambient/agents/knowledge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
name: Knowledge
description: Structures codebase exploration into a feature knowledge base
model: sonnet
skills:
- devflow:feature-kb
- devflow:apply-feature-kb
- devflow:apply-knowledge
- devflow:worktree-support
tools:
- Read
- Grep
- Glob
- Write
---

# Knowledge Agent

## Input Context

- **FEATURE_SLUG** (required): Kebab-case identifier for the feature area (e.g., `cli-commands`)
- **FEATURE_NAME** (required): Human-readable name (e.g., "CLI Command System")
- **EXPLORATION_OUTPUTS** (required): Combined findings from Skimmer + Explore agents
- **DIRECTORIES** (required): Directory prefixes defining the feature area scope
- **KNOWLEDGE_CONTEXT** (optional): Existing ADR/PF index for cross-referencing
- **EXISTING_KB** (optional): Current KNOWLEDGE.md content when refreshing a stale KB
- **CHANGED_FILES** (optional): Files that changed since last KB update (for refresh)
- **WORKTREE_PATH** (optional): Worktree root for path resolution

## Responsibilities

1. **Resolve worktree path**: Use `devflow:worktree-support` to determine the working directory
2. **Orient on feature area**: Read EXPLORATION_OUTPUTS to understand the feature's architecture, patterns, and boundaries
3. **Follow the feature-kb skill**: Execute the 4-phase process (Scan → Extract → Distill → Forge) from `devflow:feature-kb`
4. **Cross-reference knowledge**: If KNOWLEDGE_CONTEXT is provided, reference relevant ADR/PF entries in the KB's "Related" section
5. **Handle refresh**: If EXISTING_KB is provided, update stale sections based on CHANGED_FILES while preserving any manually added content (user edits). Don't regenerate from scratch.
6. **Write KNOWLEDGE.md**: Write to `.features/{FEATURE_SLUG}/KNOWLEDGE.md` (create directory if needed)
7. **Write sidecar**: Write sidecar JSON file (`.create-result.json` or `.refresh-result.json`) with `referencedFiles` and `description` so the host process can update the index
8. **Report**: Output what was created/updated

## Output

```
KB_STATUS: created | refreshed
KB_PATH: .features/{slug}/KNOWLEDGE.md
KB_SLUG: {slug}
KB_NAME: {name}
SECTIONS: [list of sections written]
REFERENCED_FILES: [files selected for staleness tracking]
CROSS_REFERENCES: [ADR/PF entries referenced, if any]
```

## Boundaries

- **Only writes to `.features/` directory** — never modify source code
- **Never delete existing KBs** — only create new or refresh existing
- **500-line cap** — if KB exceeds 500 lines, split into focused sub-KBs (each gets own index entry)
- **No push, no external API calls** — local filesystem operations only
3 changes: 2 additions & 1 deletion plugins/devflow-code-review/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
"review-methodology",
"security",
"testing",
"worktree-support"
"worktree-support",
"apply-feature-kb"
]
}
26 changes: 18 additions & 8 deletions plugins/devflow-code-review/commands/code-review-teams.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ Per worktree, detect file types in diff using `DIFF_RANGE` to determine conditio

### Phase 1b: Load Knowledge Index

**Produces:** KNOWLEDGE_CONTEXT
**Produces:** KNOWLEDGE_CONTEXT, FEATURE_KNOWLEDGE

Load the knowledge index for the current worktree before spawning the review team:

Expand All @@ -105,6 +105,14 @@ KNOWLEDGE_CONTEXT=$(node scripts/hooks/lib/knowledge-context.cjs index "{worktre

This produces a compact index of active ADR/PF entries. Pass `KNOWLEDGE_CONTEXT` to each reviewer teammate prompt. Reviewers use `devflow:apply-knowledge` to Read full entry bodies on demand.

**Load Feature Knowledge:**
1. Read `.features/index.json` if it exists
2. Based on changed files from Phase 1 analysis, identify relevant KBs (match file paths against KB `directories` and `referencedFiles`)
3. For each match: check staleness via `node scripts/hooks/lib/feature-kb.cjs stale "{worktree}" {slug}`, read `.features/{slug}/KNOWLEDGE.md`
4. Set `FEATURE_KNOWLEDGE` (or `(none)` if no KBs exist or none are relevant)

Pass `FEATURE_KNOWLEDGE` to each reviewer teammate alongside `KNOWLEDGE_CONTEXT`.

### Phase 2: Spawn Review Team

**Produces:** REVIEWER_OUTPUTS
Expand Down Expand Up @@ -143,16 +151,18 @@ Spawn review teammates. For each teammate, compose a self-contained prompt using
You are reviewing PR #{pr_number} on branch {branch} (base: {base_branch}).
WORKTREE_PATH: {worktree_path} (omit if cwd)
KNOWLEDGE_CONTEXT: {knowledge_context}
FEATURE_KNOWLEDGE: {feature_knowledge}
1. Read your skill(s): `Read {SKILL_PATHS}`
2. Read review methodology: `Read ~/.claude/skills/devflow:review-methodology/SKILL.md`
3. Follow devflow:apply-knowledge to scan KNOWLEDGE_CONTEXT index and Read full ADR/PF bodies on demand. Skip if (none).
4. Get the diff: `git -C {WORKTREE_PATH} diff {DIFF_RANGE}`
5. Apply the 6-step review process from devflow:review-methodology
6. Focus: {FOCUS}
7. Classify each finding: 🔴 BLOCKING / ⚠️ SHOULD-FIX / ℹ️ PRE-EXISTING
8. Include file:line references for every finding
9. Write your report: `Write to {worktree_path}/.docs/reviews/{branch_slug}/{timestamp}/{REPORT_NAME}.md`
10. Report completion: SendMessage(type: "message", recipient: "team-lead", summary: "{SUMMARY}")
4. Follow devflow:apply-feature-kb for FEATURE_KNOWLEDGE — feature-specific patterns and anti-patterns inform findings. Skip if (none).
5. Get the diff: `git -C {WORKTREE_PATH} diff {DIFF_RANGE}`
6. Apply the 6-step review process from devflow:review-methodology
7. Focus: {FOCUS}
8. Classify each finding: 🔴 BLOCKING / ⚠️ SHOULD-FIX / ℹ️ PRE-EXISTING
9. Include file:line references for every finding
10. Write your report: `Write to {worktree_path}/.docs/reviews/{branch_slug}/{timestamp}/{REPORT_NAME}.md`
11. Report completion: SendMessage(type: "message", recipient: "team-lead", summary: "{SUMMARY}")

**Core reviewers (always spawn):**

Expand Down
Loading
Loading