claude-code-workflow 7.2.5 → 7.2.6

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 (221) hide show
  1. package/.claude/commands/workflow/analyze-with-file.md +11 -10
  2. package/.claude/skills/ccw-help/command.json +3 -3
  3. package/.claude/skills/ccw-help/index/all-commands.json +3 -3
  4. package/.claude/skills/ccw-help/index/by-category.json +3 -3
  5. package/.claude/skills/ccw-help/index/by-use-case.json +3 -3
  6. package/.claude/skills/skill-iter-tune/SKILL.md +382 -0
  7. package/.claude/skills/skill-iter-tune/phases/01-setup.md +144 -0
  8. package/.claude/skills/skill-iter-tune/phases/02-execute.md +292 -0
  9. package/.claude/skills/skill-iter-tune/phases/03-evaluate.md +312 -0
  10. package/.claude/skills/skill-iter-tune/phases/04-improve.md +186 -0
  11. package/.claude/skills/skill-iter-tune/phases/05-report.md +166 -0
  12. package/.claude/skills/skill-iter-tune/specs/evaluation-criteria.md +63 -0
  13. package/.claude/skills/skill-iter-tune/templates/eval-prompt.md +134 -0
  14. package/.claude/skills/skill-iter-tune/templates/execute-prompt.md +97 -0
  15. package/.claude/skills/team-roadmap-dev/SKILL.md +1 -1
  16. package/.claude/skills/team-roadmap-dev/roles/coordinator/role.md +1 -1
  17. package/.claude/skills/team-roadmap-dev/specs/team-config.json +1 -1
  18. package/ccw/dist/commands/install.d.ts.map +1 -1
  19. package/ccw/dist/commands/install.js +11 -9
  20. package/ccw/dist/commands/install.js.map +1 -1
  21. package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -1
  22. package/ccw/dist/tools/cli-executor-core.js +0 -25
  23. package/ccw/dist/tools/cli-executor-core.js.map +1 -1
  24. package/ccw/dist/tools/cli-executor-state.d.ts.map +1 -1
  25. package/ccw/dist/tools/cli-executor-state.js +0 -31
  26. package/ccw/dist/tools/cli-executor-state.js.map +1 -1
  27. package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
  28. package/ccw/dist/tools/cli-history-store.js +1 -30
  29. package/ccw/dist/tools/cli-history-store.js.map +1 -1
  30. package/ccw/frontend/dist/assets/{AlertDialog-CFGtc76Y.js → AlertDialog-BMFUcfv_.js} +2 -2
  31. package/ccw/frontend/dist/assets/{AlertDialog-CFGtc76Y.js.map → AlertDialog-BMFUcfv_.js.map} +1 -1
  32. package/ccw/frontend/dist/assets/{AnalysisPage-Duxia_dG.js → AnalysisPage-Bxa333tD.js} +2 -2
  33. package/ccw/frontend/dist/assets/{AnalysisPage-Duxia_dG.js.map → AnalysisPage-Bxa333tD.js.map} +1 -1
  34. package/ccw/frontend/dist/assets/{ApiSettingsPage-CU9hesAE.js → ApiSettingsPage-BFVU-wcR.js} +2 -2
  35. package/ccw/frontend/dist/assets/{ApiSettingsPage-CU9hesAE.js.map → ApiSettingsPage-BFVU-wcR.js.map} +1 -1
  36. package/ccw/frontend/dist/assets/{CliModeToggle-DcdOFSvM.js → CliModeToggle-MDoFAJPL.js} +2 -2
  37. package/ccw/frontend/dist/assets/{CliModeToggle-DcdOFSvM.js.map → CliModeToggle-MDoFAJPL.js.map} +1 -1
  38. package/ccw/frontend/dist/assets/{CliSessionSharePage-oKN-GRIT.js → CliSessionSharePage-DkRmLiNN.js} +2 -2
  39. package/ccw/frontend/dist/assets/{CliSessionSharePage-oKN-GRIT.js.map → CliSessionSharePage-DkRmLiNN.js.map} +1 -1
  40. package/ccw/frontend/dist/assets/{CliViewerPage-_wUoHaY-.js → CliViewerPage-DN8jWddy.js} +2 -2
  41. package/ccw/frontend/dist/assets/{CliViewerPage-_wUoHaY-.js.map → CliViewerPage-DN8jWddy.js.map} +1 -1
  42. package/ccw/frontend/dist/assets/{CodexLensManagerPage-ClPNashJ.js → CodexLensManagerPage-Du_VAJtC.js} +2 -2
  43. package/ccw/frontend/dist/assets/{CodexLensManagerPage-ClPNashJ.js.map → CodexLensManagerPage-Du_VAJtC.js.map} +1 -1
  44. package/ccw/frontend/dist/assets/{Collapsible-Dladh9Eu.js → Collapsible-CF5bSyzt.js} +2 -2
  45. package/ccw/frontend/dist/assets/{Collapsible-Dladh9Eu.js.map → Collapsible-CF5bSyzt.js.map} +1 -1
  46. package/ccw/frontend/dist/assets/{CommandsManagerPage-B6DBb_Ew.js → CommandsManagerPage-Bm_P9I76.js} +2 -2
  47. package/ccw/frontend/dist/assets/{CommandsManagerPage-B6DBb_Ew.js.map → CommandsManagerPage-Bm_P9I76.js.map} +1 -1
  48. package/ccw/frontend/dist/assets/{DeepWikiPage-CDA3xm3R.js → DeepWikiPage-2YIlfWhz.js} +2 -2
  49. package/ccw/frontend/dist/assets/{DeepWikiPage-CDA3xm3R.js.map → DeepWikiPage-2YIlfWhz.js.map} +1 -1
  50. package/ccw/frontend/dist/assets/{EndpointsPage-Bu7iU0Wy.js → EndpointsPage-CMVNz5PY.js} +2 -2
  51. package/ccw/frontend/dist/assets/{EndpointsPage-Bu7iU0Wy.js.map → EndpointsPage-CMVNz5PY.js.map} +1 -1
  52. package/ccw/frontend/dist/assets/{ExplorerPage-xim2cboZ.js → ExplorerPage-C-KFz8YU.js} +2 -2
  53. package/ccw/frontend/dist/assets/{ExplorerPage-xim2cboZ.js.map → ExplorerPage-C-KFz8YU.js.map} +1 -1
  54. package/ccw/frontend/dist/assets/{FixSessionPage-BTFYoFQF.js → FixSessionPage-CdKND69l.js} +2 -2
  55. package/ccw/frontend/dist/assets/{FixSessionPage-BTFYoFQF.js.map → FixSessionPage-CdKND69l.js.map} +1 -1
  56. package/ccw/frontend/dist/assets/{FloatingFileBrowser-B30ANzTJ.js → FloatingFileBrowser-Bf4iqOSd.js} +2 -2
  57. package/ccw/frontend/dist/assets/{FloatingFileBrowser-B30ANzTJ.js.map → FloatingFileBrowser-Bf4iqOSd.js.map} +1 -1
  58. package/ccw/frontend/dist/assets/{FloatingPanel-Ds84B7Ob.js → FloatingPanel-CJbvABPb.js} +2 -2
  59. package/ccw/frontend/dist/assets/{FloatingPanel-Ds84B7Ob.js.map → FloatingPanel-CJbvABPb.js.map} +1 -1
  60. package/ccw/frontend/dist/assets/{GraphExplorerPage-DJ4YnFOQ.js → GraphExplorerPage-DPoozRTR.js} +2 -2
  61. package/ccw/frontend/dist/assets/{GraphExplorerPage-DJ4YnFOQ.js.map → GraphExplorerPage-DPoozRTR.js.map} +1 -1
  62. package/ccw/frontend/dist/assets/{HistoryPage-rzLVsw11.js → HistoryPage-DOMa9gJX.js} +2 -2
  63. package/ccw/frontend/dist/assets/{HistoryPage-rzLVsw11.js.map → HistoryPage-DOMa9gJX.js.map} +1 -1
  64. package/ccw/frontend/dist/assets/{HookManagerPage-DizO_dCP.js → HookManagerPage-Cfn2UEyy.js} +2 -2
  65. package/ccw/frontend/dist/assets/{HookManagerPage-DizO_dCP.js.map → HookManagerPage-Cfn2UEyy.js.map} +1 -1
  66. package/ccw/frontend/dist/assets/{InstallationsPage-BFamuE4y.js → InstallationsPage-qngOxLvm.js} +2 -2
  67. package/ccw/frontend/dist/assets/{InstallationsPage-BFamuE4y.js.map → InstallationsPage-qngOxLvm.js.map} +1 -1
  68. package/ccw/frontend/dist/assets/{IssueHubPage-DHwQWuUc.js → IssueHubPage-Cvf7tH8p.js} +2 -2
  69. package/ccw/frontend/dist/assets/{IssueHubPage-DHwQWuUc.js.map → IssueHubPage-Cvf7tH8p.js.map} +1 -1
  70. package/ccw/frontend/dist/assets/{LiteTasksPage-DMDkG7pi.js → LiteTasksPage-D20smVCY.js} +2 -2
  71. package/ccw/frontend/dist/assets/{LiteTasksPage-DMDkG7pi.js.map → LiteTasksPage-D20smVCY.js.map} +1 -1
  72. package/ccw/frontend/dist/assets/{McpManagerPage-CS2v_1OG.js → McpManagerPage-Bld27yu4.js} +2 -2
  73. package/ccw/frontend/dist/assets/{McpManagerPage-CS2v_1OG.js.map → McpManagerPage-Bld27yu4.js.map} +1 -1
  74. package/ccw/frontend/dist/assets/{MemoryPage-DhYPE-VC.js → MemoryPage-DmknNdBh.js} +2 -2
  75. package/ccw/frontend/dist/assets/{MemoryPage-DhYPE-VC.js.map → MemoryPage-DmknNdBh.js.map} +1 -1
  76. package/ccw/frontend/dist/assets/{NotFoundPage-BLmC7-ot.js → NotFoundPage-DdwPN1xU.js} +2 -2
  77. package/ccw/frontend/dist/assets/{NotFoundPage-BLmC7-ot.js.map → NotFoundPage-DdwPN1xU.js.map} +1 -1
  78. package/ccw/frontend/dist/assets/{OrchestratorPage-1jzSUFZW.js → OrchestratorPage-CgDdmvBg.js} +2 -2
  79. package/ccw/frontend/dist/assets/{OrchestratorPage-1jzSUFZW.js.map → OrchestratorPage-CgDdmvBg.js.map} +1 -1
  80. package/ccw/frontend/dist/assets/{ProjectOverviewPage-gWuAj-Cn.js → ProjectOverviewPage-9Ze9quxh.js} +2 -2
  81. package/ccw/frontend/dist/assets/{ProjectOverviewPage-gWuAj-Cn.js.map → ProjectOverviewPage-9Ze9quxh.js.map} +1 -1
  82. package/ccw/frontend/dist/assets/{PromptHistoryPage-q7ySVNHM.js → PromptHistoryPage-YRkBppOx.js} +2 -2
  83. package/ccw/frontend/dist/assets/{PromptHistoryPage-q7ySVNHM.js.map → PromptHistoryPage-YRkBppOx.js.map} +1 -1
  84. package/ccw/frontend/dist/assets/{ReviewSessionPage-DX1uT_nH.js → ReviewSessionPage-DSaeHw83.js} +2 -2
  85. package/ccw/frontend/dist/assets/{ReviewSessionPage-DX1uT_nH.js.map → ReviewSessionPage-DSaeHw83.js.map} +1 -1
  86. package/ccw/frontend/dist/assets/{RulesManagerPage-Bg6T5W-W.js → RulesManagerPage-BpGwS_jB.js} +2 -2
  87. package/ccw/frontend/dist/assets/{RulesManagerPage-Bg6T5W-W.js.map → RulesManagerPage-BpGwS_jB.js.map} +1 -1
  88. package/ccw/frontend/dist/assets/{SessionDetailPage-C_ig6JSh.js → SessionDetailPage-B_YHME7k.js} +2 -2
  89. package/ccw/frontend/dist/assets/{SessionDetailPage-C_ig6JSh.js.map → SessionDetailPage-B_YHME7k.js.map} +1 -1
  90. package/ccw/frontend/dist/assets/{SessionsPage-BENFqFDn.js → SessionsPage-bW6kEEib.js} +2 -2
  91. package/ccw/frontend/dist/assets/{SessionsPage-BENFqFDn.js.map → SessionsPage-bW6kEEib.js.map} +1 -1
  92. package/ccw/frontend/dist/assets/{SettingsPage-2c-oTxfz.js → SettingsPage-CSwUd2Bw.js} +4 -4
  93. package/ccw/frontend/dist/assets/{SettingsPage-2c-oTxfz.js.map → SettingsPage-CSwUd2Bw.js.map} +1 -1
  94. package/ccw/frontend/dist/assets/{SkillsManagerPage-GLo6DXnt.js → SkillsManagerPage-CyqKvFUi.js} +2 -2
  95. package/ccw/frontend/dist/assets/{SkillsManagerPage-GLo6DXnt.js.map → SkillsManagerPage-CyqKvFUi.js.map} +1 -1
  96. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CRqMV90p.js → SpecsSettingsPage-DHqQNW_y.js} +2 -2
  97. package/ccw/frontend/dist/assets/{SpecsSettingsPage-CRqMV90p.js.map → SpecsSettingsPage-DHqQNW_y.js.map} +1 -1
  98. package/ccw/frontend/dist/assets/{Switch-vlMavMRD.js → Switch-s_-xzEWF.js} +2 -2
  99. package/ccw/frontend/dist/assets/{Switch-vlMavMRD.js.map → Switch-s_-xzEWF.js.map} +1 -1
  100. package/ccw/frontend/dist/assets/{TabsNavigation-CLKz7pWP.js → TabsNavigation-CU50UxOb.js} +2 -2
  101. package/ccw/frontend/dist/assets/{TabsNavigation-CLKz7pWP.js.map → TabsNavigation-CU50UxOb.js.map} +1 -1
  102. package/ccw/frontend/dist/assets/{TaskDrawer-BAFvNqF8.js → TaskDrawer-128XISsA.js} +2 -2
  103. package/ccw/frontend/dist/assets/{TaskDrawer-BAFvNqF8.js.map → TaskDrawer-128XISsA.js.map} +1 -1
  104. package/ccw/frontend/dist/assets/{TeamPage-C2IsDkAv.js → TeamPage-Bg_KII8B.js} +2 -2
  105. package/ccw/frontend/dist/assets/{TeamPage-C2IsDkAv.js.map → TeamPage-Bg_KII8B.js.map} +1 -1
  106. package/ccw/frontend/dist/assets/{TerminalDashboardPage-mgS-iKDm.js → TerminalDashboardPage-CQ9K2zwB.js} +2 -2
  107. package/ccw/frontend/dist/assets/{TerminalDashboardPage-mgS-iKDm.js.map → TerminalDashboardPage-CQ9K2zwB.js.map} +1 -1
  108. package/ccw/frontend/dist/assets/{archive-CxxK_YIp.js → archive--nR2vYUk.js} +2 -2
  109. package/ccw/frontend/dist/assets/{archive-CxxK_YIp.js.map → archive--nR2vYUk.js.map} +1 -1
  110. package/ccw/frontend/dist/assets/{archive-restore-DZsrBaeG.js → archive-restore-CZ7graO0.js} +2 -2
  111. package/ccw/frontend/dist/assets/{archive-restore-DZsrBaeG.js.map → archive-restore-CZ7graO0.js.map} +1 -1
  112. package/ccw/frontend/dist/assets/{arrow-right-BotRHOhr.js → arrow-right-ChKhpVhq.js} +2 -2
  113. package/ccw/frontend/dist/assets/{arrow-right-BotRHOhr.js.map → arrow-right-ChKhpVhq.js.map} +1 -1
  114. package/ccw/frontend/dist/assets/{bookmark-plus-C0MWZ3S9.js → bookmark-plus-X-JcgObI.js} +2 -2
  115. package/ccw/frontend/dist/assets/{bookmark-plus-C0MWZ3S9.js.map → bookmark-plus-X-JcgObI.js.map} +1 -1
  116. package/ccw/frontend/dist/assets/{bot-BcHFJXqD.js → bot-C3uo7Fkg.js} +2 -2
  117. package/ccw/frontend/dist/assets/{bot-BcHFJXqD.js.map → bot-C3uo7Fkg.js.map} +1 -1
  118. package/ccw/frontend/dist/assets/{braces-D_p0IZhP.js → braces-5wZupwrA.js} +2 -2
  119. package/ccw/frontend/dist/assets/{braces-D_p0IZhP.js.map → braces-5wZupwrA.js.map} +1 -1
  120. package/ccw/frontend/dist/assets/{circle-stop-Bt634NUt.js → circle-stop-DZ5hLKjQ.js} +2 -2
  121. package/ccw/frontend/dist/assets/{circle-stop-Bt634NUt.js.map → circle-stop-DZ5hLKjQ.js.map} +1 -1
  122. package/ccw/frontend/dist/assets/{cpu-DjeGKtvT.js → cpu-Dc8IS79i.js} +2 -2
  123. package/ccw/frontend/dist/assets/{cpu-DjeGKtvT.js.map → cpu-Dc8IS79i.js.map} +1 -1
  124. package/ccw/frontend/dist/assets/{ellipsis-vertical-BmNPuatq.js → ellipsis-vertical-B4pqbrsR.js} +2 -2
  125. package/ccw/frontend/dist/assets/{ellipsis-vertical-BmNPuatq.js.map → ellipsis-vertical-B4pqbrsR.js.map} +1 -1
  126. package/ccw/frontend/dist/assets/{eye-B0-xkP67.js → eye-BwniwXnu.js} +2 -2
  127. package/ccw/frontend/dist/assets/{eye-B0-xkP67.js.map → eye-BwniwXnu.js.map} +1 -1
  128. package/ccw/frontend/dist/assets/{eye-off-Bz0Fkli3.js → eye-off-BWntEdln.js} +2 -2
  129. package/ccw/frontend/dist/assets/{eye-off-Bz0Fkli3.js.map → eye-off-BWntEdln.js.map} +1 -1
  130. package/ccw/frontend/dist/assets/{file-json-PUAS4vBm.js → file-json-BDcmkaVn.js} +2 -2
  131. package/ccw/frontend/dist/assets/{file-json-PUAS4vBm.js.map → file-json-BDcmkaVn.js.map} +1 -1
  132. package/ccw/frontend/dist/assets/{file-text-BMeW5-Sb.js → file-text-DsqI3R_g.js} +2 -2
  133. package/ccw/frontend/dist/assets/{file-text-BMeW5-Sb.js.map → file-text-DsqI3R_g.js.map} +1 -1
  134. package/ccw/frontend/dist/assets/{filter-B4wgMvwi.js → filter-CQMcD8RT.js} +2 -2
  135. package/ccw/frontend/dist/assets/{filter-B4wgMvwi.js.map → filter-CQMcD8RT.js.map} +1 -1
  136. package/ccw/frontend/dist/assets/{folder-BSHjjjND.js → folder-jX77-MUi.js} +2 -2
  137. package/ccw/frontend/dist/assets/{folder-BSHjjjND.js.map → folder-jX77-MUi.js.map} +1 -1
  138. package/ccw/frontend/dist/assets/{gauge-7VRNEl22.js → gauge-yQjRXM3o.js} +2 -2
  139. package/ccw/frontend/dist/assets/{gauge-7VRNEl22.js.map → gauge-yQjRXM3o.js.map} +1 -1
  140. package/ccw/frontend/dist/assets/{globe-PvVHBjbW.js → globe-BecpCHYI.js} +2 -2
  141. package/ccw/frontend/dist/assets/{globe-PvVHBjbW.js.map → globe-BecpCHYI.js.map} +1 -1
  142. package/ccw/frontend/dist/assets/{grid-3x3-CsmmDlhN.js → grid-3x3-BrvzDFqU.js} +2 -2
  143. package/ccw/frontend/dist/assets/{grid-3x3-CsmmDlhN.js.map → grid-3x3-BrvzDFqU.js.map} +1 -1
  144. package/ccw/frontend/dist/assets/{hard-drive-D88EZgTY.js → hard-drive-B0cynodE.js} +2 -2
  145. package/ccw/frontend/dist/assets/{hard-drive-D88EZgTY.js.map → hard-drive-B0cynodE.js.map} +1 -1
  146. package/ccw/frontend/dist/assets/{hash-CZpNRWqt.js → hash-xOrTLxBg.js} +2 -2
  147. package/ccw/frontend/dist/assets/{hash-CZpNRWqt.js.map → hash-xOrTLxBg.js.map} +1 -1
  148. package/ccw/frontend/dist/assets/{history-DxN1mopa.js → history-BzXwj8RL.js} +2 -2
  149. package/ccw/frontend/dist/assets/{history-DxN1mopa.js.map → history-BzXwj8RL.js.map} +1 -1
  150. package/ccw/frontend/dist/assets/{index-C04xeBGC.js → index-B9aFbBPN.js} +2 -2
  151. package/ccw/frontend/dist/assets/{index-C04xeBGC.js.map → index-B9aFbBPN.js.map} +1 -1
  152. package/ccw/frontend/dist/assets/{index-BzGEkwIf.js → index-BNZGm_Ur.js} +2 -2
  153. package/ccw/frontend/dist/assets/{index-BzGEkwIf.js.map → index-BNZGm_Ur.js.map} +1 -1
  154. package/ccw/frontend/dist/assets/{index-bSgtHHOF.js → index-D3uMibtZ.js} +4 -4
  155. package/ccw/frontend/dist/assets/{index-bSgtHHOF.js.map → index-D3uMibtZ.js.map} +1 -1
  156. package/ccw/frontend/dist/assets/{index-BUiq2PUK.js → index-DflI9CwB.js} +2 -2
  157. package/ccw/frontend/dist/assets/{index-BUiq2PUK.js.map → index-DflI9CwB.js.map} +1 -1
  158. package/ccw/frontend/dist/assets/{index-CIoWWkDn.js → index-Dy0tUf1F.js} +2 -2
  159. package/ccw/frontend/dist/assets/{index-CIoWWkDn.js.map → index-Dy0tUf1F.js.map} +1 -1
  160. package/ccw/frontend/dist/assets/{index-DlcRFzFq.js → index-osmL8__2.js} +2 -2
  161. package/ccw/frontend/dist/assets/{index-DlcRFzFq.js.map → index-osmL8__2.js.map} +1 -1
  162. package/ccw/frontend/dist/assets/{layout-grid-BZqfuNG0.js → layout-grid-CWFZqQWu.js} +2 -2
  163. package/ccw/frontend/dist/assets/{layout-grid-BZqfuNG0.js.map → layout-grid-CWFZqQWu.js.map} +1 -1
  164. package/ccw/frontend/dist/assets/{lightbulb-DqJ4OHRL.js → lightbulb-BRLgsWe3.js} +2 -2
  165. package/ccw/frontend/dist/assets/{lightbulb-DqJ4OHRL.js.map → lightbulb-BRLgsWe3.js.map} +1 -1
  166. package/ccw/frontend/dist/assets/{link-2-Bq7fLkC9.js → link-2-BpKdq14u.js} +2 -2
  167. package/ccw/frontend/dist/assets/{link-2-Bq7fLkC9.js.map → link-2-BpKdq14u.js.map} +1 -1
  168. package/ccw/frontend/dist/assets/{link-dSLYjCIG.js → link-BxUCReDi.js} +2 -2
  169. package/ccw/frontend/dist/assets/{link-dSLYjCIG.js.map → link-BxUCReDi.js.map} +1 -1
  170. package/ccw/frontend/dist/assets/{list-Bm_CnR56.js → list-Ce9EsAg8.js} +2 -2
  171. package/ccw/frontend/dist/assets/{list-Bm_CnR56.js.map → list-Ce9EsAg8.js.map} +1 -1
  172. package/ccw/frontend/dist/assets/{map-pin-B5TELa0z.js → map-pin-CxzQV1hS.js} +2 -2
  173. package/ccw/frontend/dist/assets/{map-pin-B5TELa0z.js.map → map-pin-CxzQV1hS.js.map} +1 -1
  174. package/ccw/frontend/dist/assets/{messages-square-B9sWItdK.js → messages-square-Dyodk79r.js} +2 -2
  175. package/ccw/frontend/dist/assets/{messages-square-B9sWItdK.js.map → messages-square-Dyodk79r.js.map} +1 -1
  176. package/ccw/frontend/dist/assets/{minimize-2-Z1MYs_Tp.js → minimize-2-s0009UK9.js} +2 -2
  177. package/ccw/frontend/dist/assets/{minimize-2-Z1MYs_Tp.js.map → minimize-2-s0009UK9.js.map} +1 -1
  178. package/ccw/frontend/dist/assets/{package-EEv4N_Qk.js → package-C69biuJL.js} +2 -2
  179. package/ccw/frontend/dist/assets/{package-EEv4N_Qk.js.map → package-C69biuJL.js.map} +1 -1
  180. package/ccw/frontend/dist/assets/{plug-CEkvvYXh.js → plug-DERl-wQd.js} +2 -2
  181. package/ccw/frontend/dist/assets/{plug-CEkvvYXh.js.map → plug-DERl-wQd.js.map} +1 -1
  182. package/ccw/frontend/dist/assets/{power-B6Rod0u_.js → power-CdvaDgTh.js} +2 -2
  183. package/ccw/frontend/dist/assets/{power-B6Rod0u_.js.map → power-CdvaDgTh.js.map} +1 -1
  184. package/ccw/frontend/dist/assets/{save-DULWrB2g.js → save-C_Uot2e4.js} +2 -2
  185. package/ccw/frontend/dist/assets/{save-DULWrB2g.js.map → save-C_Uot2e4.js.map} +1 -1
  186. package/ccw/frontend/dist/assets/{send-C4z974WG.js → send-R1XtAXeP.js} +2 -2
  187. package/ccw/frontend/dist/assets/{send-C4z974WG.js.map → send-R1XtAXeP.js.map} +1 -1
  188. package/ccw/frontend/dist/assets/{square-check-big-CqEEw-V0.js → square-check-big-Cyqi4INj.js} +2 -2
  189. package/ccw/frontend/dist/assets/{square-check-big-CqEEw-V0.js.map → square-check-big-Cyqi4INj.js.map} +1 -1
  190. package/ccw/frontend/dist/assets/{square-pen-D-4BrMtQ.js → square-pen-BmLNjUUw.js} +2 -2
  191. package/ccw/frontend/dist/assets/{square-pen-D-4BrMtQ.js.map → square-pen-BmLNjUUw.js.map} +1 -1
  192. package/ccw/frontend/dist/assets/{star-CDVVM69o.js → star-CakKtIYu.js} +2 -2
  193. package/ccw/frontend/dist/assets/{star-CDVVM69o.js.map → star-CakKtIYu.js.map} +1 -1
  194. package/ccw/frontend/dist/assets/{style-CumJ7XC8.js → style-DdNmehyz.js} +2 -2
  195. package/ccw/frontend/dist/assets/{style-CumJ7XC8.js.map → style-DdNmehyz.js.map} +1 -1
  196. package/ccw/frontend/dist/assets/{target-Dr9SuV1Y.js → target-CUvfwM3S.js} +2 -2
  197. package/ccw/frontend/dist/assets/{target-Dr9SuV1Y.js.map → target-CUvfwM3S.js.map} +1 -1
  198. package/ccw/frontend/dist/assets/{test-tube-DzDRKk8F.js → test-tube-BVwrOGiZ.js} +2 -2
  199. package/ccw/frontend/dist/assets/{test-tube-DzDRKk8F.js.map → test-tube-BVwrOGiZ.js.map} +1 -1
  200. package/ccw/frontend/dist/assets/{upload-CihSmIM7.js → upload-CY1NwcDw.js} +2 -2
  201. package/ccw/frontend/dist/assets/{upload-CihSmIM7.js.map → upload-CY1NwcDw.js.map} +1 -1
  202. package/ccw/frontend/dist/assets/{useApiSettings-CevxWX2z.js → useApiSettings-9JuzUfPE.js} +2 -2
  203. package/ccw/frontend/dist/assets/{useApiSettings-CevxWX2z.js.map → useApiSettings-9JuzUfPE.js.map} +1 -1
  204. package/ccw/frontend/dist/assets/{useCli-jVaF89uU.js → useCli-Bb7Zo-OI.js} +2 -2
  205. package/ccw/frontend/dist/assets/{useCli-jVaF89uU.js.map → useCli-Bb7Zo-OI.js.map} +1 -1
  206. package/ccw/frontend/dist/assets/{useCommands-D4uGmNpF.js → useCommands-BUu-hUYI.js} +2 -2
  207. package/ccw/frontend/dist/assets/{useCommands-D4uGmNpF.js.map → useCommands-BUu-hUYI.js.map} +1 -1
  208. package/ccw/frontend/dist/assets/{useDebounce-BEYmuZYP.js → useDebounce-CptXgLBn.js} +2 -2
  209. package/ccw/frontend/dist/assets/{useDebounce-BEYmuZYP.js.map → useDebounce-CptXgLBn.js.map} +1 -1
  210. package/ccw/frontend/dist/assets/{useFileExplorer-DEv0DVy7.js → useFileExplorer-B7dN8VT1.js} +2 -2
  211. package/ccw/frontend/dist/assets/{useFileExplorer-DEv0DVy7.js.map → useFileExplorer-B7dN8VT1.js.map} +1 -1
  212. package/ccw/frontend/dist/assets/{useLocale-BRJreqvl.js → useLocale-D6USNXOr.js} +2 -2
  213. package/ccw/frontend/dist/assets/{useLocale-BRJreqvl.js.map → useLocale-D6USNXOr.js.map} +1 -1
  214. package/ccw/frontend/dist/assets/{useSkills-lnfeXe9l.js → useSkills-r8yfiQ-u.js} +3 -3
  215. package/ccw/frontend/dist/assets/{useSkills-lnfeXe9l.js.map → useSkills-r8yfiQ-u.js.map} +1 -1
  216. package/ccw/frontend/dist/assets/{useSystemSettings-PlxVdbXI.js → useSystemSettings-BVWDQLMy.js} +2 -2
  217. package/ccw/frontend/dist/assets/{useSystemSettings-PlxVdbXI.js.map → useSystemSettings-BVWDQLMy.js.map} +1 -1
  218. package/ccw/frontend/dist/assets/{wand-sparkles-BbqUxeEg.js → wand-sparkles-Zdaej5bR.js} +2 -2
  219. package/ccw/frontend/dist/assets/{wand-sparkles-BbqUxeEg.js.map → wand-sparkles-Zdaej5bR.js.map} +1 -1
  220. package/ccw/frontend/dist/index.html +1 -1
  221. package/package.json +1 -1
