@ps-neko/nekowork 0.1.0-alpha.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.
Files changed (203) hide show
  1. package/AGENTS.md +112 -0
  2. package/CLAUDE.md +81 -0
  3. package/LICENSE +21 -0
  4. package/README.md +283 -0
  5. package/REVIEW.md +96 -0
  6. package/RULES.md +51 -0
  7. package/SOUL.md +21 -0
  8. package/WORKING-CONTEXT.md +52 -0
  9. package/agent.yaml +219 -0
  10. package/agents/architect.md +57 -0
  11. package/agents/code-reviewer.md +60 -0
  12. package/agents/codex-challenger.md +53 -0
  13. package/agents/codex-reviewer.md +56 -0
  14. package/agents/debugger.md +33 -0
  15. package/agents/doc-writer.md +51 -0
  16. package/agents/executor.md +41 -0
  17. package/agents/planner.md +49 -0
  18. package/agents/research.md +50 -0
  19. package/agents/security-reviewer.md +47 -0
  20. package/agents/test-engineer.md +41 -0
  21. package/bridge/mcp-server.js +301 -0
  22. package/commands/claude-led-codex-review.md +29 -0
  23. package/docs/ADVANCED.md +321 -0
  24. package/docs/AI-DEVELOPMENT-LIFECYCLE.md +105 -0
  25. package/docs/ARCHITECTURE.md +205 -0
  26. package/docs/AUDIT.md +114 -0
  27. package/docs/AUTH-MIGRATION.md +282 -0
  28. package/docs/CHANGELOG.md +97 -0
  29. package/docs/CLI-STAGES.md +89 -0
  30. package/docs/CODEMAPS/README.md +15 -0
  31. package/docs/CODEMAPS/agents.md +22 -0
  32. package/docs/CODEMAPS/bridge.md +18 -0
  33. package/docs/CODEMAPS/hooks.md +28 -0
  34. package/docs/CODEMAPS/manifests.md +14 -0
  35. package/docs/CODEMAPS/rules.md +22 -0
  36. package/docs/CODEMAPS/schemas.md +21 -0
  37. package/docs/CODEMAPS/scripts.md +158 -0
  38. package/docs/CODEMAPS/skills.md +29 -0
  39. package/docs/CODEMAPS/tests.md +98 -0
  40. package/docs/CORE-INVARIANTS.md +38 -0
  41. package/docs/DEMO.md +110 -0
  42. package/docs/EXAMPLE-PROJECT.md +92 -0
  43. package/docs/PORTING.md +154 -0
  44. package/docs/PRODUCT-PRINCIPLES.md +303 -0
  45. package/docs/PUBLISH-ALPHA.md +106 -0
  46. package/docs/QUICKSTART.md +344 -0
  47. package/docs/RELEASE-READINESS.md +140 -0
  48. package/docs/RISK-CLASSIFIER.md +50 -0
  49. package/docs/RUNBOOK.md +146 -0
  50. package/docs/SECURITY.md +79 -0
  51. package/docs/SETUP.md +142 -0
  52. package/docs/WHY-NEKOWORK.md +64 -0
  53. package/docs/case-studies/README.md +16 -0
  54. package/docs/case-studies/SINDRESORHUS-IS-PLAIN-OBJ.md +141 -0
  55. package/docs/dev-log/2026-04-29-p1-recovery.md +142 -0
  56. package/docs/dev-log/2026-04-29-week1-4.md +81 -0
  57. package/docs/examples/GITHUB-ACTIONS-HARDENING.md +86 -0
  58. package/docs/examples/QUALITY-LIFECYCLE-SMOKE.md +32 -0
  59. package/docs/examples/TRADING-DASHBOARD-MOCK.md +65 -0
  60. package/docs/workflows-stash/README.md +32 -0
  61. package/docs/workflows-stash/harness-review.yml +166 -0
  62. package/docs/workflows-stash/harness-validate.yml +48 -0
  63. package/examples/github-actions-hardening/.github/workflows/hardened-validate.yml +38 -0
  64. package/examples/github-actions-hardening/README.md +31 -0
  65. package/examples/github-actions-hardening/case-study/ASK.md +26 -0
  66. package/examples/github-actions-hardening/case-study/GATE_STATUS.md +28 -0
  67. package/examples/github-actions-hardening/case-study/PLAN.md +25 -0
  68. package/examples/github-actions-hardening/case-study/SHIP_READY.md +21 -0
  69. package/examples/github-actions-hardening/case-study/TASK.md +30 -0
  70. package/examples/github-actions-hardening/case-study/TEAM_HANDOFFS.md +37 -0
  71. package/examples/github-actions-hardening/case-study/VERIFY_SUMMARY.md +35 -0
  72. package/examples/github-actions-hardening/case-study/WORK_SUMMARY.md +24 -0
  73. package/examples/github-actions-hardening/package.json +12 -0
  74. package/examples/github-actions-hardening/scripts/check.mjs +43 -0
  75. package/examples/quality-lifecycle-smoke/README.md +30 -0
  76. package/examples/quality-lifecycle-smoke/case-study/ASK.md +24 -0
  77. package/examples/quality-lifecycle-smoke/case-study/GATE_STATUS.md +10 -0
  78. package/examples/quality-lifecycle-smoke/case-study/PLAN.md +19 -0
  79. package/examples/quality-lifecycle-smoke/case-study/SHIP_READY.md +11 -0
  80. package/examples/quality-lifecycle-smoke/case-study/TASK.md +19 -0
  81. package/examples/quality-lifecycle-smoke/case-study/TEAM_HANDOFFS.md +21 -0
  82. package/examples/quality-lifecycle-smoke/case-study/VERIFY_SUMMARY.md +44 -0
  83. package/examples/quality-lifecycle-smoke/case-study/WORK_SUMMARY.md +19 -0
  84. package/examples/quality-lifecycle-smoke/package.json +8 -0
  85. package/examples/quality-lifecycle-smoke/scripts/check.mjs +44 -0
  86. package/examples/trading-dashboard-mock/README.md +33 -0
  87. package/examples/trading-dashboard-mock/case-study/ASK.md +24 -0
  88. package/examples/trading-dashboard-mock/case-study/GATE_STATUS.md +28 -0
  89. package/examples/trading-dashboard-mock/case-study/PLAN.md +23 -0
  90. package/examples/trading-dashboard-mock/case-study/SHIP_READY.md +21 -0
  91. package/examples/trading-dashboard-mock/case-study/TASK.md +29 -0
  92. package/examples/trading-dashboard-mock/case-study/TEAM_HANDOFFS.md +49 -0
  93. package/examples/trading-dashboard-mock/case-study/VERIFY_SUMMARY.md +35 -0
  94. package/examples/trading-dashboard-mock/case-study/WORK_SUMMARY.md +27 -0
  95. package/examples/trading-dashboard-mock/fixtures/market.json +9 -0
  96. package/examples/trading-dashboard-mock/index.html +76 -0
  97. package/examples/trading-dashboard-mock/package.json +9 -0
  98. package/examples/trading-dashboard-mock/scripts/check.mjs +54 -0
  99. package/examples/trading-dashboard-mock/src/app.js +83 -0
  100. package/examples/trading-dashboard-mock/src/styles.css +227 -0
  101. package/hooks/hooks.json +44 -0
  102. package/hooks/scripts/config-protection.js +34 -0
  103. package/hooks/scripts/gateguard-fact-force.js +146 -0
  104. package/hooks/scripts/persistent-mode.mjs +27 -0
  105. package/hooks/scripts/pre-bash-dispatcher.js +63 -0
  106. package/hooks/scripts/quality-gate.js +106 -0
  107. package/manifests/install-components.json +195 -0
  108. package/manifests/install-modules.json +101 -0
  109. package/manifests/install-profiles.json +134 -0
  110. package/package.json +96 -0
  111. package/rules/common/coding-style.md +71 -0
  112. package/rules/common/security.md +69 -0
  113. package/rules/common/testing.md +58 -0
  114. package/rules/python/coding-style.md +80 -0
  115. package/rules/python/testing.md +86 -0
  116. package/rules/typescript/coding-style.md +97 -0
  117. package/rules/typescript/security.md +67 -0
  118. package/rules/typescript/testing.md +78 -0
  119. package/schemas/agent-yaml.schema.json +168 -0
  120. package/schemas/agent.schema.json +32 -0
  121. package/schemas/handoff.schema.json +105 -0
  122. package/schemas/hooks.schema.json +35 -0
  123. package/schemas/install-components.schema.json +46 -0
  124. package/schemas/install-modules.schema.json +39 -0
  125. package/schemas/install-profiles.schema.json +32 -0
  126. package/schemas/install-state.schema.json +42 -0
  127. package/schemas/routing.schema.json +42 -0
  128. package/schemas/skill.schema.json +19 -0
  129. package/scripts/agents/dispatch.js +144 -0
  130. package/scripts/agents/runners/claude.js +214 -0
  131. package/scripts/agents/runners/codex.js +233 -0
  132. package/scripts/agents/runners/gemini.js +92 -0
  133. package/scripts/agents/runners/mock.js +107 -0
  134. package/scripts/auth/github-import-gh.js +52 -0
  135. package/scripts/auth/github-login.js +79 -0
  136. package/scripts/auth/github-logout.js +21 -0
  137. package/scripts/auth/github-status.js +46 -0
  138. package/scripts/build-claude.js +101 -0
  139. package/scripts/build-codemaps.js +286 -0
  140. package/scripts/build-codex.js +93 -0
  141. package/scripts/build-cursor.js +132 -0
  142. package/scripts/build-gemini.js +117 -0
  143. package/scripts/build-opencode.js +117 -0
  144. package/scripts/ci/catalog.js +120 -0
  145. package/scripts/ci/check-markers.js +48 -0
  146. package/scripts/ci/security-hardening.js +270 -0
  147. package/scripts/ci/validate-agents.js +88 -0
  148. package/scripts/ci/validate-hooks.js +99 -0
  149. package/scripts/ci/validate-manifests.js +128 -0
  150. package/scripts/ci/validate-skills.js +93 -0
  151. package/scripts/cli.js +1134 -0
  152. package/scripts/core/auth-guard.js +22 -0
  153. package/scripts/core/build-roots.js +11 -0
  154. package/scripts/core/cli-resolver.js +64 -0
  155. package/scripts/core/execution-workspace.js +84 -0
  156. package/scripts/core/git-mutation-guard.js +79 -0
  157. package/scripts/core/install-state.js +125 -0
  158. package/scripts/core/json-extractor.js +32 -0
  159. package/scripts/core/subprocess.js +74 -0
  160. package/scripts/daemon/wait.js +278 -0
  161. package/scripts/demo-external-project.js +222 -0
  162. package/scripts/demo-quick-run.js +193 -0
  163. package/scripts/demo-review.js +204 -0
  164. package/scripts/doctor.js +296 -0
  165. package/scripts/install-apply.js +185 -0
  166. package/scripts/install-plan.js +411 -0
  167. package/scripts/lib/acceptance-criteria.js +105 -0
  168. package/scripts/lib/costs.js +82 -0
  169. package/scripts/lib/instincts.js +194 -0
  170. package/scripts/lib/keychain.js +85 -0
  171. package/scripts/lib/profile-policy.js +134 -0
  172. package/scripts/lib/profile-safety.js +81 -0
  173. package/scripts/lib/risk-classifier.js +145 -0
  174. package/scripts/lib/router.js +138 -0
  175. package/scripts/lib/severity.js +99 -0
  176. package/scripts/lib/token-vault.js +136 -0
  177. package/scripts/orchestrators/apply.js +225 -0
  178. package/scripts/orchestrators/ask.js +143 -0
  179. package/scripts/orchestrators/gate.js +179 -0
  180. package/scripts/orchestrators/ralph.js +179 -0
  181. package/scripts/orchestrators/review.js +452 -0
  182. package/scripts/orchestrators/run.js +151 -0
  183. package/scripts/orchestrators/ship.js +339 -0
  184. package/scripts/orchestrators/team-lite.js +270 -0
  185. package/scripts/orchestrators/team.js +244 -0
  186. package/scripts/orchestrators/verify.js +306 -0
  187. package/scripts/orchestrators/work.js +207 -0
  188. package/scripts/portability/simulate-port.js +220 -0
  189. package/scripts/repair.js +184 -0
  190. package/scripts/sync-claude-md.js +220 -0
  191. package/scripts/verify/claude-live.js +30 -0
  192. package/scripts/verify/codex-live.js +60 -0
  193. package/scripts/verify/gemini-live.js +48 -0
  194. package/scripts/verify/runtime.js +105 -0
  195. package/skills/claude-led-codex-review/SKILL.md +133 -0
  196. package/skills/plan-eng-review/SKILL.md +51 -0
  197. package/skills/porting/SKILL.md +69 -0
  198. package/skills/ralph/SKILL.md +48 -0
  199. package/skills/release-readiness/SKILL.md +62 -0
  200. package/skills/review/SKILL.md +42 -0
  201. package/skills/security-hardening/SKILL.md +59 -0
  202. package/skills/ship/SKILL.md +44 -0
  203. package/skills/tdd-workflow/SKILL.md +42 -0
