@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,27 @@
1
+ #!/usr/bin/env node
2
+ // Stop persistent-mode.
3
+ // If .harness/state/sessions/<id>/active exists, drop wakeup.json for
4
+ // `harness wait start` to process.
5
+
6
+ import fs from 'node:fs';
7
+ import path from 'node:path';
8
+
9
+ if (process.env.HARNESS_HOOK_PERSISTENT_MODE === '0') process.exit(0);
10
+
11
+ const sessionId = process.env.HARNESS_SESSION_ID || 'default';
12
+ const sessionDir = path.join('.harness', 'state', 'sessions', sessionId);
13
+ const activeFlag = path.join(sessionDir, 'active');
14
+
15
+ if (!fs.existsSync(activeFlag)) process.exit(0);
16
+
17
+ const wakeup = path.join(sessionDir, 'wakeup.json');
18
+ const payload = {
19
+ session_id: sessionId,
20
+ scheduled_at: new Date().toISOString(),
21
+ reason: 'Stop hook detected active flag',
22
+ };
23
+ fs.writeFileSync(wakeup, JSON.stringify(payload, null, 2));
24
+ process.stderr.write(`[persistent-mode] wakeup signal: ${wakeup}\n`);
25
+ process.stderr.write('[persistent-mode] wait daemon can resume supported active sessions\n');
26
+
27
+ process.exit(0);
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env node
2
+ // PreToolUse(Bash) 디스패처. ECC pre-bash-dispatcher.js 패턴.
3
+ // 단일 진입점 → 매처 분기 → 모듈. ENV 토글로 개별 on/off.
4
+ // stdin JSON 으로 Claude Code hook 입력을 받고, 위험 패턴 발견 시 차단 메시지 출력.
5
+
6
+ import fs from 'node:fs';
7
+
8
+ if (process.env.HARNESS_HOOK_PRE_BASH === '0') process.exit(0);
9
+
10
+ let input = '';
11
+ try {
12
+ input = fs.readFileSync(0, 'utf8');
13
+ } catch { /* TTY 호출도 허용 */ }
14
+
15
+ let payload;
16
+ try { payload = JSON.parse(input); } catch { payload = { tool_input: { command: '' } }; }
17
+
18
+ const cmd = String(payload?.tool_input?.command ?? '');
19
+
20
+ const RULES = [
21
+ { re: /\bgit\s+push\s+(-f|--force)/i, msg: '금지: git push --force. 사용자 확인 필요.' },
22
+ { re: /\bgit\s+reset\s+--hard\b/i, msg: '금지: git reset --hard 자동 실행. 사용자 확인 필요.' },
23
+ { re: /\brm\s+-rf\b/, msg: '금지: rm -rf 자동 실행.' },
24
+ { re: /--no-verify\b/, msg: '금지: --no-verify (hook 우회).' },
25
+ { re: /\bicacls\b.*Everyone:F/i, msg: '금지: 전체 권한 부여.' },
26
+ { re: /\b(curl|wget)\b.*\|\s*(bash|sh)\b/, msg: '금지: curl|bash 패턴 (공급망 위험).' },
27
+ { re: /\b(npm|pip)\s+(install|publish)\b/i, msg: '확인 필요: 패키지 설치/배포 (사용자 룰).' },
28
+ { re: /\bshutdown\b|\breboot\b|\bformat\b/i, msg: '금지: 시스템 명령.' },
29
+ ];
30
+
31
+ const blocks = [];
32
+ for (const r of RULES) if (r.re.test(cmd)) blocks.push(r.msg);
33
+
34
+ // auth.policy.block_subscription_override 가드.
35
+ // agent.yaml: providers.<name>.disallow_env_keys 와 동기. 자세한 배경은 docs/AUTH-MIGRATION.md.
36
+ // LLM CLI 호출 직전 환경 변수에 long-lived API key 가 있으면 구독 OAuth 가 무시되어
37
+ // 종량제 과금으로 빠지는 사고를 막는다. HARNESS_AUTH_ALLOW_ENV_OVERRIDE=1 로 명시 옵트아웃.
38
+ const SUBSCRIPTION_GUARDS = [
39
+ { cli: /\bclaude\b/, keys: ['ANTHROPIC_API_KEY'], provider: 'Claude (Anthropic)' },
40
+ { cli: /\bcodex\b/, keys: ['OPENAI_API_KEY'], provider: 'Codex (OpenAI)' },
41
+ { cli: /\bgemini\b|\bgcloud\b/, keys: ['GEMINI_API_KEY', 'GOOGLE_API_KEY'], provider: 'Gemini (Google)' },
42
+ ];
43
+
44
+ if (process.env.HARNESS_AUTH_ALLOW_ENV_OVERRIDE !== '1') {
45
+ for (const g of SUBSCRIPTION_GUARDS) {
46
+ if (!g.cli.test(cmd)) continue;
47
+ const set = g.keys.filter((k) => process.env[k]);
48
+ if (!set.length) continue;
49
+ blocks.push(
50
+ `구독 보호: ${g.provider} CLI 호출 직전 ${set.join(', ')} 가 환경에 설정되어 있습니다. ` +
51
+ `구독 OAuth 세션이 무시되어 종량제 과금으로 빠질 수 있습니다. ` +
52
+ `\`unset ${set.join(' ')}\` 또는 HARNESS_AUTH_ALLOW_ENV_OVERRIDE=1 로 명시 옵트아웃.`
53
+ );
54
+ }
55
+ }
56
+
57
+ if (blocks.length) {
58
+ process.stderr.write('[pre-bash-dispatcher] 차단:\n');
59
+ for (const b of blocks) process.stderr.write(' - ' + b + '\n');
60
+ process.exit(2);
61
+ }
62
+
63
+ process.exit(0);
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env node
2
+ // PostToolUse(Edit|Write) quality-gate.
3
+ // 변경 파일의 확장자에 따라 빠른 검증:
4
+ // - .ts/.tsx: tsc --noEmit (해당 파일 + transitive). 가능하면 isolated.
5
+ // - .js/.mjs/.cjs: node --check 구문만.
6
+ // - .py: ruff check (있으면) + py_compile 폴백.
7
+ // 실패 시 exit 2 → Claude Code 가 다음 도구 호출 차단.
8
+
9
+ import fs from 'node:fs';
10
+ import path from 'node:path';
11
+ import { spawnSync } from 'node:child_process';
12
+
13
+ if (process.env.HARNESS_HOOK_QUALITY_GATE === '0') process.exit(0);
14
+
15
+ let input = '';
16
+ try { input = fs.readFileSync(0, 'utf8'); } catch { /* TTY */ }
17
+ let payload;
18
+ try { payload = JSON.parse(input); } catch { payload = {}; }
19
+
20
+ const targetPath = String(payload?.tool_input?.file_path ?? payload?.tool_input?.path ?? '').trim();
21
+ if (!targetPath || !fs.existsSync(targetPath)) process.exit(0);
22
+
23
+ const ext = path.extname(targetPath);
24
+ const checks = [];
25
+
26
+ if (['.ts', '.tsx'].includes(ext)) {
27
+ const tscBin = which('tsc');
28
+ if (tscBin) {
29
+ // Windows .cmd / .bat 호환: shell: true 사용. 인자에 공백 있는 경로는 따옴표.
30
+ const isWin = process.platform === 'win32';
31
+ const q = isWin ? `"${targetPath}"` : targetPath;
32
+ checks.push({
33
+ name: 'tsc',
34
+ cmd: tscBin,
35
+ args: ['--noEmit', '--allowJs', '--skipLibCheck', q],
36
+ shell: isWin,
37
+ });
38
+ } else {
39
+ checks.push({ name: 'node-syntax', cmd: process.execPath, args: ['--check', targetPath], allowFail: true });
40
+ }
41
+ } else if (['.js', '.mjs', '.cjs'].includes(ext)) {
42
+ // ESM 은 --check 가 import 해석을 하지 않아 OK. 빠르고 false-negative 적음.
43
+ checks.push({ name: 'node-syntax', cmd: process.execPath, args: ['--check', targetPath] });
44
+ } else if (ext === '.py') {
45
+ const ruff = which('ruff');
46
+ if (ruff) {
47
+ checks.push({ name: 'ruff', cmd: ruff, args: ['check', targetPath] });
48
+ }
49
+ checks.push({ name: 'py-compile', cmd: pythonCmd(), args: ['-m', 'py_compile', targetPath] });
50
+ } else {
51
+ process.exit(0);
52
+ }
53
+
54
+ let failed = false;
55
+ for (const c of checks) {
56
+ const r = spawnSync(c.cmd, c.args, { encoding: 'utf8', shell: c.shell || false });
57
+ if (r.status === 0) {
58
+ process.stderr.write(`[quality-gate] ${c.name}: OK ${targetPath}\n`);
59
+ } else if (c.allowFail) {
60
+ process.stderr.write(`[quality-gate] ${c.name}: WARN (allowed) ${targetPath}\n`);
61
+ } else {
62
+ failed = true;
63
+ process.stderr.write(`[quality-gate] ${c.name}: FAIL ${targetPath}\n`);
64
+ if (r.stdout) process.stderr.write(r.stdout);
65
+ if (r.stderr) process.stderr.write(r.stderr);
66
+ }
67
+ }
68
+
69
+ if (failed) {
70
+ process.stderr.write('[quality-gate] 다음 도구 호출 차단됨. 위 오류 수정 후 다시 진행.\n');
71
+ process.exit(2);
72
+ }
73
+ process.exit(0);
74
+
75
+ // ----------------
76
+
77
+ function which(bin) {
78
+ const sep = process.platform === 'win32' ? ';' : ':';
79
+ const exts = process.platform === 'win32'
80
+ ? (process.env.PATHEXT || '.EXE;.CMD;.BAT').split(';').map(e => e.toLowerCase())
81
+ : [''];
82
+
83
+ // 로컬 node_modules/.bin 을 우선 탐색 (cwd 부터 부모 디렉터리로 올라감).
84
+ const dirs = [];
85
+ let cur = process.cwd();
86
+ for (let i = 0; i < 6; i++) {
87
+ dirs.push(path.join(cur, 'node_modules', '.bin'));
88
+ const parent = path.dirname(cur);
89
+ if (parent === cur) break;
90
+ cur = parent;
91
+ }
92
+ // 그 다음 PATH
93
+ for (const d of (process.env.PATH || '').split(sep)) if (d) dirs.push(d);
94
+
95
+ for (const dir of dirs) {
96
+ for (const x of exts) {
97
+ const full = path.join(dir, bin + x);
98
+ if (fs.existsSync(full)) return full;
99
+ }
100
+ }
101
+ return null;
102
+ }
103
+
104
+ function pythonCmd() {
105
+ return which('python3') || which('python') || 'python';
106
+ }
@@ -0,0 +1,195 @@
1
+ {
2
+ "$schema": "../schemas/install-components.schema.json",
3
+ "version": "0.0.1",
4
+ "components": {
5
+ "rules:soul": {
6
+ "type": "rule",
7
+ "source": "SOUL.md",
8
+ "target": { "claude": "SOUL.md", "codex": "SOUL.md" }
9
+ },
10
+ "rules:rules": {
11
+ "type": "rule",
12
+ "source": "RULES.md",
13
+ "target": { "claude": "RULES.md", "codex": "RULES.md" }
14
+ },
15
+ "rules:claude": {
16
+ "type": "rule",
17
+ "source": "CLAUDE.md",
18
+ "target": { "claude": "CLAUDE.md" },
19
+ "marker_managed": true
20
+ },
21
+ "rules:agents": {
22
+ "type": "rule",
23
+ "source": "AGENTS.md",
24
+ "target": { "claude": "AGENTS.md", "codex": "AGENTS.md", "cursor": "AGENTS.md" },
25
+ "marker_managed": true
26
+ },
27
+ "rules:working-context": {
28
+ "type": "rule",
29
+ "source": "WORKING-CONTEXT.md",
30
+ "target": { "claude": "WORKING-CONTEXT.md" }
31
+ },
32
+ "rules:review": {
33
+ "type": "rule",
34
+ "source": "REVIEW.md",
35
+ "target": { "claude": "REVIEW.md", "codex": "REVIEW.md" }
36
+ },
37
+ "rules:common": {
38
+ "type": "rule_set",
39
+ "source": "rules/common/",
40
+ "target": { "claude": "rules/common/" }
41
+ },
42
+ "rules:typescript": {
43
+ "type": "rule_set",
44
+ "source": "rules/typescript/",
45
+ "target": { "claude": "rules/typescript/" }
46
+ },
47
+ "rules:python": {
48
+ "type": "rule_set",
49
+ "source": "rules/python/",
50
+ "target": { "claude": "rules/python/" }
51
+ },
52
+
53
+ "agent:architect": {
54
+ "type": "agent",
55
+ "source": "agents/architect.md",
56
+ "target": { "claude": ".claude/agents/architect.md" }
57
+ },
58
+ "agent:planner": {
59
+ "type": "agent",
60
+ "source": "agents/planner.md",
61
+ "target": { "claude": ".claude/agents/planner.md" }
62
+ },
63
+ "agent:executor": {
64
+ "type": "agent",
65
+ "source": "agents/executor.md",
66
+ "target": { "claude": ".claude/agents/executor.md" }
67
+ },
68
+ "agent:code-reviewer": {
69
+ "type": "agent",
70
+ "source": "agents/code-reviewer.md",
71
+ "target": { "claude": ".claude/agents/code-reviewer.md" }
72
+ },
73
+ "agent:codex-reviewer": {
74
+ "type": "agent",
75
+ "source": "agents/codex-reviewer.md",
76
+ "target": { "codex": ".codex/agents/codex-reviewer.toml" }
77
+ },
78
+ "agent:codex-challenger": {
79
+ "type": "agent",
80
+ "source": "agents/codex-challenger.md",
81
+ "target": { "codex": ".codex/agents/codex-challenger.toml" }
82
+ },
83
+ "agent:security-reviewer": {
84
+ "type": "agent",
85
+ "source": "agents/security-reviewer.md",
86
+ "target": { "claude": ".claude/agents/security-reviewer.md" }
87
+ },
88
+ "agent:debugger": {
89
+ "type": "agent",
90
+ "source": "agents/debugger.md",
91
+ "target": { "claude": ".claude/agents/debugger.md" }
92
+ },
93
+ "agent:test-engineer": {
94
+ "type": "agent",
95
+ "source": "agents/test-engineer.md",
96
+ "target": { "claude": ".claude/agents/test-engineer.md" }
97
+ },
98
+ "agent:research": {
99
+ "type": "agent",
100
+ "source": "agents/research.md",
101
+ "target": { "claude": ".claude/agents/research.md", "gemini": ".gemini/agents/research.md" }
102
+ },
103
+ "agent:doc-writer": {
104
+ "type": "agent",
105
+ "source": "agents/doc-writer.md",
106
+ "target": { "claude": ".claude/agents/doc-writer.md" }
107
+ },
108
+
109
+ "skill:claude-led-codex-review": {
110
+ "type": "skill",
111
+ "source": "skills/claude-led-codex-review/",
112
+ "target": { "claude": ".claude/skills/claude-led-codex-review/" }
113
+ },
114
+ "skill:plan-eng-review": {
115
+ "type": "skill",
116
+ "source": "skills/plan-eng-review/",
117
+ "target": { "claude": ".claude/skills/plan-eng-review/" }
118
+ },
119
+ "skill:tdd-workflow": {
120
+ "type": "skill",
121
+ "source": "skills/tdd-workflow/",
122
+ "target": { "claude": ".claude/skills/tdd-workflow/" }
123
+ },
124
+ "skill:review": {
125
+ "type": "skill",
126
+ "source": "skills/review/",
127
+ "target": { "claude": ".claude/skills/review/" }
128
+ },
129
+ "skill:ship": {
130
+ "type": "skill",
131
+ "source": "skills/ship/",
132
+ "target": { "claude": ".claude/skills/ship/" }
133
+ },
134
+ "skill:security-hardening": {
135
+ "type": "skill",
136
+ "source": "skills/security-hardening/",
137
+ "target": { "claude": ".claude/skills/security-hardening/" }
138
+ },
139
+ "skill:release-readiness": {
140
+ "type": "skill",
141
+ "source": "skills/release-readiness/",
142
+ "target": { "claude": ".claude/skills/release-readiness/" }
143
+ },
144
+ "skill:porting": {
145
+ "type": "skill",
146
+ "source": "skills/porting/",
147
+ "target": { "claude": ".claude/skills/porting/" }
148
+ },
149
+
150
+ "command:claude-led-codex-review": {
151
+ "type": "command",
152
+ "source": "commands/claude-led-codex-review.md",
153
+ "target": { "claude": ".claude/commands/claude-led-codex-review.md" }
154
+ },
155
+
156
+ "hook:gateguard-fact-force": {
157
+ "type": "hook",
158
+ "source": "hooks/scripts/gateguard-fact-force.js",
159
+ "target": { "claude": ".claude/hooks/gateguard-fact-force.js" },
160
+ "event": "PreToolUse",
161
+ "matcher": "Edit|Write"
162
+ },
163
+ "hook:quality-gate": {
164
+ "type": "hook",
165
+ "source": "hooks/scripts/quality-gate.js",
166
+ "target": { "claude": ".claude/hooks/quality-gate.js" },
167
+ "event": "PostToolUse",
168
+ "matcher": "Edit|Write"
169
+ },
170
+ "hook:pre-bash-dispatcher": {
171
+ "type": "hook",
172
+ "source": "hooks/scripts/pre-bash-dispatcher.js",
173
+ "target": { "claude": ".claude/hooks/pre-bash-dispatcher.js" },
174
+ "event": "PreToolUse",
175
+ "matcher": "Bash"
176
+ },
177
+ "hook:persistent-mode": {
178
+ "type": "hook",
179
+ "source": "hooks/scripts/persistent-mode.mjs",
180
+ "target": { "claude": ".claude/hooks/persistent-mode.mjs" },
181
+ "event": "Stop"
182
+ },
183
+
184
+ "platform:claude": {
185
+ "type": "platform",
186
+ "builder": "scripts/build-claude.js",
187
+ "output_dir": ".claude"
188
+ },
189
+ "platform:codex": {
190
+ "type": "platform",
191
+ "builder": "scripts/build-codex.js",
192
+ "output_dir": ".codex"
193
+ }
194
+ }
195
+ }
@@ -0,0 +1,101 @@
1
+ {
2
+ "$schema": "../schemas/install-modules.schema.json",
3
+ "version": "0.0.1",
4
+ "modules": {
5
+ "rules-core": {
6
+ "description": "거버넌스 4계층 (SOUL/RULES/CLAUDE/AGENTS) + 공통/언어별 룰",
7
+ "components": [
8
+ "rules:soul",
9
+ "rules:rules",
10
+ "rules:claude",
11
+ "rules:agents",
12
+ "rules:working-context",
13
+ "rules:review",
14
+ "rules:common",
15
+ "rules:typescript",
16
+ "rules:python"
17
+ ],
18
+ "level": 3,
19
+ "required": true
20
+ },
21
+ "agents-core": {
22
+ "description": "11개 핵심 에이전트 카탈로그 (Claude + Codex + Gemini)",
23
+ "components": [
24
+ "agent:architect",
25
+ "agent:planner",
26
+ "agent:executor",
27
+ "agent:code-reviewer",
28
+ "agent:codex-reviewer",
29
+ "agent:codex-challenger",
30
+ "agent:security-reviewer",
31
+ "agent:debugger",
32
+ "agent:test-engineer",
33
+ "agent:research",
34
+ "agent:doc-writer"
35
+ ],
36
+ "level": 3,
37
+ "required": true
38
+ },
39
+ "hooks-runtime": {
40
+ "description": "PreToolUse / PostToolUse / Stop 훅 4종 + 디스패처",
41
+ "components": [
42
+ "hook:gateguard-fact-force",
43
+ "hook:quality-gate",
44
+ "hook:pre-bash-dispatcher",
45
+ "hook:persistent-mode"
46
+ ],
47
+ "level": 2,
48
+ "required": true,
49
+ "env_toggles": {
50
+ "HARNESS_HOOK_GATEGUARD": "1",
51
+ "HARNESS_HOOK_QUALITY_GATE": "1",
52
+ "HARNESS_HOOK_PRE_BASH": "1",
53
+ "HARNESS_HOOK_PERSISTENT_MODE": "1"
54
+ }
55
+ },
56
+ "platform-configs": {
57
+ "description": "Claude Code / Codex CLI 등 하네스별 빌드 출력 위치 정의",
58
+ "components": [
59
+ "platform:claude",
60
+ "platform:codex"
61
+ ],
62
+ "level": 2,
63
+ "required": true,
64
+ "depends_on": ["agents-core", "hooks-runtime"]
65
+ },
66
+ "workflow-quality": {
67
+ "description": "TDD + 품질 게이트 워크플로우 스킬",
68
+ "components": [
69
+ "skill:tdd-workflow",
70
+ "skill:plan-eng-review",
71
+ "skill:review",
72
+ "skill:ship"
73
+ ],
74
+ "level": 2,
75
+ "required": false
76
+ },
77
+ "codex-loop": {
78
+ "description": "claude-led-codex-review 7단계 풀사이클 + Codex 검증 루프",
79
+ "components": [
80
+ "skill:claude-led-codex-review",
81
+ "agent:codex-reviewer",
82
+ "agent:codex-challenger",
83
+ "command:claude-led-codex-review"
84
+ ],
85
+ "level": 3,
86
+ "required": false,
87
+ "depends_on": ["agents-core", "workflow-quality"]
88
+ },
89
+ "ops-readiness": {
90
+ "description": "Release, security-hardening, and external project porting operating skills.",
91
+ "components": [
92
+ "skill:security-hardening",
93
+ "skill:release-readiness",
94
+ "skill:porting"
95
+ ],
96
+ "level": 2,
97
+ "required": false,
98
+ "depends_on": ["workflow-quality"]
99
+ }
100
+ }
101
+ }
@@ -0,0 +1,134 @@
1
+ {
2
+ "$schema": "../schemas/install-profiles.schema.json",
3
+ "version": "0.0.3",
4
+ "profiles": {
5
+ "core": {
6
+ "description": "Minimal NEKOWORK surface: rules, core agents, runtime hooks, platform configs, and safety gates.",
7
+ "modules": [
8
+ "rules-core",
9
+ "agents-core",
10
+ "hooks-runtime",
11
+ "platform-configs"
12
+ ]
13
+ },
14
+ "developer": {
15
+ "description": "Daily development profile with quality workflow, Codex loop, and release readiness helpers.",
16
+ "modules": [
17
+ "rules-core",
18
+ "agents-core",
19
+ "hooks-runtime",
20
+ "platform-configs",
21
+ "workflow-quality",
22
+ "codex-loop",
23
+ "ops-readiness"
24
+ ]
25
+ },
26
+ "security": {
27
+ "description": "Secure development profile that keeps Codex verification and human gates active for sensitive work.",
28
+ "modules": [
29
+ "rules-core",
30
+ "agents-core",
31
+ "hooks-runtime",
32
+ "platform-configs",
33
+ "codex-loop",
34
+ "ops-readiness"
35
+ ],
36
+ "defaults": {
37
+ "review_mode": "secure",
38
+ "human_gate_on_critical": true,
39
+ "outbound_network": "deny"
40
+ }
41
+ },
42
+ "product": {
43
+ "description": "Product planning profile for question gates, scope review, acceptance criteria, and handoff-first planning.",
44
+ "modules": [
45
+ "rules-core",
46
+ "agents-core",
47
+ "hooks-runtime",
48
+ "platform-configs",
49
+ "workflow-quality"
50
+ ],
51
+ "defaults": {
52
+ "question_gate": true,
53
+ "mutation_policy": "single_executor"
54
+ }
55
+ },
56
+ "quality": {
57
+ "description": "Disciplined development profile for brainstorm, test-first planning, systematic debugging, evidence-based review, and verification before completion.",
58
+ "modules": [
59
+ "rules-core",
60
+ "agents-core",
61
+ "hooks-runtime",
62
+ "platform-configs",
63
+ "workflow-quality",
64
+ "codex-loop",
65
+ "ops-readiness"
66
+ ],
67
+ "defaults": {
68
+ "brainstorm_before_work": true,
69
+ "test_first_plan": true,
70
+ "systematic_debugging": true,
71
+ "evidence_based_review": true,
72
+ "verification_before_completion": true,
73
+ "quality_gate_required": true,
74
+ "require_codex_verification": true,
75
+ "human_gate_on_critical": true,
76
+ "mutation_policy": "single_executor"
77
+ }
78
+ },
79
+ "frontend": {
80
+ "description": "Frontend profile for UI mockups, component review, accessibility checks, and Codex-reviewed implementation.",
81
+ "modules": [
82
+ "rules-core",
83
+ "agents-core",
84
+ "hooks-runtime",
85
+ "platform-configs",
86
+ "workflow-quality",
87
+ "codex-loop"
88
+ ],
89
+ "defaults": {
90
+ "question_gate": true,
91
+ "ui_mock_data_first": true
92
+ }
93
+ },
94
+ "testing": {
95
+ "description": "Testing profile for test planning, regression review, coverage-oriented handoffs, and quality gates.",
96
+ "modules": [
97
+ "rules-core",
98
+ "agents-core",
99
+ "hooks-runtime",
100
+ "platform-configs",
101
+ "workflow-quality",
102
+ "codex-loop"
103
+ ],
104
+ "defaults": {
105
+ "test_plan_required": true,
106
+ "mutation_policy": "single_executor"
107
+ }
108
+ },
109
+ "research": {
110
+ "description": "Research profile for read-only investigation handoffs and optional external knowledge surfaces.",
111
+ "modules": [
112
+ "rules-core",
113
+ "agents-core",
114
+ "hooks-runtime",
115
+ "platform-configs",
116
+ "workflow-quality",
117
+ "ops-readiness"
118
+ ],
119
+ "post_install_note": "External research connectors remain opt-in and cannot weaken core safety gates."
120
+ },
121
+ "full": {
122
+ "description": "All stable modules in the current release, still bounded by NEKOWORK core safety invariants.",
123
+ "modules": [
124
+ "rules-core",
125
+ "agents-core",
126
+ "hooks-runtime",
127
+ "platform-configs",
128
+ "workflow-quality",
129
+ "codex-loop",
130
+ "ops-readiness"
131
+ ]
132
+ }
133
+ }
134
+ }