claude-code-workflow 6.1.4 → 6.2.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 (437) hide show
  1. package/.claude/CLAUDE.md +10 -0
  2. package/.claude/agents/action-planning-agent.md +857 -778
  3. package/.claude/agents/cli-execution-agent.md +266 -269
  4. package/.claude/agents/cli-explore-agent.md +2 -2
  5. package/.claude/agents/cli-lite-planning-agent.md +142 -92
  6. package/.claude/agents/cli-planning-agent.md +4 -4
  7. package/.claude/agents/code-developer.md +7 -6
  8. package/.claude/agents/conceptual-planning-agent.md +2 -2
  9. package/.claude/agents/context-search-agent.md +31 -32
  10. package/.claude/agents/doc-generator.md +4 -4
  11. package/.claude/agents/memory-bridge.md +93 -93
  12. package/.claude/agents/test-context-search-agent.md +8 -7
  13. package/.claude/agents/test-fix-agent.md +7 -6
  14. package/.claude/commands/clean.md +516 -0
  15. package/.claude/commands/memory/compact.md +383 -0
  16. package/.claude/commands/memory/docs-full-cli.md +471 -471
  17. package/.claude/commands/memory/docs-related-cli.md +386 -386
  18. package/.claude/commands/memory/docs.md +615 -615
  19. package/.claude/commands/memory/load.md +5 -5
  20. package/.claude/commands/memory/tech-research-rules.md +310 -0
  21. package/.claude/commands/memory/update-full.md +332 -332
  22. package/.claude/commands/memory/workflow-skill-memory.md +4 -4
  23. package/.claude/commands/task/create.md +151 -151
  24. package/.claude/commands/version.md +254 -254
  25. package/.claude/commands/workflow/brainstorm/api-designer.md +587 -585
  26. package/.claude/commands/workflow/brainstorm/artifacts.md +1 -0
  27. package/.claude/commands/workflow/brainstorm/auto-parallel.md +443 -443
  28. package/.claude/commands/workflow/brainstorm/data-architect.md +220 -220
  29. package/.claude/commands/workflow/brainstorm/product-manager.md +200 -200
  30. package/.claude/commands/workflow/brainstorm/product-owner.md +200 -200
  31. package/.claude/commands/workflow/brainstorm/scrum-master.md +200 -200
  32. package/.claude/commands/workflow/brainstorm/subject-matter-expert.md +200 -200
  33. package/.claude/commands/workflow/brainstorm/system-architect.md +389 -387
  34. package/.claude/commands/workflow/brainstorm/ui-designer.md +221 -221
  35. package/.claude/commands/workflow/brainstorm/ux-expert.md +221 -221
  36. package/.claude/commands/workflow/debug.md +321 -0
  37. package/.claude/commands/workflow/execute.md +13 -0
  38. package/.claude/commands/workflow/init.md +165 -164
  39. package/.claude/commands/workflow/lite-execute.md +119 -13
  40. package/.claude/commands/workflow/lite-fix.md +623 -621
  41. package/.claude/commands/workflow/lite-plan.md +610 -592
  42. package/.claude/commands/workflow/plan.md +5 -5
  43. package/.claude/commands/workflow/review-module-cycle.md +2 -0
  44. package/.claude/commands/workflow/review-session-cycle.md +2 -0
  45. package/.claude/commands/workflow/review.md +297 -291
  46. package/.claude/commands/workflow/session/complete.md +153 -500
  47. package/.claude/commands/workflow/session/list.md +95 -95
  48. package/.claude/commands/workflow/session/resume.md +60 -60
  49. package/.claude/commands/workflow/session/start.md +199 -199
  50. package/.claude/commands/workflow/tdd-plan.md +3 -3
  51. package/.claude/commands/workflow/tdd-verify.md +23 -9
  52. package/.claude/commands/workflow/test-cycle-execute.md +2 -0
  53. package/.claude/commands/workflow/test-fix-gen.md +699 -699
  54. package/.claude/commands/workflow/tools/conflict-resolution.md +104 -18
  55. package/.claude/commands/workflow/tools/context-gather.md +436 -434
  56. package/.claude/commands/workflow/tools/task-generate-agent.md +490 -291
  57. package/.claude/commands/workflow/tools/task-generate-tdd.md +18 -10
  58. package/.claude/commands/workflow/tools/test-concept-enhanced.md +2 -1
  59. package/.claude/commands/workflow/tools/test-context-gather.md +1 -0
  60. package/.claude/commands/workflow/tools/test-task-generate.md +1 -0
  61. package/.claude/commands/workflow/ui-design/import-from-code.md +9 -6
  62. package/.claude/skills/command-guide/SKILL.md +5 -5
  63. package/.claude/skills/command-guide/index/all-commands.json +1 -1
  64. package/.claude/skills/command-guide/index/by-category.json +1 -1
  65. package/.claude/skills/command-guide/index/by-use-case.json +1 -1
  66. package/.claude/skills/command-guide/reference/agents/action-planning-agent.md +857 -778
  67. package/.claude/skills/command-guide/reference/agents/cli-execution-agent.md +266 -269
  68. package/.claude/skills/command-guide/reference/agents/cli-explore-agent.md +2 -2
  69. package/.claude/skills/command-guide/reference/agents/cli-lite-planning-agent.md +142 -92
  70. package/.claude/skills/command-guide/reference/agents/cli-planning-agent.md +4 -4
  71. package/.claude/skills/command-guide/reference/agents/code-developer.md +7 -6
  72. package/.claude/skills/command-guide/reference/agents/conceptual-planning-agent.md +2 -2
  73. package/.claude/skills/command-guide/reference/agents/context-search-agent.md +31 -32
  74. package/.claude/skills/command-guide/reference/agents/doc-generator.md +4 -4
  75. package/.claude/skills/command-guide/reference/agents/memory-bridge.md +93 -93
  76. package/.claude/skills/command-guide/reference/agents/test-context-search-agent.md +8 -7
  77. package/.claude/skills/command-guide/reference/agents/test-fix-agent.md +7 -6
  78. package/.claude/skills/command-guide/reference/commands/memory/docs-full-cli.md +471 -471
  79. package/.claude/skills/command-guide/reference/commands/memory/docs-related-cli.md +386 -386
  80. package/.claude/skills/command-guide/reference/commands/memory/docs.md +17 -16
  81. package/.claude/skills/command-guide/reference/commands/memory/load.md +5 -5
  82. package/.claude/skills/command-guide/reference/commands/memory/tech-research.md +194 -357
  83. package/.claude/skills/command-guide/reference/commands/memory/update-full.md +332 -332
  84. package/.claude/skills/command-guide/reference/commands/memory/workflow-skill-memory.md +4 -4
  85. package/.claude/skills/command-guide/reference/commands/task/create.md +151 -151
  86. package/.claude/skills/command-guide/reference/commands/version.md +254 -254
  87. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/api-designer.md +585 -585
  88. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/auto-parallel.md +443 -443
  89. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/data-architect.md +220 -220
  90. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-manager.md +200 -200
  91. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/product-owner.md +200 -200
  92. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/scrum-master.md +200 -200
  93. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/subject-matter-expert.md +200 -200
  94. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/system-architect.md +387 -387
  95. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ui-designer.md +221 -221
  96. package/.claude/skills/command-guide/reference/commands/workflow/brainstorm/ux-expert.md +221 -221
  97. package/.claude/skills/command-guide/reference/commands/workflow/execute.md +25 -20
  98. package/.claude/skills/command-guide/reference/commands/workflow/init.md +164 -164
  99. package/.claude/skills/command-guide/reference/commands/workflow/lite-execute.md +748 -686
  100. package/.claude/skills/command-guide/reference/commands/workflow/lite-fix.md +664 -621
  101. package/.claude/skills/command-guide/reference/commands/workflow/lite-plan.md +645 -592
  102. package/.claude/skills/command-guide/reference/commands/workflow/plan.md +5 -5
  103. package/.claude/skills/command-guide/reference/commands/workflow/review.md +25 -18
  104. package/.claude/skills/command-guide/reference/commands/workflow/session/complete.md +547 -500
  105. package/.claude/skills/command-guide/reference/commands/workflow/session/list.md +45 -27
  106. package/.claude/skills/command-guide/reference/commands/workflow/session/resume.md +35 -19
  107. package/.claude/skills/command-guide/reference/commands/workflow/session/start.md +90 -33
  108. package/.claude/skills/command-guide/reference/commands/workflow/tdd-plan.md +3 -3
  109. package/.claude/skills/command-guide/reference/commands/workflow/tdd-verify.md +23 -9
  110. package/.claude/skills/command-guide/reference/commands/workflow/test-fix-gen.md +699 -699
  111. package/.claude/skills/command-guide/reference/commands/workflow/tools/conflict-resolution.md +103 -17
  112. package/.claude/skills/command-guide/reference/commands/workflow/tools/context-gather.md +434 -434
  113. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-agent.md +487 -291
  114. package/.claude/skills/command-guide/reference/commands/workflow/tools/task-generate-tdd.md +17 -10
  115. package/.claude/skills/command-guide/reference/commands/workflow/tools/test-concept-enhanced.md +1 -1
  116. package/.claude/skills/command-guide/reference/commands/workflow/ui-design/import-from-code.md +6 -6
  117. package/.claude/workflows/chinese-response.md +38 -0
  118. package/.claude/workflows/cli-templates/prompts/rules/rule-api.txt +122 -0
  119. package/.claude/workflows/cli-templates/prompts/rules/rule-components.txt +122 -0
  120. package/.claude/workflows/cli-templates/prompts/rules/rule-config.txt +89 -0
  121. package/.claude/workflows/cli-templates/prompts/rules/rule-core.txt +60 -0
  122. package/.claude/workflows/cli-templates/prompts/rules/rule-patterns.txt +70 -0
  123. package/.claude/workflows/cli-templates/prompts/rules/rule-testing.txt +81 -0
  124. package/.claude/workflows/cli-templates/prompts/rules/tech-rules-agent-prompt.txt +89 -0
  125. package/.claude/workflows/cli-templates/prompts/workflow/gemini-solution-design.txt +131 -131
  126. package/.claude/workflows/cli-templates/prompts/workflow/skill-conflict-patterns.txt +5 -9
  127. package/.claude/workflows/cli-templates/prompts/workflow/skill-lessons-learned.txt +5 -9
  128. package/.claude/workflows/cli-templates/protocols/analysis-protocol.md +112 -0
  129. package/.claude/workflows/cli-templates/protocols/write-protocol.md +201 -0
  130. package/.claude/workflows/cli-templates/schemas/conflict-resolution-schema.json +137 -0
  131. package/.claude/workflows/cli-templates/schemas/debug-log-json-schema.json +127 -0
  132. package/.claude/workflows/cli-templates/schemas/fix-plan-json-schema.json +25 -0
  133. package/.claude/workflows/cli-templates/schemas/plan-json-schema.json +25 -0
  134. package/.claude/workflows/cli-tools-usage.md +526 -0
  135. package/{CLAUDE.md → .claude/workflows/coding-philosophy.md} +24 -45
  136. package/.claude/workflows/context-tools.md +84 -0
  137. package/.claude/workflows/file-modification.md +64 -0
  138. package/.claude/workflows/tool-strategy.md +216 -79
  139. package/.claude/workflows/windows-platform.md +16 -0
  140. package/.claude/workflows/workflow-architecture.md +942 -942
  141. package/.codex/AGENTS.md +63 -330
  142. package/.codex/prompts/debug.md +318 -0
  143. package/.codex/prompts/execute.md +273 -0
  144. package/.codex/prompts/lite-execute.md +164 -0
  145. package/.codex/prompts/lite-plan.md +469 -0
  146. package/.codex/prompts.zip +0 -0
  147. package/.gemini/GEMINI.md +25 -164
  148. package/.qwen/QWEN.md +0 -139
  149. package/README.md +29 -9
  150. package/ccw/README.md +30 -6
  151. package/ccw/bin/ccw-mcp.js +7 -0
  152. package/ccw/bin/ccw.js +9 -9
  153. package/ccw/package.json +65 -47
  154. package/ccw/src/.workflow/.cli-history/history.db +0 -0
  155. package/ccw/src/.workflow/.cli-history/history.db-shm +0 -0
  156. package/ccw/src/.workflow/.cli-history/history.db-wal +0 -0
  157. package/ccw/src/cli.ts +244 -0
  158. package/ccw/src/commands/cli.ts +740 -0
  159. package/ccw/src/commands/core-memory.ts +770 -0
  160. package/ccw/src/commands/hook.ts +315 -0
  161. package/ccw/src/commands/install.ts +519 -0
  162. package/ccw/src/commands/{list.js → list.ts} +1 -1
  163. package/ccw/src/commands/memory.ts +1090 -0
  164. package/ccw/src/commands/{serve.js → serve.ts} +14 -5
  165. package/ccw/src/commands/session-path-resolver.ts +372 -0
  166. package/ccw/src/commands/session.ts +1141 -0
  167. package/ccw/src/commands/{stop.js → stop.ts} +16 -6
  168. package/ccw/src/commands/tool.ts +201 -0
  169. package/ccw/src/commands/{uninstall.js → uninstall.ts} +89 -40
  170. package/ccw/src/commands/{upgrade.js → upgrade.ts} +68 -23
  171. package/ccw/src/commands/{view.js → view.ts} +22 -8
  172. package/ccw/src/config/storage-paths.ts +670 -0
  173. package/ccw/src/core/cache-manager.ts +294 -0
  174. package/ccw/src/core/claude-freshness.ts +319 -0
  175. package/ccw/src/core/core-memory-store.ts +1528 -0
  176. package/ccw/src/core/{dashboard-generator-patch.js → dashboard-generator-patch.ts} +18 -0
  177. package/ccw/src/core/{dashboard-generator.js → dashboard-generator.ts} +69 -12
  178. package/ccw/src/core/data-aggregator.ts +584 -0
  179. package/ccw/src/core/history-importer.ts +625 -0
  180. package/ccw/src/core/{lite-scanner.js → lite-scanner-complete.ts} +162 -66
  181. package/ccw/src/core/lite-scanner.ts +469 -0
  182. package/ccw/src/core/{manifest.js → manifest.ts} +104 -34
  183. package/ccw/src/core/memory-embedder-bridge.ts +262 -0
  184. package/ccw/src/core/memory-store.ts +978 -0
  185. package/ccw/src/core/routes/ccw-routes.ts +96 -0
  186. package/ccw/src/core/routes/claude-routes.ts +1183 -0
  187. package/ccw/src/core/routes/cli-routes.ts +561 -0
  188. package/ccw/src/core/routes/codexlens-routes.ts +806 -0
  189. package/ccw/src/core/routes/core-memory-routes.ts +605 -0
  190. package/ccw/src/core/routes/files-routes.ts +428 -0
  191. package/ccw/src/core/routes/graph-routes.md +164 -0
  192. package/ccw/src/core/routes/graph-routes.ts +626 -0
  193. package/ccw/src/core/routes/help-routes.ts +308 -0
  194. package/ccw/src/core/routes/hooks-routes.ts +405 -0
  195. package/ccw/src/core/routes/mcp-routes.ts +1271 -0
  196. package/ccw/src/core/routes/mcp-routes.ts.backup +550 -0
  197. package/ccw/src/core/routes/mcp-templates-db.ts +268 -0
  198. package/ccw/src/core/routes/memory-routes.ts +1206 -0
  199. package/ccw/src/core/routes/rules-routes.ts +526 -0
  200. package/ccw/src/core/routes/session-routes.ts +467 -0
  201. package/ccw/src/core/routes/skills-routes.ts +599 -0
  202. package/ccw/src/core/routes/status-routes.ts +57 -0
  203. package/ccw/src/core/routes/system-routes.ts +427 -0
  204. package/ccw/src/core/server.ts +431 -0
  205. package/ccw/src/core/session-clustering-service.ts +1258 -0
  206. package/ccw/src/core/session-scanner.ts +283 -0
  207. package/ccw/src/core/websocket.ts +190 -0
  208. package/ccw/src/{index.js → index.ts} +1 -0
  209. package/ccw/src/mcp-server/index.ts +186 -0
  210. package/ccw/src/templates/assets/css/github-dark.min.css +10 -0
  211. package/ccw/src/templates/assets/css/github.min.css +10 -0
  212. package/ccw/src/templates/assets/js/cytoscape.min.js +32 -0
  213. package/ccw/src/templates/assets/js/d3.min.js +2 -0
  214. package/ccw/src/templates/assets/js/highlight.min.js +1244 -0
  215. package/ccw/src/templates/assets/js/lucide.min.js +12 -0
  216. package/ccw/src/templates/assets/js/marked.min.js +69 -0
  217. package/ccw/src/templates/assets/js/tailwind.js +83 -0
  218. package/ccw/src/templates/dashboard-css/01-base.css +11 -0
  219. package/ccw/src/templates/dashboard-css/02-session.css +22 -0
  220. package/ccw/src/templates/dashboard-css/04-lite-tasks.css +10 -0
  221. package/ccw/src/templates/dashboard-css/06-cards.css +10 -4
  222. package/ccw/src/templates/dashboard-css/07-managers.css +1178 -7
  223. package/ccw/src/templates/dashboard-css/09-explorer.css +23 -12
  224. package/ccw/src/templates/dashboard-css/10-cli-status.css +337 -0
  225. package/ccw/src/templates/dashboard-css/11-cli-history.css +271 -0
  226. package/ccw/src/templates/dashboard-css/12-cli-legacy.css +796 -0
  227. package/ccw/src/templates/dashboard-css/13-cli-ccw.css +199 -0
  228. package/ccw/src/templates/dashboard-css/14-cli-modals.css +258 -0
  229. package/ccw/src/templates/dashboard-css/15-cli-endpoints.css +305 -0
  230. package/ccw/src/templates/dashboard-css/16-cli-session.css +241 -0
  231. package/ccw/src/templates/dashboard-css/17-cli-conversation.css +283 -0
  232. package/ccw/src/templates/dashboard-css/18-cli-settings.css +160 -0
  233. package/ccw/src/templates/dashboard-css/19-cli-native-session.css +496 -0
  234. package/ccw/src/templates/dashboard-css/20-cli-taskqueue.css +188 -0
  235. package/ccw/src/templates/dashboard-css/21-cli-toolmgmt.css +310 -0
  236. package/ccw/src/templates/dashboard-css/22-cli-semantic.css +240 -0
  237. package/ccw/src/templates/dashboard-css/23-memory.css +2390 -0
  238. package/ccw/src/templates/dashboard-css/24-prompt-history.css +1089 -0
  239. package/ccw/src/templates/dashboard-css/25-skills-rules.css +326 -0
  240. package/ccw/src/templates/dashboard-css/26-claude-manager.css +908 -0
  241. package/ccw/src/templates/dashboard-css/27-graph-explorer.css +1678 -0
  242. package/ccw/src/templates/dashboard-css/28-mcp-manager.css +748 -0
  243. package/ccw/src/templates/dashboard-css/29-help.css +264 -0
  244. package/ccw/src/templates/dashboard-css/30-core-memory.css +1700 -0
  245. package/ccw/src/templates/dashboard-js/api.js +162 -142
  246. package/ccw/src/templates/dashboard-js/components/carousel.js +4 -4
  247. package/ccw/src/templates/dashboard-js/components/cli-history.js +876 -0
  248. package/ccw/src/templates/dashboard-js/components/cli-status.js +978 -0
  249. package/ccw/src/templates/dashboard-js/components/global-notifications.js +508 -219
  250. package/ccw/src/templates/dashboard-js/components/hook-manager.js +1277 -282
  251. package/ccw/src/templates/dashboard-js/components/index-manager.js +302 -0
  252. package/ccw/src/templates/dashboard-js/components/mcp-manager.js +718 -27
  253. package/ccw/src/templates/dashboard-js/components/modals.js +66 -0
  254. package/ccw/src/templates/dashboard-js/components/navigation.js +80 -12
  255. package/ccw/src/templates/dashboard-js/components/notifications.js +758 -194
  256. package/ccw/src/templates/dashboard-js/components/storage-manager.js +478 -0
  257. package/ccw/src/templates/dashboard-js/components/tabs-other.js +157 -6
  258. package/ccw/src/templates/dashboard-js/components/task-queue-sidebar.js +716 -0
  259. package/ccw/src/templates/dashboard-js/help-i18n.js +272 -0
  260. package/ccw/src/templates/dashboard-js/i18n.js +2807 -0
  261. package/ccw/src/templates/dashboard-js/main.js +15 -0
  262. package/ccw/src/templates/dashboard-js/state.js +243 -42
  263. package/ccw/src/templates/dashboard-js/utils.js +47 -1
  264. package/ccw/src/templates/dashboard-js/views/claude-manager.js +912 -0
  265. package/ccw/src/templates/dashboard-js/views/cli-manager.js +2272 -0
  266. package/ccw/src/templates/dashboard-js/views/codexlens-manager.js +964 -0
  267. package/ccw/src/templates/dashboard-js/views/core-memory-clusters.js +503 -0
  268. package/ccw/src/templates/dashboard-js/views/core-memory.js +782 -0
  269. package/ccw/src/templates/dashboard-js/views/explorer.js +888 -852
  270. package/ccw/src/templates/dashboard-js/views/graph-explorer.js +1157 -0
  271. package/ccw/src/templates/dashboard-js/views/help.js +856 -0
  272. package/ccw/src/templates/dashboard-js/views/history.js +337 -0
  273. package/ccw/src/templates/dashboard-js/views/home.js +61 -15
  274. package/ccw/src/templates/dashboard-js/views/hook-manager.js +311 -43
  275. package/ccw/src/templates/dashboard-js/views/lite-tasks.js +204 -28
  276. package/ccw/src/templates/dashboard-js/views/mcp-manager.js +2187 -411
  277. package/ccw/src/templates/dashboard-js/views/mcp-manager.js.backup +1729 -0
  278. package/ccw/src/templates/dashboard-js/views/mcp-manager.js.new +928 -0
  279. package/ccw/src/templates/dashboard-js/views/memory.js +1221 -0
  280. package/ccw/src/templates/dashboard-js/views/prompt-history.js +713 -0
  281. package/ccw/src/templates/dashboard-js/views/rules-manager.js +828 -0
  282. package/ccw/src/templates/dashboard-js/views/session-detail.js +54 -53
  283. package/ccw/src/templates/dashboard-js/views/skills-manager.js +819 -0
  284. package/ccw/src/templates/dashboard.html +185 -85
  285. package/ccw/src/templates/hooks-config-example.json +60 -0
  286. package/ccw/src/tools/classify-folders.ts +245 -0
  287. package/ccw/src/tools/cli-config-manager.ts +268 -0
  288. package/ccw/src/tools/cli-executor.ts +2014 -0
  289. package/ccw/src/tools/cli-history-store.ts +1195 -0
  290. package/ccw/src/tools/codex-lens.ts +1141 -0
  291. package/ccw/src/tools/{convert-tokens-to-css.js → convert-tokens-to-css.ts} +73 -23
  292. package/ccw/src/tools/core-memory.ts +444 -0
  293. package/ccw/src/tools/detect-changed-modules.ts +325 -0
  294. package/ccw/src/tools/{discover-design-files.js → discover-design-files.ts} +74 -24
  295. package/ccw/src/tools/edit-file.ts +568 -0
  296. package/ccw/src/tools/{generate-module-docs.js → generate-module-docs.ts} +207 -185
  297. package/ccw/src/tools/{get-modules-by-depth.js → get-modules-by-depth.ts} +120 -79
  298. package/ccw/src/tools/index.ts +370 -0
  299. package/ccw/src/tools/native-session-discovery.ts +795 -0
  300. package/ccw/src/tools/notifier.ts +129 -0
  301. package/ccw/src/tools/read-file.ts +410 -0
  302. package/ccw/src/tools/resume-strategy.ts +345 -0
  303. package/ccw/src/tools/session-content-parser.ts +619 -0
  304. package/ccw/src/tools/session-manager.ts +1026 -0
  305. package/ccw/src/tools/smart-context.ts +228 -0
  306. package/ccw/src/tools/smart-search.ts +2065 -0
  307. package/ccw/src/tools/smart-search.ts.backup +1233 -0
  308. package/ccw/src/tools/storage-manager.ts +455 -0
  309. package/ccw/src/tools/write-file.ts +222 -0
  310. package/ccw/src/types/config.ts +11 -0
  311. package/ccw/src/types/index.ts +3 -0
  312. package/ccw/src/types/session.ts +25 -0
  313. package/ccw/src/types/tool.ts +41 -0
  314. package/ccw/src/utils/{browser-launcher.js → browser-launcher.ts} +10 -8
  315. package/ccw/src/utils/file-utils.ts +48 -0
  316. package/ccw/src/utils/{path-resolver.js → path-resolver.ts} +114 -78
  317. package/ccw/src/utils/path-validator.ts +153 -0
  318. package/ccw/src/utils/{ui.js → ui.ts} +32 -25
  319. package/codex-lens/pyproject.toml +48 -0
  320. package/codex-lens/src/codexlens/.workflow/.cli-history/history.db +0 -0
  321. package/codex-lens/src/codexlens/__init__.py +28 -0
  322. package/codex-lens/src/codexlens/__main__.py +14 -0
  323. package/codex-lens/src/codexlens/__pycache__/__init__.cpython-313.pyc +0 -0
  324. package/codex-lens/src/codexlens/__pycache__/__main__.cpython-313.pyc +0 -0
  325. package/codex-lens/src/codexlens/__pycache__/config.cpython-313.pyc +0 -0
  326. package/codex-lens/src/codexlens/__pycache__/entities.cpython-313.pyc +0 -0
  327. package/codex-lens/src/codexlens/__pycache__/errors.cpython-313.pyc +0 -0
  328. package/codex-lens/src/codexlens/cli/__init__.py +27 -0
  329. package/codex-lens/src/codexlens/cli/__pycache__/__init__.cpython-313.pyc +0 -0
  330. package/codex-lens/src/codexlens/cli/__pycache__/commands.cpython-313.pyc +0 -0
  331. package/codex-lens/src/codexlens/cli/__pycache__/embedding_manager.cpython-313.pyc +0 -0
  332. package/codex-lens/src/codexlens/cli/__pycache__/model_manager.cpython-313.pyc +0 -0
  333. package/codex-lens/src/codexlens/cli/__pycache__/output.cpython-313.pyc +0 -0
  334. package/codex-lens/src/codexlens/cli/commands.py +1931 -0
  335. package/codex-lens/src/codexlens/cli/embedding_manager.py +620 -0
  336. package/codex-lens/src/codexlens/cli/model_manager.py +289 -0
  337. package/codex-lens/src/codexlens/cli/output.py +124 -0
  338. package/codex-lens/src/codexlens/config.py +201 -0
  339. package/codex-lens/src/codexlens/entities.py +121 -0
  340. package/codex-lens/src/codexlens/errors.py +55 -0
  341. package/codex-lens/src/codexlens/indexing/README.md +77 -0
  342. package/codex-lens/src/codexlens/indexing/__init__.py +4 -0
  343. package/codex-lens/src/codexlens/indexing/__pycache__/__init__.cpython-313.pyc +0 -0
  344. package/codex-lens/src/codexlens/indexing/__pycache__/symbol_extractor.cpython-313.pyc +0 -0
  345. package/codex-lens/src/codexlens/indexing/symbol_extractor.py +243 -0
  346. package/codex-lens/src/codexlens/parsers/__init__.py +8 -0
  347. package/codex-lens/src/codexlens/parsers/__pycache__/__init__.cpython-313.pyc +0 -0
  348. package/codex-lens/src/codexlens/parsers/__pycache__/encoding.cpython-313.pyc +0 -0
  349. package/codex-lens/src/codexlens/parsers/__pycache__/factory.cpython-313.pyc +0 -0
  350. package/codex-lens/src/codexlens/parsers/__pycache__/tokenizer.cpython-313.pyc +0 -0
  351. package/codex-lens/src/codexlens/parsers/__pycache__/treesitter_parser.cpython-313.pyc +0 -0
  352. package/codex-lens/src/codexlens/parsers/encoding.py +202 -0
  353. package/codex-lens/src/codexlens/parsers/factory.py +256 -0
  354. package/codex-lens/src/codexlens/parsers/tokenizer.py +98 -0
  355. package/codex-lens/src/codexlens/parsers/treesitter_parser.py +335 -0
  356. package/codex-lens/src/codexlens/search/__init__.py +15 -0
  357. package/codex-lens/src/codexlens/search/__pycache__/__init__.cpython-313.pyc +0 -0
  358. package/codex-lens/src/codexlens/search/__pycache__/chain_search.cpython-313.pyc +0 -0
  359. package/codex-lens/src/codexlens/search/__pycache__/enrichment.cpython-313.pyc +0 -0
  360. package/codex-lens/src/codexlens/search/__pycache__/hybrid_search.cpython-313.pyc +0 -0
  361. package/codex-lens/src/codexlens/search/__pycache__/query_parser.cpython-313.pyc +0 -0
  362. package/codex-lens/src/codexlens/search/__pycache__/ranking.cpython-313.pyc +0 -0
  363. package/codex-lens/src/codexlens/search/chain_search.py +647 -0
  364. package/codex-lens/src/codexlens/search/enrichment.py +150 -0
  365. package/codex-lens/src/codexlens/search/hybrid_search.py +313 -0
  366. package/codex-lens/src/codexlens/search/query_parser.py +242 -0
  367. package/codex-lens/src/codexlens/search/ranking.py +274 -0
  368. package/codex-lens/src/codexlens/semantic/__init__.py +39 -0
  369. package/codex-lens/src/codexlens/semantic/__pycache__/__init__.cpython-313.pyc +0 -0
  370. package/codex-lens/src/codexlens/semantic/__pycache__/ann_index.cpython-313.pyc +0 -0
  371. package/codex-lens/src/codexlens/semantic/__pycache__/chunker.cpython-313.pyc +0 -0
  372. package/codex-lens/src/codexlens/semantic/__pycache__/code_extractor.cpython-313.pyc +0 -0
  373. package/codex-lens/src/codexlens/semantic/__pycache__/embedder.cpython-313.pyc +0 -0
  374. package/codex-lens/src/codexlens/semantic/__pycache__/graph_analyzer.cpython-313.pyc +0 -0
  375. package/codex-lens/src/codexlens/semantic/__pycache__/llm_enhancer.cpython-313.pyc +0 -0
  376. package/codex-lens/src/codexlens/semantic/__pycache__/vector_store.cpython-313.pyc +0 -0
  377. package/codex-lens/src/codexlens/semantic/ann_index.py +414 -0
  378. package/codex-lens/src/codexlens/semantic/chunker.py +448 -0
  379. package/codex-lens/src/codexlens/semantic/code_extractor.py +274 -0
  380. package/codex-lens/src/codexlens/semantic/embedder.py +185 -0
  381. package/codex-lens/src/codexlens/semantic/vector_store.py +955 -0
  382. package/codex-lens/src/codexlens/storage/__init__.py +29 -0
  383. package/codex-lens/src/codexlens/storage/__pycache__/__init__.cpython-313.pyc +0 -0
  384. package/codex-lens/src/codexlens/storage/__pycache__/dir_index.cpython-313.pyc +0 -0
  385. package/codex-lens/src/codexlens/storage/__pycache__/file_cache.cpython-313.pyc +0 -0
  386. package/codex-lens/src/codexlens/storage/__pycache__/index_tree.cpython-313.pyc +0 -0
  387. package/codex-lens/src/codexlens/storage/__pycache__/migration_manager.cpython-313.pyc +0 -0
  388. package/codex-lens/src/codexlens/storage/__pycache__/path_mapper.cpython-313.pyc +0 -0
  389. package/codex-lens/src/codexlens/storage/__pycache__/registry.cpython-313.pyc +0 -0
  390. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_store.cpython-313.pyc +0 -0
  391. package/codex-lens/src/codexlens/storage/__pycache__/sqlite_utils.cpython-313.pyc +0 -0
  392. package/codex-lens/src/codexlens/storage/dir_index.py +1850 -0
  393. package/codex-lens/src/codexlens/storage/file_cache.py +32 -0
  394. package/codex-lens/src/codexlens/storage/index_tree.py +776 -0
  395. package/codex-lens/src/codexlens/storage/migration_manager.py +154 -0
  396. package/codex-lens/src/codexlens/storage/migrations/__init__.py +1 -0
  397. package/codex-lens/src/codexlens/storage/migrations/__pycache__/__init__.cpython-313.pyc +0 -0
  398. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_001_normalize_keywords.cpython-313.pyc +0 -0
  399. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_002_add_token_metadata.cpython-313.pyc +0 -0
  400. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_003_code_relationships.cpython-313.pyc +0 -0
  401. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_004_dual_fts.cpython-313.pyc +0 -0
  402. package/codex-lens/src/codexlens/storage/migrations/__pycache__/migration_005_cleanup_unused_fields.cpython-313.pyc +0 -0
  403. package/codex-lens/src/codexlens/storage/migrations/migration_001_normalize_keywords.py +123 -0
  404. package/codex-lens/src/codexlens/storage/migrations/migration_002_add_token_metadata.py +48 -0
  405. package/codex-lens/src/codexlens/storage/migrations/migration_004_dual_fts.py +232 -0
  406. package/codex-lens/src/codexlens/storage/migrations/migration_005_cleanup_unused_fields.py +196 -0
  407. package/codex-lens/src/codexlens/storage/path_mapper.py +274 -0
  408. package/codex-lens/src/codexlens/storage/registry.py +670 -0
  409. package/codex-lens/src/codexlens/storage/sqlite_store.py +576 -0
  410. package/codex-lens/src/codexlens/storage/sqlite_utils.py +64 -0
  411. package/package.json +4 -1
  412. package/.claude/commands/memory/tech-research.md +0 -477
  413. package/.claude/scripts/classify-folders.sh +0 -39
  414. package/.claude/scripts/convert_tokens_to_css.sh +0 -229
  415. package/.claude/scripts/detect_changed_modules.sh +0 -161
  416. package/.claude/scripts/discover-design-files.sh +0 -87
  417. package/.claude/scripts/extract-animations.js +0 -243
  418. package/.claude/scripts/extract-computed-styles.js +0 -118
  419. package/.claude/scripts/extract-layout-structure.js +0 -411
  420. package/.claude/scripts/generate_module_docs.sh +0 -717
  421. package/.claude/scripts/get_modules_by_depth.sh +0 -170
  422. package/.claude/scripts/ui-generate-preview.sh +0 -395
  423. package/.claude/scripts/ui-instantiate-prototypes.sh +0 -815
  424. package/.claude/scripts/update_module_claude.sh +0 -337
  425. package/.claude/workflows/context-search-strategy.md +0 -77
  426. package/.claude/workflows/intelligent-tools-strategy.md +0 -662
  427. package/ccw/src/cli.js +0 -119
  428. package/ccw/src/commands/install.js +0 -324
  429. package/ccw/src/commands/tool.js +0 -138
  430. package/ccw/src/core/data-aggregator.js +0 -409
  431. package/ccw/src/core/server.js +0 -2063
  432. package/ccw/src/core/session-scanner.js +0 -235
  433. package/ccw/src/tools/classify-folders.js +0 -204
  434. package/ccw/src/tools/detect-changed-modules.js +0 -288
  435. package/ccw/src/tools/edit-file.js +0 -266
  436. package/ccw/src/tools/index.js +0 -176
  437. package/ccw/src/utils/file-utils.js +0 -48