@@ -332,21 +332,22 @@ CONSTRAINTS: Focus on ${dimensions.join(', ')}
332
332
 
333
333
  5. **Interactive Recommendation Review** (skip in auto mode):
334
334
 
335
- Walk through each recommendation one-by-one for user confirmation:
335
+ Present all recommendations, then batch-confirm via **single AskUserQuestion call** (up to 4 questions):
336
336
 
337
337
  ```
338
- For each recommendation (ordered by priority high→medium→low):
339
- 1. Present: action, rationale, priority, steps[] (numbered sub-steps)
340
- 2. AskUserQuestion (single-select, header: "建议#N"):
338
+ 1. Display all recommendations with numbering (action, rationale, priority, steps[])
339
+ 2. Single AskUserQuestion call one question per recommendation (max 4, ordered by priority high→medium→low):
340
+ Each question (single-select, header: "建议#N"):
341
341
  - **确认** (label: "确认", desc: "Accept as-is") → review_status = "accepted"
342
- - **修改** (label: "修改", desc: "Adjust scope/steps") → record modification → review_status = "modified"
343
- - **删除** (label: "删除", desc: "Not needed") → record reason → review_status = "rejected"
344
- - **跳过审议** (label: "跳过审议", desc: "Accept all remaining") break loop
345
- 3. Record review decision to discussion.md Decision Log
346
- 4. Update conclusions.json recommendation.review_status
342
+ - **修改** (label: "修改", desc: "Adjust scope/steps") → review_status = "modified"
343
+ - **删除** (label: "删除", desc: "Not needed") → review_status = "rejected"
344
+ 3. If >4 recommendations: batch in groups of 4 with additional AskUserQuestion calls
345
+ 4. For "修改" selections: follow up to capture modification details
346
+ 5. Record all review decisions to discussion.md Decision Log
347
+ 6. Update conclusions.json recommendation.review_status for each
347
348
  ```
