learnship 1.9.24 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/.claude-plugin/plugin.json +2 -2
  2. package/.cursor-plugin/plugin.json +2 -2
  3. package/README.md +82 -25
  4. package/SKILL.md +17 -0
  5. package/agents/learnship-challenger.md +96 -0
  6. package/agents/learnship-code-reviewer.md +109 -0
  7. package/agents/learnship-executor.md +15 -0
  8. package/agents/learnship-ideation-agent.md +83 -0
  9. package/agents/learnship-solution-writer.md +140 -0
  10. package/bin/install.js +4 -0
  11. package/commands/learnship/challenge.md +22 -0
  12. package/commands/learnship/compound.md +22 -0
  13. package/commands/learnship/guard.md +21 -0
  14. package/commands/learnship/ideate.md +23 -0
  15. package/commands/learnship/review.md +23 -0
  16. package/commands/learnship/ship.md +21 -0
  17. package/commands/learnship/sync-docs.md +21 -0
  18. package/cursor-rules/learnship.mdc +7 -0
  19. package/gemini-extension.json +2 -2
  20. package/learnship/agents/challenger.md +52 -0
  21. package/learnship/agents/code-reviewer.md +81 -0
  22. package/learnship/agents/executor.md +15 -0
  23. package/learnship/agents/ideation-agent.md +54 -0
  24. package/learnship/agents/plan-checker.md +95 -0
  25. package/learnship/agents/solution-writer.md +64 -0
  26. package/learnship/references/model-profiles.md +41 -33
  27. package/learnship/references/planning-config.md +49 -0
  28. package/learnship/references/solution-schema.md +159 -0
  29. package/learnship/templates/agents.md +6 -1
  30. package/learnship/workflows/challenge.md +189 -0
  31. package/learnship/workflows/complete-milestone.md +9 -0
  32. package/learnship/workflows/compound.md +305 -0
  33. package/learnship/workflows/debug.md +7 -0
  34. package/learnship/workflows/discuss-milestone.md +5 -0
  35. package/learnship/workflows/execute-phase.md +24 -0
  36. package/learnship/workflows/guard.md +164 -0
  37. package/learnship/workflows/help.md +14 -2
  38. package/learnship/workflows/ideate.md +182 -0
  39. package/learnship/workflows/knowledge-base.md +8 -0
  40. package/learnship/workflows/ls.md +7 -3
  41. package/learnship/workflows/milestone-retrospective.md +45 -0
  42. package/learnship/workflows/next.md +3 -2
  43. package/learnship/workflows/plan-phase.md +23 -0
  44. package/learnship/workflows/progress.md +9 -3
  45. package/learnship/workflows/review.md +226 -0
  46. package/learnship/workflows/set-profile.md +6 -6
  47. package/learnship/workflows/settings.md +8 -8
  48. package/learnship/workflows/ship.md +219 -0
  49. package/learnship/workflows/sync-docs.md +159 -0
  50. package/learnship/workflows/validate-phase.md +4 -4
  51. package/learnship/workflows/verify-work.md +3 -0
  52. package/package.json +1 -1
  53. package/references/model-profiles.md +41 -33
  54. package/templates/config.json +13 -1
