@kodevibe/harness 0.8.3 → 0.9.0
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.
- package/README.ko.md +35 -34
- package/README.md +37 -36
- package/harness/agent-memory/architect.md +2 -2
- package/harness/agent-memory/{sprint-manager.md → lead.md} +4 -4
- package/harness/agent-memory/{planner.md → pm.md} +3 -3
- package/harness/agent-memory/reviewer.md +5 -5
- package/harness/agents/architect.md +9 -9
- package/harness/agents/{sprint-manager.md → lead.md} +24 -24
- package/harness/agents/{planner.md → pm.md} +25 -25
- package/harness/agents/reviewer.md +19 -19
- package/harness/core-rules.md +40 -40
- package/harness/dependency-map.md +2 -2
- package/harness/failure-patterns.md +4 -4
- package/harness/features.md +3 -3
- package/harness/project-brief.md +11 -11
- package/harness/project-state.md +5 -5
- package/harness/skills/{feature-breakdown.md → breakdown.md} +9 -8
- package/harness/skills/{impact-analysis.md → check-impact.md} +5 -5
- package/harness/skills/{investigate.md → debug.md} +8 -8
- package/harness/skills/pivot.md +4 -4
- package/harness/skills/{code-review-pr.md → pr-review.md} +4 -4
- package/harness/skills/{deployment.md → release.md} +8 -8
- package/harness/skills/{bootstrap.md → setup.md} +16 -16
- package/harness/skills/{learn.md → wrap-up.md} +12 -12
- package/package.json +1 -1
- package/src/init.js +22 -22
- /package/harness/skills/{security-checklist.md → secure.md} +0 -0
- /package/harness/skills/{test-integrity.md → sync-tests.md} +0 -0
|
@@ -7,7 +7,7 @@ The most common cause of regressions in growing projects is changing one module
|
|
|
7
7
|
|
|
8
8
|
## Invoked By
|
|
9
9
|
|
|
10
|
-
- **
|
|
10
|
+
- **pm** agent — Step 10: for each existing module being modified
|
|
11
11
|
- **reviewer** agent — Step 7: when interface changes affect 2+ dependent modules
|
|
12
12
|
- **architect** agent — when structural validation requires blast radius analysis
|
|
13
13
|
|
|
@@ -72,22 +72,22 @@ Plan: 4 files to update, all within S3-2 scope
|
|
|
72
72
|
|
|
73
73
|
After completing the analysis, update these files:
|
|
74
74
|
|
|
75
|
-
- [ ] **docs/dependency-map.md**: Update the Interface Change Log table with: Date, Module, Change description, Affected Modules, Status ("In Progress" until all dependents updated, then "Updated"). **This is mandatory for ALL interface changes** — do not skip even if the change seems minor. **Status transition**: impact
|
|
75
|
+
- [ ] **docs/dependency-map.md**: Update the Interface Change Log table with: Date, Module, Change description, Affected Modules, Status ("In Progress" until all dependents updated, then "Updated"). **This is mandatory for ALL interface changes** — do not skip even if the change seems minor. **Status transition**: check-impact sets the initial status to "In Progress". After all dependent modules are verified updated (by reviewer Step 7 or sync-tests), update Status to "Updated".
|
|
76
76
|
- [ ] **docs/features.md**: If the interface change affects a feature's Key Files, update the Key Files column. If test files change, update the Test Files column.
|
|
77
77
|
- [ ] **docs/project-state.md**: If scope exceeds current Story, add a note to Recent Changes.
|
|
78
78
|
|
|
79
79
|
### 🧭 Navigation — After Impact Analysis
|
|
80
80
|
|
|
81
|
-
Impact-analysis is invoked BY `
|
|
81
|
+
Impact-analysis is invoked BY `pm` (Step 9) or `reviewer` (Step 7). After completion, control returns to the caller's flow.
|
|
82
82
|
If invoked directly by the user, append:
|
|
83
83
|
|
|
84
84
|
```
|
|
85
85
|
---
|
|
86
86
|
🧭 Next Step
|
|
87
|
-
→ Next: `
|
|
87
|
+
→ Next: `pm` or `reviewer`
|
|
88
88
|
→ Prompt: "영향도 분석 결과를 반영해줘"
|
|
89
89
|
→ Why: Blast radius mapped — incorporate into plan or review
|
|
90
|
-
→ Pipeline: N/A (utility skill — invoked by
|
|
90
|
+
→ Pipeline: N/A (utility skill — invoked by pm Step 9 or reviewer Step 7)
|
|
91
91
|
---
|
|
92
92
|
```
|
|
93
93
|
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
5
|
Debug bugs systematically. Prevent "symptom patching" — fixing without understanding root cause.
|
|
6
|
-
4-phase debugging process inspired by gstack's /
|
|
6
|
+
4-phase debugging process inspired by gstack's /debug.
|
|
7
7
|
|
|
8
8
|
## Invoked By
|
|
9
9
|
|
|
10
10
|
- **User** (direct) — "이 버그 조사해줘", "왜 실패하는지 찾아줘"
|
|
11
|
-
- **
|
|
12
|
-
- **core-rules** (3-Failure Stop) →
|
|
11
|
+
- **lead** — bug blocking progress 시 권장
|
|
12
|
+
- **core-rules** (3-Failure Stop) → debug Recalculating Mode
|
|
13
13
|
|
|
14
14
|
## When to Apply
|
|
15
15
|
|
|
@@ -38,7 +38,7 @@ If the user reports "weird behavior" but there is no error message or stack trac
|
|
|
38
38
|
|
|
39
39
|
### Phase 1: Evidence Collection (NO FIXES)
|
|
40
40
|
|
|
41
|
-
> **failure-patterns.md responsibility**:
|
|
41
|
+
> **failure-patterns.md responsibility**: debug READS patterns (Phase 1) to see if this is a known bug, and WRITES updates (Phase 4) to record new patterns. The `reviewer` agent only READS patterns (Step 5) as a warning check. The `wrap-up` skill WRITES patterns only for failures NOT already recorded by debug in the same session.
|
|
42
42
|
|
|
43
43
|
1. Record the full error message (first 500 chars) and top 5-10 stack frames
|
|
44
44
|
2. Trace the code path backwards from the error
|
|
@@ -101,12 +101,12 @@ Phase 4: Tests pass, null case test added
|
|
|
101
101
|
|
|
102
102
|
After the fix is verified (Phase 4):
|
|
103
103
|
|
|
104
|
-
- [ ] **docs/failure-patterns.md**: If the root cause is a repeatable pattern, add a new FP-NNN entry or increment the Frequency of an existing one. Increment Frequency if the ROOT CAUSE is the same (e.g., all SQL injection bugs = same FP-NNN regardless of which module). Different root causes = different patterns. This is NOT optional. **Note**: When
|
|
104
|
+
- [ ] **docs/failure-patterns.md**: If the root cause is a repeatable pattern, add a new FP-NNN entry or increment the Frequency of an existing one. Increment Frequency if the ROOT CAUSE is the same (e.g., all SQL injection bugs = same FP-NNN regardless of which module). Different root causes = different patterns. This is NOT optional. **Note**: When debug updates failure-patterns.md here, the `wrap-up` skill (Step 3) will skip re-incrementing this same pattern for this session to avoid double-counting.
|
|
105
105
|
- [ ] **docs/project-state.md**: Add the fix to Recent Changes with the root cause hypothesis.
|
|
106
106
|
|
|
107
107
|
## Recalculating Mode (invoked by 3-Failure Stop)
|
|
108
108
|
|
|
109
|
-
When
|
|
109
|
+
When debug is triggered by another skill/agent's 3-Failure Stop (not by a user-reported bug):
|
|
110
110
|
|
|
111
111
|
**Required input**: The caller MUST provide a failure context summary:
|
|
112
112
|
```
|
|
@@ -122,7 +122,7 @@ This input is mandatory — if not provided, ask the caller to supply it before
|
|
|
122
122
|
3. Complete Phase 1 (Evidence) and Phase 2 (Scope Lock) to diagnose the blocker
|
|
123
123
|
4. Propose 1-2 **alternative approaches** that are fundamentally different from ALL 3 failed attempts
|
|
124
124
|
5. Present to the user for decision — do not auto-execute the alternatives
|
|
125
|
-
6. If
|
|
125
|
+
6. If debug itself hits 3 failures in this mode → **full stop**, no further recursion
|
|
126
126
|
|
|
127
127
|
## Enforced Rules
|
|
128
128
|
|
|
@@ -168,5 +168,5 @@ Example 🧭 block:
|
|
|
168
168
|
|
|
169
169
|
### Personal State
|
|
170
170
|
- Record new failure patterns in your personal .harness/failure-patterns.md
|
|
171
|
-
- If the pattern affects the whole team, promote it (see
|
|
171
|
+
- If the pattern affects the whole team, promote it (see wrap-up skill Team Mode section)
|
|
172
172
|
<!-- TEAM_MODE_END -->
|
package/harness/skills/pivot.md
CHANGED
|
@@ -8,7 +8,7 @@ Without this, direction changes create silent inconsistencies:docs/project-brief
|
|
|
8
8
|
## Invoked By
|
|
9
9
|
|
|
10
10
|
- **User** (direct) — "방향을 바꾸자", "GraphQL로 변경해줘"
|
|
11
|
-
- **
|
|
11
|
+
- **pm** (direction change detected) → BLOCK → pivot required before planning proceeds
|
|
12
12
|
|
|
13
13
|
## When to Apply
|
|
14
14
|
|
|
@@ -113,15 +113,15 @@ After pivot completes, always append a 🧭 block:
|
|
|
113
113
|
|
|
114
114
|
| Pivot Result | 🧭 Next Step |
|
|
115
115
|
|---|---|
|
|
116
|
-
| All state files updated | `
|
|
117
|
-
| Crew artifacts exist for new direction | `
|
|
116
|
+
| All state files updated | `pm` — "변경된 방향에 맞춰 재계획해줘" |
|
|
117
|
+
| Crew artifacts exist for new direction | `setup` (🟣) — "crew 산출물을 기반으로 state를 다시 세팅해줘" |
|
|
118
118
|
| User cancelled | 🏁 No action — "기존 방향을 유지합니다" |
|
|
119
119
|
|
|
120
120
|
Example 🧭 block:
|
|
121
121
|
```
|
|
122
122
|
---
|
|
123
123
|
🧭 Next Step
|
|
124
|
-
→ Next: `
|
|
124
|
+
→ Next: `pm`
|
|
125
125
|
→ Prompt: "변경된 방향에 맞춰 재계획해줘"
|
|
126
126
|
→ Why: Direction changed — re-plan features for new goals
|
|
127
127
|
→ Pipeline: 🟡 Step 2/2
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
5
|
Review an external Pull Request (PR) for quality, security, and direction alignment before merging.
|
|
6
|
-
Unlike the `reviewer` agent (which reviews your own changes pre-commit with full project context), this skill is for reviewing incoming PRs from teammates or external contributors.
|
|
6
|
+
Unlike the `reviewer` agent (which reviews your own changes pre-commit with full project context), this skill is for reviewing incoming PRs from teammates or external contributors. pr-review is a cold review — stricter on state file compliance because the reviewer has less context about the PR author's intent.
|
|
7
7
|
|
|
8
8
|
## Invoked By
|
|
9
9
|
|
|
@@ -104,15 +104,15 @@ After PR review completes, always append a 🧭 block:
|
|
|
104
104
|
|
|
105
105
|
| PR Review Result | 🧭 Next Step |
|
|
106
106
|
|---|---|
|
|
107
|
-
| APPROVE | Merge & `
|
|
108
|
-
| REQUEST_CHANGES | [Fix] — "PR 지적사항을 수정하세요. 완료 후 다시 `
|
|
107
|
+
| APPROVE | Merge & `release` — "리리즈 준비를 확인해줘" |
|
|
108
|
+
| REQUEST_CHANGES | [Fix] — "PR 지적사항을 수정하세요. 완료 후 다시 `pr-review` 호출" |
|
|
109
109
|
| Direction misaligned | `pivot` — "방향을 전환하고 state 파일을 업데이트해줘" |
|
|
110
110
|
|
|
111
111
|
Example 🧭 block for APPROVE:
|
|
112
112
|
```
|
|
113
113
|
---
|
|
114
114
|
🧭 Next Step
|
|
115
|
-
→ Next: `
|
|
115
|
+
→ Next: `release`
|
|
116
116
|
→ Prompt: "리리즈 준비를 확인해줘"
|
|
117
117
|
→ Why: PR approved — validate deployment readiness
|
|
118
118
|
→ Pipeline: 🟢/🔵 Step 5/6
|
|
@@ -48,7 +48,7 @@ Verify all state files are up to date:
|
|
|
48
48
|
|
|
49
49
|
### Step 4: Security Scan
|
|
50
50
|
|
|
51
|
-
1. Run the `
|
|
51
|
+
1. Run the `secure` skill
|
|
52
52
|
2. Verify no credentials, API keys, or `.env` files are staged
|
|
53
53
|
3. Check for known vulnerable dependencies (if applicable)
|
|
54
54
|
|
|
@@ -96,9 +96,9 @@ After deployment validation completes, always append a 🧭 block:
|
|
|
96
96
|
| Deployment Result | 🧭 Next Step |
|
|
97
97
|
|---|---|
|
|
98
98
|
| READY | [Deploy] — "배포 명령을 실행하세요" |
|
|
99
|
-
| NOT_READY (test failure) | [Fix] — "테스트 실패를 수정해줘. 완료 후 다시 `
|
|
100
|
-
| NOT_READY (state files) | `
|
|
101
|
-
| NOT_READY (security) | `
|
|
99
|
+
| NOT_READY (test failure) | [Fix] — "테스트 실패를 수정해줘. 완료 후 다시 `release` 호출" |
|
|
100
|
+
| NOT_READY (state files) | `wrap-up` — "state 파일을 정리해줘" |
|
|
101
|
+
| NOT_READY (security) | `secure` — "보안 이슈를 해결해줘" |
|
|
102
102
|
|
|
103
103
|
Example 🧭 block for READY:
|
|
104
104
|
```
|
|
@@ -120,15 +120,15 @@ If a deployment fails or a critical issue is found post-deploy:
|
|
|
120
120
|
- Docker: `docker tag <image>:<previous-tag> <image>:latest && docker push`
|
|
121
121
|
- GitHub: `gh release delete vX.Y.Z` + `git tag -d vX.Y.Z && git push --delete origin vX.Y.Z`
|
|
122
122
|
2. **Record**: Add entry to `docs/failure-patterns.md` with deployment failure details
|
|
123
|
-
3. **Re-validate**: Run `
|
|
124
|
-
4. **Post-mortem**: Run `
|
|
123
|
+
3. **Re-validate**: Run `release` skill again on the rollback commit to confirm stability
|
|
124
|
+
4. **Post-mortem**: Run `wrap-up` skill to capture the incident for future sessions
|
|
125
125
|
|
|
126
126
|
## Rules
|
|
127
127
|
|
|
128
128
|
- Never deploy with failing tests — no exceptions
|
|
129
129
|
- Never deploy with unstaged changes in the working directory
|
|
130
|
-
- Always verify version bump before
|
|
131
|
-
- This skill is read-only — it validates but does not execute the
|
|
130
|
+
- Always verify version bump before release
|
|
131
|
+
- This skill is read-only — it validates but does not execute the release
|
|
132
132
|
|
|
133
133
|
<!-- TEAM_MODE_START -->
|
|
134
134
|
## Team Mode: Pre-Deploy Coordination
|
|
@@ -104,7 +104,7 @@ Check if external planning artifacts exist:
|
|
|
104
104
|
|
|
105
105
|
**Original crew documents are NEVER modified. Only the index and tracker are created.**
|
|
106
106
|
|
|
107
|
-
**Crew Artifact Path Detection** (
|
|
107
|
+
**Crew Artifact Path Detection** (setup detects all patterns, priority order):
|
|
108
108
|
1. Pattern C: User-provided paths (explicit in prompt) — highest priority, always authoritative
|
|
109
109
|
2. Pattern B: `docs/crew/` (consolidated directory)
|
|
110
110
|
3. Pattern A: `docs/PM/`, `docs/Analyst/`, `docs/ARB/` (kode:crew role-based directories)
|
|
@@ -153,7 +153,7 @@ Using data from Phase 1 + Phase 2, fill the following files:
|
|
|
153
153
|
|
|
154
154
|
**docs/project-state.md**:
|
|
155
155
|
- Quick Summary: filled with current project state
|
|
156
|
-
- Sprint 1 stories: based on what
|
|
156
|
+
- Sprint 1 stories: based on what setup discovered
|
|
157
157
|
- Module Registry: summary from docs/dependency-map.md
|
|
158
158
|
|
|
159
159
|
**docs/failure-patterns.md**:
|
|
@@ -198,7 +198,7 @@ In Team mode, state files are split between shared and personal directories:
|
|
|
198
198
|
- `.harness/agent-memory/` — agent memory files
|
|
199
199
|
|
|
200
200
|
When filling state files in Phase 3, write to the correct directories based on this split.
|
|
201
|
-
After
|
|
201
|
+
After setup completes, remind the user that shared files require `git pull` before editing (Pre-Pull Protocol).
|
|
202
202
|
<!-- TEAM_MODE_END -->
|
|
203
203
|
|
|
204
204
|
## Output Format
|
|
@@ -225,13 +225,13 @@ STATUS: DONE
|
|
|
225
225
|
|
|
226
226
|
### 🧭 Navigation — After Bootstrap
|
|
227
227
|
|
|
228
|
-
Bootstrap always leads to `
|
|
228
|
+
Bootstrap always leads to `pm`. Append this block after STATUS: DONE:
|
|
229
229
|
|
|
230
230
|
**If NO crew artifacts** (🟢 pipeline):
|
|
231
231
|
```
|
|
232
232
|
---
|
|
233
233
|
🧭 Next Step
|
|
234
|
-
→ Next: `
|
|
234
|
+
→ Next: `pm` (슬래시 메뉴에서 선택하거나, 채팅에 아래 프롬프트 입력)
|
|
235
235
|
→ Prompt: "[project]에 [첫 번째 기능]을 추가해줘"
|
|
236
236
|
→ Why: State files are filled — now plan the first feature
|
|
237
237
|
→ Pipeline: 🟢 Step 2/6
|
|
@@ -243,9 +243,9 @@ Bootstrap always leads to `planner`. Append this block after STATUS: DONE:
|
|
|
243
243
|
```
|
|
244
244
|
---
|
|
245
245
|
🧭 Next Step
|
|
246
|
-
→ Next: `
|
|
246
|
+
→ Next: `pm` (슬래시 메뉴에서 선택하거나, 채팅에 아래 프롬프트 입력)
|
|
247
247
|
→ Prompt: "crew 산출물을 기반으로 첫 번째 기능을 계획해줘"
|
|
248
|
-
→ Why: Artifact Index + Validation Tracker created —
|
|
248
|
+
→ Why: Artifact Index + Validation Tracker created — pm will map FR→Stories
|
|
249
249
|
→ Pipeline: 🟣 Step 2/6
|
|
250
250
|
---
|
|
251
251
|
```
|
|
@@ -264,22 +264,22 @@ Bootstrap always leads to `planner`. Append this block after STATUS: DONE:
|
|
|
264
264
|
|
|
265
265
|
For projects with fewer than 3 modules (e.g., single-file scripts, small CLI tools):
|
|
266
266
|
- `docs/dependency-map.md` may have only 1-2 rows — this is normal, not a gap
|
|
267
|
-
- `
|
|
268
|
-
- Consider a simplified workflow: `
|
|
267
|
+
- `breakdown` Waves may collapse into a single Wave — skip Wave-level pacing
|
|
268
|
+
- Consider a simplified workflow: `setup → pm → [code] → reviewer → wrap-up` (skip lead for single-story projects)
|
|
269
269
|
|
|
270
270
|
## Embedded Knowledge
|
|
271
271
|
|
|
272
272
|
### Session Bootstrap Protocol
|
|
273
|
-
When starting a NEW session (not during
|
|
273
|
+
When starting a NEW session (not during setup), read these files in order:
|
|
274
274
|
1. `docs/project-state.md` — Quick Summary tells you where we left off
|
|
275
275
|
2. `docs/features.md` — What features exist
|
|
276
276
|
3. `docs/failure-patterns.md` — What mistakes to avoid
|
|
277
277
|
4. `docs/project-brief.md` — Project vision and non-goals
|
|
278
278
|
|
|
279
279
|
### Workflow Pipeline
|
|
280
|
-
- New feature: `
|
|
281
|
-
- Bug fix: `
|
|
282
|
-
- Session lifecycle: `
|
|
280
|
+
- New feature: `pm → [code] → reviewer → lead → wrap-up`
|
|
281
|
+
- Bug fix: `debug → [fix] → sync-tests → reviewer → wrap-up`
|
|
282
|
+
- Session lifecycle: `lead ("where are we?") → [work] → wrap-up`
|
|
283
283
|
|
|
284
284
|
### State File Size Limits
|
|
285
285
|
- docs/project-brief.md: Max 200 lines
|
|
@@ -304,18 +304,18 @@ When starting a NEW session (not during bootstrap), read these files in order:
|
|
|
304
304
|
<!-- TEAM_MODE_START -->
|
|
305
305
|
## Team Mode: Onboarding
|
|
306
306
|
|
|
307
|
-
When running
|
|
307
|
+
When running setup in Team mode:
|
|
308
308
|
|
|
309
309
|
### New Project (first developer)
|
|
310
310
|
1. Run `musher init --team` to create shared + personal state files
|
|
311
|
-
2. Fill all state files via normal
|
|
311
|
+
2. Fill all state files via normal setup procedure
|
|
312
312
|
3. Commit shared files (docs/) to git
|
|
313
313
|
4. Push to remote — teammates will clone this
|
|
314
314
|
|
|
315
315
|
### Joining Developer (existing project)
|
|
316
316
|
1. Clone the repository (shared docs/ already exist)
|
|
317
317
|
2. Run `musher init --team` — only personal files (.harness/) are created; shared files are skipped
|
|
318
|
-
3. **DO NOT re-run
|
|
318
|
+
3. **DO NOT re-run setup interviews** — shared state is already filled by the first developer
|
|
319
319
|
4. Review docs/project-brief.md to understand project goals
|
|
320
320
|
5. Create your personal .harness/project-state.md with your current Story assignment
|
|
321
321
|
|
|
@@ -9,8 +9,8 @@ This is Musher's memory mechanism — without it, the same mistakes repeat acros
|
|
|
9
9
|
## Invoked By
|
|
10
10
|
|
|
11
11
|
- **User** (direct) — "세션 마무리해줘", "오늘 배운 것 기록해줘"
|
|
12
|
-
- **reviewer** (pass, all done) →
|
|
13
|
-
- **reviewer** (STATE-AUDIT) →
|
|
12
|
+
- **reviewer** (pass, all done) → wrap-up — 모든 Story 완료 시
|
|
13
|
+
- **reviewer** (STATE-AUDIT) → wrap-up — state 파일 정리 후 세션 종료
|
|
14
14
|
- Final step in ALL pipelines (🟢/🔵/🔴/🟡)
|
|
15
15
|
|
|
16
16
|
## When to Apply
|
|
@@ -49,8 +49,8 @@ Before recording failures, verify that the session's work stayed aligned with pr
|
|
|
49
49
|
- Did the user explicitly change direction during this session? → Note for pivot recommendation
|
|
50
50
|
3. **If drift detected**:
|
|
51
51
|
- Add a warning to the Step 7 Report: `⚠️ Direction drift: [description of misalignment]`
|
|
52
|
-
- Recommend: "Consider running `pivot` skill to formally update project direction. You can run it AFTER this
|
|
53
|
-
- Do NOT block — the
|
|
52
|
+
- Recommend: "Consider running `pivot` skill to formally update project direction. You can run it AFTER this wrap-up session completes."
|
|
53
|
+
- Do NOT block — the wrap-up skill always completes
|
|
54
54
|
4. **If no drift**: Proceed silently (no output for this step)
|
|
55
55
|
|
|
56
56
|
<!-- CREW_MODE_START -->
|
|
@@ -83,7 +83,7 @@ For each issue/error that occurred in this session:
|
|
|
83
83
|
|
|
84
84
|
1. Read `docs/failure-patterns.md`
|
|
85
85
|
2. Check if this matches an existing pattern (FP-NNN):
|
|
86
|
-
- **If match found AND already incremented by `
|
|
86
|
+
- **If match found AND already incremented by `debug` in this session**: Skip — do not double-count. Check `docs/project-state.md` Recent Changes for debug entries from this session to determine if a pattern was already recorded.
|
|
87
87
|
- **If match found AND NOT already incremented this session**: Increment the Frequency counter, add the Sprint/Story to "Occurred"
|
|
88
88
|
- **If new pattern**: Assign next FP-NNN number, create a new entry using this format:
|
|
89
89
|
|
|
@@ -146,7 +146,7 @@ If the `reviewer` agent was run in this session and produced `[STATE-AUDIT]` fla
|
|
|
146
146
|
State file 변경사항을 커밋합니다. Learn 실행 결과가 커밋되지 않으면 다음 세션에서 유실됩니다.
|
|
147
147
|
|
|
148
148
|
1. Stage state files: `git add docs/project-state.md docs/failure-patterns.md docs/features.md docs/dependency-map.md docs/agent-memory/`
|
|
149
|
-
2. Commit: `git commit -m "
|
|
149
|
+
2. Commit: `git commit -m "wrap-up: session lessons captured"`
|
|
150
150
|
3. If commit fails (nothing to commit), skip — state files were already committed
|
|
151
151
|
|
|
152
152
|
> **Self-check**: `git status`에 docs/ 아래 unstaged 파일이 없어야 합니다.
|
|
@@ -169,14 +169,14 @@ Before ending the session, check for unpushed commits:
|
|
|
169
169
|
|
|
170
170
|
### Step 6: Update Agent Memory (if applicable)
|
|
171
171
|
|
|
172
|
-
If an agent (reviewer,
|
|
172
|
+
If an agent (reviewer, pm, lead, architect) was used in this session, update its memory file in `docs/agent-memory/`:
|
|
173
173
|
|
|
174
174
|
1. Read `docs/agent-memory/{agent-name}.md`
|
|
175
175
|
2. **Auto-initialize if needed**: If the file only contains `<!-- Example entries` placeholder comments and no real data:
|
|
176
176
|
- Replace the placeholder block with actual entries from this session
|
|
177
177
|
- Initialize statistics counters with real values
|
|
178
178
|
- If real entries already exist alongside placeholders, APPEND new entries and remove only the placeholder comments. Do not overwrite existing real data.
|
|
179
|
-
- **When does initialization happen?**: On the FIRST session where the agent is used AND
|
|
179
|
+
- **When does initialization happen?**: On the FIRST session where the agent is used AND wrap-up is invoked. If an agent is never used, its memory stays as a placeholder indefinitely — this is expected.
|
|
180
180
|
- Example transformation:
|
|
181
181
|
```
|
|
182
182
|
Before: <!-- Example entries (replace with real findings after first review):
|
|
@@ -184,8 +184,8 @@ If an agent (reviewer, planner, sprint-manager, architect) was used in this sess
|
|
|
184
184
|
```
|
|
185
185
|
3. **Append session learnings** to the appropriate section:
|
|
186
186
|
- **reviewer.md**: Add review patterns found, update statistics (total reviews +1, auto-fixes, escalations)
|
|
187
|
-
- **
|
|
188
|
-
- **
|
|
187
|
+
- **pm.md**: Record estimation accuracy (planned vs actual), note architecture discoveries
|
|
188
|
+
- **lead.md**: Update velocity (stories done/planned), record any scope drift incidents
|
|
189
189
|
- **architect.md**: Record design decisions made, module boundary insights, anti-patterns observed
|
|
190
190
|
4. Keep entries concise — one line per learning, prefixed with `[S{sprint}-{story}]`
|
|
191
191
|
5. Prune entries older than 5 sprints to stay within the 100-line limit
|
|
@@ -229,7 +229,7 @@ Learn is the final skill in every pipeline. Append the appropriate 🧭 block:
|
|
|
229
229
|
---
|
|
230
230
|
🧭 Next Step
|
|
231
231
|
→ 🏁 Session End
|
|
232
|
-
→ Prompt: "다음 세션 시작 시 `
|
|
232
|
+
→ Prompt: "다음 세션 시작 시 `lead`를 호출하세요"
|
|
233
233
|
→ Why: Session lessons captured — state files are up to date
|
|
234
234
|
→ Pipeline:
|
|
235
235
|
🟢/🔵: Step 6/6 (complete)
|
|
@@ -240,7 +240,7 @@ Learn is the final skill in every pipeline. Append the appropriate 🧭 block:
|
|
|
240
240
|
<!-- CREW_MODE_START -->
|
|
241
241
|
If crew artifacts were used this session (🟣 pipeline), also append:
|
|
242
242
|
```
|
|
243
|
-
→ Note: 다음 세션에서 crew 산출물이 업데이트되었다면, `
|
|
243
|
+
→ Note: 다음 세션에서 crew 산출물이 업데이트되었다면, `setup`부터 다시 시작하세요
|
|
244
244
|
```
|
|
245
245
|
<!-- CREW_MODE_END -->
|
|
246
246
|
|
package/package.json
CHANGED
package/src/init.js
CHANGED
|
@@ -28,22 +28,22 @@ function writeFile(targetDir, relPath, content, overwrite) {
|
|
|
28
28
|
// ─── Shared definitions ──────────────────────────────────────
|
|
29
29
|
|
|
30
30
|
const SKILLS = [
|
|
31
|
-
{ id: '
|
|
32
|
-
{ id: '
|
|
33
|
-
{ id: '
|
|
34
|
-
{ id: 'impact
|
|
35
|
-
{ id: '
|
|
36
|
-
{ id: '
|
|
37
|
-
{ id: '
|
|
31
|
+
{ id: 'sync-tests', desc: 'Ensure test mocks stay synchronized when interfaces change. Use when modifying repository or service interfaces.' },
|
|
32
|
+
{ id: 'secure', desc: 'Security risk inspection before commits. Use when reviewing code for security issues.' },
|
|
33
|
+
{ id: 'debug', desc: 'Investigate and diagnose issues. Use when debugging or analyzing unexpected behavior.' },
|
|
34
|
+
{ id: 'check-impact', desc: 'Assess change blast radius. Use when modifying shared modules or interfaces.' },
|
|
35
|
+
{ id: 'breakdown', desc: 'Break down features into implementable stories. Use when planning new features.' },
|
|
36
|
+
{ id: 'setup', desc: 'Onboard project into kode:harness. Scans codebase and fills state files. Use after harness init or when state files are empty.' },
|
|
37
|
+
{ id: 'wrap-up', desc: 'Capture session lessons and update state files. Use at the end of every session.' },
|
|
38
38
|
{ id: 'pivot', desc: 'Propagate direction changes across all state files. Use when project goals, technology, scope, or architecture changes.' },
|
|
39
|
-
{ id: '
|
|
40
|
-
{ id: '
|
|
39
|
+
{ id: 'pr-review', desc: 'Review external Pull Requests for quality, security, and direction alignment. Use when reviewing incoming PRs.' },
|
|
40
|
+
{ id: 'release', desc: 'Pre-deployment validation checklist. Use before deploying, publishing, or creating release tags.' },
|
|
41
41
|
];
|
|
42
42
|
|
|
43
43
|
const AGENTS = [
|
|
44
44
|
{ id: 'reviewer', file: 'agents/reviewer.md', desc: 'Code review + auto-fix. Validates quality, security, and test integrity before commits.' },
|
|
45
|
-
{ id: '
|
|
46
|
-
{ id: '
|
|
45
|
+
{ id: 'lead', file: 'agents/lead.md', desc: 'Sprint/Story state tracking, next task guidance, scope drift prevention.' },
|
|
46
|
+
{ id: 'pm', file: 'agents/pm.md', desc: 'Feature planning and dependency management. Analyze architecture, break down features.' },
|
|
47
47
|
{ id: 'architect', file: 'agents/architect.md', desc: 'Design review gate. Validates structural changes against project direction and module boundaries.' },
|
|
48
48
|
];
|
|
49
49
|
|
|
@@ -57,8 +57,8 @@ const STATE_FILES = [
|
|
|
57
57
|
|
|
58
58
|
const AGENT_MEMORY_FILES = [
|
|
59
59
|
'agent-memory/reviewer.md',
|
|
60
|
-
'agent-memory/
|
|
61
|
-
'agent-memory/
|
|
60
|
+
'agent-memory/pm.md',
|
|
61
|
+
'agent-memory/lead.md',
|
|
62
62
|
'agent-memory/architect.md',
|
|
63
63
|
];
|
|
64
64
|
|
|
@@ -78,12 +78,12 @@ function hasFrameworkMarker(content) {
|
|
|
78
78
|
|
|
79
79
|
function hasIdeLayout(targetDir, ide) {
|
|
80
80
|
const requiredByIde = {
|
|
81
|
-
vscode: '.github/skills/
|
|
82
|
-
claude: '.claude/skills/
|
|
83
|
-
cursor: '.cursor/skills/
|
|
84
|
-
codex: '.agents/skills/
|
|
85
|
-
windsurf: '.windsurf/skills/
|
|
86
|
-
antigravity: '.gemini/skills/
|
|
81
|
+
vscode: '.github/skills/setup/SKILL.md',
|
|
82
|
+
claude: '.claude/skills/setup/SKILL.md',
|
|
83
|
+
cursor: '.cursor/skills/setup/SKILL.md',
|
|
84
|
+
codex: '.agents/skills/setup/SKILL.md',
|
|
85
|
+
windsurf: '.windsurf/skills/setup/SKILL.md',
|
|
86
|
+
antigravity: '.gemini/skills/setup/SKILL.md',
|
|
87
87
|
};
|
|
88
88
|
|
|
89
89
|
const requiredPath = requiredByIde[ide];
|
|
@@ -466,7 +466,7 @@ function showPostInstallGuide(ideName, mode) {
|
|
|
466
466
|
lines.push(
|
|
467
467
|
'',
|
|
468
468
|
' 🚀 Next steps:',
|
|
469
|
-
' 1. Ask your AI: "Run
|
|
469
|
+
' 1. Ask your AI: "Run setup to onboard this project"',
|
|
470
470
|
' 2. AI scans your codebase and fills state files automatically',
|
|
471
471
|
' 3. Start coding: ask your AI to plan a new feature',
|
|
472
472
|
'',
|
|
@@ -573,7 +573,7 @@ function runValidate(targetDir) {
|
|
|
573
573
|
|
|
574
574
|
// Each state file has a known sentinel that only exists in unfilled templates.
|
|
575
575
|
// failure-patterns.md is excluded: it intentionally keeps FP-001~004 as templates
|
|
576
|
-
// after
|
|
576
|
+
// after setup (Frequency: 0 is the normal initial state, not a placeholder).
|
|
577
577
|
const templateSentinels = {
|
|
578
578
|
'project-state.md': 'S1-1 | Project scaffolding',
|
|
579
579
|
'dependency-map.md': 'Add new modules above this line',
|
|
@@ -599,7 +599,7 @@ function runValidate(targetDir) {
|
|
|
599
599
|
// failure-patterns.md: no sentinel check — template state is normal
|
|
600
600
|
results.push(` ✅ ${file} — ok (no failures logged yet is normal)`);
|
|
601
601
|
} else if (content.includes(sentinel)) {
|
|
602
|
-
results.push(` ⚠️ ${file} — placeholder only. Run \`
|
|
602
|
+
results.push(` ⚠️ ${file} — placeholder only. Run \`setup\` to fill.`);
|
|
603
603
|
warnings++;
|
|
604
604
|
} else {
|
|
605
605
|
results.push(` ✅ ${file} — has content`);
|
|
File without changes
|
|
File without changes
|