348
349
 
349
- **After review loop**: Display summary of reviewed recommendations:
350
+ **After review**: Display summary of reviewed recommendations:
350
351
  - Accepted: N items | Modified: N items | Rejected: N items
351
352
  - Only accepted/modified recommendations proceed to next step
352
353
 
@@ -289,7 +289,7 @@
289
289
  },
290
290
  {
291
291
  "name": "init-guidelines",
292
- "command": "/workflow:init-guidelines",
292
+ "command": "/workflow:spec:setup -guidelines",
293
293
  "description": "Interactive wizard to fill specs/*.md based on project analysis",
294
294
  "arguments": "[--reset]",
295
295
  "category": "workflow",
@@ -300,7 +300,7 @@
300
300
  },
301
301
  {
302
302
  "name": "init-specs",
303
- "command": "/workflow:init-specs",
303
+ "command": "/workflow:spec:setup -specs",
304
304
  "description": "Interactive wizard to create individual specs or personal constraints with scope selection",
305
305
  "arguments": "[--scope <global|project>] [--dimension <specs|personal>] [--category <general|exploration|planning|execution>]",
306
306
  "category": "workflow",
@@ -311,7 +311,7 @@
311
311
  },
312
312
  {
313
313
  "name": "init",
314
- "command": "/workflow:init",
314
+ "command": "/workflow:spec:setup ",
315
315
  "description": "Initialize project-level state with intelligent project analysis using cli-explore-agent",
316
316
  "arguments": "[--regenerate] [--skip-specs]",
317
317
  "category": "workflow",
@@ -276,7 +276,7 @@
276
276
  },