@@ -1,686 +1,748 @@
1
- ---
2
- name: lite-execute
3
- description: Execute tasks based on in-memory plan, prompt description, or file content
4
- argument-hint: "[--in-memory] [\"task description\"|file-path]"
5
- allowed-tools: TodoWrite(*), Task(*), Bash(*)
6
- ---
7
-
8
- # Workflow Lite-Execute Command (/workflow:lite-execute)
9
-
10
- ## Overview
11
-
12
- Flexible task execution command supporting three input modes: in-memory plan (from lite-plan), direct prompt description, or file content. Handles execution orchestration, progress tracking, and optional code review.
13
-
14
- **Core capabilities:**
15
- - Multi-mode input (in-memory plan, prompt description, or file path)
16
- - Execution orchestration (Agent or Codex) with full context
17
- - Live progress tracking via TodoWrite at execution call level
18
- - Optional code review with selected tool (Gemini, Agent, or custom)
19
- - Context continuity across multiple executions
20
- - Intelligent format detection (Enhanced Task JSON vs plain text)
21
-
22
- ## Usage
23
-
24
- ### Command Syntax
25
- ```bash
26
- /workflow:lite-execute [FLAGS] <INPUT>
27
-
28
- # Flags
29
- --in-memory Use plan from memory (called by lite-plan)
30
-
31
- # Arguments
32
- <input> Task description string, or path to file (required)
33
- ```
34
-
35
- ## Input Modes
36
-
37
- ### Mode 1: In-Memory Plan
38
-
39
- **Trigger**: Called by lite-plan after Phase 4 approval with `--in-memory` flag
40
-
41
- **Input Source**: `executionContext` global variable set by lite-plan
42
-
43
- **Content**: Complete execution context (see Data Structures section)
44
-
45
- **Behavior**:
46
- - Skip execution method selection (already set by lite-plan)
47
- - Directly proceed to execution with full context
48
- - All planning artifacts available (exploration, clarifications, plan)
49
-
50
- ### Mode 2: Prompt Description
51
-
52
- **Trigger**: User calls with task description string
53
-
54
- **Input**: Simple task description (e.g., "Add unit tests for auth module")
55
-
56
- **Behavior**:
57
- - Store prompt as `originalUserInput`
58
- - Create simple execution plan from prompt
59
- - AskUserQuestion: Select execution method (Agent/Codex/Auto)
60
- - AskUserQuestion: Select code review tool (Skip/Gemini/Agent/Other)
61
- - Proceed to execution with `originalUserInput` included
62
-
63
- **User Interaction**:
64
- ```javascript
65
- AskUserQuestion({
66
- questions: [
67
- {
68
- question: "Select execution method:",
69
- header: "Execution",
70
- multiSelect: false,
71
- options: [
72
- { label: "Agent", description: "@code-developer agent" },
73
- { label: "Codex", description: "codex CLI tool" },
74
- { label: "Auto", description: "Auto-select based on complexity" }
75
- ]
76
- },
77
- {
78
- question: "Enable code review after execution?",
79
- header: "Code Review",
80
- multiSelect: false,
81
- options: [
82
- { label: "Skip", description: "No review" },
83
- { label: "Gemini Review", description: "Gemini CLI tool" },
84
- { label: "Agent Review", description: "Current agent review" }
85
- ]
86
- }
87
- ]
88
- })
89
- ```
90
-
91
- ### Mode 3: File Content
92
-
93
- **Trigger**: User calls with file path
94
-
95
- **Input**: Path to file containing task description or plan.json
96
-
97
- **Step 1: Read and Detect Format**
98
-
99
- ```javascript
100
- fileContent = Read(filePath)
101
-
102
- // Attempt JSON parsing
103
- try {
104
- jsonData = JSON.parse(fileContent)
105
-
106
- // Check if plan.json from lite-plan session
107
- if (jsonData.summary && jsonData.approach && jsonData.tasks) {
108
- planObject = jsonData
109
- originalUserInput = jsonData.summary
110
- isPlanJson = true
111
- } else {
112
- // Valid JSON but not plan.json - treat as plain text
113
- originalUserInput = fileContent
114
- isPlanJson = false
115
- }
116
- } catch {
117
- // Not valid JSON - treat as plain text prompt
118
- originalUserInput = fileContent
119
- isPlanJson = false
120
- }
121
- ```
122
-
123
- **Step 2: Create Execution Plan**
124
-
125
- If `isPlanJson === true`:
126
- - Use `planObject` directly
127
- - User selects execution method and code review
128
-
129
- If `isPlanJson === false`:
130
- - Treat file content as prompt (same behavior as Mode 2)
131
- - Create simple execution plan from content
132
-
133
- **Step 3: User Interaction**
134
-
135
- - AskUserQuestion: Select execution method (Agent/Codex/Auto)
136
- - AskUserQuestion: Select code review tool
137
- - Proceed to execution with full context
138
-
139
- ## Execution Process
140
-
141
- ```
142
- Input Parsing:
143
- └─ Decision (mode detection):
144
- ├─ --in-memory flag → Mode 1: Load executionContext → Skip user selection
145
- ├─ Ends with .md/.json/.txt → Mode 3: Read file → Detect format
146
- │ ├─ Valid plan.json → Use planObject → User selects method + review
147
- │ └─ Not plan.json → Treat as prompt → User selects method + review
148
- └─ Other → Mode 2: Prompt description → User selects method + review
149
-
150
- Execution:
151
- ├─ Step 1: Initialize result tracking (previousExecutionResults = [])
152
- ├─ Step 2: Task grouping & batch creation
153
- │ ├─ Extract explicit depends_on (no file/keyword inference)
154
- │ ├─ Group: independent tasks → single parallel batch (maximize utilization)
155
- │ ├─ Group: dependent tasks → sequential phases (respect dependencies)
156
- │ └─ Create TodoWrite list for batches
157
- ├─ Step 3: Launch execution
158
- │ ├─ Phase 1: All independent tasks (⚡ single batch, concurrent)
159
- │ └─ Phase 2+: Dependent tasks by dependency order
160
- ├─ Step 4: Track progress (TodoWrite updates per batch)
161
- └─ Step 5: Code review (if codeReviewTool ≠ "Skip")
162
-
163
- Output:
164
- └─ Execution complete with results in previousExecutionResults[]
165
- ```
166
-
167
- ## Detailed Execution Steps
168
-
169
- ### Step 1: Initialize Execution Tracking
170
-
171
- **Operations**:
172
- - Initialize result tracking for multi-execution scenarios
173
- - Set up `previousExecutionResults` array for context continuity
174
-
175
- ```javascript
176
- // Initialize result tracking
177
- previousExecutionResults = []
178
- ```
179
-
180
- ### Step 2: Task Grouping & Batch Creation
181
-
182
- **Dependency Analysis & Grouping Algorithm**:
183
- ```javascript
184
- // Use explicit depends_on from plan.json (no inference from file/keywords)
185
- function extractDependencies(tasks) {
186
- const taskIdToIndex = {}
187
- tasks.forEach((t, i) => { taskIdToIndex[t.id] = i })
188
-
189
- return tasks.map((task, i) => {
190
- // Only use explicit depends_on from plan.json
191
- const deps = (task.depends_on || [])
192
- .map(depId => taskIdToIndex[depId])
193
- .filter(idx => idx !== undefined && idx < i)
194
- return { ...task, taskIndex: i, dependencies: deps }
195
- })
196
- }
197
-
198
- // Group into batches: maximize parallel execution
199
- function createExecutionCalls(tasks, executionMethod) {
200
- const tasksWithDeps = extractDependencies(tasks)
201
- const processed = new Set()
202
- const calls = []
203
-
204
- // Phase 1: All independent tasks → single parallel batch (maximize utilization)
205
- const independentTasks = tasksWithDeps.filter(t => t.dependencies.length === 0)
206
- if (independentTasks.length > 0) {
207
- independentTasks.forEach(t => processed.add(t.taskIndex))
208
- calls.push({
209
- method: executionMethod,
210
- executionType: "parallel",
211
- groupId: "P1",
212
- taskSummary: independentTasks.map(t => t.title).join(' | '),
213
- tasks: independentTasks
214
- })
215
- }
216
-
217
- // Phase 2: Dependent tasks → sequential batches (respect dependencies)
218
- let sequentialIndex = 1
219
- let remaining = tasksWithDeps.filter(t => !processed.has(t.taskIndex))
220
-
221
- while (remaining.length > 0) {
222
- // Find tasks whose dependencies are all satisfied
223
- const ready = remaining.filter(t =>
224
- t.dependencies.every(d => processed.has(d))
225
- )
226
-
227
- if (ready.length === 0) {
228
- console.warn('Circular dependency detected, forcing remaining tasks')
229
- ready.push(...remaining)
230
- }
231
-
232
- // Group ready tasks (can run in parallel within this phase)
233
- ready.forEach(t => processed.add(t.taskIndex))
234
- calls.push({
235
- method: executionMethod,
236
- executionType: ready.length > 1 ? "parallel" : "sequential",
237
- groupId: ready.length > 1 ? `P${calls.length + 1}` : `S${sequentialIndex++}`,
238
- taskSummary: ready.map(t => t.title).join(ready.length > 1 ? ' | ' : ' → '),
239
- tasks: ready
240
- })
241
-
242
- remaining = remaining.filter(t => !processed.has(t.taskIndex))
243
- }
244
-
245
- return calls
246
- }
247
-
248
- executionCalls = createExecutionCalls(planObject.tasks, executionMethod).map(c => ({ ...c, id: `[${c.groupId}]` }))
249
-
250
- TodoWrite({
251
- todos: executionCalls.map(c => ({
252
- content: `${c.executionType === "parallel" ? "⚡" : "→"} ${c.id} (${c.tasks.length} tasks)`,
253
- status: "pending",
254
- activeForm: `Executing ${c.id}`
255
- }))
256
- })
257
- ```
258
-
259
- ### Step 3: Launch Execution
260
-
261
- **Execution Flow**: Parallel batches concurrently → Sequential batches in order
262
- ```javascript
263
- const parallel = executionCalls.filter(c => c.executionType === "parallel")
264
- const sequential = executionCalls.filter(c => c.executionType === "sequential")
265
-
266
- // Phase 1: Launch all parallel batches (single message with multiple tool calls)
267
- if (parallel.length > 0) {
268
- TodoWrite({ todos: executionCalls.map(c => ({ status: c.executionType === "parallel" ? "in_progress" : "pending" })) })
269
- parallelResults = await Promise.all(parallel.map(c => executeBatch(c)))
270
- previousExecutionResults.push(...parallelResults)
271
- TodoWrite({ todos: executionCalls.map(c => ({ status: parallel.includes(c) ? "completed" : "pending" })) })
272
- }
273
-
274
- // Phase 2: Execute sequential batches one by one
275
- for (const call of sequential) {
276
- TodoWrite({ todos: executionCalls.map(c => ({ status: c === call ? "in_progress" : "..." })) })
277
- result = await executeBatch(call)
278
- previousExecutionResults.push(result)
279
- TodoWrite({ todos: executionCalls.map(c => ({ status: "completed" or "pending" })) })
280
- }
281
- ```
282
-
283
- **Option A: Agent Execution**
284
-
285
- When to use:
286
- - `executionMethod = "Agent"`
287
- - `executionMethod = "Auto" AND complexity = "Low"`
288
-
289
- **Task Formatting Principle**: Each task is a self-contained checklist. The agent only needs to know what THIS task requires, not its position or relation to other tasks.
290
-
291
- Agent call format:
292
- ```javascript
293
- // Format single task as self-contained checklist
294
- function formatTaskChecklist(task) {
295
- return `
296
- ## ${task.title}
297
-
298
- **Target**: \`${task.file}\`
299
- **Action**: ${task.action}
300
-
301
- ### What to do
302
- ${task.description}
303
-
304
- ### How to do it
305
- ${task.implementation.map(step => `- ${step}`).join('\n')}
306
-
307
- ### Reference
308
- - Pattern: ${task.reference.pattern}
309
- - Examples: ${task.reference.files.join(', ')}
310
- - Notes: ${task.reference.examples}
311
-
312
- ### Done when
313
- ${task.acceptance.map(c => `- [ ] ${c}`).join('\n')}
314
- `
315
- }
316
-
317
- // For batch execution: aggregate tasks without numbering
318
- function formatBatchPrompt(batch) {
319
- const tasksSection = batch.tasks.map(t => formatTaskChecklist(t)).join('\n---\n')
320
-
321
- return `
322
- ${originalUserInput ? `## Goal\n${originalUserInput}\n` : ''}
323
-
324
- ## Tasks
325
-
326
- ${tasksSection}
327
-
328
- ${batch.context ? `## Context\n${batch.context}` : ''}
329
-
330
- Complete each task according to its "Done when" checklist.
331
- `
332
- }
333
-
334
- Task(
335
- subagent_type="code-developer",
336
- description=batch.taskSummary,
337
- prompt=formatBatchPrompt({
338
- tasks: batch.tasks,
339
- context: buildRelevantContext(batch.tasks)
340
- })
341
- )
342
-
343
- // Helper: Build relevant context for batch
344
- // Context serves as REFERENCE ONLY - helps agent understand existing state
345
- function buildRelevantContext(tasks) {
346
- const sections = []
347
-
348
- // 1. Previous work completion - what's already done (reference for continuity)
349
- if (previousExecutionResults.length > 0) {
350
- sections.push(`### Previous Work (Reference)
351
- Use this to understand what's already completed. Avoid duplicating work.
352
-
353
- ${previousExecutionResults.map(r => `**${r.tasksSummary}**
354
- - Status: ${r.status}
355
- - Outputs: ${r.keyOutputs || 'See git diff'}
356
- ${r.notes ? `- Notes: ${r.notes}` : ''}`
357
- ).join('\n\n')}`)
358
- }
359
-
360
- // 2. Related files - files that may need to be read/referenced
361
- const relatedFiles = extractRelatedFiles(tasks)
362
- if (relatedFiles.length > 0) {
363
- sections.push(`### Related Files (Reference)
364
- These files may contain patterns, types, or utilities relevant to your tasks:
365
-
366
- ${relatedFiles.map(f => `- \`${f}\``).join('\n')}`)
367
- }
368
-
369
- // 3. Clarifications from user
370
- if (clarificationContext) {
371
- sections.push(`### User Clarifications
372
- ${Object.entries(clarificationContext).map(([q, a]) => `- **${q}**: ${a}`).join('\n')}`)
373
- }
374
-
375
- // 4. Artifact files (for deeper context if needed)
376
- if (executionContext?.session?.artifacts?.plan) {
377
- sections.push(`### Artifacts
378
- For detailed planning context, read: ${executionContext.session.artifacts.plan}`)
379
- }
380
-
381
- return sections.join('\n\n')
382
- }
383
-
384
- // Extract related files from task references
385
- function extractRelatedFiles(tasks) {
386
- const files = new Set()
387
- tasks.forEach(task => {
388
- // Add reference example files
389
- if (task.reference?.files) {
390
- task.reference.files.forEach(f => files.add(f))
391
- }
392
- })
393
- return [...files]
394
- }
395
- ```
396
-
397
- **Result Collection**: After completion, collect result following `executionResult` structure (see Data Structures section)
398
-
399
- **Option B: CLI Execution (Codex)**
400
-
401
- When to use:
402
- - `executionMethod = "Codex"`
403
- - `executionMethod = "Auto" AND complexity = "Medium" or "High"`
404
-
405
- **Task Formatting Principle**: Same as Agent - each task is a self-contained checklist. No task numbering or position awareness.
406
-
407
- Command format:
408
- ```bash
409
- // Format single task as compact checklist for CLI
410
- function formatTaskForCLI(task) {
411
- return `
412
- ## ${task.title}
413
- File: ${task.file}
414
- Action: ${task.action}
415
-
416
- What: ${task.description}
417
-
418
- How:
419
- ${task.implementation.map(step => `- ${step}`).join('\n')}
420
-
421
- Reference: ${task.reference.pattern} (see ${task.reference.files.join(', ')})
422
- Notes: ${task.reference.examples}
423
-
424
- Done when:
425
- ${task.acceptance.map(c => `- [ ] ${c}`).join('\n')}
426
- `
427
- }
428
-
429
- // Build CLI prompt for batch
430
- // Context provides REFERENCE information - not requirements to fulfill
431
- function buildCLIPrompt(batch) {
432
- const tasksSection = batch.tasks.map(t => formatTaskForCLI(t)).join('\n---\n')
433
-
434
- let prompt = `${originalUserInput ? `## Goal\n${originalUserInput}\n\n` : ''}`
435
- prompt += `## Tasks\n\n${tasksSection}\n`
436
-
437
- // Context section - reference information only
438
- const contextSections = []
439
-
440
- // 1. Previous work - what's already completed
441
- if (previousExecutionResults.length > 0) {
442
- contextSections.push(`### Previous Work (Reference)
443
- Already completed - avoid duplicating:
444
- ${previousExecutionResults.map(r => `- ${r.tasksSummary}: ${r.status}${r.keyOutputs ? ` (${r.keyOutputs})` : ''}`).join('\n')}`)
445
- }
446
-
447
- // 2. Related files from task references
448
- const relatedFiles = [...new Set(batch.tasks.flatMap(t => t.reference?.files || []))]
449
- if (relatedFiles.length > 0) {
450
- contextSections.push(`### Related Files (Reference)
451
- Patterns and examples to follow:
452
- ${relatedFiles.map(f => `- ${f}`).join('\n')}`)
453
- }
454
-
455
- // 3. User clarifications
456
- if (clarificationContext) {
457
- contextSections.push(`### Clarifications
458
- ${Object.entries(clarificationContext).map(([q, a]) => `- ${q}: ${a}`).join('\n')}`)
459
- }
460
-
461
- // 4. Plan artifact for deeper context
462
- if (executionContext?.session?.artifacts?.plan) {
463
- contextSections.push(`### Artifacts
464
- Detailed plan: ${executionContext.session.artifacts.plan}`)
465
- }
466
-
467
- if (contextSections.length > 0) {
468
- prompt += `\n## Context\n${contextSections.join('\n\n')}\n`
469
- }
470
-
471
- prompt += `\nComplete each task according to its "Done when" checklist.`
472
-
473
- return prompt
474
- }
475
-
476
- codex --full-auto exec "${buildCLIPrompt(batch)}" --skip-git-repo-check -s danger-full-access
477
- ```
478
-
479
- **Execution with tracking**:
480
- ```javascript
481
- // Launch CLI in foreground (NOT background)
482
- // Timeout based on complexity: Low=40min, Medium=60min, High=100min
483
- const timeoutByComplexity = {
484
- "Low": 2400000, // 40 minutes
485
- "Medium": 3600000, // 60 minutes
486
- "High": 6000000 // 100 minutes
487
- }
488
-
489
- bash_result = Bash(
490
- command=cli_command,
491
- timeout=timeoutByComplexity[planObject.complexity] || 3600000
492
- )
493
-
494
- // Update TodoWrite when execution completes
495
- ```
496
-
497
- **Result Collection**: After completion, analyze output and collect result following `executionResult` structure
498
-
499
- ### Step 4: Progress Tracking
500
-
501
- Progress tracked at batch level (not individual task level). Icons: ⚡ (parallel, concurrent), → (sequential, one-by-one)
502
-
503
- ### Step 5: Code Review (Optional)
504
-
505
- **Skip Condition**: Only run if `codeReviewTool ≠ "Skip"`
506
-
507
- **Review Focus**: Verify implementation against plan acceptance criteria
508
- - Read plan.json for task acceptance criteria
509
- - Check each acceptance criterion is fulfilled
510
- - Validate code quality and identify issues
511
- - Ensure alignment with planned approach
512
-
513
- **Operations**:
514
- - Agent Review: Current agent performs direct review
515
- - Gemini Review: Execute gemini CLI with review prompt
516
- - Custom tool: Execute specified CLI tool (qwen, codex, etc.)
517
-
518
- **Unified Review Template** (All tools use same standard):
519
-
520
- **Review Criteria**:
521
- - **Acceptance Criteria**: Verify each criterion from plan.tasks[].acceptance
522
- - **Code Quality**: Analyze quality, identify issues, suggest improvements
523
- - **Plan Alignment**: Validate implementation matches planned approach
524
-
525
- **Shared Prompt Template** (used by all CLI tools):
526
- ```
527
- PURPOSE: Code review for implemented changes against plan acceptance criteria
528
- TASK: • Verify plan acceptance criteria fulfillment • Analyze code quality • Identify issues • Suggest improvements • Validate plan adherence
529
- MODE: analysis
530
- CONTEXT: @**/* @{plan.json} [@{exploration.json}] | Memory: Review lite-execute changes against plan requirements
531
- EXPECTED: Quality assessment with acceptance criteria verification, issue identification, and recommendations. Explicitly check each acceptance criterion from plan.json tasks.
532
- RULES: $(cat ~/.claude/workflows/cli-templates/prompts/analysis/02-review-code-quality.txt) | Focus on plan acceptance criteria and plan adherence | analysis=READ-ONLY
533
- ```
534
-
535
- **Tool-Specific Execution** (Apply shared prompt template above):
536
-
537
- ```bash
538
- # Method 1: Agent Review (current agent)
539
- # - Read plan.json: ${executionContext.session.artifacts.plan}
540
- # - Apply unified review criteria (see Shared Prompt Template)
541
- # - Report findings directly
542
-
543
- # Method 2: Gemini Review (recommended)
544
- gemini -p "[Shared Prompt Template with artifacts]"
545
- # CONTEXT includes: @**/* @${plan.json} [@${exploration.json}]
546
-
547
- # Method 3: Qwen Review (alternative)
548
- qwen -p "[Shared Prompt Template with artifacts]"
549
- # Same prompt as Gemini, different execution engine
550
-
551
- # Method 4: Codex Review (autonomous)
552
- codex --full-auto exec "[Verify plan acceptance criteria at ${plan.json}]" --skip-git-repo-check -s danger-full-access
553
- ```
554
-
555
- **Implementation Note**: Replace `[Shared Prompt Template with artifacts]` placeholder with actual template content, substituting:
556
- - `@{plan.json}` `@${executionContext.session.artifacts.plan}`
557
- - `[@{exploration.json}]` → exploration files from artifacts (if exists)
558
-
559
- ### Step 6: Update Development Index
560
-
561
- **Trigger**: After all executions complete (regardless of code review)
562
-
563
- **Skip Condition**: Skip if `.workflow/project.json` does not exist
564
-
565
- **Operations**:
566
- ```javascript
567
- const projectJsonPath = '.workflow/project.json'
568
- if (!fileExists(projectJsonPath)) return // Silent skip
569
-
570
- const projectJson = JSON.parse(Read(projectJsonPath))
571
-
572
- // Initialize if needed
573
- if (!projectJson.development_index) {
574
- projectJson.development_index = { feature: [], enhancement: [], bugfix: [], refactor: [], docs: [] }
575
- }
576
-
577
- // Detect category from keywords
578
- function detectCategory(text) {
579
- text = text.toLowerCase()
580
- if (/\b(fix|bug|error|issue|crash)\b/.test(text)) return 'bugfix'
581
- if (/\b(refactor|cleanup|reorganize)\b/.test(text)) return 'refactor'
582
- if (/\b(doc|readme|comment)\b/.test(text)) return 'docs'
583
- if (/\b(add|new|create|implement)\b/.test(text)) return 'feature'
584
- return 'enhancement'
585
- }
586
-
587
- // Detect sub_feature from task file paths
588
- function detectSubFeature(tasks) {
589
- const dirs = tasks.map(t => t.file?.split('/').slice(-2, -1)[0]).filter(Boolean)
590
- const counts = dirs.reduce((a, d) => { a[d] = (a[d] || 0) + 1; return a }, {})
591
- return Object.entries(counts).sort((a, b) => b[1] - a[1])[0]?.[0] || 'general'
592
- }
593
-
594
- const category = detectCategory(`${planObject.summary} ${planObject.approach}`)
595
- const entry = {
596
- title: planObject.summary.slice(0, 60),
597
- sub_feature: detectSubFeature(planObject.tasks),
598
- date: new Date().toISOString().split('T')[0],
599
- description: planObject.approach.slice(0, 100),
600
- status: previousExecutionResults.every(r => r.status === 'completed') ? 'completed' : 'partial',
601
- session_id: executionContext?.session?.id || null
602
- }
603
-
604
- projectJson.development_index[category].push(entry)
605
- projectJson.statistics.last_updated = new Date().toISOString()
606
- Write(projectJsonPath, JSON.stringify(projectJson, null, 2))
607
-
608
- console.log(`✓ Development index: [${category}] ${entry.title}`)
609
- ```
610
-
611
- ## Best Practices
612
-
613
- **Input Modes**: In-memory (lite-plan), prompt (standalone), file (JSON/text)
614
- **Task Grouping**: Based on explicit depends_on only; independent tasks run in single parallel batch
615
- **Execution**: All independent tasks launch concurrently via single Claude message with multiple tool calls
616
-
617
- ## Error Handling
618
-
619
- | Error | Cause | Resolution |
620
- |-------|-------|------------|
621
- | Missing executionContext | --in-memory without context | Error: "No execution context found. Only available when called by lite-plan." |
622
- | File not found | File path doesn't exist | Error: "File not found: {path}. Check file path." |
623
- | Empty file | File exists but no content | Error: "File is empty: {path}. Provide task description." |
624
- | Invalid Enhanced Task JSON | JSON missing required fields | Warning: "Missing required fields. Treating as plain text." |
625
- | Malformed JSON | JSON parsing fails | Treat as plain text (expected for non-JSON files) |
626
- | Execution failure | Agent/Codex crashes | Display error, save partial progress, suggest retry |
627
- | Codex unavailable | Codex not installed | Show installation instructions, offer Agent execution |
628
-
629
- ## Data Structures
630
-
631
- ### executionContext (Input - Mode 1)
632
-
633
- Passed from lite-plan via global variable:
634
-
635
- ```javascript
636
- {
637
- planObject: {
638
- summary: string,
639
- approach: string,
640
- tasks: [...],
641
- estimated_time: string,
642
- recommended_execution: string,
643
- complexity: string
644
- },
645
- explorationsContext: {...} | null, // Multi-angle explorations
646
- explorationAngles: string[], // List of exploration angles
647
- explorationManifest: {...} | null, // Exploration manifest
648
- clarificationContext: {...} | null,
649
- executionMethod: "Agent" | "Codex" | "Auto",
650
- codeReviewTool: "Skip" | "Gemini Review" | "Agent Review" | string,
651
- originalUserInput: string,
652
-
653
- // Session artifacts location (saved by lite-plan)
654
- session: {
655
- id: string, // Session identifier: {taskSlug}-{shortTimestamp}
656
- folder: string, // Session folder path: .workflow/.lite-plan/{session-id}
657
- artifacts: {
658
- explorations: [{angle, path}], // exploration-{angle}.json paths
659
- explorations_manifest: string, // explorations-manifest.json path
660
- plan: string // plan.json path (always present)
661
- }
662
- }
663
- }
664
- ```
665
-
666
- **Artifact Usage**:
667
- - Artifact files contain detailed planning context
668
- - Pass artifact paths to CLI tools and agents for enhanced context
669
- - See execution options below for usage examples
670
-
671
- ### executionResult (Output)
672
-
673
- Collected after each execution call completes:
674
-
675
- ```javascript
676
- {
677
- executionId: string, // e.g., "[Agent-1]", "[Codex-1]"
678
- status: "completed" | "partial" | "failed",
679
- tasksSummary: string, // Brief description of tasks handled
680
- completionSummary: string, // What was completed
681
- keyOutputs: string, // Files created/modified, key changes
682
- notes: string // Important context for next execution
683
- }
684
- ```
685
-
686
- Appended to `previousExecutionResults` array for context continuity in multi-execution scenarios.
1
+ ---
2
+ name: lite-execute
3
+ description: Execute tasks based on in-memory plan, prompt description, or file content
4
+ argument-hint: "[--in-memory] [\"task description\"|file-path]"
5
+ allowed-tools: TodoWrite(*), Task(*), Bash(*)
6
+ ---
7
+
8
+ # Workflow Lite-Execute Command (/workflow:lite-execute)
9
+
10
+ ## Overview
11
+
12
+ Flexible task execution command supporting three input modes: in-memory plan (from lite-plan), direct prompt description, or file content. Handles execution orchestration, progress tracking, and optional code review.
13
+
14
+ **Core capabilities:**
15
+ - Multi-mode input (in-memory plan, prompt description, or file path)
16
+ - Execution orchestration (Agent or Codex) with full context
17
+ - Live progress tracking via TodoWrite at execution call level
18
+ - Optional code review with selected tool (Gemini, Agent, or custom)
19
+ - Context continuity across multiple executions
20
+ - Intelligent format detection (Enhanced Task JSON vs plain text)
21
+
22
+ ## Usage
23
+
24
+ ### Command Syntax
25
+ ```bash
26
+ /workflow:lite-execute [FLAGS] <INPUT>
27
+
28
+ # Flags
29
+ --in-memory Use plan from memory (called by lite-plan)
30
+
31
+ # Arguments
32
+ <input> Task description string, or path to file (required)
33
+ ```
34
+
35
+ ## Input Modes
36
+
37
+ ### Mode 1: In-Memory Plan
38
+
39
+ **Trigger**: Called by lite-plan after Phase 4 approval with `--in-memory` flag
40
+
41
+ **Input Source**: `executionContext` global variable set by lite-plan
42
+
43
+ **Content**: Complete execution context (see Data Structures section)
44
+
45
+ **Behavior**:
46
+ - Skip execution method selection (already set by lite-plan)
47
+ - Directly proceed to execution with full context
48
+ - All planning artifacts available (exploration, clarifications, plan)
49
+
50
+ ### Mode 2: Prompt Description
51
+
52
+ **Trigger**: User calls with task description string
53
+
54
+ **Input**: Simple task description (e.g., "Add unit tests for auth module")
55
+
56
+ **Behavior**:
57
+ - Store prompt as `originalUserInput`
58
+ - Create simple execution plan from prompt
59
+ - AskUserQuestion: Select execution method (Agent/Codex/Auto)
60
+ - AskUserQuestion: Select code review tool (Skip/Gemini/Agent/Other)
61
+ - Proceed to execution with `originalUserInput` included
62
+
63
+ **User Interaction**:
64
+ ```javascript
65
+ AskUserQuestion({
66
+ questions: [
67
+ {
68
+ question: "Select execution method:",
69
+ header: "Execution",
70
+ multiSelect: false,
71
+ options: [
72
+ { label: "Agent", description: "@code-developer agent" },
73
+ { label: "Codex", description: "codex CLI tool" },
74
+ { label: "Auto", description: "Auto-select based on complexity" }
75
+ ]
76
+ },
77
+ {
78
+ question: "Enable code review after execution?",
79
+ header: "Code Review",
80
+ multiSelect: false,
81
+ options: [
82
+ { label: "Skip", description: "No review" },
83
+ { label: "Gemini Review", description: "Gemini CLI tool" },
84
+ { label: "Agent Review", description: "Current agent review" }
85
+ ]
86
+ }
87
+ ]
88
+ })
89
+ ```
90
+
91
+ ### Mode 3: File Content
92
+
93
+ **Trigger**: User calls with file path
94
+
95
+ **Input**: Path to file containing task description or plan.json
96
+
97
+ **Step 1: Read and Detect Format**
98
+
99
+ ```javascript
100
+ fileContent = Read(filePath)
101
+
102
+ // Attempt JSON parsing
103
+ try {
104
+ jsonData = JSON.parse(fileContent)
105
+
106
+ // Check if plan.json from lite-plan session
107
+ if (jsonData.summary && jsonData.approach && jsonData.tasks) {
108
+ planObject = jsonData
109
+ originalUserInput = jsonData.summary
110
+ isPlanJson = true
111
+ } else {
112
+ // Valid JSON but not plan.json - treat as plain text
113
+ originalUserInput = fileContent
114
+ isPlanJson = false
115
+ }
116
+ } catch {
117
+ // Not valid JSON - treat as plain text prompt
118
+ originalUserInput = fileContent
119
+ isPlanJson = false
120
+ }
121
+ ```
122
+
123
+ **Step 2: Create Execution Plan**
124
+
125
+ If `isPlanJson === true`:
126
+ - Use `planObject` directly
127
+ - User selects execution method and code review
128
+
129
+ If `isPlanJson === false`:
130
+ - Treat file content as prompt (same behavior as Mode 2)
131
+ - Create simple execution plan from content
132
+
133
+ **Step 3: User Interaction**
134
+
135
+ - AskUserQuestion: Select execution method (Agent/Codex/Auto)
136
+ - AskUserQuestion: Select code review tool
137
+ - Proceed to execution with full context
138
+
139
+ ## Execution Process
140
+
141
+ ```
142
+ Input Parsing:
143
+ └─ Decision (mode detection):
144
+ ├─ --in-memory flag → Mode 1: Load executionContext → Skip user selection
145
+ ├─ Ends with .md/.json/.txt → Mode 3: Read file → Detect format
146
+ │ ├─ Valid plan.json → Use planObject → User selects method + review
147
+ │ └─ Not plan.json → Treat as prompt → User selects method + review
148
+ └─ Other → Mode 2: Prompt description → User selects method + review
149
+
150
+ Execution:
151
+ ├─ Step 1: Initialize result tracking (previousExecutionResults = [])
152
+ ├─ Step 2: Task grouping & batch creation
153
+ │ ├─ Extract explicit depends_on (no file/keyword inference)
154
+ │ ├─ Group: independent tasks → single parallel batch (maximize utilization)
155
+ │ ├─ Group: dependent tasks → sequential phases (respect dependencies)
156
+ │ └─ Create TodoWrite list for batches
157
+ ├─ Step 3: Launch execution
158
+ │ ├─ Phase 1: All independent tasks (⚡ single batch, concurrent)
159
+ │ └─ Phase 2+: Dependent tasks by dependency order
160
+ ├─ Step 4: Track progress (TodoWrite updates per batch)
161
+ └─ Step 5: Code review (if codeReviewTool ≠ "Skip")
162
+
163
+ Output:
164
+ └─ Execution complete with results in previousExecutionResults[]
165
+ ```
166
+
167
+ ## Detailed Execution Steps
168
+
169
+ ### Step 1: Initialize Execution Tracking
170
+
171
+ **Operations**:
172
+ - Initialize result tracking for multi-execution scenarios
173
+ - Set up `previousExecutionResults` array for context continuity
174
+
175
+ ```javascript
176
+ // Initialize result tracking
177
+ previousExecutionResults = []
178
+ ```
179
+
180
+ ### Step 2: Task Grouping & Batch Creation
181
+
182
+ **Dependency Analysis & Grouping Algorithm**:
183
+ ```javascript
184
+ // Use explicit depends_on from plan.json (no inference from file/keywords)
185
+ function extractDependencies(tasks) {
186
+ const taskIdToIndex = {}
187
+ tasks.forEach((t, i) => { taskIdToIndex[t.id] = i })
188
+
189
+ return tasks.map((task, i) => {
190
+ // Only use explicit depends_on from plan.json
191
+ const deps = (task.depends_on || [])
192
+ .map(depId => taskIdToIndex[depId])
193
+ .filter(idx => idx !== undefined && idx < i)
194
+ return { ...task, taskIndex: i, dependencies: deps }
195
+ })
196
+ }
197
+
198
+ // Group into batches: maximize parallel execution
199
+ function createExecutionCalls(tasks, executionMethod) {
200
+ const tasksWithDeps = extractDependencies(tasks)
201
+ const processed = new Set()
202
+ const calls = []
203
+
204
+ // Phase 1: All independent tasks → single parallel batch (maximize utilization)
205
+ const independentTasks = tasksWithDeps.filter(t => t.dependencies.length === 0)
206
+ if (independentTasks.length > 0) {
207
+ independentTasks.forEach(t => processed.add(t.taskIndex))
208
+ calls.push({
209
+ method: executionMethod,
210
+ executionType: "parallel",
211
+ groupId: "P1",
212
+ taskSummary: independentTasks.map(t => t.title).join(' | '),
213
+ tasks: independentTasks
214
+ })
215
+ }
216
+
217
+ // Phase 2: Dependent tasks → sequential batches (respect dependencies)
218
+ let sequentialIndex = 1
219
+ let remaining = tasksWithDeps.filter(t => !processed.has(t.taskIndex))
220
+
221
+ while (remaining.length > 0) {
222
+ // Find tasks whose dependencies are all satisfied
223
+ const ready = remaining.filter(t =>
224
+ t.dependencies.every(d => processed.has(d))
225
+ )
226
+
227
+ if (ready.length === 0) {
228
+ console.warn('Circular dependency detected, forcing remaining tasks')
229
+ ready.push(...remaining)
230
+ }
231
+
232
+ // Group ready tasks (can run in parallel within this phase)
233
+ ready.forEach(t => processed.add(t.taskIndex))
234
+ calls.push({
235
+ method: executionMethod,
236
+ executionType: ready.length > 1 ? "parallel" : "sequential",
237
+ groupId: ready.length > 1 ? `P${calls.length + 1}` : `S${sequentialIndex++}`,
238
+ taskSummary: ready.map(t => t.title).join(ready.length > 1 ? ' | ' : ' → '),
239
+ tasks: ready
240
+ })
241
+
242
+ remaining = remaining.filter(t => !processed.has(t.taskIndex))
243
+ }
244
+
245
+ return calls
246
+ }
247
+
248
+ executionCalls = createExecutionCalls(planObject.tasks, executionMethod).map(c => ({ ...c, id: `[${c.groupId}]` }))
249
+
250
+ TodoWrite({
251
+ todos: executionCalls.map(c => ({
252
+ content: `${c.executionType === "parallel" ? "⚡" : "→"} ${c.id} (${c.tasks.length} tasks)`,
253
+ status: "pending",
254
+ activeForm: `Executing ${c.id}`
255
+ }))
256
+ })
257
+ ```
258
+
259
+ ### Step 3: Launch Execution
260
+
261
+ **Execution Flow**: Parallel batches concurrently → Sequential batches in order
262
+ ```javascript
263
+ const parallel = executionCalls.filter(c => c.executionType === "parallel")
264
+ const sequential = executionCalls.filter(c => c.executionType === "sequential")
265
+
266
+ // Phase 1: Launch all parallel batches (single message with multiple tool calls)
267
+ if (parallel.length > 0) {
268
+ TodoWrite({ todos: executionCalls.map(c => ({ status: c.executionType === "parallel" ? "in_progress" : "pending" })) })
269
+ parallelResults = await Promise.all(parallel.map(c => executeBatch(c)))
270
+ previousExecutionResults.push(...parallelResults)
271
+ TodoWrite({ todos: executionCalls.map(c => ({ status: parallel.includes(c) ? "completed" : "pending" })) })
272
+ }
273
+
274
+ // Phase 2: Execute sequential batches one by one
275
+ for (const call of sequential) {
276
+ TodoWrite({ todos: executionCalls.map(c => ({ status: c === call ? "in_progress" : "..." })) })
277
+ result = await executeBatch(call)
278
+ previousExecutionResults.push(result)
279
+ TodoWrite({ todos: executionCalls.map(c => ({ status: "completed" or "pending" })) })
280
+ }
281
+ ```
282
+
283
+ **Option A: Agent Execution**
284
+
285
+ When to use:
286
+ - `executionMethod = "Agent"`
287
+ - `executionMethod = "Auto" AND complexity = "Low"`
288
+
289
+ **Task Formatting Principle**: Each task is a self-contained checklist. The agent only needs to know what THIS task requires, not its position or relation to other tasks.
290
+
291
+ Agent call format:
292
+ ```javascript
293
+ // Format single task as self-contained checklist
294
+ function formatTaskChecklist(task) {
295
+ return `
296
+ ## ${task.title}
297
+
298
+ **Target**: \`${task.file}\`
299
+ **Action**: ${task.action}
300
+
301
+ ### What to do
302
+ ${task.description}
303
+
304
+ ### How to do it
305
+ ${task.implementation.map(step => `- ${step}`).join('\n')}
306
+
307
+ ### Reference
308
+ - Pattern: ${task.reference.pattern}
309
+ - Examples: ${task.reference.files.join(', ')}
310
+ - Notes: ${task.reference.examples}
311
+
312
+ ### Done when
313
+ ${task.acceptance.map(c => `- [ ] ${c}`).join('\n')}
314
+ `
315
+ }
316
+
317
+ // For batch execution: aggregate tasks without numbering
318
+ function formatBatchPrompt(batch) {
319
+ const tasksSection = batch.tasks.map(t => formatTaskChecklist(t)).join('\n---\n')
320
+
321
+ return `
322
+ ${originalUserInput ? `## Goal\n${originalUserInput}\n` : ''}
323
+
324
+ ## Tasks
325
+
326
+ ${tasksSection}
327
+
328
+ ${batch.context ? `## Context\n${batch.context}` : ''}
329
+
330
+ Complete each task according to its "Done when" checklist.
331
+ `
332
+ }
333
+
334
+ Task(
335
+ subagent_type="code-developer",
336
+ description=batch.taskSummary,
337
+ prompt=formatBatchPrompt({
338
+ tasks: batch.tasks,
339
+ context: buildRelevantContext(batch.tasks)
340
+ })
341
+ )
342
+
343
+ // Helper: Build relevant context for batch
344
+ // Context serves as REFERENCE ONLY - helps agent understand existing state
345
+ function buildRelevantContext(tasks) {
346
+ const sections = []
347
+
348
+ // 1. Previous work completion - what's already done (reference for continuity)
349
+ if (previousExecutionResults.length > 0) {
350
+ sections.push(`### Previous Work (Reference)
351
+ Use this to understand what's already completed. Avoid duplicating work.
352
+
353
+ ${previousExecutionResults.map(r => `**${r.tasksSummary}**
354
+ - Status: ${r.status}
355
+ - Outputs: ${r.keyOutputs || 'See git diff'}
356
+ ${r.notes ? `- Notes: ${r.notes}` : ''}`
357
+ ).join('\n\n')}`)
358
+ }
359
+
360
+ // 2. Related files - files that may need to be read/referenced
361
+ const relatedFiles = extractRelatedFiles(tasks)
362
+ if (relatedFiles.length > 0) {
363
+ sections.push(`### Related Files (Reference)
364
+ These files may contain patterns, types, or utilities relevant to your tasks:
365
+
366
+ ${relatedFiles.map(f => `- \`${f}\``).join('\n')}`)
367
+ }
368
+
369
+ // 3. Clarifications from user
370
+ if (clarificationContext) {
371
+ sections.push(`### User Clarifications
372
+ ${Object.entries(clarificationContext).map(([q, a]) => `- **${q}**: ${a}`).join('\n')}`)
373
+ }
374
+
375
+ // 4. Artifact files (for deeper context if needed)
376
+ if (executionContext?.session?.artifacts?.plan) {
377
+ sections.push(`### Artifacts
378
+ For detailed planning context, read: ${executionContext.session.artifacts.plan}`)
379
+ }
380
+
381
+ return sections.join('\n\n')
382
+ }
383
+
384
+ // Extract related files from task references
385
+ function extractRelatedFiles(tasks) {
386
+ const files = new Set()
387
+ tasks.forEach(task => {
388
+ // Add reference example files
389
+ if (task.reference?.files) {
390
+ task.reference.files.forEach(f => files.add(f))
391
+ }
392
+ })
393
+ return [...files]
394
+ }
395
+ ```
396
+
397
+ **Result Collection**: After completion, collect result following `executionResult` structure (see Data Structures section)
398
+
399
+ **Option B: CLI Execution (Codex)**
400
+
401
+ When to use:
402
+ - `executionMethod = "Codex"`
403
+ - `executionMethod = "Auto" AND complexity = "Medium" or "High"`
404
+
405
+ **Task Formatting Principle**: Same as Agent - each task is a self-contained checklist. No task numbering or position awareness.
406
+
407
+ Command format:
408
+ ```bash
409
+ // Format single task as compact checklist for CLI
410
+ function formatTaskForCLI(task) {
411
+ return `
412
+ ## ${task.title}
413
+ File: ${task.file}
414
+ Action: ${task.action}
415
+
416
+ What: ${task.description}
417
+
418
+ How:
419
+ ${task.implementation.map(step => `- ${step}`).join('\n')}
420
+
421
+ Reference: ${task.reference.pattern} (see ${task.reference.files.join(', ')})
422
+ Notes: ${task.reference.examples}
423
+
424
+ Done when:
425
+ ${task.acceptance.map(c => `- [ ] ${c}`).join('\n')}
426
+ `
427
+ }
428
+
429
+ // Build CLI prompt for batch
430
+ // Context provides REFERENCE information - not requirements to fulfill
431
+ function buildCLIPrompt(batch) {
432
+ const tasksSection = batch.tasks.map(t => formatTaskForCLI(t)).join('\n---\n')
433
+
434
+ let prompt = `${originalUserInput ? `## Goal\n${originalUserInput}\n\n` : ''}`
435
+ prompt += `## Tasks\n\n${tasksSection}\n`
436
+
437
+ // Context section - reference information only
438
+ const contextSections = []
439
+
440
+ // 1. Previous work - what's already completed
441
+ if (previousExecutionResults.length > 0) {
442
+ contextSections.push(`### Previous Work (Reference)
443
+ Already completed - avoid duplicating:
444
+ ${previousExecutionResults.map(r => `- ${r.tasksSummary}: ${r.status}${r.keyOutputs ? ` (${r.keyOutputs})` : ''}`).join('\n')}`)
445
+ }
446
+
447
+ // 2. Related files from task references
448
+ const relatedFiles = [...new Set(batch.tasks.flatMap(t => t.reference?.files || []))]
449
+ if (relatedFiles.length > 0) {
450
+ contextSections.push(`### Related Files (Reference)
451
+ Patterns and examples to follow:
452
+ ${relatedFiles.map(f => `- ${f}`).join('\n')}`)
453
+ }
454
+
455
+ // 3. User clarifications
456
+ if (clarificationContext) {
457
+ contextSections.push(`### Clarifications
458
+ ${Object.entries(clarificationContext).map(([q, a]) => `- ${q}: ${a}`).join('\n')}`)
459
+ }
460
+
461
+ // 4. Plan artifact for deeper context
462
+ if (executionContext?.session?.artifacts?.plan) {
463
+ contextSections.push(`### Artifacts
464
+ Detailed plan: ${executionContext.session.artifacts.plan}`)
465
+ }
466
+
467
+ if (contextSections.length > 0) {
468
+ prompt += `\n## Context\n${contextSections.join('\n\n')}\n`
469
+ }
470
+
471
+ prompt += `\nComplete each task according to its "Done when" checklist.`
472
+
473
+ return prompt
474
+ }
475
+
476
+ ccw cli -p "${buildCLIPrompt(batch)}" --tool codex --mode write
477
+ ```
478
+
479
+ **Execution with fixed IDs** (predictable ID pattern):
480
+ ```javascript
481
+ // Launch CLI in foreground (NOT background)
482
+ // Timeout based on complexity: Low=40min, Medium=60min, High=100min
483
+ const timeoutByComplexity = {
484
+ "Low": 2400000, // 40 minutes
485
+ "Medium": 3600000, // 60 minutes
486
+ "High": 6000000 // 100 minutes
487
+ }
488
+
489
+ // Generate fixed execution ID: ${sessionId}-${groupId}
490
+ // This enables predictable ID lookup without relying on resume context chains
491
+ const sessionId = executionContext?.session?.id || 'standalone'
492
+ const fixedExecutionId = `${sessionId}-${batch.groupId}` // e.g., "implement-auth-2025-12-13-P1"
493
+
494
+ // Check if resuming from previous failed execution
495
+ const previousCliId = batch.resumeFromCliId || null
496
+
497
+ // Build command with fixed ID (and optional resume for continuation)
498
+ const cli_command = previousCliId
499
+ ? `ccw cli -p "${buildCLIPrompt(batch)}" --tool codex --mode write --id ${fixedExecutionId} --resume ${previousCliId}`
500
+ : `ccw cli -p "${buildCLIPrompt(batch)}" --tool codex --mode write --id ${fixedExecutionId}`
501
+
502
+ bash_result = Bash(
503
+ command=cli_command,
504
+ timeout=timeoutByComplexity[planObject.complexity] || 3600000
505
+ )
506
+
507
+ // Execution ID is now predictable: ${fixedExecutionId}
508
+ // Can also extract from output: "ID: implement-auth-2025-12-13-P1"
509
+ const cliExecutionId = fixedExecutionId
510
+
511
+ // Update TodoWrite when execution completes
512
+ ```
513
+
514
+ **Resume on Failure** (with fixed ID):
515
+ ```javascript
516
+ // If execution failed or timed out, offer resume option
517
+ if (bash_result.status === 'failed' || bash_result.status === 'timeout') {
518
+ console.log(`
519
+ ⚠️ Execution incomplete. Resume available:
520
+ Fixed ID: ${fixedExecutionId}
521
+ Lookup: ccw cli detail ${fixedExecutionId}
522
+ Resume: ccw cli -p "Continue tasks" --resume ${fixedExecutionId} --tool codex --mode write --id ${fixedExecutionId}-retry
523
+ `)
524
+
525
+ // Store for potential retry in same session
526
+ batch.resumeFromCliId = fixedExecutionId
527
+ }
528
+ ```
529
+
530
+ **Result Collection**: After completion, analyze output and collect result following `executionResult` structure (include `cliExecutionId` for resume capability)
531
+
532
+ ### Step 4: Progress Tracking
533
+
534
+ Progress tracked at batch level (not individual task level). Icons: ⚡ (parallel, concurrent), → (sequential, one-by-one)
535
+
536
+ ### Step 5: Code Review (Optional)
537
+
538
+ **Skip Condition**: Only run if `codeReviewTool ≠ "Skip"`
539
+
540
+ **Review Focus**: Verify implementation against plan acceptance criteria
541
+ - Read plan.json for task acceptance criteria
542
+ - Check each acceptance criterion is fulfilled
543
+ - Validate code quality and identify issues
544
+ - Ensure alignment with planned approach
545
+
546
+ **Operations**:
547
+ - Agent Review: Current agent performs direct review
548
+ - Gemini Review: Execute gemini CLI with review prompt
549
+ - Custom tool: Execute specified CLI tool (qwen, codex, etc.)
550
+
551
+ **Unified Review Template** (All tools use same standard):
552
+
553
+ **Review Criteria**:
554
+ - **Acceptance Criteria**: Verify each criterion from plan.tasks[].acceptance
555
+ - **Code Quality**: Analyze quality, identify issues, suggest improvements
556
+ - **Plan Alignment**: Validate implementation matches planned approach
557
+
558
+ **Shared Prompt Template** (used by all CLI tools):
559
+ ```
560
+ PURPOSE: Code review for implemented changes against plan acceptance criteria
561
+ TASK: Verify plan acceptance criteria fulfillment • Analyze code quality • Identify issues • Suggest improvements • Validate plan adherence
562
+ MODE: analysis
563
+ CONTEXT: @**/* @{plan.json} [@{exploration.json}] | Memory: Review lite-execute changes against plan requirements
564
+ EXPECTED: Quality assessment with acceptance criteria verification, issue identification, and recommendations. Explicitly check each acceptance criterion from plan.json tasks.
565
+ RULES: $(cat ~/.claude/workflows/cli-templates/prompts/analysis/02-review-code-quality.txt) | Focus on plan acceptance criteria and plan adherence | analysis=READ-ONLY
566
+ ```
567
+
568
+ **Tool-Specific Execution** (Apply shared prompt template above):
569
+
570
+ ```bash
571
+ # Method 1: Agent Review (current agent)
572
+ # - Read plan.json: ${executionContext.session.artifacts.plan}
573
+ # - Apply unified review criteria (see Shared Prompt Template)
574
+ # - Report findings directly
575
+
576
+ # Method 2: Gemini Review (recommended)
577
+ ccw cli -p "[Shared Prompt Template with artifacts]" --tool gemini --mode analysis
578
+ # CONTEXT includes: @**/* @${plan.json} [@${exploration.json}]
579
+
580
+ # Method 3: Qwen Review (alternative)
581
+ ccw cli -p "[Shared Prompt Template with artifacts]" --tool qwen --mode analysis
582
+ # Same prompt as Gemini, different execution engine
583
+
584
+ # Method 4: Codex Review (autonomous)
585
+ ccw cli -p "[Verify plan acceptance criteria at ${plan.json}]" --tool codex --mode write
586
+ ```
587
+
588
+ **Multi-Round Review with Fixed IDs**:
589
+ ```javascript
590
+ // Generate fixed review ID
591
+ const reviewId = `${sessionId}-review`
592
+
593
+ // First review pass with fixed ID
594
+ const reviewResult = Bash(`ccw cli -p "[Review prompt]" --tool gemini --mode analysis --id ${reviewId}`)
595
+
596
+ // If issues found, continue review dialog with fixed ID chain
597
+ if (hasUnresolvedIssues(reviewResult)) {
598
+ // Resume with follow-up questions
599
+ Bash(`ccw cli -p "Clarify the security concerns you mentioned" --resume ${reviewId} --tool gemini --mode analysis --id ${reviewId}-followup`)
600
+ }
601
+ ```
602
+
603
+ **Implementation Note**: Replace `[Shared Prompt Template with artifacts]` placeholder with actual template content, substituting:
604
+ - `@{plan.json}` → `@${executionContext.session.artifacts.plan}`
605
+ - `[@{exploration.json}]` exploration files from artifacts (if exists)
606
+
607
+ ### Step 6: Update Development Index
608
+
609
+ **Trigger**: After all executions complete (regardless of code review)
610
+
611
+ **Skip Condition**: Skip if `.workflow/project.json` does not exist
612
+
613
+ **Operations**:
614
+ ```javascript
615
+ const projectJsonPath = '.workflow/project.json'
616
+ if (!fileExists(projectJsonPath)) return // Silent skip
617
+
618
+ const projectJson = JSON.parse(Read(projectJsonPath))
619
+
620
+ // Initialize if needed
621
+ if (!projectJson.development_index) {
622
+ projectJson.development_index = { feature: [], enhancement: [], bugfix: [], refactor: [], docs: [] }
623
+ }
624
+
625
+ // Detect category from keywords
626
+ function detectCategory(text) {
627
+ text = text.toLowerCase()
628
+ if (/\b(fix|bug|error|issue|crash)\b/.test(text)) return 'bugfix'
629
+ if (/\b(refactor|cleanup|reorganize)\b/.test(text)) return 'refactor'
630
+ if (/\b(doc|readme|comment)\b/.test(text)) return 'docs'
631
+ if (/\b(add|new|create|implement)\b/.test(text)) return 'feature'
632
+ return 'enhancement'
633
+ }
634
+
635
+ // Detect sub_feature from task file paths
636
+ function detectSubFeature(tasks) {
637
+ const dirs = tasks.map(t => t.file?.split('/').slice(-2, -1)[0]).filter(Boolean)
638
+ const counts = dirs.reduce((a, d) => { a[d] = (a[d] || 0) + 1; return a }, {})
639
+ return Object.entries(counts).sort((a, b) => b[1] - a[1])[0]?.[0] || 'general'
640
+ }
641
+
642
+ const category = detectCategory(`${planObject.summary} ${planObject.approach}`)
643
+ const entry = {
644
+ title: planObject.summary.slice(0, 60),
645
+ sub_feature: detectSubFeature(planObject.tasks),
646
+ date: new Date().toISOString().split('T')[0],
647
+ description: planObject.approach.slice(0, 100),
648
+ status: previousExecutionResults.every(r => r.status === 'completed') ? 'completed' : 'partial',
649
+ session_id: executionContext?.session?.id || null
650
+ }
651
+
652
+ projectJson.development_index[category].push(entry)
653
+ projectJson.statistics.last_updated = new Date().toISOString()
654
+ Write(projectJsonPath, JSON.stringify(projectJson, null, 2))
655
+
656
+ console.log(`✓ Development index: [${category}] ${entry.title}`)
657
+ ```
658
+
659
+ ## Best Practices
660
+
661
+ **Input Modes**: In-memory (lite-plan), prompt (standalone), file (JSON/text)
662
+ **Task Grouping**: Based on explicit depends_on only; independent tasks run in single parallel batch
663
+ **Execution**: All independent tasks launch concurrently via single Claude message with multiple tool calls
664
+
665
+ ## Error Handling
666
+
667
+ | Error | Cause | Resolution |
668
+ |-------|-------|------------|
669
+ | Missing executionContext | --in-memory without context | Error: "No execution context found. Only available when called by lite-plan." |
670
+ | File not found | File path doesn't exist | Error: "File not found: {path}. Check file path." |
671
+ | Empty file | File exists but no content | Error: "File is empty: {path}. Provide task description." |
672
+ | Invalid Enhanced Task JSON | JSON missing required fields | Warning: "Missing required fields. Treating as plain text." |
673
+ | Malformed JSON | JSON parsing fails | Treat as plain text (expected for non-JSON files) |
674
+ | Execution failure | Agent/Codex crashes | Display error, use fixed ID `${sessionId}-${groupId}` for resume: `ccw cli -p "Continue" --resume <fixed-id> --id <fixed-id>-retry` |
675
+ | Execution timeout | CLI exceeded timeout | Use fixed ID for resume with extended timeout |
676
+ | Codex unavailable | Codex not installed | Show installation instructions, offer Agent execution |
677
+ | Fixed ID not found | Custom ID lookup failed | Check `ccw cli history`, verify date directories |
678
+
679
+ ## Data Structures
680
+
681
+ ### executionContext (Input - Mode 1)
682
+
683
+ Passed from lite-plan via global variable:
684
+
685
+ ```javascript
686
+ {
687
+ planObject: {
688
+ summary: string,
689
+ approach: string,
690
+ tasks: [...],
691
+ estimated_time: string,
692
+ recommended_execution: string,
693
+ complexity: string
694
+ },
695
+ explorationsContext: {...} | null, // Multi-angle explorations
696
+ explorationAngles: string[], // List of exploration angles
697
+ explorationManifest: {...} | null, // Exploration manifest
698
+ clarificationContext: {...} | null,
699
+ executionMethod: "Agent" | "Codex" | "Auto",
700
+ codeReviewTool: "Skip" | "Gemini Review" | "Agent Review" | string,
701
+ originalUserInput: string,
702
+
703
+ // Session artifacts location (saved by lite-plan)
704
+ session: {
705
+ id: string, // Session identifier: {taskSlug}-{shortTimestamp}
706
+ folder: string, // Session folder path: .workflow/.lite-plan/{session-id}
707
+ artifacts: {
708
+ explorations: [{angle, path}], // exploration-{angle}.json paths
709
+ explorations_manifest: string, // explorations-manifest.json path
710
+ plan: string // plan.json path (always present)
711
+ }
712
+ }
713
+ }
714
+ ```
715
+
716
+ **Artifact Usage**:
717
+ - Artifact files contain detailed planning context
718
+ - Pass artifact paths to CLI tools and agents for enhanced context
719
+ - See execution options below for usage examples
720
+
721
+ ### executionResult (Output)
722
+
723
+ Collected after each execution call completes:
724
+
725
+ ```javascript
726
+ {
727
+ executionId: string, // e.g., "[Agent-1]", "[Codex-1]"
728
+ status: "completed" | "partial" | "failed",
729
+ tasksSummary: string, // Brief description of tasks handled
730
+ completionSummary: string, // What was completed
731
+ keyOutputs: string, // Files created/modified, key changes
732
+ notes: string, // Important context for next execution
733
+ fixedCliId: string | null // Fixed CLI execution ID (e.g., "implement-auth-2025-12-13-P1")
734
+ }
735
+ ```
736
+
737
+ Appended to `previousExecutionResults` array for context continuity in multi-execution scenarios.
738
+
739
+ **Fixed ID Pattern**: `${sessionId}-${groupId}` enables predictable lookup without auto-generated timestamps.
740
+
741
+ **Resume Usage**: If `status` is "partial" or "failed", use `fixedCliId` to resume:
742
+ ```bash
743
+ # Lookup previous execution
744
+ ccw cli detail ${fixedCliId}
745
+
746
+ # Resume with new fixed ID for retry
747
+ ccw cli -p "Continue from where we left off" --resume ${fixedCliId} --tool codex --mode write --id ${fixedCliId}-retry
748
+ ```