- name
- maestro-learn
- disable-model-invocation
- true
- description
- User-invoked learning toolkit โ guided reading, investigation, pattern extraction, or second opinions. Manual `/maestro-learn` only; NEVER auto-invoke for code exploration or analysis โ route those intents to the analyze step via /maestro-next
- argument-hint
- follow|investigate|decompose|consult [args...]
- allowed-tools
- ["Bash","Glob","Grep","Read","Write","followup_task","interrupt_agent","list_agents","request_user_input","send_message","spawn_agent","spawn_agents_on_csv","wait_agent"]
- session-mode
- none
- version
- 0.5.92
<purpose>
Learning toolkit for building understanding of code, decisions, and plans. Four subcommands:
- `follow` โ guided section-by-section reading with forcing questions โ understanding map
- `investigate` โ hypothesis-driven scientific investigation of a question โ evidence-backed report
- `decompose` โ parallel multi-dimension pattern extraction โ reusable pattern catalog
- `consult` โ alternative perspectives via review / challenge / interactive Q&A
All findings persist to `.workflow/knowhow/` and append `<learning-entry>` blocks to `.workflow/specs/learnings.md`.
</purpose>
<routing>
$ARGUMENTS โ parse first token as `<subcommand>`, remainder as that subcommand's args.
| Subcommand | Section |
|------------|---------|
| `follow` | [Subcommand: follow](#subcommand-follow) |
| `investigate` | [Subcommand: investigate](#subcommand-investigate) |
| `decompose` | [Subcommand: decompose](#subcommand-decompose) |
| `consult` | [Subcommand: consult](#subcommand-consult) |
**Routing errors:**
| Code | Condition | Recovery |
|------|-----------|----------|
| E_NO_SUBCOMMAND | No subcommand provided in $ARGUMENTS | Display valid subcommands (follow, investigate, decompose, consult), prompt user to select |
| E_INVALID_SUBCOMMAND | Unrecognized first token | Display valid subcommands with usage hints |
**Subcommand selection guide:**
- `follow` โ understand code logic flow (why/how). Input: code path. Method: sequential reading + forcing questions. Output: understanding map.
- `decompose` โ extract reusable pattern catalog (what patterns). Input: module/directory. Method: 4 parallel dimension agents. Output: pattern catalog.
- `follow --depth deep` covers every branch but focuses on comprehension; `decompose` focuses on pattern classification and reusability. They are complementary, not alternatives.
- `investigate` โ answer a specific question via hypothesis-driven search. Input: question. Method: scientific method (evidence โ hypothesis โ test). Output: evidence-backed report.
- Key distinction: `follow` input is a **code path** (top-down reading); `investigate` input is a **question** (hypothesis-driven search).
</routing>
---
## Subcommand: follow
**Usage**: `/maestro-learn follow <path|wiki-id|topic> [--depth shallow|deep] [--save-wiki] [-y]`
<purpose>
Guided reading: walk through content section-by-section using forcing questions to extract patterns, identify assumptions, and build an understanding map. Findings persist to `.workflow/specs/learnings.md` as `<learning-entry>` blocks.
</purpose>
<context>
Arguments โ target and optional flags.
**Target resolution** (auto-detected):
| Input | Resolution |
|-------|-----------|
| File path (contains `/` or `\`) | Read source file |
| Wiki ID (`<type>-<slug>`) | `maestro wiki get <id>` |
| Topic string | `maestro search "<topic>"` โ top result; fallback: Grep src/ |
**Flags**:
- `--depth shallow` (default): key patterns and structure only
- `--depth deep`: every function, every branch, every assumption
- `--save-wiki`: create wiki note entry with reading notes
- `-y`: Skip confirmation prompts for knowhow/spec writes
**Storage read**: target file + wiki forward/backlinks + `coding-conventions.md` + `.workflow/specs/learnings.md` (dedup)
**Storage write**: `.workflow/knowhow/KNW-follow-{slug}-{date}.md` + append `.workflow/specs/learnings.md`
**Output boundary**: ALL file writes MUST target `.workflow/knowhow/KNW-follow-{slug}-{date}.md` and `.workflow/specs/learnings.md` only. NEVER modify source code or files outside these paths.
</context>
<invariants>
1. **Read-only traversal** โ NEVER modify source code or wiki entries under analysis; all writes go to `.workflow/` only
2. **Forcing questions mandatory** โ each section MUST have all 4 forcing questions applied; NEVER skip questions even for trivial sections
3. **Anchor requirement** โ every extracted pattern MUST include a `file:line` anchor; unanchored patterns SHALL NOT be persisted to learnings.md
4. **Convention cross-ref** โ MUST check every finding against `coding-conventions.md` and mark status (documented/candidate); NEVER persist without status tag
5. **Append-only learnings** โ `.workflow/specs/learnings.md` MUST be appended, NEVER overwritten or truncated
6. **Confirmation gate** โ unless `-y` is set, MUST present findings and target files via request_user_input before any writes
7. **Depth contract** โ `--depth shallow` MUST NOT descend into function bodies; `--depth deep` MUST cover every branch and sub-expression
</invariants>
<execution>
### Phase Gates (MANDATORY, BLOCKING)
**GATE 1: Resolve โ Context Building** (S_RESOLVE โ S_CONTEXT)
- REQUIRED: Target resolved to a readable source (file path, wiki entry, or search result).
- BLOCKED if: target unresolvable after user prompt (E001/E002).
**GATE 2: Reading โ Extraction** (S_READ โ S_EXTRACT)
- REQUIRED: All sections traversed with 4 forcing questions applied per section.
- REQUIRED: Depth contract honored โ shallow stays at top-level, deep covers every branch.
- BLOCKED if: any section skipped without forcing questions.
**GATE 3: Extraction โ Persistence** (S_EXTRACT โ S_PERSIST)
- REQUIRED: All extracted patterns have file:line anchors.
- REQUIRED: Convention cross-ref completed against coding-conventions.md (or marked "unknown status" if W002).
- BLOCKED if: unanchored patterns remain in extraction results.
**GATE 4: Persistence โ Completion** (S_PERSIST โ END)
- REQUIRED: Unless `-y`, request_user_input showing files to write and learning-entries to append โ user must confirm.
- REQUIRED: KNW-follow-{slug}-{date}.md written with understanding map.
- REQUIRED: learnings.md appended (not overwritten) with new learning-entry blocks.
- BLOCKED if: user declines confirmation โ offer to adjust findings before retry.
</execution>
<state_machine>
<states>
S_RESOLVE โ ่งฃๆ target (file/wiki/topic) PERSIST: โ
S_CONTEXT โ ๆๅปบ 1-hop ไธไธๆ้ปๅ PERSIST: โ
S_ORDER โ ็กฎๅฎ้
่ฏป้กบๅบ PERSIST: โ
S_READ โ ้่ๅบ็จ forcing questions PERSIST: โ
S_EXTRACT โ ๆๅ patternsใcross-ref conventions PERSIST: โ
S_PERSIST โ ๅ understanding map + learning-entry ๅ PERSIST: knowhow files
</states>
<transitions>
S_RESOLVE:
โ S_CONTEXT WHEN: target resolved
โ S_RESOLVE WHEN: unresolvable DO: request_user_input with suggestions
S_CONTEXT:
โ S_ORDER DO: A_BUILD_CONTEXT_WEB
S_ORDER:
โ S_READ DO: A_BUILD_READING_ORDER
S_READ:
โ S_EXTRACT DO: A_GUIDED_READ (apply 4 forcing questions per section)
S_EXTRACT:
โ S_PERSIST DO: A_EXTRACT_PATTERNS
S_PERSIST:
โ END GATE: unless -y, request_user_input showing files to write and learning-entries to append โ proceed only on confirm
DO: write KNW-follow + append .workflow/specs/learnings.md [+ wiki note if --save-wiki]
</transitions>
<actions>
### A_BUILD_CONTEXT_WEB
| Target type | Context |
|-------------|---------|
| Wiki entry | `maestro wiki forward <id>` + `maestro wiki backlinks <id>` โ read top 3 related |
| Code file | Parse imports โ dependency files; grep exports โ reverse deps; read top 3 dependents (50 lines) |
| Directory | List files, identify entry points โ build reading order: entry โ core โ utils โ tests |
### A_BUILD_READING_ORDER
- Single file: split by function/class/export boundaries
- Wiki entry: split by markdown headings
- Directory: order by dependency (entry points first, leaf last)
- `--depth shallow`: top-level structure only; `--depth deep`: every body and branch
### A_GUIDED_READ
For each section, apply 4 forcing questions:
| # | Question | Extracts |
|---|----------|----------|
| 1 | "What pattern is being used here?" | Design patterns, idioms, conventions |
| 2 | "Why this approach instead of alternatives?" | Trade-offs, rejected options |
| 3 | "What assumption does this depend on?" | Implicit contracts, input shape, ordering |
| 4 | "What would break if this changed?" | Fragility, downstream effects |
### A_EXTRACT_PATTERNS
Extract: design patterns (with file:line anchors), naming conventions, error handling approach, data flow, assumptions.
Cross-ref against `coding-conventions.md`: documented โ "confirmed convention", undocumented โ "candidate for maestro-spec add".
Write understanding map: Key Concepts, Patterns (table: name/location/convention status), Assumptions, Open Questions, Connections.
</actions>
</state_machine>
<error_codes>
| Code | Condition | Recovery |
|------|-----------|----------|
| E001 | No target path/wiki-id/topic provided | Prompt user for target |
| E002 | Target path not found and wiki/grep search returned no results | Check path or broaden search terms |
| W001 | Wiki forward/backlinks unavailable | Proceed without context web; note reduced coverage |
| W002 | coding-conventions.md not found | All patterns marked "unknown status" |
| W003 | Target > 1000 lines | Auto-switch to shallow; use --depth deep to override |
</error_codes>
<success_criteria>
- [ ] 4 forcing questions applied per section
- [ ] Patterns extracted with file:line anchors and convention cross-ref
- [ ] Understanding map + learning-entry blocks written
</success_criteria>
<next_step_routing>
- Deep pattern dive โ `/maestro-learn decompose <path>`
- Add to specs โ `/maestro-spec add coding <description>`
- Second opinion โ `/maestro-learn consult <file>`
</next_step_routing>
---
## Subcommand: investigate
**Usage**: `/maestro-learn investigate <question> [--scope <path>] [--max-hypotheses N] [-y]`
<purpose>
Systematic investigation for understanding questions (not bug-fixing).
4-phase scientific method with scope lock, 3-strike escalation, and evidence persistence.
</purpose>
<context>
Arguments โ question text and optional flags.
**Flags**:
- `--scope <path>`: Restrict to files under this dir (default: entire project)
- `--max-hypotheses N`: Max hypotheses before escalation (default: 3)
- `-y`: Skip confirmation prompts for report/spec writes
**Storage write**:
- `.workflow/knowhow/KNW-investigate-{slug}/evidence.ndjson` โ structured evidence (one JSON line per item)
- `.workflow/knowhow/KNW-investigate-{slug}/understanding.md` โ evolving understanding
- `.workflow/knowhow/KNW-investigate-{slug}/report.md` โ final report
- `.workflow/specs/learnings.md` โ appended `<learning-entry>` blocks
**Storage read**: source files in scope + `maestro search` + `.workflow/specs/learnings.md` + `debug-notes.md` + `codebase/architecture.md`
**Output boundary**: ALL file writes MUST target `.workflow/knowhow/KNW-investigate-{slug}/` and `.workflow/specs/learnings.md` only. NEVER modify source code or files outside these paths.
</context>
<invariants>
1. **Read-only investigation** โ NEVER modify source code files; all writes go to `.workflow/` only
2. **Evidence append-only** โ `evidence.ndjson` MUST be appended line-by-line; NEVER overwrite or truncate existing evidence entries
3. **Scope lock** โ once `--scope` is resolved in S_FRAME, NEVER expand search scope without explicit user confirmation via S_ESCALATE
4. **Hypothesis cap** โ MUST NOT generate more than `--max-hypotheses` (default 3) before triggering escalation; NEVER silently exceed the cap
5. **Structured evidence format** โ every evidence entry MUST include `{ts, type, source, relevance, content, note}`; incomplete entries SHALL NOT be appended
6. **3-strike escalation** โ after all hypotheses fail, MUST escalate to user via request_user_input; NEVER silently conclude as INCONCLUSIVE without user interaction
7. **Confirmation gate** โ unless `-y` is set, MUST present report.md path and learning-entries via request_user_input before final writes
</invariants>
<state_machine>
<states>
S_FRAME โ ่งฃๆ้ฎ้ขใ็กฎๅฎ scopeใๆ็ดขๅ
้ช็ฅ่ฏ PERSIST: understanding.md (initial)
S_EVIDENCE โ ็ณป็ปๆถ้่ฏๆฎ PERSIST: evidence.ndjson
S_PATTERN โ ๆฏๅฏนๅทฒ็ฅๆจกๅผ PERSIST: understanding.md (patterns)
S_HYPOTHESIZE โ ็ๆๅ่ฎพๅ่กจ PERSIST: understanding.md (hypotheses)
S_CLI_EXPLORE โ CLI ่พ
ๅฉๆข็ดข๏ผๅฏ้๏ผ PERSIST: evidence.ndjson (append)
S_TEST โ ้ๅ่ฎพๆต่ฏ PERSIST: evidence.ndjson + understanding.md
S_ESCALATE โ 3-strike ๅ็บง PERSIST: โ
S_REPORT โ ็ปผๅๆฅๅ + persist PERSIST: report.md + .workflow/specs/learnings.md
</states>
<transitions>
S_FRAME:
โ S_EVIDENCE DO: A_FRAME_QUESTION
S_EVIDENCE:
โ S_PATTERN DO: A_COLLECT_EVIDENCE
S_PATTERN:
โ S_HYPOTHESIZE DO: match evidence against debug-notes.md + .workflow/specs/learnings.md patterns
S_HYPOTHESIZE:
โ S_CLI_EXPLORE WHEN: CLI tools enabled (at least one tool in cli-tools.json enabled) AND hypotheses non-trivial (require cross-file tracing or data-flow analysis) DO: A_FORM_HYPOTHESES
โ S_TEST WHEN: no CLI tools OR trivial hypotheses (answerable by local Grep/Read) DO: A_FORM_HYPOTHESES
S_CLI_EXPLORE:
โ S_TEST DO: A_CLI_SUPPLEMENT (maestro delegate --to <first-enabled-tool> --mode analysis, run_in_background, STOP)
S_TEST:
โ S_REPORT WHEN: hypothesis confirmed DO: A_TEST_HYPOTHESIS
โ S_REPORT WHEN: all hypotheses tested (some confirmed) DO: A_TEST_HYPOTHESIS
โ S_ESCALATE WHEN: max_hypotheses all failed DO: A_TEST_HYPOTHESIS
S_ESCALATE:
โ S_HYPOTHESIZE WHEN: user broadens scope or provides new hypothesis DO: request_user_input
โ S_REPORT WHEN: user selects "Escalate" or still stuck DO: mark INCONCLUSIVE
S_REPORT:
โ END GATE: unless -y, request_user_input showing report.md path and learning-entries to append โ proceed only on confirm
DO: A_SYNTHESIZE_REPORT
</transitions>
<actions>
### A_FRAME_QUESTION
1. Parse question, generate slug, create KNW-investigate-{slug}/
2. Search prior knowledge: `maestro search "<question>"` + search .workflow/specs/learnings.md + read debug-notes.md
3. Write initial understanding.md (question, prior knowledge summary, scope, timestamp)
### A_COLLECT_EVIDENCE
Parallel evidence gathering:
1. Code search: Grep keywords from question
2. File inspection: Read most relevant files
3. Import tracing: follow dependency chain
4. Git history: `git log --oneline -10 -- <relevant-files>`
Each item โ append evidence.ndjson: `{ts, type (code|git|search|doc), source (file:line), relevance (high|medium|low), content, note}`
### A_FORM_HYPOTHESES
Generate ranked hypotheses: each is specific, testable claim about "how/why".
Rank by plausibility (evidence strength). Write to understanding.md:
View on GitHub