277
277
  {
278
278
  "name": "init-guidelines",
279
- "command": "/workflow:init-guidelines",
279
+ "command": "/workflow:spec:setup -guidelines",
280
280
  "description": "Interactive wizard to fill specs/*.md based on project analysis",
281
281
  "arguments": "[--reset]",
282
282
  "category": "workflow",
@@ -287,7 +287,7 @@
287
287
  },
288
288
  {
289
289
  "name": "init-specs",
290
- "command": "/workflow:init-specs",
290
+ "command": "/workflow:spec:setup -specs",
291
291
  "description": "Interactive wizard to create individual specs or personal constraints with scope selection",
292
292
  "arguments": "[--scope <global|project>] [--dimension <specs|personal>] [--category <general|exploration|planning|execution>]",
293
293
  "category": "workflow",
@@ -298,7 +298,7 @@
298
298
  },
299
299
  {
300
300
  "name": "init",
301
- "command": "/workflow:init",
301
+ "command": "/workflow:spec:setup ",
302
302
  "description": "Initialize project-level state with intelligent project analysis using cli-explore-agent",
303
303
  "arguments": "[--regenerate] [--skip-specs]",
304
304
  "category": "workflow",
@@ -298,7 +298,7 @@
298
298
  },
299
299
  {
300
300
  "name": "init-guidelines",
301
- "command": "/workflow:init-guidelines",
301
+ "command": "/workflow:spec:setup -guidelines",
302
302
  "description": "Interactive wizard to fill specs/*.md based on project analysis",
303
303
  "arguments": "[--reset]",
304
304
  "category": "workflow",
@@ -309,7 +309,7 @@
309
309
  },
