@moreih29/nexus-core 0.17.0 → 0.18.2

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 (415) hide show
  1. package/README.md +101 -67
  2. package/dist/cli/sync.d.ts +3 -0
  3. package/dist/cli/sync.d.ts.map +1 -0
  4. package/dist/cli/sync.js +59 -0
  5. package/dist/cli/sync.js.map +1 -0
  6. package/dist/generate/index.d.ts +3 -0
  7. package/dist/generate/index.d.ts.map +1 -0
  8. package/dist/generate/index.js +2 -0
  9. package/dist/generate/index.js.map +1 -0
  10. package/dist/generate/load-data.d.ts +8 -0
  11. package/dist/generate/load-data.d.ts.map +1 -0
  12. package/dist/generate/load-data.js +45 -0
  13. package/dist/generate/load-data.js.map +1 -0
  14. package/dist/generate/load-spec.d.ts +3 -0
  15. package/dist/generate/load-spec.d.ts.map +1 -0
  16. package/dist/generate/load-spec.js +48 -0
  17. package/dist/generate/load-spec.js.map +1 -0
  18. package/dist/generate/macros/expand.d.ts +3 -0
  19. package/dist/generate/macros/expand.d.ts.map +1 -0
  20. package/dist/generate/macros/expand.js +48 -0
  21. package/dist/generate/macros/expand.js.map +1 -0
  22. package/dist/generate/macros/parse.d.ts +4 -0
  23. package/dist/generate/macros/parse.d.ts.map +1 -0
  24. package/dist/generate/macros/parse.js +142 -0
  25. package/dist/generate/macros/parse.js.map +1 -0
  26. package/dist/generate/macros/validate.d.ts +3 -0
  27. package/dist/generate/macros/validate.d.ts.map +1 -0
  28. package/dist/generate/macros/validate.js +23 -0
  29. package/dist/generate/macros/validate.js.map +1 -0
  30. package/dist/generate/renderers/claude.d.ts +3 -0
  31. package/dist/generate/renderers/claude.d.ts.map +1 -0
  32. package/dist/generate/renderers/claude.js +48 -0
  33. package/dist/generate/renderers/claude.js.map +1 -0
  34. package/dist/generate/renderers/codex.d.ts +3 -0
  35. package/dist/generate/renderers/codex.d.ts.map +1 -0
  36. package/dist/generate/renderers/codex.js +79 -0
  37. package/dist/generate/renderers/codex.js.map +1 -0
  38. package/dist/generate/renderers/markdown.d.ts +2 -0
  39. package/dist/generate/renderers/markdown.d.ts.map +1 -0
  40. package/dist/generate/renderers/markdown.js +6 -0
  41. package/dist/generate/renderers/markdown.js.map +1 -0
  42. package/dist/generate/renderers/opencode.d.ts +3 -0
  43. package/dist/generate/renderers/opencode.d.ts.map +1 -0
  44. package/dist/generate/renderers/opencode.js +69 -0
  45. package/dist/generate/renderers/opencode.js.map +1 -0
  46. package/dist/generate/sync.d.ts +4 -0
  47. package/dist/generate/sync.d.ts.map +1 -0
  48. package/dist/generate/sync.js +60 -0
  49. package/dist/generate/sync.js.map +1 -0
  50. package/dist/generate/types.d.ts +74 -0
  51. package/dist/generate/types.d.ts.map +1 -0
  52. package/dist/generate/types.js +2 -0
  53. package/dist/generate/types.js.map +1 -0
  54. package/dist/index.d.ts +4 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +2 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/mcp/definitions/artifact.d.ts +20 -0
  59. package/dist/mcp/definitions/artifact.d.ts.map +1 -0
  60. package/dist/mcp/definitions/artifact.js +14 -0
  61. package/dist/mcp/definitions/artifact.js.map +1 -0
  62. package/dist/mcp/definitions/history.d.ts +20 -0
  63. package/dist/mcp/definitions/history.d.ts.map +1 -0
  64. package/dist/mcp/definitions/history.js +18 -0
  65. package/dist/mcp/definitions/history.js.map +1 -0
  66. package/dist/mcp/definitions/index.d.ts +276 -0
  67. package/dist/mcp/definitions/index.d.ts.map +1 -0
  68. package/dist/mcp/definitions/index.js +16 -0
  69. package/dist/mcp/definitions/index.js.map +1 -0
  70. package/dist/mcp/definitions/plan.d.ts +111 -0
  71. package/dist/mcp/definitions/plan.d.ts.map +1 -0
  72. package/dist/mcp/definitions/plan.js +89 -0
  73. package/dist/mcp/definitions/plan.js.map +1 -0
  74. package/dist/mcp/definitions/task.d.ts +138 -0
  75. package/dist/mcp/definitions/task.d.ts.map +1 -0
  76. package/dist/mcp/definitions/task.js +78 -0
  77. package/dist/mcp/definitions/task.js.map +1 -0
  78. package/dist/mcp/handlers/artifact.d.ts.map +1 -0
  79. package/dist/mcp/handlers/artifact.js +42 -0
  80. package/dist/mcp/handlers/artifact.js.map +1 -0
  81. package/dist/mcp/handlers/history.d.ts.map +1 -0
  82. package/dist/mcp/handlers/history.js +35 -0
  83. package/dist/mcp/handlers/history.js.map +1 -0
  84. package/dist/mcp/handlers/plan.d.ts.map +1 -0
  85. package/dist/mcp/handlers/plan.js +324 -0
  86. package/dist/mcp/handlers/plan.js.map +1 -0
  87. package/dist/mcp/handlers/task.d.ts.map +1 -0
  88. package/dist/mcp/handlers/task.js +216 -0
  89. package/dist/mcp/handlers/task.js.map +1 -0
  90. package/dist/{src/mcp → mcp}/server.d.ts +1 -1
  91. package/dist/mcp/server.d.ts.map +1 -0
  92. package/dist/mcp/server.js +58 -0
  93. package/dist/mcp/server.js.map +1 -0
  94. package/dist/shared/json-store.d.ts.map +1 -0
  95. package/dist/{src/shared → shared}/json-store.js +5 -4
  96. package/dist/shared/json-store.js.map +1 -0
  97. package/dist/shared/mcp-utils.d.ts.map +1 -0
  98. package/dist/shared/mcp-utils.js.map +1 -0
  99. package/dist/{src/shared → shared}/paths.d.ts +0 -6
  100. package/dist/shared/paths.d.ts.map +1 -0
  101. package/dist/shared/paths.js +62 -0
  102. package/dist/shared/paths.js.map +1 -0
  103. package/dist/shared/register-tool.d.ts +20 -0
  104. package/dist/shared/register-tool.d.ts.map +1 -0
  105. package/dist/shared/register-tool.js +15 -0
  106. package/dist/shared/register-tool.js.map +1 -0
  107. package/dist/{src/types → types}/state.d.ts +65 -65
  108. package/dist/types/state.d.ts.map +1 -0
  109. package/dist/{src/types → types}/state.js +1 -1
  110. package/dist/types/state.js.map +1 -0
  111. package/harness/claude/agent-rules.yml +21 -0
  112. package/harness/claude/invocations.yml +11 -0
  113. package/harness/claude/layout.yml +3 -0
  114. package/harness/codex/agent-rules.yml +28 -0
  115. package/harness/codex/invocations.yml +13 -0
  116. package/harness/codex/layout.yml +3 -0
  117. package/harness/opencode/agent-rules.yml +18 -0
  118. package/harness/opencode/invocations.yml +12 -0
  119. package/harness/opencode/layout.yml +3 -0
  120. package/package.json +38 -43
  121. package/{assets → spec}/agents/architect/body.ko.md +92 -84
  122. package/spec/agents/architect/body.md +185 -0
  123. package/spec/agents/designer/body.ko.md +330 -0
  124. package/spec/agents/designer/body.md +330 -0
  125. package/spec/agents/engineer/body.ko.md +166 -0
  126. package/spec/agents/engineer/body.md +166 -0
  127. package/spec/agents/lead/body.ko.md +276 -0
  128. package/spec/agents/lead/body.md +276 -0
  129. package/{assets → spec}/agents/postdoc/body.ko.md +116 -46
  130. package/spec/agents/postdoc/body.md +192 -0
  131. package/{assets → spec}/agents/researcher/body.ko.md +131 -45
  132. package/spec/agents/researcher/body.md +223 -0
  133. package/spec/agents/reviewer/body.ko.md +219 -0
  134. package/spec/agents/reviewer/body.md +219 -0
  135. package/{assets → spec}/agents/strategist/body.ko.md +108 -35
  136. package/spec/agents/strategist/body.md +187 -0
  137. package/spec/agents/tester/body.ko.md +272 -0
  138. package/spec/agents/tester/body.md +272 -0
  139. package/{assets → spec}/agents/writer/body.ko.md +109 -33
  140. package/spec/agents/writer/body.md +198 -0
  141. package/spec/skills/nx-auto-plan/body.ko.md +150 -0
  142. package/spec/skills/nx-auto-plan/body.md +150 -0
  143. package/spec/skills/nx-plan/body.ko.md +159 -0
  144. package/spec/skills/nx-plan/body.md +159 -0
  145. package/spec/skills/nx-run/body.ko.md +132 -0
  146. package/spec/skills/nx-run/body.md +132 -0
  147. package/vocabulary/enums/task-register-state.yml +4 -0
  148. package/vocabulary/invocations.yml +43 -0
  149. package/assets/agents/architect/body.md +0 -177
  150. package/assets/agents/designer/body.ko.md +0 -125
  151. package/assets/agents/designer/body.md +0 -125
  152. package/assets/agents/engineer/body.ko.md +0 -106
  153. package/assets/agents/engineer/body.md +0 -106
  154. package/assets/agents/lead/body.ko.md +0 -70
  155. package/assets/agents/lead/body.md +0 -70
  156. package/assets/agents/postdoc/body.md +0 -122
  157. package/assets/agents/researcher/body.md +0 -137
  158. package/assets/agents/reviewer/body.ko.md +0 -138
  159. package/assets/agents/reviewer/body.md +0 -138
  160. package/assets/agents/strategist/body.md +0 -116
  161. package/assets/agents/tester/body.ko.md +0 -195
  162. package/assets/agents/tester/body.md +0 -195
  163. package/assets/agents/writer/body.md +0 -122
  164. package/assets/capability-matrix.yml +0 -200
  165. package/assets/hooks/agent-bootstrap/handler.test.ts +0 -369
  166. package/assets/hooks/agent-bootstrap/handler.ts +0 -132
  167. package/assets/hooks/agent-bootstrap/meta.yml +0 -10
  168. package/assets/hooks/agent-finalize/handler.test.ts +0 -368
  169. package/assets/hooks/agent-finalize/handler.ts +0 -76
  170. package/assets/hooks/agent-finalize/meta.yml +0 -10
  171. package/assets/hooks/capability-matrix.yml +0 -313
  172. package/assets/hooks/post-tool-telemetry/handler.test.ts +0 -302
  173. package/assets/hooks/post-tool-telemetry/handler.ts +0 -49
  174. package/assets/hooks/post-tool-telemetry/meta.yml +0 -10
  175. package/assets/hooks/prompt-router/handler.test.ts +0 -801
  176. package/assets/hooks/prompt-router/handler.ts +0 -272
  177. package/assets/hooks/prompt-router/meta.yml +0 -11
  178. package/assets/hooks/session-init/handler.test.ts +0 -274
  179. package/assets/hooks/session-init/handler.ts +0 -31
  180. package/assets/hooks/session-init/meta.yml +0 -9
  181. package/assets/lsp-servers.json +0 -55
  182. package/assets/schema/lsp-servers.schema.json +0 -67
  183. package/assets/skills/nx-init/body.ko.md +0 -197
  184. package/assets/skills/nx-init/body.md +0 -197
  185. package/assets/skills/nx-plan/body.ko.md +0 -361
  186. package/assets/skills/nx-plan/body.md +0 -361
  187. package/assets/skills/nx-run/body.ko.md +0 -161
  188. package/assets/skills/nx-run/body.md +0 -160
  189. package/assets/skills/nx-sync/body.ko.md +0 -92
  190. package/assets/skills/nx-sync/body.md +0 -92
  191. package/assets/tools/tool-name-map.yml +0 -353
  192. package/dist/assets/hooks/agent-bootstrap/handler.d.ts +0 -4
  193. package/dist/assets/hooks/agent-bootstrap/handler.d.ts.map +0 -1
  194. package/dist/assets/hooks/agent-bootstrap/handler.js +0 -114
  195. package/dist/assets/hooks/agent-bootstrap/handler.js.map +0 -1
  196. package/dist/assets/hooks/agent-finalize/handler.d.ts +0 -4
  197. package/dist/assets/hooks/agent-finalize/handler.d.ts.map +0 -1
  198. package/dist/assets/hooks/agent-finalize/handler.js +0 -63
  199. package/dist/assets/hooks/agent-finalize/handler.js.map +0 -1
  200. package/dist/assets/hooks/post-tool-telemetry/handler.d.ts +0 -4
  201. package/dist/assets/hooks/post-tool-telemetry/handler.d.ts.map +0 -1
  202. package/dist/assets/hooks/post-tool-telemetry/handler.js +0 -40
  203. package/dist/assets/hooks/post-tool-telemetry/handler.js.map +0 -1
  204. package/dist/assets/hooks/prompt-router/handler.d.ts +0 -4
  205. package/dist/assets/hooks/prompt-router/handler.d.ts.map +0 -1
  206. package/dist/assets/hooks/prompt-router/handler.js +0 -214
  207. package/dist/assets/hooks/prompt-router/handler.js.map +0 -1
  208. package/dist/assets/hooks/session-init/handler.d.ts +0 -4
  209. package/dist/assets/hooks/session-init/handler.d.ts.map +0 -1
  210. package/dist/assets/hooks/session-init/handler.js +0 -22
  211. package/dist/assets/hooks/session-init/handler.js.map +0 -1
  212. package/dist/claude/.claude-plugin/marketplace.json +0 -75
  213. package/dist/claude/.claude-plugin/plugin.json +0 -67
  214. package/dist/claude/agents/architect.md +0 -172
  215. package/dist/claude/agents/designer.md +0 -120
  216. package/dist/claude/agents/engineer.md +0 -98
  217. package/dist/claude/agents/lead.md +0 -59
  218. package/dist/claude/agents/postdoc.md +0 -117
  219. package/dist/claude/agents/researcher.md +0 -132
  220. package/dist/claude/agents/reviewer.md +0 -133
  221. package/dist/claude/agents/strategist.md +0 -111
  222. package/dist/claude/agents/tester.md +0 -190
  223. package/dist/claude/agents/writer.md +0 -114
  224. package/dist/claude/dist/hooks/agent-bootstrap.js +0 -238
  225. package/dist/claude/dist/hooks/agent-finalize.js +0 -180
  226. package/dist/claude/dist/hooks/post-tool-telemetry.js +0 -71
  227. package/dist/claude/dist/hooks/prompt-router.js +0 -7336
  228. package/dist/claude/dist/hooks/session-init.js +0 -50
  229. package/dist/claude/hooks/hooks.json +0 -64
  230. package/dist/claude/settings.json +0 -3
  231. package/dist/claude/skills/nx-init/SKILL.md +0 -189
  232. package/dist/claude/skills/nx-plan/SKILL.md +0 -353
  233. package/dist/claude/skills/nx-run/SKILL.md +0 -154
  234. package/dist/claude/skills/nx-sync/SKILL.md +0 -87
  235. package/dist/codex/agents/architect.toml +0 -175
  236. package/dist/codex/agents/designer.toml +0 -123
  237. package/dist/codex/agents/engineer.toml +0 -105
  238. package/dist/codex/agents/lead.toml +0 -64
  239. package/dist/codex/agents/postdoc.toml +0 -120
  240. package/dist/codex/agents/researcher.toml +0 -136
  241. package/dist/codex/agents/reviewer.toml +0 -137
  242. package/dist/codex/agents/strategist.toml +0 -114
  243. package/dist/codex/agents/tester.toml +0 -194
  244. package/dist/codex/agents/writer.toml +0 -121
  245. package/dist/codex/dist/hooks/agent-bootstrap.js +0 -238
  246. package/dist/codex/dist/hooks/agent-finalize.js +0 -180
  247. package/dist/codex/dist/hooks/prompt-router.js +0 -7336
  248. package/dist/codex/dist/hooks/session-init.js +0 -50
  249. package/dist/codex/hooks/hooks.json +0 -28
  250. package/dist/codex/install/AGENTS.fragment.md +0 -60
  251. package/dist/codex/install/config.fragment.toml +0 -5
  252. package/dist/codex/install/install.sh +0 -60
  253. package/dist/codex/package.json +0 -20
  254. package/dist/codex/plugin/.codex-plugin/plugin.json +0 -57
  255. package/dist/codex/plugin/skills/nx-init/SKILL.md +0 -189
  256. package/dist/codex/plugin/skills/nx-plan/SKILL.md +0 -353
  257. package/dist/codex/plugin/skills/nx-run/SKILL.md +0 -154
  258. package/dist/codex/plugin/skills/nx-sync/SKILL.md +0 -87
  259. package/dist/codex/prompts/architect.md +0 -166
  260. package/dist/codex/prompts/designer.md +0 -114
  261. package/dist/codex/prompts/engineer.md +0 -97
  262. package/dist/codex/prompts/lead.md +0 -60
  263. package/dist/codex/prompts/postdoc.md +0 -111
  264. package/dist/codex/prompts/researcher.md +0 -127
  265. package/dist/codex/prompts/reviewer.md +0 -128
  266. package/dist/codex/prompts/strategist.md +0 -105
  267. package/dist/codex/prompts/tester.md +0 -185
  268. package/dist/codex/prompts/writer.md +0 -113
  269. package/dist/hooks/agent-bootstrap.js +0 -238
  270. package/dist/hooks/agent-finalize.js +0 -180
  271. package/dist/hooks/post-tool-telemetry.js +0 -71
  272. package/dist/hooks/prompt-router.js +0 -7336
  273. package/dist/hooks/session-init.js +0 -50
  274. package/dist/manifests/claude-hooks.json +0 -64
  275. package/dist/manifests/codex-hooks.json +0 -28
  276. package/dist/manifests/opencode-manifest.json +0 -54
  277. package/dist/manifests/portability-report.json +0 -75
  278. package/dist/opencode/.opencode/skills/nx-init/SKILL.md +0 -189
  279. package/dist/opencode/.opencode/skills/nx-plan/SKILL.md +0 -353
  280. package/dist/opencode/.opencode/skills/nx-run/SKILL.md +0 -154
  281. package/dist/opencode/.opencode/skills/nx-sync/SKILL.md +0 -87
  282. package/dist/opencode/package.json +0 -23
  283. package/dist/opencode/src/agents/architect.ts +0 -176
  284. package/dist/opencode/src/agents/designer.ts +0 -124
  285. package/dist/opencode/src/agents/engineer.ts +0 -105
  286. package/dist/opencode/src/agents/lead.ts +0 -66
  287. package/dist/opencode/src/agents/postdoc.ts +0 -121
  288. package/dist/opencode/src/agents/researcher.ts +0 -136
  289. package/dist/opencode/src/agents/reviewer.ts +0 -137
  290. package/dist/opencode/src/agents/strategist.ts +0 -115
  291. package/dist/opencode/src/agents/tester.ts +0 -194
  292. package/dist/opencode/src/agents/writer.ts +0 -121
  293. package/dist/opencode/src/index.ts +0 -25
  294. package/dist/opencode/src/plugin.ts +0 -6
  295. package/dist/scripts/build-agents.d.ts +0 -170
  296. package/dist/scripts/build-agents.d.ts.map +0 -1
  297. package/dist/scripts/build-agents.js +0 -907
  298. package/dist/scripts/build-agents.js.map +0 -1
  299. package/dist/scripts/build-hooks.d.ts +0 -57
  300. package/dist/scripts/build-hooks.d.ts.map +0 -1
  301. package/dist/scripts/build-hooks.js +0 -562
  302. package/dist/scripts/build-hooks.js.map +0 -1
  303. package/dist/scripts/cli.d.ts +0 -54
  304. package/dist/scripts/cli.d.ts.map +0 -1
  305. package/dist/scripts/cli.js +0 -504
  306. package/dist/scripts/cli.js.map +0 -1
  307. package/dist/scripts/smoke/smoke-claude.d.ts +0 -2
  308. package/dist/scripts/smoke/smoke-claude.d.ts.map +0 -1
  309. package/dist/scripts/smoke/smoke-claude.js +0 -58
  310. package/dist/scripts/smoke/smoke-claude.js.map +0 -1
  311. package/dist/scripts/smoke/smoke-codex.d.ts +0 -2
  312. package/dist/scripts/smoke/smoke-codex.d.ts.map +0 -1
  313. package/dist/scripts/smoke/smoke-codex.js +0 -50
  314. package/dist/scripts/smoke/smoke-codex.js.map +0 -1
  315. package/dist/scripts/smoke/smoke-consumer.d.ts +0 -2
  316. package/dist/scripts/smoke/smoke-consumer.d.ts.map +0 -1
  317. package/dist/scripts/smoke/smoke-consumer.js +0 -230
  318. package/dist/scripts/smoke/smoke-consumer.js.map +0 -1
  319. package/dist/scripts/smoke/smoke-opencode.d.ts +0 -2
  320. package/dist/scripts/smoke/smoke-opencode.d.ts.map +0 -1
  321. package/dist/scripts/smoke/smoke-opencode.js +0 -99
  322. package/dist/scripts/smoke/smoke-opencode.js.map +0 -1
  323. package/dist/src/hooks/opencode-mount.d.ts +0 -35
  324. package/dist/src/hooks/opencode-mount.d.ts.map +0 -1
  325. package/dist/src/hooks/opencode-mount.js +0 -352
  326. package/dist/src/hooks/opencode-mount.js.map +0 -1
  327. package/dist/src/hooks/runtime.d.ts +0 -37
  328. package/dist/src/hooks/runtime.d.ts.map +0 -1
  329. package/dist/src/hooks/runtime.js +0 -274
  330. package/dist/src/hooks/runtime.js.map +0 -1
  331. package/dist/src/hooks/types.d.ts +0 -196
  332. package/dist/src/hooks/types.d.ts.map +0 -1
  333. package/dist/src/hooks/types.js +0 -85
  334. package/dist/src/hooks/types.js.map +0 -1
  335. package/dist/src/lsp/cache.d.ts +0 -9
  336. package/dist/src/lsp/cache.d.ts.map +0 -1
  337. package/dist/src/lsp/cache.js +0 -216
  338. package/dist/src/lsp/cache.js.map +0 -1
  339. package/dist/src/lsp/client.d.ts +0 -24
  340. package/dist/src/lsp/client.d.ts.map +0 -1
  341. package/dist/src/lsp/client.js +0 -166
  342. package/dist/src/lsp/client.js.map +0 -1
  343. package/dist/src/lsp/detect.d.ts +0 -77
  344. package/dist/src/lsp/detect.d.ts.map +0 -1
  345. package/dist/src/lsp/detect.js +0 -116
  346. package/dist/src/lsp/detect.js.map +0 -1
  347. package/dist/src/mcp/server.d.ts.map +0 -1
  348. package/dist/src/mcp/server.js +0 -34
  349. package/dist/src/mcp/server.js.map +0 -1
  350. package/dist/src/mcp/tools/artifact.d.ts.map +0 -1
  351. package/dist/src/mcp/tools/artifact.js +0 -36
  352. package/dist/src/mcp/tools/artifact.js.map +0 -1
  353. package/dist/src/mcp/tools/history.d.ts.map +0 -1
  354. package/dist/src/mcp/tools/history.js +0 -29
  355. package/dist/src/mcp/tools/history.js.map +0 -1
  356. package/dist/src/mcp/tools/lsp.d.ts +0 -13
  357. package/dist/src/mcp/tools/lsp.d.ts.map +0 -1
  358. package/dist/src/mcp/tools/lsp.js +0 -225
  359. package/dist/src/mcp/tools/lsp.js.map +0 -1
  360. package/dist/src/mcp/tools/plan.d.ts.map +0 -1
  361. package/dist/src/mcp/tools/plan.js +0 -317
  362. package/dist/src/mcp/tools/plan.js.map +0 -1
  363. package/dist/src/mcp/tools/task.d.ts.map +0 -1
  364. package/dist/src/mcp/tools/task.js +0 -252
  365. package/dist/src/mcp/tools/task.js.map +0 -1
  366. package/dist/src/shared/invocations.d.ts +0 -74
  367. package/dist/src/shared/invocations.d.ts.map +0 -1
  368. package/dist/src/shared/invocations.js +0 -247
  369. package/dist/src/shared/invocations.js.map +0 -1
  370. package/dist/src/shared/json-store.d.ts.map +0 -1
  371. package/dist/src/shared/json-store.js.map +0 -1
  372. package/dist/src/shared/mcp-utils.d.ts.map +0 -1
  373. package/dist/src/shared/mcp-utils.js.map +0 -1
  374. package/dist/src/shared/package-root.d.ts +0 -6
  375. package/dist/src/shared/package-root.d.ts.map +0 -1
  376. package/dist/src/shared/package-root.js +0 -19
  377. package/dist/src/shared/package-root.js.map +0 -1
  378. package/dist/src/shared/paths.d.ts.map +0 -1
  379. package/dist/src/shared/paths.js +0 -117
  380. package/dist/src/shared/paths.js.map +0 -1
  381. package/dist/src/shared/tool-log.d.ts +0 -8
  382. package/dist/src/shared/tool-log.d.ts.map +0 -1
  383. package/dist/src/shared/tool-log.js +0 -22
  384. package/dist/src/shared/tool-log.js.map +0 -1
  385. package/dist/src/types/agent-config.d.ts +0 -22
  386. package/dist/src/types/agent-config.d.ts.map +0 -1
  387. package/dist/src/types/agent-config.js +0 -2
  388. package/dist/src/types/agent-config.js.map +0 -1
  389. package/dist/src/types/index.d.ts +0 -2
  390. package/dist/src/types/index.d.ts.map +0 -1
  391. package/dist/src/types/index.js +0 -2
  392. package/dist/src/types/index.js.map +0 -1
  393. package/dist/src/types/state.d.ts.map +0 -1
  394. package/dist/src/types/state.js.map +0 -1
  395. package/docs/consuming/codex-lead-merge.md +0 -106
  396. package/docs/contract/harness-io.md +0 -333
  397. package/docs/plugin-guide.md +0 -355
  398. package/docs/plugin-template/claude/.github/workflows/build.yml +0 -60
  399. package/docs/plugin-template/claude/README.md +0 -110
  400. package/docs/plugin-template/claude/package.json +0 -16
  401. package/docs/plugin-template/codex/.github/workflows/build.yml +0 -51
  402. package/docs/plugin-template/codex/README.md +0 -147
  403. package/docs/plugin-template/codex/install/install.sh +0 -60
  404. package/docs/plugin-template/codex/package.json +0 -17
  405. package/docs/plugin-template/opencode/.github/workflows/build.yml +0 -61
  406. package/docs/plugin-template/opencode/README.md +0 -121
  407. package/docs/plugin-template/opencode/package.json +0 -25
  408. package/docs/plugin-template/opencode/src/plugin.ts +0 -6
  409. /package/dist/{src/mcp/tools → mcp/handlers}/artifact.d.ts +0 -0
  410. /package/dist/{src/mcp/tools → mcp/handlers}/history.d.ts +0 -0
  411. /package/dist/{src/mcp/tools → mcp/handlers}/plan.d.ts +0 -0
  412. /package/dist/{src/mcp/tools → mcp/handlers}/task.d.ts +0 -0
  413. /package/dist/{src/shared → shared}/json-store.d.ts +0 -0
  414. /package/dist/{src/shared → shared}/mcp-utils.d.ts +0 -0
  415. /package/dist/{src/shared → shared}/mcp-utils.js +0 -0