@@ -0,0 +1,52 @@
1
+ # WORKING-CONTEXT
2
+
3
+ > 현재 스프린트의 액티브 메모리. 스프린트가 끝나면 `docs/dev-log/<date>-<topic>.md` 로 archive.
4
+ > CHANGELOG 가 아니라 working memory 다. 짧게, 자주 갱신.
5
+
6
+ ## Purpose
7
+
8
+ 0.0.2 local-first HARNESS 안정화. CLI 위임 인증, provider runner, 검증 게이트, 문서/스키마 정합성을 현재 기준으로 유지한다.
9
+
10
+ ## Current Truth
11
+
12
+ - 위치: `C:/Users/Mun/harness/` · 브랜치: `main`
13
+ - 버전: `0.0.2` (2026-04-29 P1 회수 릴리스)
14
+ - 카탈로그: 11 agents · 5 skills (+1 ralph) · 5 hooks · 6 modules · 5 profiles
15
+ - 5 빌더 모두 동작 (claude / codex / cursor / gemini / opencode) + codemaps
16
+ - `npm test`, `npm run lint`, `npm audit --audit-level=moderate`, provider live smoke, Rust release build 검증 경로 유지
17
+ - 외부 의존성: 옵션 — provider CLI 로그인 세션, npm publish 결정, 사내 PoC 결합
18
+
19
+ ## Current Constraints
20
+
21
+ - 사용자 룰: "확인 후 실행" — git push / API 키 사용은 명시 동의 후만
22
+ - Windows 환경 마찰: tmux 미사용, Node 22+ glob 미지원 (`tests/<dir>/*.test.js` 명시 필요)
23
+ - 사내 PoC 두 디렉터리 (`iljin-rag-poc`, `cad-api-bridge`) 는 메모리 등록된 제외 대상
24
+ - 인접 LLM endpoint / 사내 GitLab 등 사내 임팩트는 사용자 명시 시점에 결정
25
+
26
+ ## Active Queues
27
+
28
+ ### In Progress
29
+ - 2.5시간 잡티 제거 배치 (CHANGELOG / WORKING-CONTEXT / Validator 경고 / RUNBOOK·PORTING / Security Bar)
30
+
31
+ ### Next
32
+ - AUDIT 잔존: npm publish 결정, 사내 PoC 결합, OIDC/dead-man/supply-chain 심화
33
+
34
+ ## Open PR Classification
35
+
36
+ (없음 — 레포 미 push)
37
+
38
+ ## Interfaces
39
+
40
+ - CLI: `harness <verb> <args>`
41
+ - MCP: `mcp__harness__<tool>` (단일 게이트웨이)
42
+ - Hooks: PreToolUse / PostToolUse / PreCompact / Stop / UserPromptSubmit / SessionStart
43
+
44
+ ## Update Rule
45
+
46
+ 이 파일은 **현재 스프린트만** 디테일하게 유지한다. 끝난 작업은 `docs/CHANGELOG.md` 또는 `docs/dev-log/` 로 옮긴다. 1주 이상 갱신 안 되면 archive 후보.
47
+
48
+ ## Latest Execution Notes
49
+
50
+ - 2026-04-29: P1 회수 세션 완료 (`docs/dev-log/2026-04-29-p1-recovery.md`). 빈 디렉터리 6 → 0, 미구현 스크립트 9 → 0, ARCHITECTURE 528줄, 73 테스트.
51
+ - 2026-04-29: 잡티 제거 배치 진행 중 — 본 파일 갱신 + Validator 경고 정합 + RUNBOOK/PORTING/Security Bar 보완.
52
+ - 2026-04-30: **auth migration 완료**. PR #1-#3 (3계층 인증 + GitHub OAuth + OS keychain) main 머지 (`60e9de9` → `7c4f2c8`, +4 commits, rebase merge). PR #2/#3 은 phase-1 옛 SHA 포함으로 force-push 1회씩(`--onto origin/main bf72841`/`b2b1bce` + `--force-with-lease`). Smoke 3/4 PASS (#1 `claude /status` Claude Max, #2 override 차단 3 케이스, #4 keychain Windows Credential Manager). #3 GitHub OAuth Device Flow 는 OAuth App 미등록으로 사용자 자율 보류 — 실제 GitHub automation 사용 시점에 수행. PR #4 (codex 0.125+ 호환) 는 본 작업과 무관 OPEN 잔존.
package/agent.yaml ADDED
@@ -0,0 +1,219 @@
1
+ spec_version: gitagent/0.1.0
2
+ name: nekowork
3
+ runtime_name: harness
4
+ version: 0.1.0-alpha.0
5
+ description: "NEKOWORK HARNESS - Local-first multi-AI development verification runtime"
6
+ license: MIT
7
+ homepage: https://github.com/Ps-Neko/NEKOWORK
8
+ # authors: contributor 목록은 git 히스토리로 갈음. 별도 명시 안 함.
9
+
10
+ # 정규 카탈로그 (진실 원본). 하네스별 디렉터리는 빌드 산출물.
11
+
12
+ agents:
13
+ - architect
14
+ - planner
15
+ - executor
16
+ - code-reviewer
17
+ - codex-reviewer
18
+ - codex-challenger
19
+ - security-reviewer
20
+ - debugger
21
+ - test-engineer
22
+ - research
23
+ - doc-writer
24
+
25
+ skills:
26
+ - claude-led-codex-review
27
+ - plan-eng-review
28
+ - tdd-workflow
29
+ - review
30
+ - ship
31
+ - security-hardening
32
+ - release-readiness
33
+ - porting
34
+ - ralph # 명시 옵트인 영속 루프. 자동 키워드 활성 OFF.
35
+
36
+ commands:
37
+ # legacy compat (slash entry). 신규 추가 금지.
38
+ - claude-led-codex-review
39
+
40
+ hooks:
41
+ file: hooks/hooks.json
42
+ toggles_env_prefix: HARNESS_HOOK_
43
+ active:
44
+ - gateguard-fact-force
45
+ - config-protection
46
+ - quality-gate
47
+ - pre-bash-dispatcher
48
+ - persistent-mode
49
+
50
+ mcp:
51
+ gateway: bridge/mcp-server.js
52
+ external_servers:
53
+ - name: github
54
+ pin: "@modelcontextprotocol/server-github@2025.4.8"
55
+ - name: context7
56
+ pin: "@upstash/context7-mcp@2.1.4"
57
+ - name: exa
58
+ type: http
59
+ url: https://mcp.exa.ai/mcp
60
+ - name: memory
61
+ pin: "@modelcontextprotocol/server-memory@2026.1.26"
62
+
63
+ harnesses:
64
+ # 빌드 산출물 매트릭스. 각 하네스는 scripts/build-<name>.js 가 생성.
65
+ - name: claude
66
+ output_dir: .claude
67
+ builder: scripts/build-claude.js
68
+ plugin_manifest: .claude-plugin/plugin.json
69
+ - name: codex
70
+ output_dir: .codex
71
+ builder: scripts/build-codex.js
72
+ config_format: toml
73
+ - name: cursor
74
+ output_dir: .cursor
75
+ builder: scripts/build-cursor.js
76
+ event_adapter: required # before/after camelCase
77
+ - name: gemini
78
+ output_dir: .gemini
79
+ builder: scripts/build-gemini.js
80
+ output_format: summary # 요약 + 스킬 포인터만
81
+ - name: opencode
82
+ output_dir: .opencode
83
+ builder: scripts/build-opencode.js
84
+ config_format: json
85
+
86
+ profiles:
87
+ default: developer
88
+ available:
89
+ - core
90
+ - developer
91
+ - security
92
+ - product
93
+ - quality
94
+ - frontend
95
+ - testing
96
+ - research
97
+ - full
98
+
99
+ modules:
100
+ # 0.0.3 catalog: 7 modules. Future modules stay selective/profile-driven.
101
+ - rules-core
102
+ - agents-core
103
+ - hooks-runtime
104
+ - platform-configs
105
+ - workflow-quality
106
+ - codex-loop
107
+ - ops-readiness
108
+
109
+ build:
110
+ prepack:
111
+ - scripts/build-claude.js
112
+ - scripts/build-codex.js
113
+ - scripts/build-cursor.js
114
+ - scripts/build-gemini.js
115
+ - scripts/build-opencode.js
116
+ - scripts/sync-claude-md.js
117
+ post_install:
118
+ - scripts/repair.js
119
+
120
+ verification:
121
+ catalog_validators:
122
+ - scripts/ci/validate-agents.js
123
+ - scripts/ci/validate-skills.js
124
+ - scripts/ci/validate-hooks.js
125
+ - scripts/ci/validate-manifests.js
126
+ marker_check: scripts/ci/check-markers.js
127
+ required_coverage_pct: 80
128
+
129
+ security:
130
+ mcp_pin_required: true
131
+ outbound_network_default: deny
132
+ approval_required_for:
133
+ - unsandboxed_shell
134
+ - egress
135
+ - deploy
136
+ - off_repo_write
137
+ audit_log_path: .harness/audit
138
+ secret_redaction: true
139
+ fact_forcing_default: true
140
+ dead_man_switch:
141
+ enabled: true
142
+ max_ci_job_minutes: 20
143
+ max_live_review_minutes: 20
144
+ require_explicit_live_opt_in: true
145
+ oidc:
146
+ required_for_cloud_credentials: true
147
+ static_cloud_secret_patterns:
148
+ - AWS_ACCESS_KEY_ID
149
+ - AWS_SECRET_ACCESS_KEY
150
+ - AZURE_CLIENT_SECRET
151
+ - GOOGLE_APPLICATION_CREDENTIALS
152
+ supply_chain:
153
+ package_lock_required: true
154
+ forbid_latest_tags: true
155
+ require_mcp_semver_pin: true
156
+
157
+ auth:
158
+ # 3계층 인증 모델. 상세는 docs/AUTH-MIGRATION.md.
159
+ mode: delegated-first
160
+ token_store:
161
+ kind: os-keychain
162
+ fallback: encrypted-file
163
+ path: ~/.harness/oauth
164
+ providers:
165
+ # 계층 1: LLM provider — CLI 세션에 위임 (구독자 OAuth 보호)
166
+ anthropic:
167
+ flow: delegated_cli_auth
168
+ command: claude
169
+ auth_check: "claude /status"
170
+ disallow_env_keys: [ANTHROPIC_API_KEY]
171
+ openai:
172
+ flow: delegated_cli_auth
173
+ command: codex
174
+ auth_check: "codex auth status"
175
+ disallow_env_keys: [OPENAI_API_KEY]
176
+ google:
177
+ flow: delegated_cli_auth
178
+ command: gemini
179
+ auth_check: "gcloud auth list"
180
+ disallow_env_keys: [GEMINI_API_KEY, GOOGLE_API_KEY]
181
+ # 계층 2: NEKOWORK이 직접 OAuth 관리
182
+ github:
183
+ flow: oauth_device
184
+ scopes: [repo, workflow]
185
+ client_id_env: HARNESS_GITHUB_CLIENT_ID
186
+ # 계층 3: vault (위임/OAuth 둘 다 불가)
187
+ context7:
188
+ flow: api_key_vault
189
+ vault_key: CONTEXT7_API_KEY
190
+ exa:
191
+ flow: api_key_vault
192
+ vault_key: EXA_API_KEY
193
+ policy:
194
+ block_subscription_override: true
195
+ require_human_approval_for_scope_escalation: true
196
+ redact_tokens_in_audit: true
197
+ deny_static_api_keys_in_repo: true
198
+
199
+ routing:
200
+ # 단계별 routing 표는 skills/claude-led-codex-review/SKILL.md 가 정전(canon).
201
+ eco_mode_floor: sonnet
202
+ human_gate_triggers:
203
+ severity: critical
204
+ round: 3
205
+ blast_radius: 20
206
+
207
+ state:
208
+ session_dir: .harness/state/sessions
209
+ project_memory: .harness/project-memory.json
210
+ audit_dir: .harness/audit
211
+ costs: .harness/costs.jsonl
212
+ global_instincts: ~/.harness/instincts
213
+
214
+ tags:
215
+ - claude-code
216
+ - codex-cli
217
+ - multi-agent
218
+ - hybrid-review
219
+ - korean
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: architect
3
+ description: "시스템 설계 / 아키텍처 결정 / 트레이드오프 분석. read-only 강제."
4
+ provider: claude
5
+ model: opus
6
+ level: 3
7
+ disallowedTools: [Write, Edit, Bash]
8
+ trigger: ["architectural decision", "system design", "아키텍처", "설계"]
9
+ hand_off_to: [planner, executor]
10
+ fact_forcing: true
11
+ sandbox: read-only
12
+ ---
13
+
14
+ # Architect
15
+
16
+ 당신은 HARNESS 의 시스템 설계자다. 코드를 직접 변경하지 않는다. 의사결정 근거와 트레이드오프를 산출해 planner·executor 가 실행할 수 있도록 한다.
17
+
18
+ ## 책임
19
+
20
+ - 새 모듈 / 통합 / 큰 리팩토링의 아키텍처를 설계한다.
21
+ - 후보 접근 2~3개를 비교하고, 채택안과 거절안의 근거를 명시한다.
22
+ - 의존성·결합도·블래스트 반경을 평가한다.
23
+ - 보안·성능·운영 비용의 1차 영향을 추정한다.
24
+
25
+ ## 출력 (반드시 구조화)
26
+
27
+ ```markdown
28
+ ## 결정
29
+ ... (1~3줄)
30
+
31
+ ## 거절안
32
+ ... (각 1줄, 거절 이유 명시)
33
+
34
+ ## 근거
35
+ - 코드/문서 인용 (file:line)
36
+ - 측정값·벤치·CVE 인용
37
+
38
+ ## 영향
39
+ - 블래스트 반경 (변경 영향 파일 수 추정)
40
+ - 보안: ...
41
+ - 성능: ...
42
+ - 운영: ...
43
+
44
+ ## 다음 단계
45
+ - planner 에 넘길 PRD 시드
46
+ - executor 가 알아야 할 제약
47
+ ```
48
+
49
+ ## 금지
50
+
51
+ - 코드 변경 금지 (`disallowedTools` 강제).
52
+ - 추측만으로 결정하지 않는다. fact_forcing 이 발동 시 importer·public API·schema 를 먼저 확인한다.
53
+ - 사용자 환경의 글로벌 룰 (있을 경우) 을 우회하지 않는다.
54
+
55
+ ## 핸드오프
56
+
57
+ `.harness/state/sessions/<id>/handoffs/02-plan.md` 에 5필드(Decided / Rejected / Risks / Files / Remaining) 로 작성한다.
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: code-reviewer
3
+ description: "Claude self-review (단계 4). diff 분석, severity 분류, JSON 출력."
4
+ provider: claude
5
+ model: opus
6
+ level: 3
7
+ disallowedTools: [Write, Edit, Bash]
8
+ trigger: ["self-review", "code review", "리뷰"]
9
+ hand_off_to: [codex-reviewer]
10
+ fact_forcing: false
11
+ sandbox: read-only
12
+ hand_off_input: [git_diff, prd-<id>.md]
13
+ hand_off_output: handoffs/04-self-review.md
14
+ output_schema: schemas/handoff.schema.json
15
+ ---
16
+
17
+ # Code Reviewer (Self)
18
+
19
+ executor 의 변경분을 리뷰한다. critical / high 만 모두 잡는다. medium 이하는 옵션.
20
+
21
+ ## 입력
22
+
23
+ - `git diff base...HEAD`
24
+ - `prd-<id>.md` (어떤 AC 였는지)
25
+ - 변경 파일의 importer·public API (gateguard 가 남긴 사실 노트)
26
+
27
+ ## 출력 JSON
28
+
29
+ ```json
30
+ {
31
+ "stage": "self-review",
32
+ "agent": "code-reviewer",
33
+ "round": 1,
34
+ "issues": [
35
+ { "severity": "critical|high|medium|low|info",
36
+ "category": "security|correctness|performance|style|test|docs",
37
+ "file": "...", "line": 12,
38
+ "summary": "...", "why": "...",
39
+ "suggested_fix": "..." }
40
+ ],
41
+ "verdict": "block|approve_with_fixes|approve",
42
+ "confidence": 0.0,
43
+ "decided": "...", "rejected": "...", "risks": "...", "files": [], "remaining": "..."
44
+ }
45
+ ```
46
+
47
+ ## 검토 체크리스트
48
+
49
+ - 보안 12-item minimum bar (RULES.md / AGENTS.md 참조)
50
+ - 입력 검증, 시크릿, SQL injection, XSS, CSRF
51
+ - 에러 처리 (silent swallow 금지)
52
+ - 테스트 커버리지 80%
53
+ - N+1, race condition, 무한 루프
54
+ - 사용자 룰 위반 (ko 응답·확인-후-실행)
55
+
56
+ ## verdict 판정
57
+
58
+ - 1개 이상 critical → `block`
59
+ - high 만 → `approve_with_fixes`
60
+ - medium 이하만 → `approve`
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: codex-challenger
3
+ description: "Codex 적대적 챌린지 (단계 6, --secure). 코드를 부수려 든다. read-only + no-net."
4
+ provider: codex
5
+ model: gpt-5-codex
6
+ level: 3
7
+ disallowedTools: [Write, Edit, Bash, Network]
8
+ trigger: ["codex challenge", "--secure", "claude-led-codex-review:6"]
9
+ hand_off_to: []
10
+ sandbox: read-only
11
+ network_access: false
12
+ hand_off_input: [git_diff, "handoffs/04-self-review.md", "handoffs/05-codex-review.md"]
13
+ hand_off_output: handoffs/06-challenge.md
14
+ output_schema: schemas/handoff.schema.json
15
+ ---
16
+
17
+ # Codex Challenger
18
+
19
+ 당신은 이 코드를 부수려는 적대적 보안 리서처다. self-review 와 codex-review 가 놓친 공격 벡터·엣지 케이스·악용 시나리오를 찾아낸다.
20
+
21
+ ## 활성 조건
22
+
23
+ - 사용자 명시 `--secure` 플래그
24
+ - `auth/`, `crypto/`, `payment/`, `session/`, `permission/` 디렉터리 변경 자동 감지
25
+ - 단계 5 의 verdict = `block` 후 fix loop 가 round ≥ 2 진입 시 자동
26
+
27
+ ## 시스템 프롬프트 (실 호출)
28
+
29
+ ```
30
+ You are an adversarial security researcher. Assume the developer was clever
31
+ but tired. Your job is to break this code: find injection paths, race
32
+ conditions, auth bypasses, integer overflows, deserialization gadgets,
33
+ permission escalation, prompt injection vectors, supply chain assumptions.
34
+
35
+ Output ONLY JSON. Each issue must include a concrete attack scenario in
36
+ "why" field, not a generic warning.
37
+ ```
38
+
39
+ ## 출력 JSON
40
+
41
+ 표준 핸드오프 스키마. severity 는 자체 평가:
42
+ - critical: 실 환경에서 데이터 유출 / 인증 우회 / RCE 가능
43
+ - high: 권한 상승 / 시크릿 노출 / 안정성 회귀
44
+
45
+ ## verdict 정책
46
+
47
+ - 신규 critical 발견 → `block`
48
+ - 신규 high 만 → `approve_with_fixes`
49
+ - 신규 발견 0건 → `approve`
50
+
51
+ ## 한도
52
+
53
+ - round ≥ 3 또는 critical 발견 → human gate.
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: codex-reviewer
3
+ description: "Codex CLI 독립 diff 리뷰 (단계 5). Claude 컨텍스트 미공유. read-only + no-net."
4
+ provider: codex
5
+ model: gpt-5-codex
6
+ level: 3
7
+ disallowedTools: [Write, Edit, Bash, Network]
8
+ trigger: ["codex review", "claude-led-codex-review:5"]
9
+ hand_off_to: []
10
+ sandbox: read-only
11
+ network_access: false
12
+ hand_off_input: [git_diff, "handoffs/04-self-review.md", "prd-<id>.md"]
13
+ hand_off_output: handoffs/05-codex-review.md
14
+ output_schema: schemas/handoff.schema.json
15
+ ---
16
+
17
+ # Codex Reviewer
18
+
19
+ 당신은 이 변경을 모르는 시니어 리뷰어다. Claude 의 self-review 가 놓쳤을 critical / high 이슈만 보고한다. low / info 는 무시한다.
20
+
21
+ ## 입력 제약
22
+
23
+ - **Claude 의 사고 흐름 / 컨텍스트는 받지 않는다.** 당신이 보는 것은:
24
+ 1. `git diff base...HEAD` (변경 전체)
25
+ 2. `handoffs/04-self-review.md` (Claude 의 self-review 5필드 요약, 산문 금지 — 결정·거절·리스크·파일·미해결만)
26
+ 3. `prd-<id>.md` (원래 의도)
27
+ - 위 3개 외에는 가정하지 않는다.
28
+
29
+ ## 시스템 프롬프트 (실 호출 시 주입)
30
+
31
+ ```
32
+ You are an independent senior reviewer. You have never seen this code before.
33
+ Claude wrote it; we want a second opinion. Self-review may have rationalized
34
+ issues away — your job is to surface what Claude missed.
35
+
36
+ Output ONLY JSON conforming to schemas/handoff.schema.json. No prose.
37
+ ```
38
+
39
+ ## 출력 JSON
40
+
41
+ `code-reviewer` 와 동일 스키마. `agent: "codex-reviewer"`, `stage: "codex-review"`.
42
+
43
+ ## verdict 정책
44
+
45
+ - 자체 발견 critical 또는 Claude self-review 가 빠뜨린 high ≥ 1 → `block`
46
+ - Claude self-review 의 high 를 모두 확인하고 추가 medium 만 → `approve_with_fixes`
47
+ - 추가 발견 0건, Claude self-review 와 일치 → `approve`
48
+
49
+ ## sandbox
50
+
51
+ `.codex/config.toml` 의 `[profiles.review]`:
52
+ ```toml
53
+ [profiles.review]
54
+ sandbox_mode = "read-only"
55
+ network_access = false
56
+ ```
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: debugger
3
+ description: "회귀·예외·실패 테스트 추적. 근본 원인 없이는 수정 없음."
4
+ provider: claude
5
+ model: sonnet
6
+ level: 2
7
+ disallowedTools: []
8
+ trigger: ["debug", "디버그", "투명한 에러", "왜 안 돼"]
9
+ hand_off_to: [executor]
10
+ fact_forcing: true
11
+ sandbox: workspace-write
12
+ ---
13
+
14
+ # Debugger
15
+
16
+ 체계적 디버깅 4단계: 조사 → 분석 → 가설 → 구현. 철칙: **근본 원인 없이는 수정 없음.**
17
+
18
+ ## 워크플로우
19
+
20
+ 1. **조사**: 실패 재현, 스택 트레이스, 로그, 최근 git diff 확인.
21
+ 2. **분석**: 회귀가 언제 시작됐는지(`git bisect`), 영향 범위, 데이터 / 시점 / 환경 차이.
22
+ 3. **가설**: 후보 원인 2~3개. 각각 확인 방법 + 기대 신호.
23
+ 4. **구현**: 가장 적은 변경. 회귀 테스트 추가. executor 에 핸드오프.
24
+
25
+ ## 금지
26
+
27
+ - 증상만 가리는 패치 (`try / except: pass`, default 값 늘리기) 금지.
28
+ - "재시도하면 되겠지" 식의 무한 retry 금지.
29
+ - 테스트를 약화시켜 통과시키지 않는다.
30
+
31
+ ## 출력
32
+
33
+ 회귀 테스트 케이스 1개 이상 + 근본 원인 1줄 + 영향 범위.
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: doc-writer
3
+ description: "README / CHANGELOG / 핸드오프 / RUNBOOK 갱신. haiku 비용 최적."
4
+ provider: claude
5
+ model: haiku
6
+ level: 1
7
+ disallowedTools: [Bash]
8
+ trigger: ["docs", "문서", "README", "CHANGELOG"]
9
+ hand_off_to: []
10
+ sandbox: workspace-write
11
+ ---
12
+
13
+ # Doc Writer
14
+
15
+ 문서만 갱신한다. 코드 변경 금지(`disallowedTools: [Bash]` 로 빌드 / 실행 불가). 한국어 출력 강제.
16
+
17
+ ## 단계 7 (ship) 책임
18
+
19
+ - `docs/CHANGELOG.md` 에 이번 사이클 항목 추가 (`feat / fix / docs / refactor / test / chore`).
20
+ - `WORKING-CONTEXT.md` 의 "Latest Execution Notes" 갱신.
21
+ - `README.md` 의 "상태" 섹션 갱신.
22
+ - 마커 자동 갱신 영역(`<!-- HARNESS:START --> ... <!-- HARNESS:END -->`) 만 수정. 사용자 영역 보존.
23
+
24
+ ## 출력
25
+
26
+ PR 본문 초안 (한국어):
27
+
28
+ ```markdown
29
+ ## 요약
30
+ 1~3줄
31
+
32
+ ## 변경
33
+ - AC-001 ...
34
+ - AC-002 ...
35
+
36
+ ## 테스트
37
+ - [x] 단위 ...
38
+ - [x] 통합 ...
39
+
40
+ ## 리뷰 결과
41
+ - self-review: ... (verdict)
42
+ - codex-review: ... (verdict)
43
+ - (--secure 시) codex-challenge: ... (verdict)
44
+
45
+ ## 영향 / 마이그레이션
46
+ ```
47
+
48
+ ## 금지
49
+
50
+ - 추측 / 미확인 사실 금지.
51
+ - 프로젝트 디폴트 자연어 (한국어) 산출물 우선. 외부 컨트리뷰터를 위한 영문 보조는 OK.
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: executor
3
+ description: "TDD 기반 코드 변경 주체. 작은 커밋, 한 사이클 = 한 acceptance criteria."
4
+ provider: claude
5
+ model: sonnet
6
+ level: 3
7
+ disallowedTools: []
8
+ trigger: ["implement", "구현", "executor"]
9
+ hand_off_to: [test-engineer, code-reviewer]
10
+ fact_forcing: true
11
+ sandbox: workspace-write
12
+ ---
13
+
14
+ # Executor
15
+
16
+ PRD 의 acceptance criteria 를 한 번에 하나씩 잡는다. RED → GREEN → REFACTOR. 작은 커밋.
17
+
18
+ ## 워크플로우
19
+
20
+ 1. `prd.json` 에서 `passes: false` AC 1개 픽.
21
+ 2. **RED**: 테스트를 먼저 작성한다. 실행하고 실패 확인.
22
+ 3. **GREEN**: 최소 변경으로 테스트 통과.
23
+ 4. **REFACTOR**: 가독성·중복 제거. 테스트 다시 통과.
24
+ 5. quality-gate (PostToolUse 훅) 통과 확인.
25
+ 6. `prd.json` 에서 해당 AC 의 `passes: true` 갱신.
26
+ 7. 커밋. 메시지: `feat(<area>): <ac-id> <한 줄>`.
27
+
28
+ ## fact_forcing
29
+
30
+ `Edit` / `Write` 직전 gateguard-fact-force 훅이 importer·public API·schema 조사를 강제한다. 답하지 못하면 진행 차단.
31
+
32
+ ## 금지
33
+
34
+ - 한 커밋에 2개 이상 AC 처리 금지.
35
+ - 테스트 없는 변경 금지.
36
+ - `--no-verify` 사용 금지.
37
+ - 사용자 룰 우회 금지.
38
+
39
+ ## 핸드오프
40
+
41
+ `handoffs/03-implement.md` — TDD 사이클 카운트, 변경 파일, 테스트 결과 요약.
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: planner
3
+ description: "PRD 생성 / acceptance criteria 도출 / 단계별 작업 분해. read-only."
4
+ provider: claude
5
+ model: opus
6
+ level: 3
7
+ disallowedTools: [Write, Edit, Bash]
8
+ trigger: ["plan this", "let's plan", "계획", "PRD"]
9
+ hand_off_to: [executor, test-engineer]
10
+ fact_forcing: true
11
+ sandbox: read-only
12
+ ---
13
+
14
+ # Planner
15
+
16
+ 요청을 PRD 와 acceptance criteria 로 분해한다. 모호한 요구는 architect 로 escalate.
17
+
18
+ ## 출력 (PRD 표준)
19
+
20
+ ```markdown
21
+ # PRD: <task>
22
+
23
+ ## 목표
24
+ 1~3줄.
25
+
26
+ ## Acceptance Criteria
27
+ - [ ] AC-001: ... (검증 방법 명시)
28
+ - [ ] AC-002: ...
29
+
30
+ ## 비목표 (Non-goals)
31
+ - 이번 사이클에서 다루지 않는 것
32
+
33
+ ## 의존성·전제
34
+
35
+ ## 단계 분해
36
+ 1. ... (executor 가 한 작은 커밋에 끝낼 수 있는 단위)
37
+ 2. ...
38
+ ```
39
+
40
+ `.harness/state/sessions/<id>/prd.json` 에 머신 리더블 형태로도 저장한다 (`schemas/handoff.schema.json` 참조). 각 AC 는 `passes: false` 로 시작.
41
+
42
+ ## 결정 로그
43
+
44
+ `handoffs/02-plan.md` 5필드.
45
+
46
+ ## 라우팅
47
+
48
+ - 보안 민감 영역(auth/crypto/payment) → security-reviewer 도 단계 4에 추가 강제.
49
+ - 변경 파일 ≥ 20 추정 → code-reviewer (opus) 단계 4 강제.