310
310
  {
311
311
  "name": "init-specs",
312
- "command": "/workflow:init-specs",
312
+ "command": "/workflow:spec:setup -specs",
313
313
  "description": "Interactive wizard to create individual specs or personal constraints with scope selection",
314
314
  "arguments": "[--scope <global|project>] [--dimension <specs|personal>] [--category <general|exploration|planning|execution>]",
315
315
  "category": "workflow",
@@ -320,7 +320,7 @@
320
320
  },
321
321
  {
322
322
  "name": "init",
323
- "command": "/workflow:init",
323
+ "command": "/workflow:spec:setup ",
324
324
  "description": "Initialize project-level state with intelligent project analysis using cli-explore-agent",
325
325
  "arguments": "[--regenerate] [--skip-specs]",
326
326
  "category": "workflow",
@@ -145,7 +145,7 @@
145
145
  },
146
146
  {
147
147
  "name": "init-guidelines",
148
- "command": "/workflow:init-guidelines",
148
+ "command": "/workflow:spec:setup -guidelines",
149
149
  "description": "Interactive wizard to fill specs/*.md based on project analysis",
150
150
  "arguments": "[--reset]",
151
151
  "category": "workflow",
@@ -156,7 +156,7 @@
156
156
  },
157
157
  {
158
158
  "name": "init-specs",
159
- "command": "/workflow:init-specs",
159
+ "command": "/workflow:spec:setup -specs",
160
160
  "description": "Interactive wizard to create individual specs or personal constraints with scope selection",
161
161
  "arguments": "[--scope <global|project>] [--dimension <specs|personal>] [--category <general|exploration|planning|execution>]",
162
162
  "category": "workflow",
@@ -167,7 +167,7 @@
167
167
  },