@@ -0,0 +1,219 @@
1
+ ---
2
+ description: Ship pipeline — test, lint, commit, push, PR
3
+ ---
4
+
5
+ # Ship
6
+
7
+ End-to-end ship pipeline: detect test runner → run tests → lint → stage → conventional commit → push → create PR with auto-description. Closes the loop from verified code to production-ready PR.
8
+
9
+ **Usage:** `ship` — run the full ship pipeline
10
+ **Usage:** `ship --skip-tests` — skip test execution (use when tests were just run)
11
+
12
+ **Sequencing:** Run after `/review` (code quality) and before `/compound` (capture learnings).
13
+
14
+ ## Step 1: Pre-flight Check
15
+
16
+ ```bash
17
+ # Current branch
18
+ BRANCH=$(git rev-parse --abbrev-ref HEAD)
19
+ echo "Branch: $BRANCH"
20
+
21
+ # Check we're not on main/master
22
+ if [ "$BRANCH" = "main" ] || [ "$BRANCH" = "master" ]; then
23
+ echo "ERROR: Cannot ship from $BRANCH. Create a feature branch first."
24
+ exit 1
25
+ fi
26
+
27
+ # Check for uncommitted changes
28
+ git status --porcelain
29
+ ```
30
+
31
+ If uncommitted changes exist, ask: "You have uncommitted changes. Stage and commit them as part of the ship, or stash first?"
32
+
33
+ ## Step 2: Run Tests
34
+
35
+ **Skip if:** `--skip-tests` flag, or `ship.auto_test` is `false` in config.
36
+
37
+ Detect the test runner:
38
+
39
+ ```bash
40
+ # Check for common test runners
41
+ [ -f "package.json" ] && grep -q '"test"' package.json && echo "npm test"
42
+ [ -f "Makefile" ] && grep -q '^test:' Makefile && echo "make test"
43
+ [ -f "pytest.ini" ] || [ -f "setup.cfg" ] && echo "pytest"
44
+ [ -f "Cargo.toml" ] && echo "cargo test"
45
+ [ -f "go.mod" ] && echo "go test ./..."
46
+ ```
47
+
48
+ Run the detected test command:
49
+
50
+ ```bash
51
+ [detected test command]
52
+ ```
53
+
54
+ If tests fail:
55
+ ```
56
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
57
+ learnship ► TESTS FAILED — SHIP ABORTED
58
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
59
+
60
+ [test output]
61
+
62
+ Fix the failing tests, then run /ship again.
63
+ ▶ Or: /debug [test failure description]
64
+ ```
65
+
66
+ Stop. Do not proceed with a failing test suite.
67
+
68
+ ## Step 3: Lint (Optional)
69
+
70
+ Detect and run the linter if available:
71
+
72
+ ```bash
73
+ [ -f "package.json" ] && grep -q '"lint"' package.json && echo "npm run lint"
74
+ [ -f ".eslintrc" ] || [ -f ".eslintrc.json" ] || [ -f ".eslintrc.js" ] && echo "npx eslint ."
75
+ [ -f "pyproject.toml" ] && grep -q "ruff" pyproject.toml && echo "ruff check ."
76
+ [ -f ".rubocop.yml" ] && echo "rubocop"
77
+ ```
78
+
79
+ If linter found, run it. Report warnings but don't block on them. Block on errors.
80
+
81
+ ## Step 4: Stage Changes
82
+
83
+ ```bash
84
+ # Show what will be committed
85
+ git diff --stat
86
+
87
+ # Stage all tracked changes
88
+ git add -u
89
+
90
+ # Check for untracked files that should be included
91
+ UNTRACKED=$(git ls-files --others --exclude-standard)
92
+ if [ -n "$UNTRACKED" ]; then
93
+ echo "Untracked files found:"
94
+ echo "$UNTRACKED"
95
+ fi
96
+ ```
97
+
98
+ If untracked files exist, ask: "These files are new and untracked. Include them in the commit?"
99
+ - **Yes, include all** → `git add .`
100
+ - **Let me choose** → present list, user selects
101
+ - **No, skip them** → proceed with tracked only
102
+
103
+ ## Step 5: Conventional Commit
104
+
105
+ **If `ship.conventional_commits` is `true` in config (default: `true`):**
106
+
107
+ Analyze the staged changes to determine the commit type:
108
+
109
+ | Type | When |
110
+ |------|------|
111
+ | `feat` | New feature or capability |
112
+ | `fix` | Bug fix |
113
+ | `docs` | Documentation only |
114
+ | `style` | Formatting, no logic change |
115
+ | `refactor` | Code restructuring, no behavior change |
116
+ | `test` | Adding or updating tests |
117
+ | `chore` | Build, config, tooling |
118
+
119
+ Generate the commit message:
120
+ ```
121
+ [type]([scope]): [short description]
122
+
123
+ [optional body — what changed and why, max 3 lines]
124
+ ```
125
+
126
+ Present the proposed commit message. Ask: "Use this commit message, or edit?"
127
+
128
+ ```bash
129
+ git commit -m "[commit message]"
130
+ ```
131
+
132
+ ## Step 6: Push
133
+
134
+ ```bash
135
+ git push origin $BRANCH
136
+ ```
137
+
138
+ If this is the first push for the branch:
139
+ ```bash
140
+ git push -u origin $BRANCH
141
+ ```
142
+
143
+ ## Step 7: Create PR
144
+
145
+ **If `ship.pr_template` is `true` in config (default: `true`):**
146
+
147
+ Auto-generate the PR description from:
148
+ - Commit messages on the branch
149
+ - SUMMARY.md files from the current phase (if exists)
150
+ - Test results from Step 2
151
+
152
+ ```bash
153
+ # Get base branch
154
+ BASE_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||')
155
+ [ -z "$BASE_BRANCH" ] && BASE_BRANCH="main"
156
+
157
+ # Get commit log for PR body
158
+ COMMITS=$(git log --oneline origin/$BASE_BRANCH..HEAD)
159
+ ```
160
+
161
+ Create the PR using available tooling:
162
+
163
+ ```bash
164
+ # GitHub CLI
165
+ gh pr create --base "$BASE_BRANCH" --head "$BRANCH" --title "[type]([scope]): [description]" --body "[auto-generated description]"
166
+
167
+ # Or if gh not available, output the PR URL
168
+ echo "Create PR: https://github.com/[org]/[repo]/compare/$BASE_BRANCH...$BRANCH"
169
+ ```
170
+
171
+ ## Step 8: Confirm
172
+
173
+ ```
174
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
175
+ learnship ► SHIPPED ✓
176
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
177
+
178
+ Branch: [branch]
179
+ Tests: passed ✓
180
+ Lint: passed ✓ | skipped
181
+ Commit: [hash] [type]([scope]): [description]
182
+ PR: [URL]
183
+
184
+ 💡 Compound this work? Run `/compound` to capture any notable solutions
185
+ or patterns while context is fresh.
186
+
187
+ ▶ Next steps:
188
+ - Review the PR and request reviews
189
+ - /compound — capture learnings from this work
190
+ ```
191
+
192
+ ---
193
+
194
+ ## Config Options
195
+
196
+ - `"ship.auto_test": true` — run tests before shipping
197
+ - `"ship.conventional_commits": true` — use conventional commit format
198
+ - `"ship.pr_template": true` — auto-generate PR description
199
+
200
+ ---
201
+
202
+ ## Integration Points
203
+
204
+ - `verify-work` banner: "▶ Next: /ship" after UAT passes
205
+ - `complete-milestone`: "Did you /ship first?" if unshipped changes exist
206
+
207
+ ---
208
+
209
+ ## Learning Checkpoint
210
+
211
+ Read `learning_mode` from `.planning/config.json`.
212
+
213
+ **If `auto`:** After shipping, offer:
214
+
215
+ > 💡 **Learning moment:** Shipping is a natural reflection point:
216
+ >
217
+ > `@agentic-learning reflect` — What went well in this phase? What would you do differently? Reflection after shipping cements the lessons before context fades.
218
+
219
+ **If `manual`:** Add quietly: *"Tip: `@agentic-learning reflect` to consolidate lessons from this shipping cycle."*
@@ -0,0 +1,159 @@
1
+ ---
2
+ description: Detect stale documentation after code changes
3
+ ---
4
+
5
+ # Sync Docs
6
+
7
+ Scan documentation against recent code changes to detect stale sections, outdated references, and drift between docs and implementation. Auto-update simple cases, flag complex ones for manual review.
8
+
9
+ **Usage:** `sync-docs` — scan all docs for staleness
10
+ **Usage:** `sync-docs [path]` — scan docs for a specific module or directory
11
+
12
+ ## Step 1: Discover Documentation
13
+
14
+ Find all documentation files in the project:
15
+
16
+ ```bash
17
+ # README and top-level docs
18
+ find . -maxdepth 1 -name "*.md" -type f 2>/dev/null
19
+
20
+ # Docs directory
21
+ find docs/ -name "*.md" -type f 2>/dev/null
22
+
23
+ # API docs, guides, etc.
24
+ find . -path "*/docs/*" -name "*.md" -type f 2>/dev/null | head -30
25
+
26
+ # Planning docs
27
+ find .planning/ -name "*.md" -type f 2>/dev/null | grep -v "phases\|debug\|milestones" | head -20
28
+ ```
29
+
30
+ If a path argument was provided, narrow the scan to docs related to that module.
31
+
32
+ ## Step 2: Identify Recent Changes
33
+
34
+ ```bash
35
+ # Get files changed in last 30 commits
36
+ git log --oneline -30 --format="" --name-only | sort -u
37
+
38
+ # Get files changed since last tag/release
39
+ LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)
40
+ if [ -n "$LAST_TAG" ]; then
41
+ git diff --name-only "$LAST_TAG"..HEAD
42
+ fi
43
+ ```
44
+
45
+ Map changed source files to their documentation:
46
+ - `src/auth/` changes → check docs mentioning auth, authentication, login
47
+ - API route changes → check API documentation
48
+ - Config changes → check setup/installation docs
49
+ - Schema changes → check data model docs
50
+
51
+ ## Step 3: Scan for Staleness
52
+
53
+ For each documentation file, check:
54
+
55
+ 1. **Dead references** — does the doc reference files, functions, or APIs that no longer exist?
56
+ ```bash
57
+ # Extract code references from doc (backtick-wrapped paths, function names)
58
+ grep -oE '`[^`]+\.(ts|js|py|rb|go)`' [doc_file] 2>/dev/null
59
+ # Check if referenced files exist
60
+ ```
61
+
62
+ 2. **Outdated descriptions** — does the doc describe behavior that's changed?
63
+ - Compare doc descriptions against actual code behavior
64
+ - Check version numbers, dependency names, command syntax
65
+
66
+ 3. **Missing coverage** — are there new files/features with no documentation?
67
+ ```bash
68
+ # Find source files with no corresponding doc mention
69
+ for file in $(git log --oneline -30 --format="" --name-only | sort -u | grep -E '\.(ts|js|py|rb|go)$'); do
70
+ BASENAME=$(basename "$file" | sed 's/\.[^.]*$//')
71
+ grep -ril "$BASENAME" docs/ 2>/dev/null | wc -l | tr -d ' '
72
+ done
73
+ ```
74
+
75
+ ## Step 4: Report Findings
76
+
77
+ ```
78
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
79
+ learnship ► DOC SYNC REPORT
80
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
81
+
82
+ Scanned: [N] documentation files
83
+ Changes since: [last tag or last 30 commits]
84
+
85
+ ## Stale Sections
86
+
87
+ | Doc | Section | Issue | Severity |
88
+ |-----|---------|-------|----------|
89
+ | [file] | [heading] | [what's wrong] | high/medium/low |
90
+
91
+ ## Dead References
92
+
93
+ | Doc | Reference | Status |
94
+ |-----|-----------|--------|
95
+ | [file] | `[reference]` | removed / renamed to [new name] |
96
+
97
+ ## Missing Documentation
98
+
99
+ | New File/Feature | Suggested Doc |
100
+ |------------------|---------------|
101
+ | [file] | Add to [existing doc] or create new |
102
+
103
+ ## Auto-Fixable
104
+
105
+ [N] issues can be auto-fixed (renamed references, updated paths)
106
+ ```
107
+
108
+ ## Step 5: Auto-Fix Simple Cases
109
+
110
+ For issues that can be fixed automatically (renamed files, updated paths, version numbers):
111
+
112
+ ```bash
113
+ # Apply fixes
114
+ sed -i 's/old_reference/new_reference/g' [doc_file]
115
+
116
+ git add [fixed files]
117
+ git commit -m "docs: sync — fix [N] stale references"
118
+ ```
119
+
120
+ For complex issues (rewritten behavior, new feature descriptions), present to user:
121
+
122
+ ```
123
+ These [N] issues need manual review:
124
+ 1. [doc]: [section] — [what needs updating and why]
125
+ 2. [doc]: [section] — [what needs updating and why]
126
+ ```
127
+
128
+ ## Step 6: Confirm
129
+
130
+ ```
131
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
132
+ learnship ► DOC SYNC COMPLETE ✓
133
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
134
+
135
+ Auto-fixed: [N] issues
136
+ Manual review needed: [M] issues
137
+ Missing docs: [K] new features without documentation
138
+ ```
139
+
140
+ ---
141
+
142
+ ## Integration Points
143
+
144
+ - `complete-milestone`: optionally run `/sync-docs` before releasing
145
+ - `release`: suggest `/sync-docs` as pre-release checklist item
146
+
147
+ ---
148
+
149
+ ## Learning Checkpoint
150
+
151
+ Read `learning_mode` from `.planning/config.json`.
152
+
153
+ **If `auto`:** After sync, offer:
154
+
155
+ > 💡 **Learning moment:** Documentation drift is a signal about process:
156
+ >
157
+ > `@agentic-learning reflect` — Why did these docs get stale? Is there a pattern (e.g., docs always lag behind API changes)? Reflecting on the drift pattern prevents it next time.
158
+
159
+ **If `manual`:** Add quietly: *"Tip: `@agentic-learning reflect` to understand why docs drifted and prevent it."*
@@ -14,10 +14,10 @@ Retroactively audit and fill test coverage gaps for a completed phase. Useful af
14
14
 
15
15
  Read `.planning/config.json`:
16
16
  ```bash
17
- cat .planning/config.json | grep "nyquist_validation"
17
+ cat .planning/config.json | grep "validation"
18
18
  ```
19
19
 
20
- If `nyquist_validation: false`: stop — "Validation is disabled. Enable it in `/settings` to use this workflow."
20
+ If `validation: false`: stop — "Validation is disabled. Enable it in `/settings` to use this workflow."
21
21
 
22
22
  ## Step 2: Validate Phase
23
23
 
@@ -76,7 +76,7 @@ For each requirement ID assigned to this phase:
76
76
  - **PARTIAL** — test exists but incomplete or failing
77
77
  - **MISSING** — no test found
78
78
 
79
- If no gaps (all COVERED): proceed directly to step 8 with `nyquist_compliant: true`.
79
+ If no gaps (all COVERED): proceed directly to step 8 with `compliant: true`.
80
80
 
81
81
  ## Step 7: Present Gap Plan and Fill
82
82
 
@@ -118,7 +118,7 @@ Write `$PHASE_DIR/[padded_phase]-VALIDATION.md`:
118
118
 
119
119
  ```markdown
120
120
  ---
121
- nyquist_compliant: true | false
121
+ compliant: true | false
122
122
  wave_0_complete: true | false
123
123
  phase: [N]
124
124
  validated: [date]
@@ -185,6 +185,9 @@ Display summary:
185
185
  ```
186
186
  All tests passed. ✓
187
187
 
188
+ 💡 Compound learnings? Run `/compound` to capture any notable solutions
189
+ or patterns from this phase while context is fresh.
190
+
188
191
  ▶ Next: discuss-phase [X+1]
189
192
  ```
190
193
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "learnship",
3
- "version": "1.9.24",
3
+ "version": "2.0.1",
4
4
  "description": "Learn as you build. Build with intent. — A multi-platform agentic engineering system for Windsurf, Claude Code, Cursor, OpenCode, Gemini CLI, and Codex: spec-driven workflows, integrated learning, and production-grade design.",
5
5
  "keywords": [
6
6
  "agentic",
@@ -1,40 +1,49 @@
1
1
  # Model Profiles
2
2
 
3
- Model profiles control which AI model each learnship agent uses. This allows balancing quality vs token spend.
3
+ Model profiles control which AI model tier each learnship agent uses. Profiles are platform-agnostic they use three tiers (`large`, `medium`, `small`) that map to specific models depending on your platform.
4
4
 
5
5
  ## Profile Definitions
6
6
 
7
7
  | Agent | `quality` | `balanced` | `budget` |
8
8
  |-------|-----------|------------|----------|
9
- | planner | opus | opus | sonnet |
10
- | roadmapper | opus | sonnet | sonnet |
11
- | executor | opus | sonnet | sonnet |
12
- | phase-researcher | opus | sonnet | haiku |
13
- | project-researcher | opus | sonnet | haiku |
14
- | research-synthesizer | sonnet | sonnet | haiku |
15
- | debugger | opus | sonnet | sonnet |
16
- | codebase-mapper | sonnet | haiku | haiku |
17
- | verifier | sonnet | sonnet | haiku |
18
- | plan-checker | sonnet | sonnet | haiku |
19
- | integration-checker | sonnet | sonnet | haiku |
20
- | nyquist-auditor | sonnet | sonnet | haiku |
9
+ | planner | large | large | medium |
10
+ | executor | large | medium | medium |
11
+ | phase-researcher | large | medium | small |
12
+ | debugger | large | medium | medium |
13
+ | verifier | medium | medium | small |
14
+ | plan-checker | medium | medium | small |
15
+ | solution-writer | medium | medium | small |
16
+ | code-reviewer | large | medium | medium |
17
+ | challenger | large | medium | medium |
18
+ | ideation-agent | large | medium | small |
19
+
20
+ ## Platform Model Resolution
21
+
22
+ Each tier resolves to the best available model on your platform:
23
+
24
+ | Tier | Anthropic (Claude Code) | Google (Gemini CLI) | OpenAI (Codex CLI) | Windsurf / Cursor / OpenCode |
25
+ |------|------------------------|--------------------|--------------------|-----------------------------|
26
+ | `large` | Claude Opus 4.6 | Gemini 3.1 Pro | GPT-5.4 | Uses platform default (best available) |
27
+ | `medium` | Claude Sonnet 4.6 | Gemini 3.1 Flash | GPT-5.4-mini | Uses platform default |
28
+ | `small` | Claude Haiku 4.5 | Gemini 3.1 Flash-Lite | GPT-5.4-nano | Uses platform default |
29
+
30
+ > **Note:** Windsurf, Cursor, and OpenCode do not expose per-agent model selection. The profile tiers are still useful — they signal the *intended complexity* of each agent's task, and workflows will adapt their prompting strategy accordingly (e.g., more explicit instructions for `small`-tier agents).
21
31
 
22
32
  ## Profile Philosophy
23
33
 
24
- **quality** - Maximum reasoning power
25
- - Opus for all decision-making agents
26
- - Sonnet for read-only verification
34
+ **quality** Maximum reasoning power
35
+ - `large` for all decision-making agents (planner, researcher, reviewer, challenger)
36
+ - `medium` for verification (needs reasoning, not just pattern matching)
27
37
  - Use when: quota available, critical architecture work
28
38
 
29
- **balanced** (default) - Smart allocation
30
- - Opus only for planning (where architecture decisions happen)
31
- - Sonnet for execution and research (follows explicit instructions)
32
- - Sonnet for verification (needs reasoning, not just pattern matching)
39
+ **balanced** (default) Smart allocation
40
+ - `large` only for planning (where architecture decisions happen)
41
+ - `medium` for execution, research, and verification
33
42
  - Use when: normal development, good balance of quality and cost
34
43
 
35
- **budget** - Minimal Opus usage
36
- - Sonnet for anything that writes code
37
- - Haiku for research and verification
44
+ **budget** Minimal large-model usage
45
+ - `medium` for anything that writes code
46
+ - `small` for research and verification
38
47
  - Use when: conserving quota, high-volume work, less critical phases
39
48
 
40
49
  ## Resolution Logic
@@ -45,7 +54,8 @@ Resolution order:
45
54
  1. Read .planning/config.json
46
55
  2. Check model_overrides for agent-specific override
47
56
  3. If no override, look up agent in profile table
48
- 4. Apply the resolved profile when adopting the agent persona
57
+ 4. Map the tier (large/medium/small) to the platform's actual model
58
+ 5. Apply the resolved model when adopting the agent persona
49
59
  ```
50
60
 
51
61
  ## Per-Agent Overrides
@@ -56,13 +66,13 @@ Override specific agents without changing the entire profile:
56
66
  {
57
67
  "model_profile": "balanced",
58
68
  "model_overrides": {
59
- "executor": "opus",
60
- "planner": "haiku"
69
+ "executor": "large",
70
+ "planner": "small"
61
71
  }
62
72
  }
63
73
  ```
64
74
 
65
- Overrides take precedence over the profile. Valid values: `opus`, `sonnet`, `haiku`.
75
+ Overrides take precedence over the profile. Valid values: `large`, `medium`, `small`.
66
76
 
67
77
  ## Switching Profiles
68
78
 
@@ -77,14 +87,12 @@ Per-project default: Set in `.planning/config.json`:
77
87
 
78
88
  ## Design Rationale
79
89
 
80
- **Why Opus for the planner?**
90
+ **Why `large` for the planner?**
81
91
  Planning involves architecture decisions, goal decomposition, and task design. This is where model quality has the highest impact.
82
92
 
83
- **Why Sonnet for the executor?**
93
+ **Why `medium` for the executor?**
84
94
  Executors follow explicit PLAN.md instructions. The plan already contains the reasoning; execution is implementation.
85
95
 
86
- **Why Sonnet (not Haiku) for verifiers in balanced?**
87
- Verification requires goal-backward reasoning — checking if code *delivers* what the phase promised, not just pattern matching. Sonnet handles this well; Haiku may miss subtle gaps.
96
+ **Why `medium` (not `small`) for verifiers in balanced?**
97
+ Verification requires goal-backward reasoning — checking if code *delivers* what the phase promised, not just pattern matching. Medium-tier models handle this well; small-tier models may miss subtle gaps.
88
98
 
89
- **Why Haiku for the codebase-mapper?**
90
- Read-only exploration and pattern extraction. No reasoning required, just structured output from file contents.
@@ -3,6 +3,8 @@
3
3
  "granularity": "standard",
4
4
  "model_profile": "balanced",
5
5
  "learning_mode": "auto",
6
+ "parallelization": false,
7
+ "test_first": false,
6
8
  "planning": {
7
9
  "commit_docs": true,
8
10
  "commit_mode": "auto",
@@ -12,7 +14,17 @@
12
14
  "research": true,
13
15
  "plan_check": true,
14
16
  "verifier": true,
15
- "nyquist_validation": true
17
+ "validation": true,
18
+ "review": true,
19
+ "solutions_search": true
20
+ },
21
+ "review": {
22
+ "auto_after_verify": false
23
+ },
24
+ "ship": {
25
+ "auto_test": true,
26
+ "conventional_commits": true,
27
+ "pr_template": true
16
28
  },
17
29
  "git": {
18
30
  "branching_strategy": "none",