@@ -1,361 +0,0 @@
1
- ---
2
- name: nx-plan
3
- description: Structured multi-perspective analysis to decompose issues, align on
4
- decisions, and produce an enriched plan before execution. Plan only — does not
5
- execute.
6
- summary: "Structured planning — subagent-based analysis, deliberate decisions, produce execution plan"
7
- triggers:
8
- - plan
9
- harness_docs_refs:
10
- - resume_invocation
11
- id: nx-plan
12
- ---
13
-
14
- ## Role
15
-
16
- 서브에이전트를 활용한 구조적 다각도 분석을 진행자로서 수행한다. 안건을 분해하고, 선택지를 숙의하며, 결정에 합의한다. Lead는 종합자이자 능동적 참여자로서 — 서브에이전트 리서치·분석을 조율하면서 동시에 자신의 입장을 제시한다. 실행은 하지 않는다 — planning only. 실행으로의 전환은 사용자의 결정이다.
17
-
18
- ## Constraints
19
-
20
- - NEVER execute — 이 스킬은 planning only다. 실행으로의 전환은 사용자의 결정이다
21
- - NEVER call `nx_plan_start` before research is complete (research_summary is required)
22
- - NEVER present multiple issues at once — one issue at a time only
23
- - NEVER ask groundless questions — always research code/knowledge/decisions first
24
- - NEVER use the harness's team creation primitive. Inter-agent messaging for resume is permitted ONLY for resuming completed subagents whose `resume_tier` is `persistent` or `bounded`, and ONLY within the constraints of the Resume Policy section below. Direct inter-agent communication to running teammates remains forbidden in plan sessions.
25
- - MUST record all decisions with `[d]` tag so they are not scattered across turns
26
- - MUST call `nx_plan_decide` when recording `[d]`
27
- - MUST check for existing plan.json before starting a new session
28
- - `[d]` without an active plan.json is BLOCKED — "[d]는 plan 세션 안에서만 유효합니다."
29
- - MUST present a comparison table before asking for a decision — never present options as prose only. Format:
30
-
31
- ```
32
- | | A: {title} | B: {title} |
33
- |---|---|---|
34
- | Pros | ... | ... |
35
- | Cons | ... | ... |
36
- | Pick | | **(Recommended)** |
37
- ```
38
-
39
- ## Guidelines
40
-
41
- ## Trigger
42
-
43
- - 명시적 태그: `[plan]` — plan.json이 존재하면 기존 세션을 계속하고, 없으면 새 세션을 시작한다
44
- - 세션 도중 추가 분석이 필요한 경우: harness의 subagent spawn primitive를 통해 HOW 서브에이전트를 독립적으로 스폰한다
45
- - 태그 없이 대화 계속 → 기존 세션 유지
46
-
47
- ---
48
-
49
- ## Auto Mode (`[plan:auto]`)
50
-
51
- `[plan:auto]`로 트리거되거나 `{{skill_activation skill=nx-plan mode=auto}}`로 호출되면, **사용자 인터랙션 없이** 전체 planning 프로세스를 실행한다:
52
-
53
- 1. **Research** — researcher+Explore 서브에이전트 스폰 (interactive와 동일)
54
- 2. **안건 도출** — Lead가 리서치 결과에서 안건을 도출한다
55
- 3. **Auto-decide** — 각 안건에 대해 Lead가 선택지를 제시하지 않고 권장 옵션을 선택한다. 각 `nx_plan_decide(summary)`는 반드시 포함해야 한다: 선택한 접근법 + 이유, 그리고 기각한 대안 + 기각 이유. 비교 테이블은 불필요하지만 내부 숙의는 필수다.
56
- 4. **결정 브리핑** — 태스크 생성 전 모든 결정의 간결한 요약을 출력한다:
57
- ```
58
- [auto-plan complete] N issues, N decisions:
59
- - #1: {selected} ({rejected alternative} — reason)
60
- - #2: ...
61
- ```
62
- 사용자 응답을 기다리지 않고 즉시 태스크 생성으로 진행한다.
63
- 5. **Plan document** — Step 7 규칙에 따라 tasks.json을 생성한다 (plan.json issues에 `how_agents`가 있으면 HOW-assisted 분해 포함). owner 테이블과 verification auto-pairing을 적용한다.
64
-
65
- interactive 모드와의 주요 차이점:
66
- - 사용자 프롬프트나 비교 테이블 없음 — Lead가 자율적으로 결정한다
67
- - 동적 agenda 제안 없음 — Lead가 도출된 모든 안건을 내부적으로 처리한다
68
- - 출력: `[run]` 실행을 위한 tasks.json 준비 완료
69
-
70
- **호출 컨텍스트별 SCOPE:**
71
- - `[plan:auto]` 단독 → auto-plan + 브리핑 + tasks.json 생성. 여기서 종료.
72
- - `[run]`에 의해 호출됨 (tasks.json 없는 경우) → auto-plan + 브리핑 + tasks.json 생성 + 끊김 없는 실행 전환. plan과 run 사이에 일시정지 없음.
73
-
74
- 이 모드는 tasks.json이 없을 때 `[run]`이 내부적으로 호출하거나, 사용자가 `[plan:auto]`로 명시적으로 호출한다.
75
-
76
- ---
77
-
78
- ## Procedure (Interactive Mode)
79
-
80
- ### Step 1: Intent Discovery
81
-
82
- planning 깊이를 결정하고, Progressive Depth에 기반하여 분석을 위임할 HOW 서브에이전트를 파악한다.
83
-
84
- | Level | Signal | Exploration Scope |
85
- |-------|--------|-------------------|
86
- | **Specific** | 파일 경로, 함수명, 에러 메시지, 또는 구체적인 대상이 명시됨 | 해당 파일/모듈에 집중 |
87
- | **Direction-setting** | 열린 질문, "~하면 좋겠다", 접근법 중 선택 필요 | 관련 영역 + 외부 사례 리서치 |
88
- | **Abstract** | "어떻게 접근해야 할지 모르겠다", 목표 자체가 불명확, 근본적인 방향 설정 | 전체 코드베이스 + 외부 리서치 + 유사 프로젝트 비교 |
89
-
90
- - Specific 요청 → 1–2개 질문으로 의도를 확인하고 즉시 안건을 도출한다
91
- - Direction-setting → 가설 기반 질문으로 의도를 파악한다
92
- - Abstract/fundamental → 사용자가 명확히 하지 않은 근본 목표를 발굴하기 위해 적극적으로 인터뷰한다
93
-
94
- **HOW 서브에이전트 선택 규칙:**
95
- - 사용자가 에이전트를 명시적으로 지정 → 그대로 사용하되, 빠진 부분이 감지되면 추가를 제안한다
96
- - 사용자가 에이전트를 지정하지 않음 → Lead가 안건 SCOPE에 기반하여 제안하고 사용자에게 확인받는다
97
- - 추가 HOW 서브에이전트는 분석 중 언제든지 스폰할 수 있다 (Lead 또는 사용자의 판단으로)
98
-
99
- ### Step 2: Research
100
-
101
- planning agenda를 수립하기 전에 코드, 핵심 지식, 기존 결정을 파악한다.
102
-
103
- **기존 지식부터 확인한다**: 서브에이전트를 스폰하기 전에, 파일 패턴 검색과 파일 읽기를 통해 `.nexus/memory/`와 `.nexus/context/`에서 관련 메모와 context 파일을 스캔하고, `nx_history_search`로 해당 주제의 기존 결정을 확인한다. 필요한 정보가 이미 있으면 그대로 활용하고 서브에이전트 스폰을 생략하거나 범위를 줄인다. 기존 지식으로 커버되지 않는 빈 곳을 채우기 위해서만 서브에이전트를 스폰한다.
104
-
105
- **접근법 선택:**
106
-
107
- | Scenario | Approach |
108
- |----------|----------|
109
- | 코드베이스 파악 | `{{subagent_spawn target_role=explore prompt="<file/code search task>"}}` 코드베이스 탐색 |
110
- | 외부 리서치 필요 | `{{subagent_spawn target_role=researcher prompt="<research question>"}}` 웹 검색 |
111
- | 코드베이스 + 외부 모두 | Explore + Researcher 병렬 스폰 |
112
-
113
- - NEVER call `nx_plan_start` before research is complete.
114
- - `nx_plan_start`의 `research_summary` 파라미터는 필수 — 세션 생성 전 리서치 완료를 강제한다.
115
- - Researcher 서브에이전트는 harness의 subagent spawn primitive를 통해 스폰되며 결과를 Lead에 반환한다. plan 세션에는 합류하지 않는다.
116
-
117
- **기존 세션 (plan.json 존재):**
118
- - `nx_plan_status`로 현재 상태를 확인한다.
119
- - 새 주제나 추가 리서치가 필요하면 → 그에 맞게 researcher 서브에이전트를 스폰한다.
120
- - 리서치가 완료되기 전에 다음 안건으로 진행하지 않는다.
121
-
122
- ### Step 3: Session Setup
123
-
124
- planning 세션을 등록한다.
125
-
126
- 1. **`nx_plan_start(topic, issues, research_summary)`** — plan.json에 plan을 등록한다. 기존 plan.json이 있으면 자동으로 아카이브한다.
127
- 2. 안건 목록을 사용자에게 보여주고 진행 전 확인받는다.
128
-
129
- ### Step 4: Analysis
130
-
131
- **항상 한 번에 하나의 안건만 진행한다.** 여러 안건을 동시에 제시하지 않는다.
132
-
133
- 각 안건에 대해:
134
-
135
- 1. **현재 상태 분석** — Lead가 리서치를 바탕으로 현재 상태와 문제점을 요약한다.
136
- 2. **서브에이전트 분석** — 복잡한 안건의 경우, harness의 subagent spawn primitive를 통해 HOW 서브에이전트(architect, strategist 등)를 병렬로 스폰한다. 각 서브에이전트가 독립적으로 안건을 분석하고 결과를 반환한다.
137
- - **도메인-에이전트 매핑** — 안건 키워드를 권장 HOW 서브에이전트에 매핑한다:
138
-
139
- | Domain keywords | Recommended HOW |
140
- |----------------|-----------------|
141
- | UI, UX, 디자인, 인터페이스, 사용자 경험, 레이아웃 | Designer |
142
- | 아키텍처, 시스템 설계, 성능, 구조 변경, API, 스키마 | Architect |
143
- | 비즈니스, 시장, 전략, 포지셔닝, 경쟁, 수익 | Strategist |
144
- | 연구 방법론, 근거 평가, 문헌, 실험 설계 | Postdoc |
145
-
146
- - **Opt-out 기본값**: 안건이 매핑의 도메인과 일치하면, 스폰이 기본이다. 복수 매핑 → 복수 스폰. 건너뛰려면 분석 텍스트에 "{Agent} not needed — reason: ..."를 명시한다.
147
- - **매핑 없음**: 일치하는 도메인이 없으면 Lead가 직접 분석한다. 불확실할 때는 스폰한다 — 불필요한 스폰의 비용이 얕은 분석의 비용보다 낮다.
148
- - **HOW 결과 기록**: HOW 서브에이전트가 반환한 후, `nx_plan_decide(how_agents=[...], how_summary={...})`로 결정을 기록할 때 에이전트 이름과 핵심 결과를 포함한다. 이 데이터는 Step 7 태스크 생성을 위해 plan.json에 저장된다.
149
- 3. **선택지 제시** — 종합 후 Lead가 비교를 제시한다:
150
-
151
- ```
152
- | Item | A: {title} | B: {title} | C: {title} |
153
- |------|-----------|-----------|-----------|
154
- | Pros | ... | ... | ... |
155
- | Cons | ... | ... | ... |
156
- | Trade-offs | ... | ... | ... |
157
- | Best for | ... | ... | ... |
158
-
159
- **Recommendation: {X} ({title})**
160
-
161
- - Option A falls short because {reason}
162
- - Option B falls short because {reason}
163
- - Option X overcomes {A/B limitations} → {core benefit}
164
- ```
165
-
166
- 4. **사용자 응답 대기** — 자유 형식의 응답을 받는다. 사용자는 선택지를 조합하거나, 반박하거나, 후속 질문을 할 수 있다.
167
-
168
- ## Resume Policy
169
-
170
- harness의 resume 메커니즘을 사용할 수 없으면, 모든 resume 경로가 비활성화된다 — 새로 스폰을 강제한다. 그 외:
171
-
172
- | resume_tier | Same-issue default | Cross-issue | Disqualifiers |
173
- |---|---|---|---|
174
- | persistent | 기본적으로 resume | Lead opt-in only | 반증 / 번복 / 재검토 안건 → 새로 스폰 |
175
- | bounded | 조건부 (동일 artifact에 한함) | 금지 | 3회 루프 / 피드백 사이클 (REVISION_REQUIRED) → 새로 스폰 |
176
- | ephemeral | 금지 | 금지 | N/A (항상 새로 스폰) |
177
-
178
- `bounded` 에이전트를 resume하기 전: 프롬프트에 "수정 전 대상 파일을 다시 읽을 것" 지시를 포함한다. re-read 없는 bounded resume은 BLOCKED.
179
-
180
- `resume_tier`는 각 에이전트의 frontmatter (`agents/*.md`)에서 읽는다. 없으면 `ephemeral`로 처리한다 (가장 보수적).
181
-
182
- ### Step 5: Record Decision
183
-
184
- 사용자가 결정하면 `[d]` 태그로 기록한다.
185
-
186
- - gate.ts가 `[d]`를 감지하여 `nx_plan_decide`로 라우팅한다.
187
- - `nx_plan_decide(issue_id, summary)` — 안건을 `decided`로 표시하고 plan.json에 인라인으로 `decision`을 기록한다.
188
- - 결정은 decisions.json에 기록하지 않는다 — plan.json이 단일 진실 소스다.
189
- - plan.json 없이 `[d]`를 사용하면 차단된다.
190
- - **Progress anchoring**: 기록 직후 한 줄을 출력한다: "Issue #N decided (M of K complete). Next: #X — {title}." 멀티 안건 세션에서 사용자가 진행 상황을 파악하게 한다.
191
-
192
- **각 결정 직후**, Lead는 확인한다: "이 결정이 후속 질문이나 새로운 안건을 만들어내는가?" 그렇다면 다음 안건으로 이동하기 전에 `nx_plan_update(action='add')`로 추가를 제안한다.
193
-
194
- **결정 번복**: 사용자가 기존 결정을 재고하려 할 때 ("아까 결정 다시 생각해보자", "issue #N 번복"), Lead는 `nx_plan_update(action='reopen', issue_id=N)`을 호출하여 안건을 재개하고 Step 4 분석으로 돌아간다.
195
-
196
- ### Step 6: Dynamic Agenda + Wrap-up
197
-
198
- 각 결정 후 Lead는 자동으로 파생 안건을 확인한다.
199
-
200
- - **Dynamic agenda 제안**: 결정이 기록된 후, Lead는 해당 결정이 후속 질문이나 미해결 하위 안건을 내포하는지 검토한다. 발견되면 `nx_plan_update(action='add', ...)`로 추가를 제안하고 추가 전 사용자에게 확인받는다.
201
- - 미결 안건이 남아 있으면 → 자연스럽게 다음 안건으로 전환한다.
202
- - 모든 안건이 결정됨 → **Gap check**: 원래 질문/주제를 안건 목록과 대조한다.
203
- - Gap 발견 → `nx_plan_update(action='add', ...)`로 추가 안건을 등록하고 Step 4로 돌아간다.
204
- - Gap 없음 → planning 완료를 알린다.
205
- - Wrap-up: 모든 분석 스레드가 Lead에 결론을 보고했는지 확인한다.
206
- - 자동으로 Step 7로 진행한다 — plan document 생성 여부를 묻지 않는다.
207
-
208
- ### Step 7: Plan Document Generation
209
-
210
- 모든 안건이 결정되면 즉시 plan document (tasks.json)를 생성한다:
211
-
212
- 1. **결정 수집** — plan.json에서 모든 `decided` 안건을 수집한다
213
- 2. **태스크 도출** — 결정을 구체적이고 실행 가능한 태스크로 분해한다
214
-
215
- **HOW-assisted 태스크 분해**: plan.json issues의 `how_agents` 필드를 확인한다.
216
- - HOW 에이전트가 분석에 참여했으면 → 결정된 접근법 + 기존 `how_summary`를 컨텍스트로 해당 HOW를 다시 스폰한다. 해당 도메인의 태스크 분해와 owner 배정을 제안하도록 요청한다.
217
- - HOW 에이전트가 참여하지 않았으면 → Lead가 아래 owner 테이블과 auto-pairing 규칙을 사용하여 단독으로 분해한다.
218
- - 이를 통해 태스크 생성 깊이가 plan 분석 깊이에 비례하게 된다.
219
-
220
- 3. **각 태스크를 보강한다**:
221
- - `approach` — 결정 근거에서 도출한 구현 전략
222
- - `acceptance` — 완료 정의, 검증 가능한 기준
223
- - `risk` — 분석에서 나온 알려진 위험 또는 주의사항
224
- - `deps` — 실행 순서에 기반한 태스크 의존성
225
- - `owner` — 위임 분석에 기반하여 배정:
226
-
227
- | Work type | owner | Criteria |
228
- |-----------|-------|----------|
229
- | 단일 파일, 소규모 변경 | **lead** | 서브에이전트 오버헤드 > 태스크 노력 |
230
- | 코드 구현 (.ts, .js, .py 등) | **engineer** | 소스 코드 생성/수정 |
231
- | 문서/콘텐츠 (.md, 비코드) | **writer** | .md 파일, README, docs, 비코드 콘텐츠 |
232
- | 웹 리서치 / 외부 조사 | **researcher** | 외부 정보 수집 필요 |
233
- | 설계 분석 / 리뷰 | **architect** 등 HOW | 기술적 trade-off 판단 |
234
- | 동일 파일의 순차적 편집 | **lead** | 병렬 서브에이전트는 충돌 위험 |
235
-
236
- **Primary metric — artifact-coherence**: 잘 구성된 태스크는 단일 artifact 또는 긴밀하게 연결된 artifact 클러스터를 대상으로 하며 단일하고 일관된 변경을 수행한다. 변경이 일관된 경우: (a) 한 문장으로 설명할 수 있고, (b) 되돌려도 다른 모든 artifact가 일관성을 유지하며, (c) 출력만 검사하여 acceptance를 검증할 수 있다.
237
-
238
- **Verification auto-pairing (조건부)** — DO 태스크의 acceptance에 적절한 검증 트리거가 포함된 경우에만 CHECK 태스크를 생성한다:
239
- - `owner: "engineer"` + acceptance에 런타임 동작 기준 포함 → **tester** 태스크를 페어링한다.
240
- - `owner: "writer"` + acceptance에 검증 가능한 산출물 기준 포함 → **reviewer** 태스크를 페어링한다.
241
- - 제외: 순수 리팩터 (동작 보존), 타입 전용 변경, docs 인접 태스크 (`vocabulary/task-exceptions.yml`의 `docs_only` 항목으로 분류된 .md 또는 frontmatter 전용), researcher 태스크. Researcher 태스크는 auto-paired CHECK를 받지 않는다 — 리서치 출력은 tester나 reviewer가 아닌 Lead 또는 HOW 에이전트에 직접 전달된다.
242
- - 페어링된 검증 태스크는 `deps`를 통해 원래 태스크에 연결된다.
243
-
244
- **Exception catalog**: 태스크 분해 예외는 `vocabulary/task-exceptions.yml`에 정의된다 (`docs_only.coherent`, `docs_only.independent`, `same_file_bundle`, `generated_artifacts`). 태스크에 예외가 적용되면, 다운스트림 툴링이 분류를 추적할 수 있도록 해당 id를 태스크의 `context` 필드에 기록한다.
245
-
246
- **Dedup Layer 1 (plan-time static merge)**: 태스크 목록을 확정하기 전에, 초안 태스크에서 `target_files`가 겹치는 것을 스캔한다. 겹치는 태스크는 `vocabulary/task-exceptions.yml`의 `same_file_bundle` 예외를 통해 단일 owner 태스크로 병합한다. 실행 중 병렬 쓰기 충돌을 방지하기 위함이다.
247
-
248
- **DO/CHECK 분해 원칙**: DO 에이전트 (engineer, writer, researcher)와 CHECK 에이전트 (tester, reviewer)는 HOW 에이전트보다 태스크당 컨텍스트가 적다. 태스크가 여러 독립적인 artifact를 포함할 때, 하나의 owner에 번들하기보다 여러 병렬 DO/CHECK 서브에이전트로 분해한다. HOW 에이전트는 통합된 컨텍스트의 이점을 누리므로 일반적으로 단일 세션으로 유지한다. 병렬 분해는 독립 artifact가 최소 3개 이상일 때 효과적이다. 그 미만이면 병렬화 오버헤드를 피하기 위해 하나의 owner에 번들하는 것이 낫다.
249
-
250
- **HOW 분해 규칙**: HOW 분석을 여러 서브에이전트로 나누는 것은 안건이 도메인-에이전트 매핑 테이블의 서로 다른 행(architect vs designer vs strategist vs postdoc)에 걸쳐 있을 때만 한다. 단일 도메인 행 안의 세부 관심사는 하나의 HOW 세션에서 처리한다.
251
-
252
- 4. **`nx_task_add`를 통해 tasks.json을 채운다**:
253
- - plan 주제에서 `goal`을 설정한다
254
- - plan.json에서 결정된 요약으로 `decisions`를 설정한다
255
- - 각 태스크에 대해 `nx_task_add(plan_issue=N, approach, acceptance, risk, owner)`를 호출한다
256
- - 설계 또는 아키텍처 변경과 관련된 결정이 있으면, 해당 결정을 반영하여 `.nexus/context/`의 관련 파일을 업데이트하는 태스크를 포함한다 (owner: `writer` 또는 `lead`)
257
- 5. **Plan document 제시** — 생성된 tasks.json 요약을 사용자에게 보여주고 검토받는다
258
- 6. **전환 안내**: "`[run]`으로 실행하세요."
259
-
260
- **Incremental mode**: tasks.json이 이미 존재하면 (예: 후속 안건 추가 후), 새로운 결정에 대한 태스크만 추가한다. 이미 처리된 안건의 태스크를 중복 생성하지 않도록 `plan_issue` 필드를 확인한다.
261
-
262
- ---
263
-
264
- ## plan → run Transition
265
-
266
- tasks.json은 이미 Step 7에서 생성된다. Plan의 역할은 여기서 끝난다.
267
- `[run]`으로 실행한다.
268
-
269
- ---
270
-
271
- ## Principles
272
-
273
- 1. **능동적 intent discovery** — 사용자가 명확히 하지 않은 것을 적극적으로 발굴한다. 인터뷰를 통해 말 뒤에 있는 근본 목표를 드러낸다.
274
- 2. **Lead = 종합자이자 참여자** — Lead는 서브에이전트 결과를 단순 중계하지 않는다. Lead는 자신의 입장을 형성하고, 권고를 내리며, 근거를 가지고 반박한다. Yes-man이 아니다.
275
- 3. **탐색 우선 + 선제적 확장** — planning을 시작하기 전에 코드/지식/외부 소스를 리서치한다. 근거 없는 질문은 절대 하지 않는다.
276
- 4. **가설 기반 질문** — 공허한 질문 대신, 리서치를 바탕으로 가설을 세우고 사용자에게 확인한다.
277
- 5. **Progressive Depth** — 요청 복잡도에 따라 planning 깊이와 HOW 서브에이전트 구성을 자동으로 조정한다.
278
- 6. **한 번에 하나** — 여러 안건을 동시에 제시하지 않는다. 사용자의 인지 부하를 줄인다.
279
- 7. **선택지는 반드시 pros/cons/trade-offs/recommendation 포함** — 권고할 때는 다른 선택지가 왜 부족한지 설명한다.
280
- 8. **객관적 반박** — 사용자가 강한 확신을 가지고 와도, Lead는 모든 실행 가능한 선택지를 독립적으로 분석하고 사용자가 고려하지 않았을 trade-off를 제시해야 한다. 비교 테이블은 사용자가 이미 믿는 것을 확인해주기 위한 것이 아니라, 사용자가 모르는 것을 드러내기 위해 존재한다. 더 나은 대안이 있으면 근거를 가지고 반박한다.
281
- 9. **기본은 자유 대화** — 자유 형식의 사용자 응답(선택지 조합, 반박, 후속 질문)이 planning 품질의 핵심이다.
282
- 10. **Dynamic agenda** — 결정이 새로운 질문을 만든다. Lead는 사용자가 빈 곳을 알아채기를 기다리지 않고 파생 안건을 선제적으로 드러낸다.
283
-
284
- ---
285
-
286
- ## State Management
287
-
288
- ### plan.json
289
-
290
- `.nexus/state/plan.json` — MCP tools로 관리한다.
291
-
292
- ```json
293
- {
294
- "id": 1,
295
- "topic": "topic name",
296
- "issues": [
297
- {
298
- "id": 1,
299
- "title": "issue title",
300
- "status": "pending"
301
- },
302
- {
303
- "id": 2,
304
- "title": "issue title",
305
- "status": "decided",
306
- "decision": "decision summary",
307
- "how_agents": ["architect", "designer"],
308
- "how_summary": {
309
- "architect": "key findings...",
310
- "designer": "key findings..."
311
- }
312
- }
313
- ],
314
- "research_summary": "...",
315
- "created_at": "2026-01-01T00:00:00Z"
316
- }
317
- ```
318
-
319
- - **Create**: `nx_plan_start(topic, issues, research_summary)` — Step 3에서 호출한다. 기존 plan.json이 있으면 자동으로 아카이브한다
320
- - **Status**: `nx_plan_status()` — 현재 안건 상태 + 결정 확인
321
- - **Update**: `nx_plan_update(action, ...)` — 안건 추가/제거/수정/재개
322
- - **Decide**: `nx_plan_decide(issue_id, summary)` — 안건을 `decided`로 표시하고 인라인으로 decision을 기록
323
- - **파일 존재 = 세션 진행 중**
324
-
325
- ### Topic Switching
326
-
327
- - `[plan]` → plan.json이 있으면 기존 plan을 계속한다. 없으면 새 세션을 시작한다
328
- - 태그 없이 대화 계속 → 기존 세션 유지
329
- - 새 `nx_plan_start` 호출 → 새 plan 생성 전 현재 plan.json을 자동으로 아카이브한다
330
-
331
- ### Session Abort
332
-
333
- 세션을 중단하려면 `nx_task_close`로 현재 상태를 아카이브한다. 미완료 안건/태스크는 향후 참조를 위해 history.json에 기록된다.
334
-
335
- ---
336
-
337
- ## Self-Reinforcing Loop
338
-
339
- ```
340
- [plan] start → check/continue existing plan.json (start new if none)
341
-
342
- Intent discovery → research (parallel subagents) → nx_plan_start (register issues)
343
-
344
- Per-issue: HOW subagent analysis (parallel, independent) → Lead synthesis
345
- → options comparison → [d] → nx_plan_decide
346
- → dynamic agenda check → propose derived issues if found
347
-
348
- Next issue → ... → gap check → planning complete
349
-
350
- Proceed with `[run]` to execute.
351
-
352
- [run]: execution skill handles the full pipeline
353
-
354
- All done → nx_task_close (handled by run skill)
355
- ```
356
-
357
- gate.ts는 `[d]`를 감지하여 plan.json이 있으면 `nx_plan_decide`로 라우팅한다. 없으면 차단한다.
358
-
359
- ## Deactivation
360
-
361
- `[run]`으로 전환할 때 Plan의 역할은 끝난다. 실행은 run skill이 처리한다.