168
168
  {
169
169
  "name": "init",
170
- "command": "/workflow:init",
170
+ "command": "/workflow:spec:setup ",
171
171
  "description": "Initialize project-level state with intelligent project analysis using cli-explore-agent",
172
172
  "arguments": "[--regenerate] [--skip-specs]",
173
173
  "category": "workflow",
@@ -0,0 +1,382 @@
1
+ ---
2
+ name: skill-iter-tune
3
+ description: Iterative skill tuning via execute-evaluate-improve feedback loop. Uses ccw cli Claude to execute skill, Gemini to evaluate quality, and Agent to apply improvements. Iterates until quality threshold or max iterations. Triggers on "skill iter tune", "iterative skill tuning", "tune skill".
4
+ allowed-tools: Skill, Agent, AskUserQuestion, TaskCreate, TaskUpdate, TaskList, Read, Write, Edit, Bash, Glob, Grep
5
+ ---
6
+
7
+ # Skill Iter Tune
8
+
9
+ Iterative skill refinement through execute-evaluate-improve feedback loops. Each iteration runs the skill via Claude, evaluates output via Gemini, and applies improvements via Agent.
10
+
11
+ ## Architecture Overview
12
+
13
+ ```
14
+ ┌──────────────────────────────────────────────────────────────────────────┐
15
+ │ Skill Iter Tune Orchestrator (SKILL.md) │
16
+ │ → Parse input → Setup workspace → Iteration Loop → Final Report │
17
+ └────────────────────────────┬─────────────────────────────────────────────┘
18
+
19
+ ┌───────────────────┼───────────────────────────────────┐
20
+ ↓ ↓ ↓
21
+ ┌──────────┐ ┌─────────────────────────────┐ ┌──────────┐
22
+ │ Phase 1 │ │ Iteration Loop (2→3→4) │ │ Phase 5 │
23
+ │ Setup │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ Report │
24
+ │ │─────→│ │ P2 │→ │ P3 │→ │ P4 │ │────→│ │
25
+ │ Backup + │ │ │Exec │ │Eval │ │Impr │ │ │ History │
26
+ │ Init │ │ └─────┘ └─────┘ └─────┘ │ │ Summary │
27
+ └──────────┘ │ ↑ │ │ └──────────┘
28
+ │ └───────────────┘ │
29
+ │ (if score < threshold │
30
+ │ AND iter < max) │
31
+ └─────────────────────────────┘
32
+ ```
33
+
34
+ ### Chain Mode Extension
35
+
36
+ ```
37
+ Chain Mode (execution_mode === "chain"):
38
+
39
+ Phase 2 runs per-skill in chain_order:
40
+ Skill A → ccw cli → artifacts/skill-A/
41
+ ↓ (artifacts as input)
42
+ Skill B → ccw cli → artifacts/skill-B/
43
+ ↓ (artifacts as input)
44
+ Skill C → ccw cli → artifacts/skill-C/
45
+
46
+ Phase 3 evaluates entire chain output + per-skill scores
47
+ Phase 4 improves weakest skill(s) in chain
48
+ ```
49
+
50
+ ## Key Design Principles
51
+
52
+ 1. **Iteration Loop**: Phases 2-3-4 repeat until quality threshold, max iterations, or convergence
53
+ 2. **Two-Tool Pipeline**: Claude (write/execute) + Gemini (analyze/evaluate) = complementary perspectives
54
+ 3. **Pure Orchestrator**: SKILL.md coordinates only — execution detail lives in phase files
55
+ 4. **Progressive Phase Loading**: Phase docs read only when that phase executes
56
+ 5. **Skill Versioning**: Each iteration snapshots skill state before execution
57
+ 6. **Convergence Detection**: Stop early if score stalls (no improvement in 2 consecutive iterations)
58
+
59
+ ## Interactive Preference Collection
60
+
61
+ ```javascript
62
+ // ★ Auto mode detection
63
+ const autoYes = /\b(-y|--yes)\b/.test($ARGUMENTS)
64
+
65
+ if (autoYes) {
66
+ workflowPreferences = {
67
+ autoYes: true,
68
+ maxIterations: 5,
69
+ qualityThreshold: 80,
70
+ executionMode: 'single'
71
+ }
72
+ } else {
73
+ const prefResponse = AskUserQuestion({
74
+ questions: [
75
+ {
76
+ question: "选择迭代调优配置:",
77
+ header: "Tune Config",
78
+ multiSelect: false,
79
+ options: [
80
+ { label: "Quick (3 iter, 70)", description: "快速迭代,适合小幅改进" },
81
+ { label: "Standard (5 iter, 80) (Recommended)", description: "平衡方案,适合多数场景" },
82
+ { label: "Thorough (8 iter, 90)", description: "深度优化,适合生产级 skill" }
83
+ ]
84
+ }
85
+ ]
86
+ })
87
+
88
+ const configMap = {
89
+ "Quick": { maxIterations: 3, qualityThreshold: 70 },
90
+ "Standard": { maxIterations: 5, qualityThreshold: 80 },
91
+ "Thorough": { maxIterations: 8, qualityThreshold: 90 }
92
+ }
93
+ const selected = Object.keys(configMap).find(k =>
94
+ prefResponse["Tune Config"].startsWith(k)
95
+ ) || "Standard"
96
+ workflowPreferences = { autoYes: false, ...configMap[selected] }
97
+
98
+ // ★ Mode selection: chain vs single
99
+ const modeResponse = AskUserQuestion({
100
+ questions: [{
101
+ question: "选择调优模式:",
102
+ header: "Tune Mode",
103
+ multiSelect: false,
104
+ options: [
105
+ { label: "Single Skill (Recommended)", description: "独立调优每个 skill,适合单一 skill 优化" },
106
+ { label: "Skill Chain", description: "按链序执行,前一个 skill 的产出作为后一个的输入" }
107
+ ]
108
+ }]
109
+ });
110
+ workflowPreferences.executionMode = modeResponse["Tune Mode"].startsWith("Skill Chain")
111
+ ? "chain" : "single";
112
+ }
113
+ ```
114
+
115
+ ## Input Processing
116
+
117
+ ```
118
+ $ARGUMENTS → Parse:
119
+ ├─ Skill path(s): first arg, comma-separated for multiple
120
+ │ e.g., ".claude/skills/my-skill" or "my-skill" (auto-prefixed)
121
+ │ Chain mode: order preserved as chain_order
122
+ ├─ Test scenario: --scenario "description" or remaining text
123
+ └─ Flags: --max-iterations=N, --threshold=N, -y/--yes
124
+ ```
125
+
126
+ ## Execution Flow
127
+
128
+ > **⚠️ COMPACT DIRECTIVE**: Context compression MUST check TodoWrite phase status.
129
+ > The phase currently marked `in_progress` is the active execution phase — preserve its FULL content.
130
+ > Only compress phases marked `completed` or `pending`.
131
+
132
+ ### Phase 1: Setup (one-time)
133
+
134
+ Read and execute: `Ref: phases/01-setup.md`
135
+
136
+ - Parse skill paths, validate existence
137
+ - Create workspace at `.workflow/.scratchpad/skill-iter-tune-{ts}/`
138
+ - Backup original skill files
139
+ - Initialize iteration-state.json
140
+
141
+ Output: `workDir`, `targetSkills[]`, `testScenario`, initialized state
142
+
143
+ ### Iteration Loop
144
+
145
+ ```javascript
146
+ // Orchestrator iteration loop
147
+ while (true) {
148
+ // Increment iteration
149
+ state.current_iteration++;
150
+ state.iterations.push({
151
+ round: state.current_iteration,
152
+ status: 'pending',
153
+ execution: null,
154
+ evaluation: null,
155
+ improvement: null
156
+ });
157
+
158
+ // Update TodoWrite
159
+ TaskUpdate(iterationTask, {
160
+ subject: `Iteration ${state.current_iteration}/${state.max_iterations}`,
161
+ status: 'in_progress',
162
+ activeForm: `Running iteration ${state.current_iteration}`
163
+ });
164
+
165
+ // === Phase 2: Execute ===
166
+ // Read: phases/02-execute.md
167
+ // Single mode: one ccw cli call for all skills
168
+ // Chain mode: sequential ccw cli per skill in chain_order, passing artifacts
169
+ // Snapshot skill → construct prompt → ccw cli --tool claude --mode write
170
+ // Collect artifacts
171
+
172
+ // === Phase 3: Evaluate ===
173
+ // Read: phases/03-evaluate.md
174
+ // Construct eval prompt → ccw cli --tool gemini --mode analysis
175
+ // Parse score → write iteration-N-eval.md → check termination
176
+
177
+ // Check termination
178
+ if (shouldTerminate(state)) {
179
+ break; // → Phase 5
180
+ }
181
+
182
+ // === Phase 4: Improve ===
183
+ // Read: phases/04-improve.md
184
+ // Agent applies suggestions → write iteration-N-changes.md
185
+
186
+ // Update TodoWrite with score
187
+ // Continue loop
188
+ }
189
+ ```
190
+
191
+ ### Phase 2: Execute Skill (per iteration)
192
+
193
+ Read and execute: `Ref: phases/02-execute.md`
194
+
195
+ - Snapshot skill → `iteration-{N}/skill-snapshot/`
196
+ - Build execution prompt from skill content + test scenario
197
+ - Execute: `ccw cli -p "..." --tool claude --mode write --cd "${iterDir}/artifacts"`
198
+ - Collect artifacts
199
+
200
+ ### Phase 3: Evaluate Quality (per iteration)
201
+
202
+ Read and execute: `Ref: phases/03-evaluate.md`
203
+
204
+ - Build evaluation prompt with skill + artifacts + criteria + history
205
+ - Execute: `ccw cli -p "..." --tool gemini --mode analysis`
206
+ - Parse 5-dimension score (Clarity, Completeness, Correctness, Effectiveness, Efficiency)
207
+ - Write `iteration-{N}-eval.md`
208
+ - Check termination: score >= threshold | iter >= max | convergence | error limit
209
+
210
+ ### Phase 4: Apply Improvements (per iteration, skipped on termination)
211
+
212
+ Read and execute: `Ref: phases/04-improve.md`
213
+
214
+ - Read evaluation suggestions
215
+ - Launch general-purpose Agent to apply changes
216
+ - Write `iteration-{N}-changes.md`
217
+ - Update state
218
+
219
+ ### Phase 5: Final Report (one-time)
220
+
221
+ Read and execute: `Ref: phases/05-report.md`
222
+
223
+ - Generate comprehensive report with score progression table
224
+ - Write `final-report.md`
225
+ - Display summary to user
226
+
227
+ **Phase Reference Documents** (read on-demand when phase executes):
228
+
229
+ | Phase | Document | Purpose | Compact |
230
+ |-------|----------|---------|---------|
231
+ | 1 | [phases/01-setup.md](phases/01-setup.md) | Initialize workspace and state | TodoWrite 驱动 |
232
+ | 2 | [phases/02-execute.md](phases/02-execute.md) | Execute skill via ccw cli Claude | TodoWrite 驱动 + 🔄 sentinel |
233
+ | 3 | [phases/03-evaluate.md](phases/03-evaluate.md) | Evaluate via ccw cli Gemini | TodoWrite 驱动 + 🔄 sentinel |
234
+ | 4 | [phases/04-improve.md](phases/04-improve.md) | Apply improvements via Agent | TodoWrite 驱动 + 🔄 sentinel |
235
+ | 5 | [phases/05-report.md](phases/05-report.md) | Generate final report | TodoWrite 驱动 |
236
+
237
+ **Compact Rules**:
238
+ 1. **TodoWrite `in_progress`** → 保留完整内容,禁止压缩
239
+ 2. **TodoWrite `completed`** → 可压缩为摘要
240
+ 3. **🔄 sentinel fallback** → 若 compact 后仅存 sentinel 而无完整 Step 协议,立即 `Read()` 恢复
241
+
242
+ ## Core Rules
243
+
244
+ 1. **Start Immediately**: First action is preference collection → Phase 1 setup
245
+ 2. **Progressive Loading**: Read phase doc ONLY when that phase is about to execute
246
+ 3. **Snapshot Before Execute**: Always snapshot skill state before each iteration
247
+ 4. **Background CLI**: ccw cli runs in background, wait for hook callback before proceeding
248
+ 5. **Parse Every Output**: Extract structured JSON from CLI outputs for state updates
249
+ 6. **DO NOT STOP**: Continuous iteration until termination condition met
250
+ 7. **Single State Source**: `iteration-state.json` is the only source of truth
251
+
252
+ ## Data Flow
253
+
254
+ ```
255
+ User Input (skill paths + test scenario)
256
+ ↓ (+ execution_mode + chain_order if chain mode)
257
+
258
+ Phase 1: Setup
259
+ ↓ workDir, targetSkills[], testScenario, iteration-state.json
260
+
261
+ ┌─→ Phase 2: Execute (ccw cli claude)
262
+ │ ↓ artifacts/ (skill execution output)
263
+ │ ↓
264
+ │ Phase 3: Evaluate (ccw cli gemini)
265
+ │ ↓ score, dimensions[], suggestions[], iteration-N-eval.md
266
+ │ ↓
267
+ │ [Terminate?]─── YES ──→ Phase 5: Report → final-report.md
268
+ │ ↓ NO
269
+ │ ↓
270
+ │ Phase 4: Improve (Agent)
271
+ │ ↓ modified skill files, iteration-N-changes.md
272
+ │ ↓
273
+ └───┘ next iteration
274
+ ```
275
+
276
+ ## TodoWrite Pattern
277
+
278
+ ```javascript
279
+ // Initial state
280
+ TaskCreate({ subject: "Phase 1: Setup workspace", activeForm: "Setting up workspace" })
281
+ TaskCreate({ subject: "Iteration Loop", activeForm: "Running iterations" })
282
+ TaskCreate({ subject: "Phase 5: Final Report", activeForm: "Generating report" })
283
+
284
+ // Chain mode: create per-skill tracking tasks
285
+ if (state.execution_mode === 'chain') {
286
+ for (const skillName of state.chain_order) {
287
+ TaskCreate({
288
+ subject: `Chain: ${skillName}`,
289
+ activeForm: `Tracking ${skillName}`,
290
+ description: `Skill chain member position ${state.chain_order.indexOf(skillName) + 1}`
291
+ })
292
+ }
293
+ }
294
+
295
+ // During iteration N
296
+ // Single mode: one score per iteration (existing behavior)
297
+ // Chain mode: per-skill status updates
298
+ if (state.execution_mode === 'chain') {
299
+ // After each skill executes in Phase 2:
300
+ TaskUpdate(chainSkillTask, {
301
+ subject: `Chain: ${skillName} — Iter ${N} executed`,
302
+ activeForm: `${skillName} iteration ${N}`
303
+ })
304
+ // After Phase 3 evaluates:
305
+ TaskUpdate(chainSkillTask, {
306
+ subject: `Chain: ${skillName} — Score ${chainScores[skillName]}/100`,
307
+ activeForm: `${skillName} scored`
308
+ })
309
+ } else {
310
+ // Single mode (existing)
311
+ TaskCreate({
312
+ subject: `Iteration ${N}: Score ${score}/100`,
313
+ activeForm: `Iteration ${N} complete`,
314
+ description: `Strengths: ... | Weaknesses: ... | Suggestions: ${count}`
315
+ })
316
+ }
317
+
318
+ // Completed — collapse
319
+ TaskUpdate(iterLoop, {
320
+ subject: `Iteration Loop (${totalIters} iters, final: ${finalScore})`,
321
+ status: 'completed'
322
+ })
323
+ ```
324
+
325
+ ## Termination Logic
326
+
327
+ ```javascript
328
+ function shouldTerminate(state) {
329
+ // 1. Quality threshold met
330
+ if (state.latest_score >= state.quality_threshold) {
331
+ return { terminate: true, reason: 'quality_threshold_met' };
332
+ }
333
+ // 2. Max iterations reached
334
+ if (state.current_iteration >= state.max_iterations) {
335
+ return { terminate: true, reason: 'max_iterations_reached' };
336
+ }
337
+ // 3. Convergence: ≤2 points improvement over last 2 iterations
338
+ if (state.score_trend.length >= 3) {
339
+ const last3 = state.score_trend.slice(-3);
340
+ if (last3[2] - last3[0] <= 2) {
341
+ state.converged = true;
342
+ return { terminate: true, reason: 'convergence_detected' };
343
+ }
344
+ }
345
+ // 4. Error limit
346
+ if (state.error_count >= state.max_errors) {
347
+ return { terminate: true, reason: 'error_limit_reached' };
348
+ }
349
+ return { terminate: false };
350
+ }
351
+ ```
352
+
353
+ ## Error Handling
354
+
355
+ | Phase | Error | Recovery |
356
+ |-------|-------|----------|
357
+ | 2: Execute | CLI timeout/crash | Retry once with simplified prompt, then skip |
358
+ | 3: Evaluate | CLI fails | Retry once, then use score 50 with warning |
359
+ | 3: Evaluate | JSON parse fails | Extract score heuristically, save raw output |
360
+ | 4: Improve | Agent fails | Rollback from `iteration-{N}/skill-snapshot/` |
361
+ | Any | 3+ consecutive errors | Terminate with error report |
362
+
363
+ **Error Budget**: Each phase gets 1 retry. 3 consecutive failed iterations triggers termination.
364
+
365
+ ## Coordinator Checklist
366
+
367
+ ### Pre-Phase Actions
368
+ - [ ] Read iteration-state.json for current state
369
+ - [ ] Verify workspace directory exists
370
+ - [ ] Check error count hasn't exceeded limit
371
+
372
+ ### Per-Iteration Actions
373
+ - [ ] Increment current_iteration in state
374
+ - [ ] Create iteration-{N} subdirectory
375
+ - [ ] Update TodoWrite with iteration status
376
+ - [ ] After Phase 3: check termination before Phase 4
377
+ - [ ] After Phase 4: write state, proceed to next iteration
378
+
379
+ ### Post-Workflow Actions
380
+ - [ ] Execute Phase 5 (Report)
381
+ - [ ] Display final summary to user
382
+ - [ ] Update all TodoWrite tasks to completed
@@ -0,0 +1,144 @@
1
+ # Phase 1: Setup
2
+
3
+ Initialize workspace, backup skills, parse inputs.
4
+
5
+ ## Objective
6
+
7
+ - Parse skill path(s) and test scenario from user input
8
+ - Validate all skill paths exist and contain SKILL.md
9
+ - Create isolated workspace directory structure
10
+ - Backup original skill files
11
+ - Initialize iteration-state.json
12
+
13
+ ## Execution
14
+
15
+ ### Step 1.1: Parse Input
16
+
17
+ Parse `$ARGUMENTS` to extract skill paths and test scenario.
18
+
19
+ ```javascript
20
+ // Parse skill paths (first argument or comma-separated)
21
+ const args = $ARGUMENTS.trim();
22
+ const pathMatch = args.match(/^([^\s]+)/);
23
+ const rawPaths = pathMatch ? pathMatch[1].split(',') : [];
24
+
25
+ // Parse test scenario
26
+ const scenarioMatch = args.match(/(?:--scenario|--test)\s+"([^"]+)"/);
27
+ const scenarioText = scenarioMatch ? scenarioMatch[1] : args.replace(rawPaths.join(','), '').trim();
28
+
29
+ // Record chain order (preserves input order for chain mode)
30
+ const chainOrder = rawPaths.map(p => p.startsWith('.claude/') ? p.split('/').pop() : p);
31
+
32
+ // If no scenario, ask user
33
+ if (!scenarioText) {
34
+ const response = AskUserQuestion({
35
+ questions: [{
36
+ question: "Please describe the test scenario for evaluating this skill:",
37
+ header: "Test Scenario",
38
+ multiSelect: false,
39
+ options: [
40
+ { label: "General quality test", description: "Evaluate overall skill quality with a generic task" },
41
+ { label: "Specific scenario", description: "I'll describe a specific test case" }
42
+ ]
43
+ }]
44
+ });
45
+ // Use response to construct testScenario
46
+ }
47
+ ```
48
+
49
+ ### Step 1.2: Validate Skill Paths
50
+
51
+ ```javascript
52
+ const targetSkills = [];
53
+ for (const rawPath of rawPaths) {
54
+ const skillPath = rawPath.startsWith('.claude/') ? rawPath : `.claude/skills/${rawPath}`;
55
+
56
+ // Validate SKILL.md exists
57
+ const skillFiles = Glob(`${skillPath}/SKILL.md`);
58
+ if (skillFiles.length === 0) {
59
+ throw new Error(`Skill not found at: ${skillPath} -- SKILL.md missing`);
60
+ }
61
+
62
+ // Collect all skill files
63
+ const allFiles = Glob(`${skillPath}/**/*.md`);
64
+ targetSkills.push({
65
+ name: skillPath.split('/').pop(),
66
+ path: skillPath,
67
+ files: allFiles.map(f => f.replace(skillPath + '/', '')),
68
+ primary_file: 'SKILL.md'
69
+ });
70
+ }
71
+ ```
72
+
73
+ ### Step 1.3: Create Workspace
74
+
75
+ ```javascript
76
+ const ts = Date.now();
77
+ const workDir = `.workflow/.scratchpad/skill-iter-tune-${ts}`;
78
+
79
+ Bash(`mkdir -p "${workDir}/backups" "${workDir}/iterations"`);
80
+ ```
81
+
82
+ ### Step 1.4: Backup Original Skills
83
+
84
+ ```javascript
85
+ for (const skill of targetSkills) {
86
+ Bash(`cp -r "${skill.path}" "${workDir}/backups/${skill.name}"`);
87
+ }
88
+ ```
89
+
90
+ ### Step 1.5: Initialize State
91
+
92
+ Write `iteration-state.json` with initial state:
93
+
94
+ ```javascript
95
+ const initialState = {
96
+ status: 'running',
97
+ started_at: new Date().toISOString(),
98
+ updated_at: new Date().toISOString(),
99
+ target_skills: targetSkills,
100
+ test_scenario: {
101
+ description: scenarioText,
102
+ // Parse --requirements and --input-args from $ARGUMENTS if provided
103
+ // e.g., --requirements "clear output,no errors" --input-args "my-skill --scenario test"
104
+ requirements: parseListArg(args, '--requirements') || [],
105
+ input_args: parseStringArg(args, '--input-args') || '',
106
+ success_criteria: parseStringArg(args, '--success-criteria') || 'Produces correct, high-quality output'
107
+ },
108
+ execution_mode: workflowPreferences.executionMode || 'single',
109
+ chain_order: workflowPreferences.executionMode === 'chain'
110
+ ? targetSkills.map(s => s.name)
111
+ : [],
112
+ current_iteration: 0,
113
+ max_iterations: workflowPreferences.maxIterations,
114
+ quality_threshold: workflowPreferences.qualityThreshold,
115
+ latest_score: 0,
116
+ score_trend: [],
117
+ converged: false,
118
+ iterations: [],
119
+ errors: [],
120
+ error_count: 0,
121
+ max_errors: 3,
122
+ work_dir: workDir,
123
+ backup_dir: `${workDir}/backups`
124
+ };
125
+
126
+ Write(`${workDir}/iteration-state.json`, JSON.stringify(initialState, null, 2));
127
+
128
+ // Chain mode: create per-skill tracking tasks
129
+ if (initialState.execution_mode === 'chain') {
130
+ for (const skill of targetSkills) {
131
+ TaskCreate({
132
+ subject: `Chain: ${skill.name}`,
133
+ activeForm: `Tracking ${skill.name}`,
134
+ description: `Skill chain member: ${skill.path} | Position: ${targetSkills.indexOf(skill) + 1}/${targetSkills.length}`
135
+ });
136
+ }
137
+ }
138
+ ```
139
+
140
+ ## Output
141
+
142
+ - **Variables**: `workDir`, `targetSkills[]`, `testScenario`, `chainOrder` (chain mode)
143
+ - **Files**: `iteration-state.json`, `backups/` directory with skill copies
144
+ - **TodoWrite**: Mark Phase 1 completed, start Iteration Loop. Chain mode: per-skill tracking tasks created