@kodevibe/harness 0.9.1 → 0.9.3
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 +7 -6
- package/README.md +7 -6
- package/harness/agents/pm.md +10 -0
- package/harness/agents/reviewer.md +32 -1
- package/harness/core-rules.md +16 -2
- package/harness/project-brief.md +23 -1
- package/harness/skills/release.md +21 -0
- package/harness/skills/setup.md +15 -4
- package/harness/skills/state-check.md +189 -0
- package/harness/skills/wrap-up.md +6 -2
- package/package.json +1 -1
- package/src/init.js +29 -9
package/README.ko.md
CHANGED
|
@@ -115,11 +115,11 @@ npx @kodevibe/harness validate # state 파일에 실제 내용 확인
|
|
|
115
115
|
| IDE | 디스패처 (always-on) | 스킬 | 에이전트 |
|
|
116
116
|
|-----|---------------------|------|----------|
|
|
117
117
|
| **VS Code Copilot** | `.github/copilot-instructions.md` | `.github/skills/*/SKILL.md` | `.github/agents/*.agent.md` |
|
|
118
|
-
| **Claude Code** | `.claude/rules/core.md` | `.claude/skills/*/SKILL.md` | `.claude/agents/*.md` |
|
|
119
|
-
| **Cursor** | `.cursor/rules/core.mdc` | `.cursor/skills/*/SKILL.md` | `.cursor/agents/*.md` |
|
|
120
|
-
| **Codex** | `AGENTS.md` | `.agents/skills/*/SKILL.md` | `.codex/agents/*.
|
|
118
|
+
| **Claude Code** | `CLAUDE.md` (+ `.claude/rules/core.md`) | `.claude/skills/*/SKILL.md` | `.claude/agents/*.md` |
|
|
119
|
+
| **Cursor** | `.cursor/rules/core.mdc` (+ `AGENTS.md`) | `.cursor/skills/*/SKILL.md` | `.cursor/agents/*.md` |
|
|
120
|
+
| **Codex** | `AGENTS.md` | `.agents/skills/*/SKILL.md` | `.codex/agents/*.md` |
|
|
121
121
|
| **Windsurf** | `.windsurf/rules/core.md` | `.windsurf/skills/*/SKILL.md` | *(스킬로 설치)* |
|
|
122
|
-
| **Antigravity** | `GEMINI.md` | `.gemini/skills/*/SKILL.md` | `.gemini/agents/*.md` |
|
|
122
|
+
| **Antigravity** | `GEMINI.md` (+ `AGENTS.md`) | `.gemini/skills/*/SKILL.md` | `.gemini/agents/*.md` |
|
|
123
123
|
|
|
124
124
|
모든 IDE에 `docs/` 디렉토리에 State 파일(`project-state.md`, `project-brief.md`, `features.md`, `failure-patterns.md`, `dependency-map.md`)도 함께 설치됩니다.
|
|
125
125
|
|
|
@@ -300,7 +300,7 @@ Bootstrap이 `docs/crew/`, `docs/PM/`, `docs/Analyst/`, `docs/ARB/`에서 crew
|
|
|
300
300
|
|
|
301
301
|
## 로드맵
|
|
302
302
|
|
|
303
|
-
kode:harness는 현재 **v0.9.
|
|
303
|
+
kode:harness는 현재 **v0.9.2** — state-check 스킬, Iron Law #10 (Self-Verify), Confirmation Gate Defaults, 멀티 IDE 설치 수정, Crew 모드용 CI Artifact Index 도입.
|
|
304
304
|
|
|
305
305
|
| 단계 | 버전 | 상태 | 초점 |
|
|
306
306
|
|------|------|------|------|
|
|
@@ -308,7 +308,8 @@ kode:harness는 현재 **v0.9.0** — 네이밍 재설계 완료, 6개 IDE 지
|
|
|
308
308
|
| **Hardening** | v0.6.5 | ✅ 완료 | 10 스킬, 4 에이전트, Iron Laws, CLI batch/doctor/validate, 방향 드리프트 감지 |
|
|
309
309
|
| **Flexibility** | v0.7.x | ✅ 완료 | 팀 컨벤션을 project-brief.md에 위임, prescriptive 규칙 제거 |
|
|
310
310
|
| **Navigation** | v0.8.x | ✅ 완료 | 🧭 Navigation Dispatcher, 5개 파이프라인, Crew Artifact Integration, 100점 품질 감사, Confirm-First 게이트, Wave-Level Pacing, Recalculating Mode |
|
|
311
|
-
| **Naming** | v0.9.0 | ✅
|
|
311
|
+
| **Naming** | v0.9.0 | ✅ 완료 | 스킬/에이전트 네이밍 재설계 — 직관성과 발견성 강화 |
|
|
312
|
+
| **Self-Verify** | v0.9.2 | ✅ 현재 | state-check 스킬, Iron Law #10, Confirmation Gate Defaults, 멀티 IDE 수정, CI Artifact Index |
|
|
312
313
|
| **Validation** | v1.0 | 🔜 다음 | 실사용 검증, 사용자 피드백 수집 |
|
|
313
314
|
|
|
314
315
|
### 다음 단계
|
package/README.md
CHANGED
|
@@ -113,11 +113,11 @@ npx @kodevibe/harness validate # verify state files have real content
|
|
|
113
113
|
| IDE | Dispatcher (always-on) | Skills | Agents |
|
|
114
114
|
|-----|----------------------|--------|--------|
|
|
115
115
|
| **VS Code Copilot** | `.github/copilot-instructions.md` | `.github/skills/*/SKILL.md` | `.github/agents/*.agent.md` |
|
|
116
|
-
| **Claude Code** | `.claude/rules/core.md` | `.claude/skills/*/SKILL.md` | `.claude/agents/*.md` |
|
|
117
|
-
| **Cursor** | `.cursor/rules/core.mdc` | `.cursor/skills/*/SKILL.md` | `.cursor/agents/*.md` |
|
|
118
|
-
| **Codex** | `AGENTS.md` | `.agents/skills/*/SKILL.md` | `.codex/agents/*.
|
|
116
|
+
| **Claude Code** | `CLAUDE.md` (+ `.claude/rules/core.md`) | `.claude/skills/*/SKILL.md` | `.claude/agents/*.md` |
|
|
117
|
+
| **Cursor** | `.cursor/rules/core.mdc` (+ `AGENTS.md`) | `.cursor/skills/*/SKILL.md` | `.cursor/agents/*.md` |
|
|
118
|
+
| **Codex** | `AGENTS.md` | `.agents/skills/*/SKILL.md` | `.codex/agents/*.md` |
|
|
119
119
|
| **Windsurf** | `.windsurf/rules/core.md` | `.windsurf/skills/*/SKILL.md` | *(agents installed as skills)* |
|
|
120
|
-
| **Antigravity** | `GEMINI.md` | `.gemini/skills/*/SKILL.md` | `.gemini/agents/*.md` |
|
|
120
|
+
| **Antigravity** | `GEMINI.md` (+ `AGENTS.md`) | `.gemini/skills/*/SKILL.md` | `.gemini/agents/*.md` |
|
|
121
121
|
|
|
122
122
|
All IDEs also get state files (`project-state.md`, `project-brief.md`, `features.md`, `failure-patterns.md`, `dependency-map.md`) in the `docs/` directory.
|
|
123
123
|
|
|
@@ -274,7 +274,7 @@ Original crew documents are **never modified**. Only the index and tracker are c
|
|
|
274
274
|
|
|
275
275
|
## Roadmap
|
|
276
276
|
|
|
277
|
-
kode:harness is at **v0.9.
|
|
277
|
+
kode:harness is at **v0.9.2** — state-check skill, Iron Law #10 (Self-Verify), Confirmation Gate Defaults, multi-IDE installation fixes, and CI Artifact Index for crew mode.
|
|
278
278
|
|
|
279
279
|
| Phase | Version | Status | Focus |
|
|
280
280
|
|---|---|---|---|
|
|
@@ -282,7 +282,8 @@ kode:harness is at **v0.9.0** — naming redesign complete, 6 IDE support, Navig
|
|
|
282
282
|
| **Hardening** | v0.6.5 | ✅ Done | 10 skills, 4 agents, Iron Laws, CLI batch/doctor/validate, merge conflict SOP, direction drift detection |
|
|
283
283
|
| **Flexibility** | v0.7.x | ✅ Done | Delegate team conventions to project-brief.md, remove prescriptive rules |
|
|
284
284
|
| **Navigation** | v0.8.x | ✅ Done | 🧭 Navigation Dispatcher, 5 Pipelines, Crew Artifact Integration, 100-point quality audit, Confirm-First gate, Wave-Level Pacing, Recalculating Mode |
|
|
285
|
-
| **Naming** | v0.9.0 | ✅
|
|
285
|
+
| **Naming** | v0.9.0 | ✅ Done | Skill/agent naming redesign for clarity and discoverability |
|
|
286
|
+
| **Self-Verify** | v0.9.2 | ✅ Current | state-check skill, Iron Law #10, Confirmation Gate Defaults, multi-IDE fix, CI Artifact Index |
|
|
286
287
|
| **Validation** | v1.0 | 🔜 Next | Real-world project adoption, user feedback collection |
|
|
287
288
|
|
|
288
289
|
### What's Next
|
package/harness/agents/pm.md
CHANGED
|
@@ -226,6 +226,16 @@ After user approves the plan, perform these writes in order:
|
|
|
226
226
|
|
|
227
227
|
If any write fails, report the failure and retry. Do NOT proceed to 🧭 with incomplete state files.
|
|
228
228
|
|
|
229
|
+
### ✅ MANDATORY: Self-Verify with state-check (Iron Law #10)
|
|
230
|
+
|
|
231
|
+
After the Post-Approval state writes complete, run the `state-check` skill:
|
|
232
|
+
1. Invoke `state-check` skill — deterministic verification of state file consistency
|
|
233
|
+
2. If state-check returns **PASS** → proceed to output 🧭 Next Step
|
|
234
|
+
3. If state-check returns **WARN** → include the warnings in the plan output, then proceed
|
|
235
|
+
4. If state-check returns **FAIL** → do NOT output STATUS: DONE. Fix the listed drift, then re-run state-check.
|
|
236
|
+
|
|
237
|
+
> Iron Law #10 (Self-Verify) applies to every agent. The pm runs state-check **after** state writes — not before — because the writes are what create the consistency to verify.
|
|
238
|
+
|
|
229
239
|
## Output Format
|
|
230
240
|
|
|
231
241
|
### New Feature Plan
|
|
@@ -65,6 +65,30 @@ Changed file list (user-provided or from `git diff --name-only`)
|
|
|
65
65
|
- [ ] Constructor parameters match actual source (FP-002)
|
|
66
66
|
- [ ] **Common First (Iron Law #9)**: No crew-specific logic outside crew marker blocks. All features must work without crew artifacts.
|
|
67
67
|
|
|
68
|
+
<!-- CREW_MODE_START -->
|
|
69
|
+
**Step 2.5: CI Standards Compliance (🟣 Pipeline only)**
|
|
70
|
+
|
|
71
|
+
**Trigger**: Changed files include any build/CI artifacts:
|
|
72
|
+
- `Dockerfile`, `.dockerignore`
|
|
73
|
+
- `.github/workflows/*.yml`, `.gitlab-ci.yml`, `Jenkinsfile`
|
|
74
|
+
- `pom.xml`, `build.gradle`, `gradle.properties`
|
|
75
|
+
- `package.json` (scripts changes), `yarn.lock`, `package-lock.json`
|
|
76
|
+
- `pyproject.toml`, `requirements.txt`, `Pipfile`, `poetry.lock`
|
|
77
|
+
- `go.mod`, `go.sum`
|
|
78
|
+
|
|
79
|
+
**Procedure**:
|
|
80
|
+
1. Check if `docs/project-brief.md` has a `## CI Artifact Index` section (or `.harness/ci-index.md` exists). If neither → skip this step.
|
|
81
|
+
2. Read the project's primary language/build tool from `docs/project-brief.md` Key Technical Decisions.
|
|
82
|
+
3. Match the language/build tool to a row in the CI Artifact Index → get the reference URL and Key Constraints.
|
|
83
|
+
4. Surface the reference in review output under a `### CI Standards Compliance` section:
|
|
84
|
+
- Reference URL (the indexed guide)
|
|
85
|
+
- Key Constraints listed in the index (echoed back so the user does not need to re-read the guide)
|
|
86
|
+
- `[CI-STANDARD]` flag if any obvious mismatch is detected against a listed constraint (best-effort LLM judgment based only on the changed files)
|
|
87
|
+
5. **Warning only — do NOT block commit**. The user (or a human reviewer) decides whether the changes meet company standards. The reviewer agent never asserts compliance; it only points to the authoritative guide.
|
|
88
|
+
|
|
89
|
+
If neither `## CI Artifact Index` nor `.harness/ci-index.md` is present → skip this step entirely (also true for 🟢/🔵/🔴 pipelines).
|
|
90
|
+
<!-- CREW_MODE_END -->
|
|
91
|
+
|
|
68
92
|
**Step 3: Test Integrity (sync-tests skill)**
|
|
69
93
|
- [ ] Interface changes have synchronized mocks (FP-001)
|
|
70
94
|
- [ ] New features have tests
|
|
@@ -125,7 +149,11 @@ If no Crew Artifact Index → skip this step entirely.
|
|
|
125
149
|
|
|
126
150
|
**Step 8: State File Audit**
|
|
127
151
|
|
|
128
|
-
Verify that state file updates actually happened.
|
|
152
|
+
Verify that state file updates actually happened. **Run the `state-check` skill first** (Iron Law #10) for deterministic cross-checks, then perform the human-judgment items below that state-check cannot mechanically verify.
|
|
153
|
+
|
|
154
|
+
> `state-check` covers: file existence, Story↔Feature consistency, dependency-map↔src/ drift, and agent-memory legacy names. The items below complement it with semantic checks the skill cannot perform.
|
|
155
|
+
|
|
156
|
+
After running state-check, also verify:
|
|
129
157
|
- [ ] **docs/project-state.md**: If stories were worked on, is Quick Summary current? Are story statuses updated?
|
|
130
158
|
- [ ] **docs/features.md**: If new features were added, are they registered? If features were completed, is status updated?
|
|
131
159
|
- [ ] **Cross-check features ↔ stories**: If a feature status is `✅ done` in features.md, verify all related stories in project-state.md are also `done`. If stories are `done` but their feature is still `🔄 in-progress`, flag as `[STATE-AUDIT]`.
|
|
@@ -180,6 +208,9 @@ If review is BLOCKED → do NOT suggest commit. Fix first.
|
|
|
180
208
|
- Test integrity: ✅ / ⚠️ (detail)
|
|
181
209
|
- Security check: ✅ / ❌ (detail)
|
|
182
210
|
- Failure pattern check: ✅ / ⚠️ (FP-NNN)
|
|
211
|
+
<!-- CREW_MODE_START -->
|
|
212
|
+
- CI standards (🟣): ✅ / ⚠️ [CI-STANDARD] (detail) — included only when CI Artifact Index exists
|
|
213
|
+
<!-- CREW_MODE_END -->
|
|
183
214
|
|
|
184
215
|
STATUS: DONE / DONE_WITH_CONCERNS / BLOCKED
|
|
185
216
|
```
|
package/harness/core-rules.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# kode:harness
|
|
2
2
|
|
|
3
|
-
This project uses
|
|
3
|
+
This project uses kode:harness for structured AI-assisted development.
|
|
4
4
|
Skills and agents work together through shared state files.
|
|
5
5
|
**Every response must end with a 🧭 Next Step block** — guide the user to the next action.
|
|
6
6
|
|
|
@@ -54,6 +54,7 @@ When external planning artifacts exist (requirements, analysis, design documents
|
|
|
54
54
|
|
|
55
55
|
> Crew artifacts are detected by: `docs/crew/` directory, `docs/PM/`+`docs/Analyst/`+`docs/ARB/` directories, or user explicitly provides requirements/design documents (e.g., mentions "PRD", "산출물", "설계서", or provides file paths to planning artifacts).
|
|
56
56
|
> **Reference, don't summarize**: setup creates a Crew Artifact Index (path table) in project-brief.md — each skill reads the original artifact directly via the indexed path.
|
|
57
|
+
> Crew mode also enables the **CI Artifact Index** reference layer: if `docs/project-brief.md` contains `## CI Artifact Index`, reviewer Step 2.5 and release Step 3.5 surface the indexed company CI/CD guide when build/CI files change. The guide content stays external; only the path and key constraints are indexed.
|
|
57
58
|
> This pipeline produces the same state files as 🟢 — the difference is the INPUT source and the addition of Validation Tracker for traceability.
|
|
58
59
|
<!-- CREW_MODE_END -->
|
|
59
60
|
|
|
@@ -134,3 +135,16 @@ These laws are enforced across all skills and agents. Violations should be flagg
|
|
|
134
135
|
7. **Feature Registry**: When adding a feature, register it in features.md in the same commit.
|
|
135
136
|
8. **Session Handoff**: At session end, update project-state.md Quick Summary so the next session has context.
|
|
136
137
|
9. **Common First**: All features must work at Common level (🟢🔵🔴) without crew dependency. Crew-specific logic must be inside crew marker blocks only. Never add crew-only code to Common paths.
|
|
138
|
+
10. **Self-Verify**: Every agent MUST run the `state-check` skill before reporting STATUS: DONE. If state-check returns FAIL, the agent must NOT report DONE — fix the listed drift first. WARN may proceed but warnings must be included in the agent's output.
|
|
139
|
+
|
|
140
|
+
## Confirmation Gate Defaults
|
|
141
|
+
|
|
142
|
+
When the user does not respond to a confirmation prompt within the conversation, agents must apply the SAFE default — never assume implicit approval. The SAFE default for each gate:
|
|
143
|
+
|
|
144
|
+
| Gate | Owner | SAFE default (no response) | Rationale |
|
|
145
|
+
|------|-------|---------------------------|-----------|
|
|
146
|
+
| Plan Confirmation | `pm` | Do NOT write `features.md` / `project-state.md` / `dependency-map.md`. Hold the plan and re-prompt. | Prevents state file pollution from rejected plans. |
|
|
147
|
+
| Scope Check | `lead` | NO — block edits outside the current Story scope. | Iron Law #3 (Scope Compliance) cannot be silently bypassed. |
|
|
148
|
+
| Commit Approval | `reviewer` | Hold the commit. Output the proposed commit command but do NOT execute it. | Code commits are hard to reverse without `git reset` — user must explicitly approve. |
|
|
149
|
+
|
|
150
|
+
Any agent that wants to proceed past one of these gates without explicit approval is in violation of Iron Law #10 and must STOP.
|
package/harness/project-brief.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Project Brief
|
|
2
2
|
|
|
3
|
-
> **Fill this out immediately after running
|
|
3
|
+
> **Fill this out immediately after running `@kodevibe/harness init`.** The Planner agent uses this file for Direction Guard — without it, scope drift cannot be prevented.
|
|
4
4
|
|
|
5
5
|
## Vision
|
|
6
6
|
|
|
@@ -106,6 +106,28 @@
|
|
|
106
106
|
Status legend: ⬜ Not started, 🟡 In progress, ✅ Done
|
|
107
107
|
Update flow: setup creates → pm fills Story column → wrap-up updates Status
|
|
108
108
|
-->
|
|
109
|
+
|
|
110
|
+
## CI Artifact Index
|
|
111
|
+
|
|
112
|
+
<!-- 🟣 Pipeline only — references to company CI/CD standard guides.
|
|
113
|
+
reviewer Step 2.5 and release Step 3.5 read this index to surface the relevant guide
|
|
114
|
+
when build/CI files change or before deploy.
|
|
115
|
+
|
|
116
|
+
Reference Layer pattern: the original guide lives outside this repo (Confluence,
|
|
117
|
+
internal wiki, etc.). This index stores ONLY the path/URL and the key constraints
|
|
118
|
+
so that AI agents do not need to re-read the guide every time. The actual guide
|
|
119
|
+
content is never copied into this repository.
|
|
120
|
+
|
|
121
|
+
| Language | Build Tool | Reference URL | Key Constraints |
|
|
122
|
+
|----------|-----------|---------------|-----------------|
|
|
123
|
+
| _(예: Java)_ | _(예: Maven)_ | _(URL placeholder — fill with the company guide URL)_ | _(예: 표준 base image 사용, ACR 캐시 사용, 보안 스캔 단계 포함)_ |
|
|
124
|
+
|
|
125
|
+
Tips for filling this table:
|
|
126
|
+
- 1행만 채워도 충분 — 프로젝트의 주 언어/빌드도구만 기재
|
|
127
|
+
- 다중 서비스 (모놀리식 X, 멀티 모듈 O)인 경우 서비스/모듈별로 한 행씩
|
|
128
|
+
- Key Constraints는 LLM이 변경된 파일 대비 자동 점검할 수 있도록 짧고 검증 가능한 형태로 작성 (e.g., "base image: company-base:latest", "cache: 회사 ACR 미러 사용")
|
|
129
|
+
- Reference URL은 회사 내부 가이드 위치 (Confluence, wiki 등). OSS 코드베이스에는 절대 회사 URL을 커밋하지 않음 — 이 파일은 사용자 로컬 또는 사내 저장소에서만 채움.
|
|
130
|
+
-->
|
|
109
131
|
<!-- CREW_MODE_END -->
|
|
110
132
|
|
|
111
133
|
## Key Technical Decisions
|
|
@@ -44,6 +44,24 @@ Verify all state files are up to date:
|
|
|
44
44
|
- [ ] **Validation Tracker FR Coverage**: All Functional Requirements (FR) have at least one mapped Story (`docs/project-brief.md` → Validation Tracker)
|
|
45
45
|
- [ ] **Validation Tracker ARB Fail Resolution**: All ARB Fail items resolved (✅) or explicitly deferred with rationale
|
|
46
46
|
- [ ] **KPI Coverage**: All KPIs addressed or deferred with documented reason
|
|
47
|
+
- [ ] **CI Standards (🟣)**: If `docs/project-brief.md` has `## CI Artifact Index`, deploy artifacts (Dockerfile, CI workflow, build config) match the indexed guide's Key Constraints (see Step 3.5)
|
|
48
|
+
<!-- CREW_MODE_END -->
|
|
49
|
+
|
|
50
|
+
<!-- CREW_MODE_START -->
|
|
51
|
+
### Step 3.5: CI Standards Compliance (🟣 Pipeline only)
|
|
52
|
+
|
|
53
|
+
If `docs/project-brief.md` has a `## CI Artifact Index` section:
|
|
54
|
+
|
|
55
|
+
1. Read the indexed reference URL and Key Constraints for the project's primary language/build tool.
|
|
56
|
+
2. Verify the deployed configuration matches each Key Constraint listed in the index:
|
|
57
|
+
- Base image (e.g., must use the standard company base image)
|
|
58
|
+
- Build cache strategy (e.g., must use the company-approved cache mirror)
|
|
59
|
+
- Required CI stages (e.g., security scan, signing)
|
|
60
|
+
- Any other constraint listed in the index row
|
|
61
|
+
3. If **any** constraint is unmet → mark **NOT_READY** and list the unmet constraints in the verdict.
|
|
62
|
+
4. If `## CI Artifact Index` does not exist (or is empty) → skip this step entirely.
|
|
63
|
+
|
|
64
|
+
This step references the indexed company guide; it does not embed the guide content itself. The reviewer agent (Step 2.5) catches CI standard issues earlier in the cycle; this step is the final gate before deploy.
|
|
47
65
|
<!-- CREW_MODE_END -->
|
|
48
66
|
|
|
49
67
|
### Step 4: Security Scan
|
|
@@ -77,6 +95,9 @@ Verify all state files are up to date:
|
|
|
77
95
|
- [x/✗] Security scan clean
|
|
78
96
|
- [x/✗] Git status clean
|
|
79
97
|
- [x/✗] Release notes prepared
|
|
98
|
+
<!-- CREW_MODE_START -->
|
|
99
|
+
- [x/✗/–] CI standards (🟣): [verdict] — `–` if no CI Artifact Index
|
|
100
|
+
<!-- CREW_MODE_END -->
|
|
80
101
|
|
|
81
102
|
### Verdict: READY / NOT_READY
|
|
82
103
|
[blockers if not ready]
|
package/harness/skills/setup.md
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
Onboard a new or existing project into
|
|
5
|
+
Onboard a new or existing project into kode:harness by filling **state files AND rules files** automatically.
|
|
6
6
|
Solves the cold-start problem: users don't know which `.md` files to fill or how.
|
|
7
7
|
One command does everything — no manual editing required.
|
|
8
8
|
|
|
9
9
|
## When to Apply
|
|
10
10
|
|
|
11
|
-
- Right after running
|
|
11
|
+
- Right after running `@kodevibe/harness init` on a new project
|
|
12
12
|
- When joining an existing project that has empty state files
|
|
13
13
|
- When state files are outdated and need a refresh
|
|
14
14
|
- When any agent reports "state files are empty"
|
|
@@ -49,6 +49,16 @@ One command does everything — no manual editing required.
|
|
|
49
49
|
|
|
50
50
|
4. **Scan for existing tests**: Find test files and map them to source modules
|
|
51
51
|
5. **Scan imports/dependencies**: Trace module relationships from import statements
|
|
52
|
+
6. **Detect legacy agent-memory files** (v0.9 migration):
|
|
53
|
+
- Look in `docs/agent-memory/` and `.harness/agent-memory/` for these legacy names from earlier framework versions:
|
|
54
|
+
- `planner.md` → should be renamed to `pm.md`
|
|
55
|
+
- `sprint-manager.md` → should be renamed to `lead.md`
|
|
56
|
+
- `navigator.md` → should be renamed to `lead.md`
|
|
57
|
+
- `builder.md` → should be renamed to `pm.md`
|
|
58
|
+
- For each legacy file found:
|
|
59
|
+
- If the new name does NOT exist → offer to rename: `mv {legacy}.md {new}.md` (preserves history)
|
|
60
|
+
- If BOTH exist → ask the user which to keep, or merge contents into the new name and delete the legacy
|
|
61
|
+
- Confirm with the user before renaming. Record the migration in `docs/project-state.md` Recent Changes.
|
|
52
62
|
|
|
53
63
|
**Do NOT modify any code files in this phase.**
|
|
54
64
|
|
|
@@ -137,6 +147,7 @@ Using data from Phase 1 + Phase 2, fill the following files:
|
|
|
137
147
|
<!-- CREW_MODE_START -->
|
|
138
148
|
- Crew Artifact Index → from Phase 1.5 (🟣 pipeline only — leave as template comment for 🟢 pipeline)
|
|
139
149
|
- Validation Tracker → from Phase 1.5 (🟣 pipeline only — leave as template comment for 🟢 pipeline)
|
|
150
|
+
- CI Artifact Index → 🟣 pipeline only. After filling crew fields, ask the user: "회사 CI/CD 표준 가이드(Dockerfile/CI 파이프라인 규약)가 있다면 한 줄로 인덱싱하시겠습니까? (URL과 Key Constraints만 기록 — 가이드 본문은 외부에 둠)". If yes, fill one row in the CI Artifact Index table with their primary language/build tool, the guide URL, and 2-3 short Key Constraints. If no or skip → leave template comment as-is. Never commit company-specific URLs to the OSS template — this row is meant to be filled in the user's local/private project-brief.md only.
|
|
140
151
|
<!-- CREW_MODE_END -->
|
|
141
152
|
- Key Technical Decisions → from Phase 1 scan + user answer #4, #5
|
|
142
153
|
|
|
@@ -307,14 +318,14 @@ When starting a NEW session (not during setup), read these files in order:
|
|
|
307
318
|
When running setup in Team mode:
|
|
308
319
|
|
|
309
320
|
### New Project (first developer)
|
|
310
|
-
1. Run
|
|
321
|
+
1. Run `@kodevibe/harness init --team` to create shared + personal state files
|
|
311
322
|
2. Fill all state files via normal setup procedure
|
|
312
323
|
3. Commit shared files (docs/) to git
|
|
313
324
|
4. Push to remote — teammates will clone this
|
|
314
325
|
|
|
315
326
|
### Joining Developer (existing project)
|
|
316
327
|
1. Clone the repository (shared docs/ already exist)
|
|
317
|
-
2. Run
|
|
328
|
+
2. Run `@kodevibe/harness init --team` — only personal files (.harness/) are created; shared files are skipped
|
|
318
329
|
3. **DO NOT re-run setup interviews** — shared state is already filled by the first developer
|
|
319
330
|
4. Review docs/project-brief.md to understand project goals
|
|
320
331
|
5. Create your personal .harness/project-state.md with your current Story assignment
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# State Check
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Deterministic verification that state files are internally consistent and not silently drifting.
|
|
6
|
+
This skill exists because LLM self-checks miss state drift — every Iron Law #10 self-verify pass should run this skill before reporting STATUS: DONE.
|
|
7
|
+
|
|
8
|
+
## Invoked By
|
|
9
|
+
|
|
10
|
+
- **pm** agent — Post-Approval step (after writing features.md / project-state.md / dependency-map.md)
|
|
11
|
+
- **reviewer** agent — Step 8 (State File Audit) — supplements existing STATE-AUDIT logic
|
|
12
|
+
- **wrap-up** skill — Step 5.5 (after dependency-map verify)
|
|
13
|
+
- **User** (direct) — "state 파일 일관성 점검해줘"
|
|
14
|
+
|
|
15
|
+
## When to Apply
|
|
16
|
+
|
|
17
|
+
- After ANY agent writes to state files (mandatory before STATUS: DONE)
|
|
18
|
+
- Before committing changes that touch `docs/` or `.harness/`
|
|
19
|
+
- When the user reports state files "feel out of sync"
|
|
20
|
+
- Periodically — even when nothing recently changed (drift accumulates silently)
|
|
21
|
+
|
|
22
|
+
## Procedure
|
|
23
|
+
|
|
24
|
+
> **Philosophy**: Use deterministic cross-checks, not LLM intuition. Each check has a single PASS/WARN/FAIL outcome that does not depend on judgment. The LLM performs the file reads and comparisons listed below — no shell scripts, no external dependencies.
|
|
25
|
+
|
|
26
|
+
### Check 1: Required State Files Exist with Non-Placeholder Content
|
|
27
|
+
|
|
28
|
+
For each required state file, verify it exists and is not just a template stub:
|
|
29
|
+
|
|
30
|
+
| File | Placeholder Sentinel (FAIL if present) |
|
|
31
|
+
|------|----------------------------------------|
|
|
32
|
+
| `docs/project-state.md` (or `.harness/`) | `S1-1 \| Project scaffolding` |
|
|
33
|
+
| `docs/project-brief.md` | `This is the north star for all decisions` |
|
|
34
|
+
| `docs/dependency-map.md` | `Add new modules above this line` |
|
|
35
|
+
| `docs/features.md` | `Add new features above this line` |
|
|
36
|
+
|
|
37
|
+
For each file:
|
|
38
|
+
- **Missing** → FAIL: `[FAIL] {file} not found`
|
|
39
|
+
- **Sentinel present** → WARN: `[WARN] {file} contains template placeholder — run setup`
|
|
40
|
+
- **Real content** → PASS
|
|
41
|
+
|
|
42
|
+
> `failure-patterns.md` is excluded — FP-001~004 templates with Frequency: 0 are normal initial state.
|
|
43
|
+
|
|
44
|
+
### Check 2: features.md ↔ project-state.md Story Consistency
|
|
45
|
+
|
|
46
|
+
1. Read all `✅ done` Stories from `docs/project-state.md` (or `.harness/project-state.md` in Team mode) Story Status table
|
|
47
|
+
2. Read `docs/features.md` Feature Registry
|
|
48
|
+
3. For each `✅ done` Story:
|
|
49
|
+
- If Story has `[FR-NNN]` prefix → must map to a feature row with that FR reference
|
|
50
|
+
- Otherwise → must map to at least one feature row whose Key Files overlap with the Story's Scope
|
|
51
|
+
4. Outcomes:
|
|
52
|
+
- Story ✅ done but no matching feature row → FAIL: `[FAIL] Story {S-N-M} done but no feature registered`
|
|
53
|
+
- Story ✅ done but feature still `⬜ planned` → FAIL: `[FAIL] Feature status drift — {feature} is planned but Story {S-N-M} is done`
|
|
54
|
+
- All consistent → PASS
|
|
55
|
+
|
|
56
|
+
### Check 3: dependency-map.md vs Actual src/ Directory Count
|
|
57
|
+
|
|
58
|
+
> **Goal**: detect orphan modules (in src/ but not registered) and stale entries (registered but deleted).
|
|
59
|
+
|
|
60
|
+
1. Read `docs/dependency-map.md` and count rows in the Module table (excluding header / comment lines like `Add new modules above this line`)
|
|
61
|
+
2. Inspect the source root (priority order — first existing path wins):
|
|
62
|
+
- `src/`
|
|
63
|
+
- `lib/`
|
|
64
|
+
- `app/`
|
|
65
|
+
- Project root (if no src-like directory)
|
|
66
|
+
3. Count direct child directories of the source root that look like modules (skip `__pycache__/`, `node_modules/`, `dist/`, `build/`, `.next/`, hidden dirs)
|
|
67
|
+
4. Compare:
|
|
68
|
+
- `|map_count - dir_count| / max(map_count, dir_count) <= 0.20` → PASS
|
|
69
|
+
- Difference > 20% → WARN: `[WARN] dependency-map has {map_count} modules but src/ has {dir_count} directories — likely drift`
|
|
70
|
+
- One side is 0 and the other > 0 → FAIL: `[FAIL] dependency-map empty but {dir_count} src directories exist (or vice versa)`
|
|
71
|
+
|
|
72
|
+
> For tiny projects (<3 modules), this check always passes — see setup.md "Small Project Guidance".
|
|
73
|
+
|
|
74
|
+
### Check 4: agent-memory Legacy Names
|
|
75
|
+
|
|
76
|
+
Verify no legacy agent-memory file names remain after the v0.9 rename (planner→pm, sprint-manager→lead, navigator→lead, builder→pm):
|
|
77
|
+
|
|
78
|
+
1. Scan `docs/agent-memory/` (and `.harness/agent-memory/` in Team mode)
|
|
79
|
+
2. If any of these legacy names exist → WARN with rename suggestion:
|
|
80
|
+
- `planner.md` → rename to `pm.md`
|
|
81
|
+
- `sprint-manager.md` → rename to `lead.md`
|
|
82
|
+
- `navigator.md` → rename to `lead.md`
|
|
83
|
+
- `builder.md` → rename to `pm.md`
|
|
84
|
+
3. If both legacy and new names exist for the same role → FAIL: `[FAIL] Both {legacy} and {new} exist — merge then delete legacy`
|
|
85
|
+
|
|
86
|
+
### Check 5: Iron Law #10 Self-Verify Marker
|
|
87
|
+
|
|
88
|
+
When invoked from another agent (pm, reviewer, wrap-up), confirm the calling agent declared its self-verify intent:
|
|
89
|
+
- The calling agent should have written nothing else after invoking state-check
|
|
90
|
+
- If the agent already produced STATUS: DONE before calling state-check → WARN: `[WARN] Iron Law #10 violation — STATUS: DONE issued before state-check`
|
|
91
|
+
|
|
92
|
+
This check is informational — humans calling the skill directly can ignore it.
|
|
93
|
+
|
|
94
|
+
<!-- CREW_MODE_START -->
|
|
95
|
+
### Check 6 (🟣 Pipeline only): Validation Tracker Coverage
|
|
96
|
+
|
|
97
|
+
If `docs/project-brief.md` contains a `## Validation Tracker` section:
|
|
98
|
+
|
|
99
|
+
1. Read FR Coverage table — for each FR with at least one Story, that Story must exist in project-state.md Story Status
|
|
100
|
+
2. Read ARB Fail Resolution table — for each Fail item with a Story link, the Story must exist
|
|
101
|
+
3. Outcomes:
|
|
102
|
+
- Tracker references missing Story → FAIL: `[FAIL] Validation Tracker references {S-N-M} but Story not found in project-state.md`
|
|
103
|
+
- Story marked ✅ done in project-state but Tracker still shows ⬜ → WARN: `[WARN] Validation Tracker out of sync — {Story} done but {KPI/FR/ARB} status unchanged`
|
|
104
|
+
|
|
105
|
+
If no Validation Tracker → skip.
|
|
106
|
+
<!-- CREW_MODE_END -->
|
|
107
|
+
|
|
108
|
+
## Output Format
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
## State Check Result
|
|
112
|
+
|
|
113
|
+
### Check 1: Required Files
|
|
114
|
+
- [x] docs/project-state.md — has content
|
|
115
|
+
- [x] docs/project-brief.md — has content
|
|
116
|
+
- [x] docs/dependency-map.md — has content
|
|
117
|
+
- [x] docs/features.md — has content
|
|
118
|
+
|
|
119
|
+
### Check 2: Story ↔ Feature Consistency
|
|
120
|
+
- {N} ✅ done Stories cross-checked
|
|
121
|
+
- {M} matched / {K} drifted
|
|
122
|
+
|
|
123
|
+
### Check 3: dependency-map ↔ src/ Coverage
|
|
124
|
+
- map: {N} modules, src/: {M} directories — {diff}% drift
|
|
125
|
+
|
|
126
|
+
### Check 4: Agent Memory Legacy Names
|
|
127
|
+
- No legacy names found (or list of legacy files to rename)
|
|
128
|
+
|
|
129
|
+
<!-- CREW_MODE_START -->
|
|
130
|
+
### Check 6: Validation Tracker (🟣)
|
|
131
|
+
- {N} FR references checked / {M} drifted
|
|
132
|
+
<!-- CREW_MODE_END -->
|
|
133
|
+
|
|
134
|
+
### Findings
|
|
135
|
+
- [PASS] {N} checks passed
|
|
136
|
+
- [WARN] {N} warnings: {list}
|
|
137
|
+
- [FAIL] {N} failures: {list}
|
|
138
|
+
|
|
139
|
+
STATUS: PASS | WARN | FAIL
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Result Interpretation
|
|
143
|
+
|
|
144
|
+
- **PASS** — all checks passed; calling agent may proceed with STATUS: DONE
|
|
145
|
+
- **WARN** — non-blocking issues; calling agent should include warnings in its output but may proceed
|
|
146
|
+
- **FAIL** — blocking; calling agent must NOT report STATUS: DONE until failures are resolved
|
|
147
|
+
|
|
148
|
+
### 🧭 Navigation — After State Check
|
|
149
|
+
|
|
150
|
+
When invoked directly (not by another agent), append:
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
---
|
|
154
|
+
🧭 Next Step
|
|
155
|
+
→ Result: {PASS | WARN | FAIL}
|
|
156
|
+
→ Next: {fix the listed issues, then re-run state-check} or {return to caller}
|
|
157
|
+
→ Why: state-check is the deterministic gate before STATUS: DONE
|
|
158
|
+
→ Pipeline: utility skill (no pipeline step)
|
|
159
|
+
---
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
When invoked by another agent (pm/reviewer/wrap-up), control returns to the caller — no separate 🧭 block.
|
|
163
|
+
|
|
164
|
+
## Rules
|
|
165
|
+
|
|
166
|
+
- Do NOT invent data. Read the files and report exactly what you find.
|
|
167
|
+
- Do NOT modify state files in this skill — diagnosis only. Caller decides remediation.
|
|
168
|
+
- Do NOT run shell scripts. All checks are markdown-described file reads + comparisons.
|
|
169
|
+
- If a check cannot be performed (e.g., `docs/` missing entirely), report it as FAIL and stop — further checks are meaningless.
|
|
170
|
+
|
|
171
|
+
## Anti-patterns
|
|
172
|
+
|
|
173
|
+
| Anti-pattern | Correct Approach |
|
|
174
|
+
|---|---|
|
|
175
|
+
| Skip state-check because "I just wrote those files" | Run it anyway — Iron Law #10 mandates self-verify |
|
|
176
|
+
| Report PASS when one check could not be performed | Report FAIL with reason; PASS requires all applicable checks ran |
|
|
177
|
+
| Auto-fix drift inside this skill | This skill is read-only diagnosis — caller fixes drift |
|
|
178
|
+
|
|
179
|
+
<!-- TEAM_MODE_START -->
|
|
180
|
+
## Team Mode: State Check
|
|
181
|
+
|
|
182
|
+
In Team mode:
|
|
183
|
+
- Personal state files live in `.harness/` (project-state.md, failure-patterns.md, agent-memory/)
|
|
184
|
+
- Shared files live in `docs/` (project-brief.md, features.md, dependency-map.md)
|
|
185
|
+
- Check 1 looks in BOTH directories — file exists if either path has it
|
|
186
|
+
- Check 2 (Story ↔ Feature) reads `.harness/project-state.md` (personal) against `docs/features.md` (shared) — drift is per-developer
|
|
187
|
+
- Check 4 (legacy agent-memory) scans `.harness/agent-memory/` only
|
|
188
|
+
- If `git pull` was skipped before this run, shared-file checks may report stale data — note this in WARN output
|
|
189
|
+
<!-- TEAM_MODE_END -->
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Capture lessons from the current session before ending.
|
|
6
6
|
Updates docs/failure-patterns.md with new patterns and refreshes docs/project-state.md Quick Summary.
|
|
7
|
-
This is
|
|
7
|
+
This is kode:harness's memory mechanism — without it, the same mistakes repeat across sessions.
|
|
8
8
|
|
|
9
9
|
## Invoked By
|
|
10
10
|
|
|
@@ -131,8 +131,12 @@ For each issue/error that occurred in this session:
|
|
|
131
131
|
- New module without dependency-map entry → **add it now**
|
|
132
132
|
- Interface change without Interface Change Log entry → **add it now**
|
|
133
133
|
4. Cross-reference `docs/features.md` Key Files against `docs/dependency-map.md` modules — flag orphaned modules
|
|
134
|
+
5. **Run `state-check` skill** (Iron Law #10 — mandatory before STATUS: DONE):
|
|
135
|
+
- PASS → proceed to Step 5.6
|
|
136
|
+
- WARN → include warnings in the final wrap-up report, then proceed
|
|
137
|
+
- FAIL → fix the listed drift (update affected state files), then re-run state-check until PASS or WARN
|
|
134
138
|
|
|
135
|
-
> **Self-check**: `docs/dependency-map.md`에 이 세션에서 새로 추가한 모듈이 모두 등록되었는지 확인. 누락 시 즉시 추가.
|
|
139
|
+
> **Self-check**: `docs/dependency-map.md`에 이 세션에서 새로 추가한 모듈이 모두 등록되었는지 확인. 누락 시 즉시 추가. state-check가 PASS 또는 WARN을 반환해야 다음 단계로 진행합니다.
|
|
136
140
|
|
|
137
141
|
### Step 5.6: Resolve STATE-AUDIT Flags (if applicable)
|
|
138
142
|
|
package/package.json
CHANGED
package/src/init.js
CHANGED
|
@@ -38,6 +38,7 @@ const SKILLS = [
|
|
|
38
38
|
{ id: 'pivot', desc: 'Propagate direction changes across all state files. Use when project goals, technology, scope, or architecture changes.' },
|
|
39
39
|
{ id: 'pr-review', desc: 'Review external Pull Requests for quality, security, and direction alignment. Use when reviewing incoming PRs.' },
|
|
40
40
|
{ id: 'release', desc: 'Pre-deployment validation checklist. Use before deploying, publishing, or creating release tags.' },
|
|
41
|
+
{ id: 'state-check', desc: 'Deterministic verification of state file consistency. Use before STATUS: DONE (Iron Law #10) and when state drift is suspected.' },
|
|
41
42
|
];
|
|
42
43
|
|
|
43
44
|
const AGENTS = [
|
|
@@ -250,8 +251,14 @@ function generateVscode(targetDir, overwrite, mode = 'solo', crew = false) {
|
|
|
250
251
|
}
|
|
251
252
|
|
|
252
253
|
function generateClaude(targetDir, overwrite, mode = 'solo', crew = false) {
|
|
253
|
-
|
|
254
|
-
|
|
254
|
+
const coreRules = resolveContent(readTemplate('core-rules.md'), mode, crew);
|
|
255
|
+
|
|
256
|
+
// CLAUDE.md — Claude Code's canonical project memory file (auto-loaded at session start)
|
|
257
|
+
writeFile(targetDir, 'CLAUDE.md', coreRules, true);
|
|
258
|
+
|
|
259
|
+
// .claude/rules/core.md — secondary dispatcher (also auto-loaded by Claude Code's
|
|
260
|
+
// InstructionsLoaded mechanism; kept for redundancy and rule-discovery tooling)
|
|
261
|
+
writeFile(targetDir, '.claude/rules/core.md', coreRules, true);
|
|
255
262
|
|
|
256
263
|
// Skills (SKILL.md with frontmatter)
|
|
257
264
|
writeSkills(targetDir, '.claude/skills', true, mode, crew);
|
|
@@ -271,6 +278,9 @@ function generateCursor(targetDir, overwrite, mode = 'solo', crew = false) {
|
|
|
271
278
|
coreRules;
|
|
272
279
|
writeFile(targetDir, '.cursor/rules/core.mdc', coreMdc, true);
|
|
273
280
|
|
|
281
|
+
// AGENTS.md — Cursor CLI also reads project-root AGENTS.md as a rule
|
|
282
|
+
writeFile(targetDir, 'AGENTS.md', coreRules, true);
|
|
283
|
+
|
|
274
284
|
// Skills (.cursor/skills — invokable by mentioning skill name)
|
|
275
285
|
writeSkills(targetDir, '.cursor/skills', true, mode, crew);
|
|
276
286
|
|
|
@@ -282,14 +292,16 @@ function generateCursor(targetDir, overwrite, mode = 'solo', crew = false) {
|
|
|
282
292
|
}
|
|
283
293
|
|
|
284
294
|
function generateCodex(targetDir, overwrite, mode = 'solo', crew = false) {
|
|
285
|
-
// AGENTS.md —
|
|
295
|
+
// AGENTS.md — Codex CLI's canonical project instructions file (the only file
|
|
296
|
+
// Codex CLI auto-loads). All skill/agent references must be discoverable from here.
|
|
286
297
|
writeFile(targetDir, 'AGENTS.md', resolveContent(readTemplate('core-rules.md'), mode, crew), true);
|
|
287
298
|
|
|
288
299
|
// Skills (SKILL.md with frontmatter — invokable via $skill-name)
|
|
289
300
|
writeSkills(targetDir, '.agents/skills', true, mode, crew);
|
|
290
301
|
|
|
291
|
-
// Agents (.codex/agents/ —
|
|
292
|
-
|
|
302
|
+
// Agents (.codex/agents/ — markdown subagent files with YAML frontmatter,
|
|
303
|
+
// matching the Cursor/Claude convention used as a Codex compat directory)
|
|
304
|
+
writeAgentsAsMd(targetDir, '.codex/agents', true, mode, crew);
|
|
293
305
|
|
|
294
306
|
// State files (respect user's --overwrite for data files)
|
|
295
307
|
writeStateFiles(targetDir, overwrite, mode, crew);
|
|
@@ -314,8 +326,14 @@ function generateWindsurf(targetDir, overwrite, mode = 'solo', crew = false) {
|
|
|
314
326
|
}
|
|
315
327
|
|
|
316
328
|
function generateAntigravity(targetDir, overwrite, mode = 'solo', crew = false) {
|
|
317
|
-
|
|
318
|
-
|
|
329
|
+
const coreRules = resolveContent(readTemplate('core-rules.md'), mode, crew);
|
|
330
|
+
|
|
331
|
+
// GEMINI.md — Gemini CLI / Antigravity's canonical project context file
|
|
332
|
+
writeFile(targetDir, 'GEMINI.md', coreRules, true);
|
|
333
|
+
|
|
334
|
+
// AGENTS.md — Antigravity also follows the AGENTS.md convention shared by
|
|
335
|
+
// Codex / Cursor CLI; emitting it broadens compatibility with no downside
|
|
336
|
+
writeFile(targetDir, 'AGENTS.md', coreRules, true);
|
|
319
337
|
|
|
320
338
|
// Skills (.gemini/skills/ — SKILL.md format)
|
|
321
339
|
writeSkills(targetDir, '.gemini/skills', true, mode, crew);
|
|
@@ -520,14 +538,16 @@ function runDoctor(targetDir) {
|
|
|
520
538
|
}
|
|
521
539
|
}
|
|
522
540
|
|
|
523
|
-
// Check for IDE-specific files (detect which IDE was used)
|
|
541
|
+
// Check for IDE-specific files (detect which IDE was used).
|
|
542
|
+
// Order matters: IDE-unique markers MUST be checked before AGENTS.md,
|
|
543
|
+
// because Cursor and Antigravity now also emit AGENTS.md for compat.
|
|
524
544
|
const ideChecks = [
|
|
525
545
|
['.github/copilot-instructions.md', 'vscode'],
|
|
526
546
|
['.claude/rules/core.md', 'claude'],
|
|
527
547
|
['.cursor/rules/core.mdc', 'cursor'],
|
|
528
|
-
['AGENTS.md', 'codex'],
|
|
529
548
|
['.windsurf/rules/core.md', 'windsurf'],
|
|
530
549
|
['GEMINI.md', 'antigravity'],
|
|
550
|
+
['AGENTS.md', 'codex'],
|
|
531
551
|
];
|
|
532
552
|
|
|
533
553
|
let detectedIde = null;
|