@walwal-harness/cli 7.1.9 → 7.1.10
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/HR-Resource/ceo/SKILL.md +4 -4
- package/HR-Resource/cqo/SKILL.md +3 -3
- package/HR-Resource/cto/SKILL.md +4 -4
- package/README.md +18 -5
- package/apps/harness-dashboard/components/MissionTimeline.tsx +5 -1
- package/apps/harness-dashboard/components/OrgTree.tsx +1 -1
- package/apps/harness-dashboard/components/Scene.tsx +1 -1
- package/apps/harness-dashboard/components/drawer/MissionFlowTab.tsx +4 -1
- package/apps/harness-dashboard/components/drawer/OwnerHistoryTab.tsx +4 -0
- package/apps/harness-dashboard/lib/harness-state.ts +44 -13
- package/apps/harness-dashboard/lib/types.ts +2 -2
- package/assets/templates/AGENTS-ko.md.template +19 -6
- package/assets/templates/AGENTS.md.template +20 -7
- package/assets/templates/HARNESS.md +75 -199
- package/assets/templates/config.json +2 -2
- package/bin/init.js +11 -11
- package/commands/goal.md +6 -4
- package/commands/hot-fix.md +16 -13
- package/commands/submission.md +28 -0
- package/conventions/ceo.md +3 -3
- package/conventions/shared.md +4 -3
- package/package.json +1 -1
- package/scripts/harness-session-start.sh +1 -1
- package/scripts/harness-stop.sh +1 -1
- package/scripts/harness-user-prompt-submit.sh +12 -4
- package/scripts/harness-worker-evidence-validate.sh +8 -3
- package/scripts/import-agency-agents.js +1 -1
- package/scripts/init-agents-md.sh +17 -2
- package/assets/templates/AGENTS-ko /341/204/207/341/205/251/341/206/250/341/204/211/341/205/241/341/204/207/341/205/251/341/206/253.md" +0 -114
|
@@ -1,226 +1,102 @@
|
|
|
1
|
-
|
|
2
|
-
docmeta:
|
|
3
|
-
id: HARNESS
|
|
4
|
-
title: walwal-harness — NEXUS Company Harness 가이드
|
|
5
|
-
type: output
|
|
6
|
-
createdAt: 2026-05-08T00:00:00Z
|
|
7
|
-
updatedAt: 2026-05-08T00:00:00Z
|
|
8
|
-
source:
|
|
9
|
-
producer: agent
|
|
10
|
-
skillId: harness-release
|
|
11
|
-
inputs:
|
|
12
|
-
- documentId: AGENTS
|
|
13
|
-
uri: ../../AGENTS.md
|
|
14
|
-
relation: output-from
|
|
15
|
-
sections:
|
|
16
|
-
- sourceRange: { startLine: 121, endLine: 126 }
|
|
17
|
-
targetRange: { startLine: 11, endLine: 22 }
|
|
18
|
-
- sourceRange: { startLine: 94, endLine: 120 }
|
|
19
|
-
targetRange: { startLine: 24, endLine: 45 }
|
|
20
|
-
- sourceRange: { startLine: 35, endLine: 81 }
|
|
21
|
-
targetRange: { startLine: 49, endLine: 102 }
|
|
22
|
-
- sourceRange: { startLine: 170, endLine: 195 }
|
|
23
|
-
targetRange: { startLine: 144, endLine: 161 }
|
|
24
|
-
- sourceRange: { startLine: 214, endLine: 237 }
|
|
25
|
-
targetRange: { startLine: 171, endLine: 179 }
|
|
26
|
-
- sourceRange: { startLine: 238, endLine: 243 }
|
|
27
|
-
targetRange: { startLine: 181, endLine: 187 }
|
|
28
|
-
tags: [harness, template, nexus, v6.1.4, doctrine]
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
# walwal-harness — NEXUS Company Harness 가이드
|
|
32
|
-
|
|
33
|
-
> Anthropic 블로그 "Harness Design for Long-Running Application Development" 기반.
|
|
34
|
-
> v6 NEXUS 도큐트린: 하네스를 **하나의 회사**로 본다. Owner(사용자)는 Dispatcher(CEO)와만 대화하고, 회사 내부 부서가 자율적으로 GOAL 을 실행·검증·운영한다.
|
|
35
|
-
>
|
|
36
|
-
> 이 파일은 **빠른 운영 가이드** 입니다. 프로젝트별 살아있는 컨텍스트는 `AGENTS.md` (CLAUDE.md = AGENTS.md 심볼릭 링크) 를 참조하세요.
|
|
37
|
-
|
|
38
|
-
## 단일 대화 창구 (Doctrine)
|
|
1
|
+
# walwal-harness Runtime Reference
|
|
39
2
|
|
|
40
|
-
|
|
41
|
-
Owner (사용자)
|
|
42
|
-
↕ (단일 대화 창구)
|
|
43
|
-
Dispatcher = CEO ── 부서 식별 · GOAL 협의 · escalation 보고
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
- Owner ↔ Dispatcher만 직접 대화. 다른 부서가 Owner와 직접 대화하는 것은 **금지**.
|
|
47
|
-
- 모든 escalation은 Dispatcher 경유.
|
|
48
|
-
- GOAL 작성·수정은 CEO 전용 (`.harness/actions/goals.md`, CTO와 협의로 구체화).
|
|
49
|
-
|
|
50
|
-
## 조직 구조 (v6 NEXUS)
|
|
3
|
+
This project runs in company mode.
|
|
51
4
|
|
|
52
|
-
|
|
53
|
-
Owner
|
|
54
|
-
↕
|
|
55
|
-
Dispatcher (CEO)
|
|
56
|
-
├─ Conductor # 자율 실행 엔진 (Gen↔Eval↔Ops 루프, escalation 트리거)
|
|
57
|
-
└─ Meeting-Manager # 동기화 엔진 (6종 회의 · 적응형 cadence · parallel-tracks fork-join)
|
|
58
|
-
↓
|
|
59
|
-
Planner (COO + HR) # Sprint·AC·인선·온보딩
|
|
60
|
-
└─ COO Hypothesis Cell (직영)
|
|
61
|
-
├─ coo-developer # 가설 검증 spike·백데이터 실험
|
|
62
|
-
└─ documentationer # 웹리서치·보고서·가설 판정
|
|
63
|
-
↓
|
|
64
|
-
┌─────┴────────┬──────────────┐
|
|
65
|
-
CTO CQO Service-Ops
|
|
66
|
-
(Gen 총괄) (Eval 총괄) (운용·모니터·인시던트·자율회고)
|
|
67
|
-
├ Gen-BE ├ Eval-Functional
|
|
68
|
-
├ Gen-FE ├ Eval-Visual
|
|
69
|
-
├ Designer ├ Eval-CodeQuality
|
|
70
|
-
└ DevOps ├ Eval-Architecture
|
|
71
|
-
└ Eval-Security
|
|
72
|
-
```
|
|
5
|
+
Owner-facing commands are limited to:
|
|
73
6
|
|
|
74
|
-
|
|
7
|
+
| Command | Purpose | Document root |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `/goal` | Set or change the company goal | `.harness/documents/goal-{index}-{name}/` |
|
|
10
|
+
| `/submission` | Add a requirement under the active goal | `.harness/documents/goal-{index}-{name}/submission-{index}-{name}/` |
|
|
11
|
+
| `/hot-fix` | Fix an urgent issue under the active goal | `.harness/documents/goal-{index}-{name}/hotfix-{index}-{name}/` |
|
|
75
12
|
|
|
76
|
-
|
|
13
|
+
No CXX role is a slash command. `/ceo`, `/coo`, `/cdo`, `/cto`, `/cqo`, `/ops`, `/hiring`, and `/resource-manager` are invalid Owner commands.
|
|
77
14
|
|
|
78
|
-
|
|
15
|
+
## Company Structure
|
|
79
16
|
|
|
80
17
|
```
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
18
|
+
Owner
|
|
19
|
+
└─ /goal, /submission, or /hot-fix
|
|
20
|
+
└─ harness-ceo
|
|
21
|
+
├─ harness-coo
|
|
22
|
+
├─ harness-cdo
|
|
23
|
+
├─ harness-cto
|
|
24
|
+
├─ harness-cqo
|
|
25
|
+
└─ harness-ops
|
|
88
26
|
```
|
|
89
27
|
|
|
90
|
-
|
|
28
|
+
CEO is the Owner's only internal contact. CEO talks only to CXX agents. CXX agents coordinate, hire, review, and decide; they do not directly produce specialist deliverables.
|
|
91
29
|
|
|
92
|
-
|
|
93
|
-
.harness/
|
|
94
|
-
├── HARNESS.md # 이 파일
|
|
95
|
-
├── config.json # 하네스 설정 (company_mode, behavior, flow gates)
|
|
96
|
-
├── progress.json # 기계 판독 상태 (세션 오케스트레이션 SoT)
|
|
97
|
-
├── progress.log # 사람 판독 히스토리 (append-only)
|
|
98
|
-
├── handoff.json # 세션 전환 문서 (prompt, model, artifacts, regression)
|
|
99
|
-
├── memory.md # 시스템 entry (예: M-NEXUS-P3) + 사용자 메모
|
|
100
|
-
├── doctrine/nexus.md # NEXUS 도큐트린 본문
|
|
101
|
-
├── ref/<role>-<stack>.md # 스택별 best-practice (FE/BE/Designer/DevOps)
|
|
102
|
-
├── prompts/ # 에이전트 프롬프트
|
|
103
|
-
├── baselines/ # Eval baseline (의존 그래프, 시각 baseline 등)
|
|
104
|
-
├── ops/metrics.jsonl # 운영 메트릭 (DevOps append / Service-Ops read)
|
|
105
|
-
├── actions/ # 활성 스프린트 산출물 (각 부서 쓰기)
|
|
106
|
-
│ ├── pipeline.json # Dispatcher 결정 (FULLSTACK / FE-ONLY / BE-ONLY)
|
|
107
|
-
│ ├── plan.md # Planner — 제품 사양
|
|
108
|
-
│ ├── feature-list.json # Planner — Executable AC
|
|
109
|
-
│ ├── api-contract.json # Planner — API 계약 (BE/FE 공유)
|
|
110
|
-
│ ├── sprint-contract.md # Planner → BE/FE 가 섹션별로 채움
|
|
111
|
-
│ ├── evaluation-*.md # Evaluator-* 별 결과
|
|
112
|
-
│ ├── goals.md # CEO (Dispatcher) 전용
|
|
113
|
-
│ ├── meetings/ # Meeting-Manager — 회의록·prep (followup-review 포함)
|
|
114
|
-
│ ├── incidents/ # Service-Ops — 사고 타임라인·RCA
|
|
115
|
-
│ ├── escalations/ # Conductor — Owner 보고용
|
|
116
|
-
│ ├── onboarding/ # Planner(HR) — 부서 온보딩 패키지
|
|
117
|
-
│ ├── hypothesis/<id>/ # COO Hypothesis Cell (spike/, brief.md, report.md, verdict.json)
|
|
118
|
-
│ ├── hr-roster.md # Planner(HR) — 활성 부서 명단
|
|
119
|
-
│ ├── cto-review-*.md # CTO 전용
|
|
120
|
-
│ ├── cqo-audit-*.md # CQO 전용
|
|
121
|
-
│ └── ops-report-*.md # Service-Ops 전용
|
|
122
|
-
└── archive/ # 완료 스프린트 (불변, Evaluator 가 archive)
|
|
123
|
-
└── D-NNN/S-NNN/ # design-NNN / sprint-NNN
|
|
124
|
-
```
|
|
30
|
+
## Runtime Paths
|
|
125
31
|
|
|
126
|
-
|
|
32
|
+
| Path | Role |
|
|
33
|
+
|---|---|
|
|
34
|
+
| `.harness/documents/goal-{index}-{name}/ceo.md` | Goal framing and CEO routing |
|
|
35
|
+
| `.harness/documents/goal-{index}-{name}/{cxx}.md` | Goal-level CXX decision record |
|
|
36
|
+
| `.harness/documents/goal-{index}-{name}/submission-{index}-{name}/` | Additional requirement under the active goal |
|
|
37
|
+
| `.harness/documents/goal-{index}-{name}/hotfix-{index}-{name}/` | Emergency fix under the active goal |
|
|
38
|
+
| `.harness/documents/{goal-or-child-mission}/{owning-cxx}/workers/{worker-name}.md` | Worker evidence owned by a CXX |
|
|
39
|
+
| `.harness/conventions/` | Durable rules, including requirement conventions from submissions |
|
|
40
|
+
| `.harness/gotchas/` | Recurrence-prevention records from hot-fixes |
|
|
41
|
+
| `.harness/memories/` | Long-term shared context |
|
|
42
|
+
| `.harness/shared/HR-Resource/` | Hireable worker skill pool |
|
|
43
|
+
| `.harness/shared/hr-roster.json` | Hired worker roster |
|
|
44
|
+
| `.harness/archive/` | CQO-approved completed mission records |
|
|
45
|
+
| `.harness/progress.log` | Append-only command and status history |
|
|
46
|
+
| `.harness/progress.json` | Machine-readable current runtime state |
|
|
127
47
|
|
|
128
|
-
|
|
129
|
-
Owner: "X 만들어줘" (자유 형식)
|
|
130
|
-
│
|
|
131
|
-
▼
|
|
132
|
-
Dispatcher (CEO)
|
|
133
|
-
├─ Goal 협의 (모호하면 1회 짧게 명료화)
|
|
134
|
-
└─ pipeline.json 결정 → Conductor 핸드오프
|
|
135
|
-
│
|
|
136
|
-
▼
|
|
137
|
-
Conductor (자율 실행 엔진)
|
|
138
|
-
│
|
|
139
|
-
▼
|
|
140
|
-
Planner ─ ┐
|
|
141
|
-
│ ├─ light → 기존 PRD 만 보강
|
|
142
|
-
│ └─ full → plan.md + feature-list + api-contract 확정
|
|
143
|
-
▼
|
|
144
|
-
CTO ── 실행 분할 ── ┐
|
|
145
|
-
▼ ▼
|
|
146
|
-
Gen-BE ⇄ Gen-FE (회사모드 병렬 worker pool)
|
|
147
|
-
│
|
|
148
|
-
▼
|
|
149
|
-
CQO 적대적 검증 (early-exit chain)
|
|
150
|
-
├─ Eval-CodeQuality (정적 · 저비용)
|
|
151
|
-
├─ Eval-Functional (동작 · 중비용 · Playwright/curl)
|
|
152
|
-
├─ Eval-Visual (렌더 · 고비용 · screenshot)
|
|
153
|
-
├─ Eval-Architecture (IA-MAP·계층 위반·의존 그래프)
|
|
154
|
-
└─ Eval-Security (OWASP·SAST·시크릿·CVE)
|
|
155
|
-
│
|
|
156
|
-
▼
|
|
157
|
-
Service-Ops (상시) ── monitor · auto-retro · incident
|
|
158
|
-
│
|
|
159
|
-
▼
|
|
160
|
-
Archive (sprint advance)
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
앞단 FAIL 시 뒤 단계는 실행하지 않고 즉시 재작업으로 리라우팅.
|
|
164
|
-
3회 연속 FAIL · GOAL 위반 · 인시던트 → Conductor 가 Dispatcher 통해 Owner에게 escalation.
|
|
48
|
+
Flat `.harness/documents/{mission}/workers/` reports are legacy. New worker evidence must be under `{owning-cxx}/workers/`.
|
|
165
49
|
|
|
166
|
-
##
|
|
50
|
+
## Required Flow
|
|
167
51
|
|
|
168
|
-
|
|
169
|
-
|------|------|--------|
|
|
170
|
-
| **standup** | 적응형 cadence (light 30m / normal 1h / heavy 4h) | 부서 발신 |
|
|
171
|
-
| **sprint-review** | sprint advance 직전 | CTO |
|
|
172
|
-
| **spec-review** | Planner 산출물 변경 | CTO |
|
|
173
|
-
| **incident-war-room** | Service-Ops 인시던트 발신 | CEO + CTO |
|
|
174
|
-
| **all-hands** | 분기/대형 결정 | CEO |
|
|
175
|
-
| **followup-review** | parallel-tracks fork 종료 후 | CTO (goal-* fork 면 CEO) |
|
|
52
|
+
### Goal
|
|
176
53
|
|
|
177
|
-
|
|
54
|
+
1. CEO creates or updates `.harness/documents/goal-{index}-{name}/ceo.md`.
|
|
55
|
+
2. CEO routes only needed CXX agents.
|
|
56
|
+
3. Each CXX writes its own `{cxx}.md`.
|
|
57
|
+
4. CXX agents use `harness-resource-manager` and `harness-hiring` before assigning specialist work.
|
|
58
|
+
5. Workers write evidence under `{owning-cxx}/workers/`.
|
|
59
|
+
6. CEO reports only after CXX records and required worker evidence exist.
|
|
178
60
|
|
|
179
|
-
|
|
61
|
+
### Submission
|
|
180
62
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
63
|
+
1. CEO locates the active goal directory.
|
|
64
|
+
2. CEO creates `.harness/documents/goal-{index}-{name}/submission-{index}-{name}/ceo.md`.
|
|
65
|
+
3. CEO routes only the CXX needed for the additional requirement.
|
|
66
|
+
4. CXX agents update `.harness/conventions/` when the new requirement creates or changes durable project rules.
|
|
67
|
+
5. Worker reports and CXX notes stay inside the submission directory.
|
|
185
68
|
|
|
186
|
-
|
|
69
|
+
### Hot Fix
|
|
187
70
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
71
|
+
1. CEO locates the active goal directory.
|
|
72
|
+
2. CEO creates `.harness/documents/goal-{index}-{name}/hotfix-{index}-{name}/ceo.md`.
|
|
73
|
+
3. CEO routes CTO and CQO first.
|
|
74
|
+
4. CTO hires implementation workers and records the patch plan in `cto.md`.
|
|
75
|
+
5. CQO hires evaluator/tester workers and records the verdict in `cqo.md`.
|
|
76
|
+
6. CQO registers at least one durable lesson in `.harness/gotchas/`, `.harness/conventions/`, or `.harness/memories/`.
|
|
192
77
|
|
|
193
|
-
##
|
|
78
|
+
## Hard Gates
|
|
194
79
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
| **Evaluation PASS 기준** | Evaluator 결과 | 2.80 / 3.00 이상. Evidence 없는 score = 0. AC 부분 통과 = FAIL. Regression 1건 = FAIL |
|
|
201
|
-
| **Known-Bug Hard Gate** | sprint advance | 알려진 런타임 버그 보유 시 PASS / sprint advance 금지 |
|
|
80
|
+
- CEO must not dispatch, hire, or brief workers directly.
|
|
81
|
+
- CXX agents must not directly execute specialist deliverables.
|
|
82
|
+
- CTO worker dispatch requires `cto.md` first.
|
|
83
|
+
- CQO verdicts require evaluator/tester worker evidence.
|
|
84
|
+
- Every `ceo.md`, `{cxx}.md`, and worker report must end with:
|
|
202
85
|
|
|
203
|
-
|
|
86
|
+
```markdown
|
|
87
|
+
## Implementation Notes
|
|
204
88
|
|
|
205
|
-
|
|
206
|
-
-
|
|
207
|
-
- **메모리 오염 방어**: 신규 entry 는 `unverified` 로 시작 → Planner 리뷰 시 `verified` 승격. TTL 만료 항목은 sprint 전환 시 갱신/삭제.
|
|
208
|
-
- **검증 불가능 항목 즉시 삭제**.
|
|
89
|
+
### Design Decisions
|
|
90
|
+
- None
|
|
209
91
|
|
|
210
|
-
|
|
92
|
+
### Deviations
|
|
93
|
+
- None
|
|
211
94
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
| `npx walwal-harness` | 첫 설치 / 안전 init (G-NNN, C-NNN 보존) |
|
|
215
|
-
| `npx walwal-harness --force` | 시스템 파일 강제 갱신 (G/C entry 는 여전히 보존) |
|
|
216
|
-
| `npx walwal-harness migrate` | 구버전 progress.json / config.json schema 정상화 |
|
|
217
|
-
| `npx walwal-harness verify` | 설치 정합성 검증 |
|
|
218
|
-
| `bash scripts/harness-dashboard-up.sh` | Brick Office 라이브 대시보드 (http://localhost:3001) |
|
|
219
|
-
| `bash scripts/harness-wake-install.sh install .` | 1시간 안전망 wake 등록 (launchd) |
|
|
220
|
-
| `bash scripts/harness-wake-install.sh status` | wake 상태 / 등록 프로젝트 확인 |
|
|
95
|
+
### Tradeoffs
|
|
96
|
+
- None
|
|
221
97
|
|
|
222
|
-
|
|
98
|
+
### Open Questions
|
|
99
|
+
- None
|
|
100
|
+
```
|
|
223
101
|
|
|
224
|
-
|
|
225
|
-
2. `gotchas/<role>.md`, `conventions/<role>.md` 의 Preserved Rules 섹션 정리.
|
|
226
|
-
3. Owner 는 "하네스 엔지니어링 시작" 또는 자유 형식 지시로 Dispatcher 를 깨운다 — 이후는 Conductor 가 이어받는다.
|
|
102
|
+
The notes must be written in English. Use `None` when a subsection has no entries.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"harness": {
|
|
3
3
|
"name": "walwal-harness — NEXUS company harness",
|
|
4
4
|
"version": "7.1.1",
|
|
5
|
-
"description": "v7 company harness. Owner uses /goal or /hot-fix, CEO coordinates CXX agents, CXX agents use resource-manager/hiring, and hired workers produce mission evidence under .harness/documents/{mission}/workers/.",
|
|
5
|
+
"description": "v7 company harness. Owner uses /goal, /submission, or /hot-fix, CEO coordinates CXX agents, CXX agents use resource-manager/hiring, and hired workers produce mission evidence under .harness/documents/{goal-or-child-mission}/{owning-cxx}/workers/.",
|
|
6
6
|
"source": "https://www.anthropic.com/engineering/harness-design-long-running-apps"
|
|
7
7
|
},
|
|
8
8
|
"agents": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"flow": {
|
|
20
20
|
"sequence": ["ceo", "coo", "cdo", "cto", "cqo", "ops"],
|
|
21
21
|
"worker_gate": "CXX agents must use harness-resource-manager and harness-hiring before specialist deliverables.",
|
|
22
|
-
"worker_reports_required": ".harness/documents/{mission}/workers/{worker-name}.md",
|
|
22
|
+
"worker_reports_required": ".harness/documents/{goal-or-child-mission}/{owning-cxx}/workers/{worker-name}.md",
|
|
23
23
|
"retry_on_fail": true,
|
|
24
24
|
"max_retries_per_sprint": 5,
|
|
25
25
|
"escalate_to_ceo_after": 3,
|
package/bin/init.js
CHANGED
|
@@ -766,7 +766,7 @@ function installCommands() {
|
|
|
766
766
|
for (const commandsDest of commandDests) {
|
|
767
767
|
const existing = fs.readdirSync(commandsDest);
|
|
768
768
|
for (const f of existing) {
|
|
769
|
-
if (f.startsWith('harness-') || ['goal.md', 'hot-fix.md', 'play-harness.md', 'release-harness.md', 'stop-harness.md', 'brick-office.md', 'hiring.md', 'resource-manager.md', 'ceo.md', 'coo.md', 'cdo.md', 'cto.md', 'cqo.md', 'ops.md'].includes(f)) {
|
|
769
|
+
if (f.startsWith('harness-') || ['goal.md', 'hot-fix.md', 'submission.md', 'play-harness.md', 'release-harness.md', 'stop-harness.md', 'brick-office.md', 'hiring.md', 'resource-manager.md', 'ceo.md', 'coo.md', 'cdo.md', 'cto.md', 'cqo.md', 'ops.md'].includes(f)) {
|
|
770
770
|
fs.unlinkSync(path.join(commandsDest, f));
|
|
771
771
|
}
|
|
772
772
|
}
|
|
@@ -910,7 +910,7 @@ function installUserPromptSubmitHook() {
|
|
|
910
910
|
});
|
|
911
911
|
writeClaudeSettings(settings);
|
|
912
912
|
log('UserPromptSubmit hook installed in .claude/settings.json');
|
|
913
|
-
log(' → /goal and /hot-fix are guided through harness-ceo and CXX workflow');
|
|
913
|
+
log(' → /goal, /submission, and /hot-fix are guided through harness-ceo and CXX workflow');
|
|
914
914
|
log(' → Opt-out per message: say "harness skip" or "without harness"');
|
|
915
915
|
log(' → Disable globally: set .harness/config.json behavior.auto_route_ceo = false');
|
|
916
916
|
} else {
|
|
@@ -1163,7 +1163,7 @@ Runtime (always-on company mode):
|
|
|
1163
1163
|
- Stop 훅이 매 turn 종료 시 다음 부서로 자동 연쇄.
|
|
1164
1164
|
- 1시간 안전망 wake (선택): bash scripts/harness-wake-install.sh install .
|
|
1165
1165
|
- 3D 대시보드 (선택): bash scripts/harness-dashboard-up.sh
|
|
1166
|
-
- Owner 입력은 GOAL 모호성, escalation, 결과 보고에만 필요합니다.
|
|
1166
|
+
- Owner 입력은 GOAL 모호성, submission, hot-fix, escalation, 결과 보고에만 필요합니다.
|
|
1167
1167
|
|
|
1168
1168
|
What it does:
|
|
1169
1169
|
1. Scaffolds project-local .harness/ runtime state
|
|
@@ -1176,7 +1176,7 @@ What it does:
|
|
|
1176
1176
|
|
|
1177
1177
|
After init:
|
|
1178
1178
|
1. Restart Claude/Codex session if command discovery needs refresh.
|
|
1179
|
-
2. Use /goal or /hot-fix.
|
|
1179
|
+
2. Use /goal, /submission, or /hot-fix.
|
|
1180
1180
|
3. Internal agents must call hired agents/skills, not slash commands.
|
|
1181
1181
|
`);
|
|
1182
1182
|
}
|
|
@@ -1408,7 +1408,7 @@ function showMigrationProposal(flags) {
|
|
|
1408
1408
|
}
|
|
1409
1409
|
if (flags.configMissingCompanyMode) {
|
|
1410
1410
|
console.log(' • config.json: company_mode 섹션 동기화 가능');
|
|
1411
|
-
console.log(' Owner /goal, /hot-fix → CEO/CXX/worker 흐름으로 고정합니다.');
|
|
1411
|
+
console.log(' Owner /goal, /submission, /hot-fix → CEO/CXX/worker 흐름으로 고정합니다.');
|
|
1412
1412
|
}
|
|
1413
1413
|
if (flags.configLegacyRouting) {
|
|
1414
1414
|
console.log(' • config.json: legacy dispatcher/conductor wording → v7 CEO/CXX wording');
|
|
@@ -1536,7 +1536,7 @@ function runMigrate(opts = {}) {
|
|
|
1536
1536
|
c.flow = tpl.flow || c.flow;
|
|
1537
1537
|
c.behavior = c.behavior || {};
|
|
1538
1538
|
c.behavior.auto_route_ceo = c.behavior.auto_route_ceo ?? c.behavior.auto_route_dispatcher ?? true;
|
|
1539
|
-
c.behavior.auto_route_ceo_description = 'true 이면 /goal
|
|
1539
|
+
c.behavior.auto_route_ceo_description = 'true 이면 /goal, /submission, /hot-fix 이후 Owner 입력을 v7 CEO/CXX mission flow 기준으로 안내한다.';
|
|
1540
1540
|
delete c.behavior.auto_route_dispatcher;
|
|
1541
1541
|
delete c.behavior.auto_route_dispatcher_description;
|
|
1542
1542
|
delete c.mode_selection;
|
|
@@ -1726,7 +1726,7 @@ function runMigrate(opts = {}) {
|
|
|
1726
1726
|
log('Dry-run 완료 — 실제 변경 적용하려면 `npx walwal-harness migrate` 실행');
|
|
1727
1727
|
} else {
|
|
1728
1728
|
log(`Migration 완료. 백업: ${backupDir}`);
|
|
1729
|
-
log('v7 routing 기준으로 /goal
|
|
1729
|
+
log('v7 routing 기준으로 /goal, /submission, /hot-fix 가 CEO/CXX/worker 흐름을 시작합니다.');
|
|
1730
1730
|
log('회사모드는 기본값이며 사용자 override 는 사용하지 않습니다.');
|
|
1731
1731
|
}
|
|
1732
1732
|
console.log('');
|
|
@@ -1781,7 +1781,7 @@ function runVerify() {
|
|
|
1781
1781
|
log(` skills: ${pass}/${expectedSkills.length * skillRoots.length} OK`);
|
|
1782
1782
|
|
|
1783
1783
|
// 2) owner-facing commands
|
|
1784
|
-
const allowedCommands = new Set(['goal.md', 'hot-fix.md']);
|
|
1784
|
+
const allowedCommands = new Set(['goal.md', 'submission.md', 'hot-fix.md']);
|
|
1785
1785
|
const forbiddenCommands = new Set(['ceo.md', 'coo.md', 'cdo.md', 'cto.md', 'cqo.md', 'ops.md', 'hiring.md', 'resource-manager.md', 'brick-office.md']);
|
|
1786
1786
|
const commandRoots = [
|
|
1787
1787
|
['.claude', CLAUDE_COMMANDS_DIR],
|
|
@@ -1807,7 +1807,7 @@ function runVerify() {
|
|
|
1807
1807
|
}
|
|
1808
1808
|
}
|
|
1809
1809
|
}
|
|
1810
|
-
log(` commands: /goal + /hot-fix checked`);
|
|
1810
|
+
log(` commands: /goal + /submission + /hot-fix checked`);
|
|
1811
1811
|
|
|
1812
1812
|
// 3) progress.json schema (v6+ = version 4 + mode_decision)
|
|
1813
1813
|
const progressPath = path.join(HARNESS_DIR, 'progress.json');
|
|
@@ -1991,14 +1991,14 @@ function main() {
|
|
|
1991
1991
|
log('╔═══════════════════════════════════════════════════════════╗');
|
|
1992
1992
|
log('║ Restart Claude Code for skills & commands to activate! ║');
|
|
1993
1993
|
log('║ ║');
|
|
1994
|
-
log('║ Then invoke /goal or /hot-fix
|
|
1994
|
+
log('║ Then invoke /goal, /submission, or /hot-fix ║');
|
|
1995
1995
|
log('║ ║');
|
|
1996
1996
|
log('║ 기본은 회사모드: 병렬 · 자율 진행. 추가 입력 불필요. ║');
|
|
1997
1997
|
log('╚═══════════════════════════════════════════════════════════╝');
|
|
1998
1998
|
} else {
|
|
1999
1999
|
log('Next steps:');
|
|
2000
2000
|
log(' 1. Restart Claude/Codex if command discovery needs refresh.');
|
|
2001
|
-
log(' 2. Use /goal or /hot-fix.');
|
|
2001
|
+
log(' 2. Use /goal, /submission, or /hot-fix.');
|
|
2002
2002
|
log(' 3. Internal agents call hired agents/skills, not slash commands.');
|
|
2003
2003
|
}
|
|
2004
2004
|
console.log('');
|
package/commands/goal.md
CHANGED
|
@@ -8,17 +8,19 @@ argument-hint: "<goal request>"
|
|
|
8
8
|
Route the Owner request to the installed `harness-ceo` agent/skill.
|
|
9
9
|
|
|
10
10
|
Required flow:
|
|
11
|
-
1. Create or update a
|
|
12
|
-
2. Record CEO decisions in `.harness/documents/{
|
|
11
|
+
1. Create or update a goal under `.harness/documents/goal-{goal_index}-{goal_name}/`.
|
|
12
|
+
2. Record CEO decisions in `.harness/documents/goal-{goal_index}-{goal_name}/ceo.md`.
|
|
13
13
|
3. CEO decides whether brainstorming is needed or whether CXX questions can be issued immediately.
|
|
14
14
|
4. CEO asks COO, CDO, CTO, and CQO only the questions needed for this goal.
|
|
15
15
|
5. CXX roles must start in a fresh session context. Do not let the default model impersonate a missing worker.
|
|
16
16
|
6. CXX roles must not directly execute specialist deliverables. They must use hired workers for research, planning, design, implementation, QA, ops checks, and documentation.
|
|
17
17
|
7. If a required CXX or worker skill is missing, CEO must invoke the installed `harness-hiring` skill before assigning the work.
|
|
18
|
-
8. CEO must require worker report paths under `.harness/documents/{
|
|
18
|
+
8. CEO must require worker report paths under `.harness/documents/goal-{goal_index}-{goal_name}/{owning-cxx}/workers/` before accepting CXX completion.
|
|
19
19
|
9. Do not invoke internal roles through slash commands; commands are Owner entrypoints only.
|
|
20
20
|
|
|
21
|
-
Note:
|
|
21
|
+
Note: A goal is the company's objective. Submissions and hot-fixes that happen while pursuing it should be recorded under that goal directory.
|
|
22
|
+
|
|
23
|
+
Harness documents (ceo.md, cto.md, cqo.md, worker reports) are mission records, not derived output documents. A docmeta skip decision on these files does not authorize skipping any harness protocol step.
|
|
22
24
|
|
|
23
25
|
Owner request:
|
|
24
26
|
|
package/commands/hot-fix.md
CHANGED
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Start an urgent fix
|
|
2
|
+
description: Start an urgent fix under the active goal.
|
|
3
3
|
argument-hint: "<incident or fix request>"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /hot-fix
|
|
7
7
|
|
|
8
|
-
Route the Owner request to the installed `harness-ceo` agent/skill as an emergency mission.
|
|
8
|
+
Route the Owner request to the installed `harness-ceo` agent/skill as an emergency mission under the active goal.
|
|
9
9
|
|
|
10
10
|
Required flow:
|
|
11
|
-
1.
|
|
12
|
-
2.
|
|
13
|
-
3. CTO
|
|
14
|
-
4.
|
|
15
|
-
5. CXX roles must
|
|
16
|
-
6.
|
|
17
|
-
7.
|
|
18
|
-
8.
|
|
19
|
-
9.
|
|
20
|
-
10.
|
|
11
|
+
1. Locate the active goal document root under `.harness/documents/{goal_name}/`. If no active goal exists, CEO must create/select one before proceeding.
|
|
12
|
+
2. Create `.harness/documents/{goal_name}/hotfix-{hotfix_index}-{hotfix_name}/ceo.md`.
|
|
13
|
+
3. CEO summons CTO and CQO first; summon COO/CDO only when planning or UX decisions are involved.
|
|
14
|
+
4. CTO applies the smallest correct patch path through hired implementation skills.
|
|
15
|
+
5. CXX roles must start in a fresh session context. Do not let the default model impersonate a missing CXX or worker.
|
|
16
|
+
6. CXX roles must not directly execute specialist deliverables. They must use hired workers for implementation, QA, ops checks, and documentation even when the fix is small.
|
|
17
|
+
7. If a required worker is missing, CEO or the responsible CXX must invoke the installed `harness-hiring` skill before assigning the work.
|
|
18
|
+
8. CEO must require worker report paths under `.harness/documents/{goal_name}/hotfix-{hotfix_index}-{hotfix_name}/{owning-cxx}/workers/` before accepting CXX completion.
|
|
19
|
+
9. CQO must register durable lessons in `.harness/gotchas/`, `.harness/conventions/`, or `.harness/memories/`. This step is mandatory, not optional, even for small fixes.
|
|
20
|
+
10. Archive only after CQO has accepted the fix.
|
|
21
|
+
11. Do not invoke internal roles through slash commands; commands are Owner entrypoints only.
|
|
21
22
|
|
|
22
|
-
Note:
|
|
23
|
+
Note: `/hot-fix` is a problem-fix flow while pursuing the active goal. It belongs under that goal in history.
|
|
24
|
+
|
|
25
|
+
Harness documents (ceo.md, cto.md, cqo.md, worker reports) are mission records, not derived output documents. A docmeta skip decision on these files does not authorize skipping any harness protocol step.
|
|
23
26
|
|
|
24
27
|
Hot-fix request:
|
|
25
28
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Add a requirement under the active goal.
|
|
3
|
+
argument-hint: "<additional requirement>"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /submission
|
|
7
|
+
|
|
8
|
+
Route the Owner request to the installed `harness-ceo` agent/skill as an additional requirement under the active goal.
|
|
9
|
+
|
|
10
|
+
Required flow:
|
|
11
|
+
1. Locate the active goal document root under `.harness/documents/{goal_name}/`. If no active goal exists, CEO must ask the Owner to create or select one with `/goal` before proceeding.
|
|
12
|
+
2. Create a submission record under `.harness/documents/{goal_name}/submission-{submission_index}-{submission_name}/`.
|
|
13
|
+
3. Record CEO decisions in `.harness/documents/{goal_name}/submission-{submission_index}-{submission_name}/ceo.md`.
|
|
14
|
+
4. CEO routes only to the CXX agents needed for this additional requirement.
|
|
15
|
+
5. CXX roles must start in a fresh session context. Do not let the default model impersonate a missing CXX or worker.
|
|
16
|
+
6. CXX roles must not directly execute specialist deliverables. They must use hired workers for research, planning, design, implementation, QA, ops checks, and documentation.
|
|
17
|
+
7. If a required worker is missing, the responsible CXX must invoke the installed `harness-hiring` skill before assigning the work.
|
|
18
|
+
8. CXX must manage conventions for new requirements. Durable changes in behavior, architecture, UI, process, or policy must be reflected in `.harness/conventions/` when accepted.
|
|
19
|
+
9. CEO must require worker report paths under `.harness/documents/{goal_name}/submission-{submission_index}-{submission_name}/{owning-cxx}/workers/` before accepting CXX completion.
|
|
20
|
+
10. Do not invoke internal roles through slash commands; commands are Owner entrypoints only.
|
|
21
|
+
|
|
22
|
+
Note: `/submission` is not a new company goal and not an emergency fix. It is an additional requirement while pursuing the active goal. It belongs under that goal in history.
|
|
23
|
+
|
|
24
|
+
Submission request:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
$ARGUMENTS
|
|
28
|
+
```
|
package/conventions/ceo.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# CEO Conventions
|
|
2
2
|
|
|
3
3
|
- CEO is the only Owner-facing internal role.
|
|
4
|
-
- CEO receives `/goal
|
|
4
|
+
- CEO receives `/goal`, `/submission`, and `/hot-fix` through command entrypoints.
|
|
5
5
|
- CEO routes work to CXX agents through agent/skill invocation, not slash commands.
|
|
6
|
-
- CEO records mission framing and routing decisions in `.harness/documents/{
|
|
6
|
+
- CEO records mission framing and routing decisions in `.harness/documents/{goal-or-child-mission}/ceo.md`.
|
|
7
7
|
- CEO asks only mission-relevant questions to COO, CDO, CTO, CQO, and OPS.
|
|
8
8
|
- CEO does not accept CXX completion unless specialist deliverables were produced by hired workers.
|
|
9
|
-
- CEO requires worker names and `.harness/documents/{
|
|
9
|
+
- CEO requires worker names and `.harness/documents/{goal-or-child-mission}/{owning-cxx}/workers/{worker-name}.md` paths in CXX completion reports.
|
package/conventions/shared.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
- This package repository must not contain project runtime `.harness/` state.
|
|
6
6
|
- `walwal-harness init` creates `.harness/` in the target project.
|
|
7
|
-
- `.claude/commands` and `.codex/commands` contain only `/goal
|
|
7
|
+
- `.claude/commands` and `.codex/commands` contain only `/goal`, `/submission`, and `/hot-fix`.
|
|
8
8
|
- CXX and worker execution uses installed agents/skills, not slash commands.
|
|
9
9
|
|
|
10
10
|
## Hiring Boundary
|
|
@@ -19,9 +19,10 @@
|
|
|
19
19
|
|
|
20
20
|
## Mission Documents
|
|
21
21
|
|
|
22
|
-
-
|
|
22
|
+
- Goal records live under `.harness/documents/goal-{index}-{name}/`.
|
|
23
|
+
- Submission and hot-fix records live below the active goal directory.
|
|
23
24
|
- CXX decisions use `{cxx}.md`.
|
|
24
|
-
- Worker reports use `workers/{worker-name}.md`.
|
|
25
|
+
- Worker reports use `{owning-cxx}/workers/{worker-name}.md`.
|
|
25
26
|
|
|
26
27
|
## DDD
|
|
27
28
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walwal-harness/cli",
|
|
3
|
-
"version": "7.1.
|
|
3
|
+
"version": "7.1.10",
|
|
4
4
|
"description": "Company-style AI agent harness for Claude and Codex. Installs commands, CXX agents, skills, HR-Resource hiring pool, and project-local .harness runtime state.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"walwal-harness": "bin/init.js"
|
|
@@ -172,7 +172,7 @@ if [ "$sprint_status" = "init" ]; then
|
|
|
172
172
|
echo "# Harness Company Mode active"
|
|
173
173
|
echo "# Sprint is init, but next_agent=${next_agent}; continue the autonomous loop instead of waiting for Owner."
|
|
174
174
|
else
|
|
175
|
-
echo "# Harness ready — use /goal or /hot-fix"
|
|
175
|
+
echo "# Harness ready — use /goal, /submission, or /hot-fix"
|
|
176
176
|
echo "# 기본 경로는 v7 회사 루프입니다: CEO -> 필요한 CXX -> resource-manager/hiring -> worker reports -> CXX review -> CEO report."
|
|
177
177
|
exit 0
|
|
178
178
|
fi
|
package/scripts/harness-stop.sh
CHANGED
|
@@ -38,7 +38,7 @@ if [ -x "$SCRIPT_DIR/harness-worker-evidence-validate.sh" ]; then
|
|
|
38
38
|
REASON=$(echo "$WORKER_EVIDENCE_JSON" | jq -r '
|
|
39
39
|
"CXX 직접 실행 차단: " +
|
|
40
40
|
([.violations[] | "\(.mission) has CXX docs without worker reports: \(.docs | join(","))"] | join("; ")) +
|
|
41
|
-
". harness-hiring/resource-manager로 전문 worker를 고용 또는 배정하고 .harness/documents/{mission}/workers/{worker-name}.md 를 남긴 뒤 계속하라."
|
|
41
|
+
". harness-hiring/resource-manager로 전문 worker를 고용 또는 배정하고 .harness/documents/{goal-or-child-mission}/{owning-cxx}/workers/{worker-name}.md 를 남긴 뒤 계속하라."
|
|
42
42
|
' 2>/dev/null || echo "CXX 직접 실행 차단: worker report가 없는 mission이 있습니다. hired worker 보고서를 먼저 생성하세요.")
|
|
43
43
|
jq -nc --arg reason "$REASON" '{decision:"block", reason:$reason}'
|
|
44
44
|
exit 0
|
|
@@ -62,7 +62,15 @@ if [ -n "$PROMPT" ] && [ -d "$CWD/.harness" ]; then
|
|
|
62
62
|
fi
|
|
63
63
|
PROMPT_SHORT=$(echo "$PROMPT" | tr '\n' ' ' | sed 's/ */ /g' | cut -c1-80)
|
|
64
64
|
if [ ${#PROMPT_SHORT} -gt 2 ]; then
|
|
65
|
-
|
|
65
|
+
COMMAND_TYPE="other"
|
|
66
|
+
if echo "$PROMPT_SHORT" | grep -qiE '^/goal(\s|$)'; then
|
|
67
|
+
COMMAND_TYPE="goal"
|
|
68
|
+
elif echo "$PROMPT_SHORT" | grep -qiE '^/submission(\s|$)'; then
|
|
69
|
+
COMMAND_TYPE="submission"
|
|
70
|
+
elif echo "$PROMPT_SHORT" | grep -qiE '^/hot-fix(\s|$)'; then
|
|
71
|
+
COMMAND_TYPE="hot-fix"
|
|
72
|
+
fi
|
|
73
|
+
echo "$(date +"%Y-%m-%d %H:%M") | user-prompt | ${COMMAND_TYPE} | ${PROMPT_SHORT}" >> "$PROGRESS_LOG"
|
|
66
74
|
fi
|
|
67
75
|
fi
|
|
68
76
|
|
|
@@ -114,13 +122,13 @@ cat <<EOF
|
|
|
114
122
|
[harness] company | S${SPRINT_NUM} | ${PIPELINE} | agent=${CURRENT_AGENT} (${AGENT_STATUS}) | next=${NEXT_AGENT} | queue=${T_PASSED}/${T_TOTAL} passed | failed=${T_FAILED}
|
|
115
123
|
${CONTEXT_WARNING}
|
|
116
124
|
## Route
|
|
117
|
-
- pipeline=none/init → harness-ceo 스킬로 Owner goal/hot-fix를 접수하고 mission 문서를 생성
|
|
125
|
+
- pipeline=none/init → harness-ceo 스킬로 Owner /goal, /submission, /hot-fix를 접수하고 mission 문서를 생성
|
|
118
126
|
- 기본 경로는 v7 CXX 회사 루프다: CEO -> COO/CDO/CTO/CQO/OPS -> harness-resource-manager -> harness-hiring -> hired workers -> CXX review -> CEO report
|
|
119
|
-
- CXX는 직접 전문 산출물을 만들지 않고 worker report를 `.harness/documents/{mission}/workers/`에 남겨야 한다
|
|
127
|
+
- CXX는 직접 전문 산출물을 만들지 않고 worker report를 `.harness/documents/{goal-or-child-mission}/{owning-cxx}/workers/`에 남겨야 한다
|
|
120
128
|
- Owner에게 "계속 진행", "진행할까요?", "다음 명령을 입력하세요"를 요구하지 않는다. GOAL이 있고 escalation이 아니면 즉시 next_agent/current_agent 업무를 수행한다
|
|
121
129
|
- Owner 입력은 목표 변경·사고·결과 확인용이지 회사 진행을 펌프하는 신호가 아니다
|
|
122
130
|
- CEO는 필요한 CXX만 호출하고, CXX는 resource-manager/hiring 없이 worker 업무를 수행하지 않는다
|
|
123
|
-
-
|
|
131
|
+
- 목표 설정/변경 → goal flow | 추가 요구사항 → submission flow | 긴급 수정 → hot-fix flow | 메타 질문 → 짧게 응답 (skip)
|
|
124
132
|
- 활성 pipeline → next_agent/current_agent 컨텍스트로 계속
|
|
125
133
|
- skip: "harness skip", "just answer" 등 명시 시 단일 메시지 건너뜀
|
|
126
134
|
EOF
|