aiwcli 0.10.3 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/bin/run.js +1 -1
  2. package/dist/commands/clear.js +28 -131
  3. package/dist/commands/init/index.js +3 -3
  4. package/dist/lib/gitignore-manager.d.ts +32 -0
  5. package/dist/lib/gitignore-manager.js +141 -2
  6. package/dist/templates/CLAUDE.md +8 -8
  7. package/dist/templates/_shared/.claude/commands/handoff-resume.md +64 -0
  8. package/dist/templates/_shared/.claude/commands/handoff.md +16 -10
  9. package/dist/templates/_shared/.claude/settings.json +7 -7
  10. package/dist/templates/_shared/hooks-ts/_utils/git-state.ts +2 -0
  11. package/dist/templates/_shared/hooks-ts/archive_plan.ts +159 -0
  12. package/dist/templates/_shared/hooks-ts/context_monitor.ts +147 -0
  13. package/dist/templates/_shared/hooks-ts/file-suggestion.ts +130 -0
  14. package/dist/templates/_shared/hooks-ts/pre_compact.ts +49 -0
  15. package/dist/templates/_shared/hooks-ts/session_end.ts +104 -0
  16. package/dist/templates/_shared/hooks-ts/session_start.ts +144 -0
  17. package/dist/templates/_shared/hooks-ts/task_create_capture.ts +48 -0
  18. package/dist/templates/_shared/hooks-ts/task_update_capture.ts +74 -0
  19. package/dist/templates/_shared/hooks-ts/user_prompt_submit.ts +83 -0
  20. package/dist/templates/_shared/lib-ts/CLAUDE.md +318 -0
  21. package/dist/templates/_shared/lib-ts/base/atomic-write.ts +12 -12
  22. package/dist/templates/_shared/lib-ts/base/constants.ts +22 -15
  23. package/dist/templates/_shared/lib-ts/base/hook-utils.ts +129 -50
  24. package/dist/templates/_shared/lib-ts/base/inference.ts +28 -21
  25. package/dist/templates/_shared/lib-ts/base/logger.ts +31 -15
  26. package/dist/templates/_shared/lib-ts/base/state-io.ts +9 -7
  27. package/dist/templates/_shared/lib-ts/base/stop-words.ts +131 -131
  28. package/dist/templates/_shared/lib-ts/base/subprocess-utils.ts +139 -0
  29. package/dist/templates/_shared/lib-ts/base/utils.ts +69 -69
  30. package/dist/templates/_shared/lib-ts/context/context-formatter.ts +30 -24
  31. package/dist/templates/_shared/lib-ts/context/context-selector.ts +50 -32
  32. package/dist/templates/_shared/lib-ts/context/context-store.ts +76 -48
  33. package/dist/templates/_shared/lib-ts/context/plan-manager.ts +61 -37
  34. package/dist/templates/_shared/lib-ts/context/task-tracker.ts +10 -6
  35. package/dist/templates/_shared/lib-ts/handoff/document-generator.ts +11 -10
  36. package/dist/templates/_shared/lib-ts/handoff/handoff-reader.ts +159 -0
  37. package/dist/templates/_shared/lib-ts/templates/formatters.ts +6 -4
  38. package/dist/templates/_shared/lib-ts/types.ts +68 -55
  39. package/dist/templates/_shared/scripts/resolve_context.ts +24 -0
  40. package/dist/templates/_shared/scripts/resume_handoff.ts +321 -0
  41. package/dist/templates/_shared/scripts/save_handoff.ts +21 -21
  42. package/dist/templates/_shared/scripts/status_line.ts +733 -0
  43. package/dist/templates/cc-native/.claude/settings.json +175 -185
  44. package/dist/templates/cc-native/TEMPLATE-SCHEMA.md +15 -17
  45. package/dist/templates/cc-native/_cc-native/agents/CLAUDE.md +0 -2
  46. package/dist/templates/cc-native/_cc-native/hooks/CLAUDE.md +109 -135
  47. package/dist/templates/cc-native/_cc-native/hooks/add_plan_context.ts +119 -0
  48. package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.ts +921 -0
  49. package/dist/templates/cc-native/_cc-native/hooks/plan_questions_early.ts +61 -0
  50. package/dist/templates/cc-native/_cc-native/lib-ts/aggregate-agents.ts +157 -0
  51. package/dist/templates/cc-native/_cc-native/lib-ts/artifacts.ts +709 -0
  52. package/dist/templates/cc-native/_cc-native/lib-ts/cc-native-state.ts +199 -0
  53. package/dist/templates/cc-native/_cc-native/lib-ts/cli-output-parser.ts +124 -0
  54. package/dist/templates/cc-native/_cc-native/lib-ts/config.ts +57 -0
  55. package/dist/templates/cc-native/_cc-native/lib-ts/constants.ts +83 -0
  56. package/dist/templates/cc-native/_cc-native/lib-ts/debug.ts +80 -0
  57. package/dist/templates/cc-native/_cc-native/lib-ts/index.ts +119 -0
  58. package/dist/templates/cc-native/_cc-native/lib-ts/json-parser.ts +162 -0
  59. package/dist/templates/cc-native/_cc-native/lib-ts/nul +3 -0
  60. package/dist/templates/cc-native/_cc-native/lib-ts/orchestrator.ts +249 -0
  61. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/agent.ts +155 -0
  62. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/codex.ts +130 -0
  63. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/gemini.ts +106 -0
  64. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/index.ts +10 -0
  65. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/types.ts +23 -0
  66. package/dist/templates/cc-native/_cc-native/lib-ts/state.ts +243 -0
  67. package/dist/templates/cc-native/_cc-native/lib-ts/tsconfig.json +18 -0
  68. package/dist/templates/cc-native/_cc-native/lib-ts/types.ts +310 -0
  69. package/dist/templates/cc-native/_cc-native/lib-ts/verdict.ts +72 -0
  70. package/dist/templates/cc-native/_cc-native/plan-review.config.json +1 -9
  71. package/oclif.manifest.json +1 -1
  72. package/package.json +1 -1
  73. package/dist/templates/_shared/hooks/__init__.py +0 -16
  74. package/dist/templates/_shared/hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  75. package/dist/templates/_shared/hooks/__pycache__/archive_plan.cpython-313.pyc +0 -0
  76. package/dist/templates/_shared/hooks/__pycache__/context_enforcer.cpython-313.pyc +0 -0
  77. package/dist/templates/_shared/hooks/__pycache__/context_monitor.cpython-313.pyc +0 -0
  78. package/dist/templates/_shared/hooks/__pycache__/file-suggestion.cpython-313.pyc +0 -0
  79. package/dist/templates/_shared/hooks/__pycache__/pre_compact.cpython-313.pyc +0 -0
  80. package/dist/templates/_shared/hooks/__pycache__/session_end.cpython-313.pyc +0 -0
  81. package/dist/templates/_shared/hooks/__pycache__/session_start.cpython-313.pyc +0 -0
  82. package/dist/templates/_shared/hooks/__pycache__/task_create_atomicity.cpython-313.pyc +0 -0
  83. package/dist/templates/_shared/hooks/__pycache__/task_create_capture.cpython-313.pyc +0 -0
  84. package/dist/templates/_shared/hooks/__pycache__/task_update_capture.cpython-313.pyc +0 -0
  85. package/dist/templates/_shared/hooks/__pycache__/user_prompt_submit.cpython-313.pyc +0 -0
  86. package/dist/templates/_shared/hooks/archive_plan.py +0 -177
  87. package/dist/templates/_shared/hooks/context_monitor.py +0 -270
  88. package/dist/templates/_shared/hooks/file-suggestion.py +0 -215
  89. package/dist/templates/_shared/hooks/pre_compact.py +0 -104
  90. package/dist/templates/_shared/hooks/session_end.py +0 -173
  91. package/dist/templates/_shared/hooks/session_start.py +0 -206
  92. package/dist/templates/_shared/hooks/task_create_capture.py +0 -108
  93. package/dist/templates/_shared/hooks/task_update_capture.py +0 -145
  94. package/dist/templates/_shared/hooks/user_prompt_submit.py +0 -139
  95. package/dist/templates/_shared/lib/__init__.py +0 -1
  96. package/dist/templates/_shared/lib/__pycache__/__init__.cpython-313.pyc +0 -0
  97. package/dist/templates/_shared/lib/base/__init__.py +0 -65
  98. package/dist/templates/_shared/lib/base/__pycache__/__init__.cpython-313.pyc +0 -0
  99. package/dist/templates/_shared/lib/base/__pycache__/atomic_write.cpython-313.pyc +0 -0
  100. package/dist/templates/_shared/lib/base/__pycache__/constants.cpython-313.pyc +0 -0
  101. package/dist/templates/_shared/lib/base/__pycache__/hook_utils.cpython-313.pyc +0 -0
  102. package/dist/templates/_shared/lib/base/__pycache__/inference.cpython-313.pyc +0 -0
  103. package/dist/templates/_shared/lib/base/__pycache__/logger.cpython-313.pyc +0 -0
  104. package/dist/templates/_shared/lib/base/__pycache__/stop_words.cpython-313.pyc +0 -0
  105. package/dist/templates/_shared/lib/base/__pycache__/subprocess_utils.cpython-313.pyc +0 -0
  106. package/dist/templates/_shared/lib/base/__pycache__/utils.cpython-313.pyc +0 -0
  107. package/dist/templates/_shared/lib/base/atomic_write.py +0 -180
  108. package/dist/templates/_shared/lib/base/constants.py +0 -358
  109. package/dist/templates/_shared/lib/base/hook_utils.py +0 -339
  110. package/dist/templates/_shared/lib/base/inference.py +0 -307
  111. package/dist/templates/_shared/lib/base/logger.py +0 -305
  112. package/dist/templates/_shared/lib/base/stop_words.py +0 -221
  113. package/dist/templates/_shared/lib/base/subprocess_utils.py +0 -46
  114. package/dist/templates/_shared/lib/base/utils.py +0 -263
  115. package/dist/templates/_shared/lib/context/__init__.py +0 -102
  116. package/dist/templates/_shared/lib/context/__pycache__/__init__.cpython-313.pyc +0 -0
  117. package/dist/templates/_shared/lib/context/__pycache__/cache.cpython-313.pyc +0 -0
  118. package/dist/templates/_shared/lib/context/__pycache__/context_extractor.cpython-313.pyc +0 -0
  119. package/dist/templates/_shared/lib/context/__pycache__/context_formatter.cpython-313.pyc +0 -0
  120. package/dist/templates/_shared/lib/context/__pycache__/context_manager.cpython-313.pyc +0 -0
  121. package/dist/templates/_shared/lib/context/__pycache__/context_selector.cpython-313.pyc +0 -0
  122. package/dist/templates/_shared/lib/context/__pycache__/context_store.cpython-313.pyc +0 -0
  123. package/dist/templates/_shared/lib/context/__pycache__/discovery.cpython-313.pyc +0 -0
  124. package/dist/templates/_shared/lib/context/__pycache__/event_log.cpython-313.pyc +0 -0
  125. package/dist/templates/_shared/lib/context/__pycache__/plan_archive.cpython-313.pyc +0 -0
  126. package/dist/templates/_shared/lib/context/__pycache__/plan_manager.cpython-313.pyc +0 -0
  127. package/dist/templates/_shared/lib/context/__pycache__/task_sync.cpython-313.pyc +0 -0
  128. package/dist/templates/_shared/lib/context/__pycache__/task_tracker.cpython-313.pyc +0 -0
  129. package/dist/templates/_shared/lib/context/context_formatter.py +0 -317
  130. package/dist/templates/_shared/lib/context/context_selector.py +0 -508
  131. package/dist/templates/_shared/lib/context/context_store.py +0 -653
  132. package/dist/templates/_shared/lib/context/plan_manager.py +0 -303
  133. package/dist/templates/_shared/lib/context/task_tracker.py +0 -188
  134. package/dist/templates/_shared/lib/handoff/__init__.py +0 -22
  135. package/dist/templates/_shared/lib/handoff/__pycache__/__init__.cpython-313.pyc +0 -0
  136. package/dist/templates/_shared/lib/handoff/__pycache__/document_generator.cpython-313.pyc +0 -0
  137. package/dist/templates/_shared/lib/handoff/document_generator.py +0 -278
  138. package/dist/templates/_shared/lib/templates/README.md +0 -206
  139. package/dist/templates/_shared/lib/templates/__init__.py +0 -36
  140. package/dist/templates/_shared/lib/templates/__pycache__/__init__.cpython-313.pyc +0 -0
  141. package/dist/templates/_shared/lib/templates/__pycache__/formatters.cpython-313.pyc +0 -0
  142. package/dist/templates/_shared/lib/templates/__pycache__/persona_questions.cpython-313.pyc +0 -0
  143. package/dist/templates/_shared/lib/templates/__pycache__/plan_context.cpython-313.pyc +0 -0
  144. package/dist/templates/_shared/lib/templates/formatters.py +0 -146
  145. package/dist/templates/_shared/lib/templates/plan_context.py +0 -73
  146. package/dist/templates/_shared/scripts/__pycache__/save_handoff.cpython-313.pyc +0 -0
  147. package/dist/templates/_shared/scripts/__pycache__/status_line.cpython-313.pyc +0 -0
  148. package/dist/templates/_shared/scripts/save_handoff.py +0 -357
  149. package/dist/templates/_shared/scripts/status_line.py +0 -716
  150. package/dist/templates/cc-native/.claude/commands/cc-native/fresh-perspective.md +0 -8
  151. package/dist/templates/cc-native/.windsurf/workflows/cc-native/fresh-perspective.md +0 -8
  152. package/dist/templates/cc-native/MIGRATION.md +0 -86
  153. package/dist/templates/cc-native/_cc-native/hooks/__pycache__/add_plan_context.cpython-313.pyc +0 -0
  154. package/dist/templates/cc-native/_cc-native/hooks/__pycache__/cc-native-plan-review.cpython-313.pyc +0 -0
  155. package/dist/templates/cc-native/_cc-native/hooks/__pycache__/mark_questions_asked.cpython-313.pyc +0 -0
  156. package/dist/templates/cc-native/_cc-native/hooks/__pycache__/plan_accepted.cpython-313.pyc +0 -0
  157. package/dist/templates/cc-native/_cc-native/hooks/__pycache__/plan_questions_early.cpython-313.pyc +0 -0
  158. package/dist/templates/cc-native/_cc-native/hooks/__pycache__/suggest-fresh-perspective.cpython-313.pyc +0 -0
  159. package/dist/templates/cc-native/_cc-native/hooks/add_plan_context.py +0 -130
  160. package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.py +0 -954
  161. package/dist/templates/cc-native/_cc-native/hooks/plan_questions_early.py +0 -81
  162. package/dist/templates/cc-native/_cc-native/hooks/suggest-fresh-perspective.py +0 -340
  163. package/dist/templates/cc-native/_cc-native/lib/CLAUDE.md +0 -265
  164. package/dist/templates/cc-native/_cc-native/lib/__init__.py +0 -53
  165. package/dist/templates/cc-native/_cc-native/lib/__pycache__/__init__.cpython-313.pyc +0 -0
  166. package/dist/templates/cc-native/_cc-native/lib/__pycache__/atomic_write.cpython-313.pyc +0 -0
  167. package/dist/templates/cc-native/_cc-native/lib/__pycache__/constants.cpython-313.pyc +0 -0
  168. package/dist/templates/cc-native/_cc-native/lib/__pycache__/debug.cpython-313.pyc +0 -0
  169. package/dist/templates/cc-native/_cc-native/lib/__pycache__/orchestrator.cpython-313.pyc +0 -0
  170. package/dist/templates/cc-native/_cc-native/lib/__pycache__/state.cpython-313.pyc +0 -0
  171. package/dist/templates/cc-native/_cc-native/lib/__pycache__/utils.cpython-313.pyc +0 -0
  172. package/dist/templates/cc-native/_cc-native/lib/constants.py +0 -45
  173. package/dist/templates/cc-native/_cc-native/lib/debug.py +0 -139
  174. package/dist/templates/cc-native/_cc-native/lib/orchestrator.py +0 -362
  175. package/dist/templates/cc-native/_cc-native/lib/reviewers/__init__.py +0 -28
  176. package/dist/templates/cc-native/_cc-native/lib/reviewers/__pycache__/__init__.cpython-313.pyc +0 -0
  177. package/dist/templates/cc-native/_cc-native/lib/reviewers/__pycache__/agent.cpython-313.pyc +0 -0
  178. package/dist/templates/cc-native/_cc-native/lib/reviewers/__pycache__/base.cpython-313.pyc +0 -0
  179. package/dist/templates/cc-native/_cc-native/lib/reviewers/__pycache__/codex.cpython-313.pyc +0 -0
  180. package/dist/templates/cc-native/_cc-native/lib/reviewers/__pycache__/gemini.cpython-313.pyc +0 -0
  181. package/dist/templates/cc-native/_cc-native/lib/reviewers/agent.py +0 -215
  182. package/dist/templates/cc-native/_cc-native/lib/reviewers/base.py +0 -88
  183. package/dist/templates/cc-native/_cc-native/lib/reviewers/codex.py +0 -124
  184. package/dist/templates/cc-native/_cc-native/lib/reviewers/gemini.py +0 -108
  185. package/dist/templates/cc-native/_cc-native/lib/state.py +0 -268
  186. package/dist/templates/cc-native/_cc-native/lib/utils.py +0 -1071
  187. package/dist/templates/cc-native/_cc-native/scripts/__pycache__/aggregate_agents.cpython-313.pyc +0 -0
  188. package/dist/templates/cc-native/_cc-native/scripts/aggregate_agents.py +0 -168
  189. package/dist/templates/cc-native/_cc-native/workflows/fresh-perspective.md +0 -134
@@ -1,185 +1,175 @@
1
- {
2
- "statusLine": {
3
- "type": "command",
4
- "command": "python .aiwcli/_shared/scripts/status_line.py"
5
- },
6
- "permissions": {
7
- "allow": [],
8
- "deny": []
9
- },
10
- "env": {},
11
- "enabledPlugins": {},
12
- "fileSuggestion": {
13
- "type": "command",
14
- "command": "python .aiwcli/_shared/hooks/file-suggestion.py"
15
- },
16
- "methods": {
17
- "cc-native": {
18
- "ides": [
19
- "claude"
20
- ],
21
- "installedAt": "2026-01-29T01:59:02.558Z"
22
- }
23
- },
24
- "hooks": {
25
- "SessionStart": [
26
- {
27
- "hooks": [
28
- {
29
- "type": "command",
30
- "command": "python .aiwcli/_shared/hooks/session_start.py",
31
- "timeout": 5000
32
- }
33
- ]
34
- }
35
- ],
36
- "SessionEnd": [
37
- {
38
- "hooks": [
39
- {
40
- "type": "command",
41
- "command": "python .aiwcli/_shared/hooks/session_end.py",
42
- "timeout": 5000
43
- }
44
- ]
45
- }
46
- ],
47
- "PreCompact": [
48
- {
49
- "hooks": [
50
- {
51
- "type": "command",
52
- "command": "python .aiwcli/_shared/hooks/pre_compact.py",
53
- "timeout": 5000
54
- }
55
- ]
56
- }
57
- ],
58
- "UserPromptSubmit": [
59
- {
60
- "hooks": [
61
- {
62
- "type": "command",
63
- "command": "python .aiwcli/_shared/hooks/user_prompt_submit.py",
64
- "timeout": 10000
65
- }
66
- ]
67
- },
68
- {
69
- "hooks": [
70
- {
71
- "type": "command",
72
- "command": "python .aiwcli/_cc-native/hooks/plan_questions_early.py",
73
- "timeout": 3000
74
- }
75
- ]
76
- }
77
- ],
78
- "PostToolUse": [
79
- {
80
- "matcher": "*",
81
- "hooks": [
82
- {
83
- "type": "command",
84
- "command": "python .aiwcli/_shared/hooks/context_monitor.py",
85
- "timeout": 5000
86
- }
87
- ]
88
- },
89
- {
90
- "matcher": "TaskCreate",
91
- "hooks": [
92
- {
93
- "type": "command",
94
- "command": "python .aiwcli/_shared/hooks/task_create_capture.py",
95
- "timeout": 3000,
96
- "async": true
97
- }
98
- ]
99
- },
100
- {
101
- "matcher": "TaskUpdate",
102
- "hooks": [
103
- {
104
- "type": "command",
105
- "command": "python .aiwcli/_shared/hooks/task_update_capture.py",
106
- "timeout": 3000,
107
- "async": true
108
- }
109
- ]
110
- },
111
- {
112
- "matcher": "Bash|Edit",
113
- "hooks": [
114
- {
115
- "type": "command",
116
- "command": "python .aiwcli/_cc-native/hooks/suggest-fresh-perspective.py",
117
- "timeout": 5000
118
- }
119
- ]
120
- },
121
- {
122
- "matcher": "AskUserQuestion",
123
- "hooks": [
124
- {
125
- "type": "command",
126
- "command": "python .aiwcli/_cc-native/hooks/add_plan_context.py",
127
- "timeout": 3000
128
- }
129
- ]
130
- }
131
- ],
132
- "PermissionRequest": [
133
- {
134
- "matcher": "ExitPlanMode",
135
- "hooks": [
136
- {
137
- "type": "command",
138
- "command": "python .aiwcli/_shared/hooks/archive_plan.py",
139
- "timeout": 5000
140
- }
141
- ]
142
- }
143
- ],
144
- "PreToolUse": [
145
- {
146
- "matcher": "^TaskCreate$",
147
- "hooks": [
148
- {
149
- "type": "prompt",
150
- "prompt": "Evaluate this TaskCreate call for atomicity. Tasks become ISC criteria checked during verification — vague criteria cannot be verified, so precision matters. A well-specified task includes: (1) Explicit file paths like 'src/lib/auth.py' instead of 'the file above' or 'as discussed', (2) Specific function or component names instead of pronouns like 'it' or 'the function', (3) Clear expected state or behavior that is binary-testable in 2 seconds, (4) Concrete scope — one concern per task, not compound goals. If all four criteria are met and an agent with zero conversation history could verify the task was completed, return ok:true. If any criterion is missing, return ok:false with a response like: 'Missing context: [list each gap — e.g., no file path specified for the auth module, expected behavior is vague: what does fix the bug mean specifically, compound task should be split into separate criteria]'. When returning ok:false, end your response with: 'Retry: Re-invoke TaskCreate with a revised subject and description that address the gaps above.' This directive ensures the calling agent corrects and retries rather than abandoning the task."
151
- }
152
- ]
153
- },
154
- {
155
- "matcher": "^Task$",
156
- "hooks": [
157
- {
158
- "type": "prompt",
159
- "prompt": "The sub-agent receives ONLY the prompt text — no conversation history, no prior context.\n\nCheck 1 — Dangling References: Does the prompt use pronouns or demonstratives that ONLY make sense with prior conversation? Violations: 'the file we looked at', 'as discussed above', 'that approach we chose', 'the error from earlier', 'fix the issue mentioned above'. NOT violations: relative paths ('_output/', 'src/lib/'), search terms ('context-manager', 'auth module'), directory exploration ('find files matching X'), tool names, or any concrete noun — even if imprecise. Only flag references that are truly UNRESOLVABLE without conversation history.\n\nCheck 2 — Implicit Contract: Does the prompt have ANY discernible goal? 'Explore the _output directory and find context files' IS a clear goal. 'Search for hooks that handle Task events' IS a clear goal. 'Read and summarize all files in X' IS a clear goal. Only flag if the prompt is truly goalless — e.g., a sentence fragment with no verb, or pure context with no request.\n\nIf both checks pass, return ok:true. When in doubt, pass — false negatives (letting a vague prompt through) are far less costly than false positives (blocking legitimate work).\n\nWhen returning ok:false, end your response with: 'Retry: Re-invoke the Task tool with a revised prompt that resolves the issues above.'"
160
- }
161
- ]
162
- },
163
- {
164
- "matcher": "^Task$",
165
- "hooks": [
166
- {
167
- "type": "command",
168
- "command": "python .aiwcli/_cc-native/hooks/add_plan_context.py",
169
- "timeout": 5000
170
- }
171
- ]
172
- },
173
- {
174
- "matcher": "ExitPlanMode",
175
- "hooks": [
176
- {
177
- "type": "command",
178
- "command": "python .aiwcli/_cc-native/hooks/cc-native-plan-review.py",
179
- "timeout": 600000
180
- }
181
- ]
182
- }
183
- ]
184
- }
185
- }
1
+ {
2
+ "statusLine": {
3
+ "type": "command",
4
+ "command": "bun .aiwcli/_shared/scripts/status_line.ts"
5
+ },
6
+ "permissions": {
7
+ "allow": [],
8
+ "deny": []
9
+ },
10
+ "env": {},
11
+ "enabledPlugins": {},
12
+ "fileSuggestion": {
13
+ "type": "command",
14
+ "command": "bun .aiwcli/_shared/hooks-ts/file-suggestion.ts"
15
+ },
16
+ "methods": {
17
+ "cc-native": {
18
+ "ides": [
19
+ "claude"
20
+ ],
21
+ "installedAt": "2026-01-29T01:59:02.558Z"
22
+ }
23
+ },
24
+ "hooks": {
25
+ "SessionStart": [
26
+ {
27
+ "hooks": [
28
+ {
29
+ "type": "command",
30
+ "command": "bun .aiwcli/_shared/hooks-ts/session_start.ts",
31
+ "timeout": 5000
32
+ }
33
+ ]
34
+ }
35
+ ],
36
+ "SessionEnd": [
37
+ {
38
+ "hooks": [
39
+ {
40
+ "type": "command",
41
+ "command": "bun .aiwcli/_shared/hooks-ts/session_end.ts",
42
+ "timeout": 5000
43
+ }
44
+ ]
45
+ }
46
+ ],
47
+ "PreCompact": [
48
+ {
49
+ "hooks": [
50
+ {
51
+ "type": "command",
52
+ "command": "bun .aiwcli/_shared/hooks-ts/pre_compact.ts",
53
+ "timeout": 5000
54
+ }
55
+ ]
56
+ }
57
+ ],
58
+ "UserPromptSubmit": [
59
+ {
60
+ "hooks": [
61
+ {
62
+ "type": "command",
63
+ "command": "bun .aiwcli/_shared/hooks-ts/user_prompt_submit.ts",
64
+ "timeout": 10000
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ "hooks": [
70
+ {
71
+ "type": "command",
72
+ "command": "bun .aiwcli/_cc-native/hooks/plan_questions_early.ts",
73
+ "timeout": 3000
74
+ }
75
+ ]
76
+ }
77
+ ],
78
+ "PostToolUse": [
79
+ {
80
+ "matcher": "*",
81
+ "hooks": [
82
+ {
83
+ "type": "command",
84
+ "command": "bun .aiwcli/_shared/hooks-ts/context_monitor.ts",
85
+ "timeout": 5000
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ "matcher": "TaskCreate",
91
+ "hooks": [
92
+ {
93
+ "type": "command",
94
+ "command": "bun .aiwcli/_shared/hooks-ts/task_create_capture.ts",
95
+ "timeout": 3000,
96
+ "async": true
97
+ }
98
+ ]
99
+ },
100
+ {
101
+ "matcher": "TaskUpdate",
102
+ "hooks": [
103
+ {
104
+ "type": "command",
105
+ "command": "bun .aiwcli/_shared/hooks-ts/task_update_capture.ts",
106
+ "timeout": 3000,
107
+ "async": true
108
+ }
109
+ ]
110
+ },
111
+ {
112
+ "matcher": "AskUserQuestion",
113
+ "hooks": [
114
+ {
115
+ "type": "command",
116
+ "command": "bun .aiwcli/_cc-native/hooks/add_plan_context.ts",
117
+ "timeout": 3000
118
+ }
119
+ ]
120
+ }
121
+ ],
122
+ "PermissionRequest": [
123
+ {
124
+ "matcher": "ExitPlanMode",
125
+ "hooks": [
126
+ {
127
+ "type": "command",
128
+ "command": "bun .aiwcli/_shared/hooks-ts/archive_plan.ts",
129
+ "timeout": 5000
130
+ }
131
+ ]
132
+ }
133
+ ],
134
+ "PreToolUse": [
135
+ {
136
+ "matcher": "^TaskCreate$",
137
+ "hooks": [
138
+ {
139
+ "type": "prompt",
140
+ "prompt": "Evaluate this TaskCreate call for atomicity. Tasks become ISC criteria checked during verification — vague criteria cannot be verified, so precision matters. A well-specified task includes: (1) Explicit file paths like 'src/lib/auth.py' instead of 'the file above' or 'as discussed', (2) Specific function or component names instead of pronouns like 'it' or 'the function', (3) Clear expected state or behavior that is binary-testable in 2 seconds, (4) Concrete scope — one concern per task, not compound goals. If all four criteria are met and an agent with zero conversation history could verify the task was completed, return ok:true. If any criterion is missing, return ok:false with a response like: 'Missing context: [list each gap — e.g., no file path specified for the auth module, expected behavior is vague: what does fix the bug mean specifically, compound task should be split into separate criteria]'. When returning ok:false, end your response with: 'Retry: Re-invoke TaskCreate with a revised subject and description that address the gaps above.' This directive ensures the calling agent corrects and retries rather than abandoning the task."
141
+ }
142
+ ]
143
+ },
144
+ {
145
+ "matcher": "^Task$",
146
+ "hooks": [
147
+ {
148
+ "type": "prompt",
149
+ "prompt": "The sub-agent receives ONLY the prompt text — no conversation history, no prior context.\n\nCheck 1 — Dangling References: Does the prompt use pronouns or demonstratives that ONLY make sense with prior conversation? Violations: 'the file we looked at', 'as discussed above', 'that approach we chose', 'the error from earlier', 'fix the issue mentioned above'. NOT violations: relative paths ('_output/', 'src/lib/'), search terms ('context-manager', 'auth module'), directory exploration ('find files matching X'), tool names, or any concrete noun — even if imprecise. Only flag references that are truly UNRESOLVABLE without conversation history.\n\nCheck 2 — Implicit Contract: Does the prompt have ANY discernible goal? 'Explore the _output directory and find context files' IS a clear goal. 'Search for hooks that handle Task events' IS a clear goal. 'Read and summarize all files in X' IS a clear goal. Only flag if the prompt is truly goalless — e.g., a sentence fragment with no verb, or pure context with no request.\n\nIf both checks pass, return ok:true. When in doubt, pass — false negatives (letting a vague prompt through) are far less costly than false positives (blocking legitimate work).\n\nWhen returning ok:false, end your response with: 'Retry: Re-invoke the Task tool with a revised prompt that resolves the issues above.'"
150
+ }
151
+ ]
152
+ },
153
+ {
154
+ "matcher": "^Task$",
155
+ "hooks": [
156
+ {
157
+ "type": "command",
158
+ "command": "bun .aiwcli/_cc-native/hooks/add_plan_context.ts",
159
+ "timeout": 5000
160
+ }
161
+ ]
162
+ },
163
+ {
164
+ "matcher": "ExitPlanMode",
165
+ "hooks": [
166
+ {
167
+ "type": "command",
168
+ "command": "bun .aiwcli/_cc-native/hooks/cc-native-plan-review.ts",
169
+ "timeout": 600000
170
+ }
171
+ ]
172
+ }
173
+ ]
174
+ }
175
+ }
@@ -12,16 +12,15 @@ CC-Native uses Claude Code's native tools with minimal workflow overhead. Plan r
12
12
  packages/cli/src/templates/cc-native/
13
13
  ├── _cc-native/ # METHOD-SPECIFIC: CC-Native template code
14
14
  │ ├── workflows/*.md # Workflow definitions
15
- │ ├── hooks/ # Hook scripts
16
- │ │ ├── cc-native-plan-review.py # Unified plan review (CLI + agents)
17
- │ │ └── archive_plan.py # Archives approved plans
18
- ├── lib/ # CC-Native specific utilities
19
- ├── utils.py # Common functions for hooks
20
- │ │ ├── atomic_write.py # Cross-platform atomic file writes
21
- │ │ ├── async_archive.py # Non-blocking plan archival
22
- │ │ └── constants.py # Security and configuration constants
23
- ├── scripts/ # Utility scripts
24
- │ │ └── aggregate_agents.py # Auto-detect agents from frontmatter
15
+ │ ├── hooks/ # Hook scripts (TypeScript, run via bun)
16
+ │ │ ├── cc-native-plan-review.ts # Unified plan review (CLI + agents)
17
+ │ │ ├── add_plan_context.ts # Clarifying questions offer
18
+ │ └── plan_questions_early.ts # Phase A clarification prompt
19
+ │ ├── lib-ts/ # CC-Native specific TypeScript libraries
20
+ │ │ ├── cc-native-state.ts # State management
21
+ │ │ ├── config.ts # Configuration loading
22
+ │ │ └── reviewers/ # Plan review implementations
23
+ │ └── codex.ts # Codex CLI reviewer
25
24
  │ └── plan-review.config.json # Plan review configuration
26
25
  ├── .claude/commands/cc-native/ # Claude Code slash commands
27
26
  ├── .claude/agents/cc-native/ # Agent definitions for plan review
@@ -222,7 +221,7 @@ Hook scripts live in `_cc-native/hooks/`. IDE-specific wiring in `.claude/settin
222
221
  "PreToolUse": [{
223
222
  "matcher": "ExitPlanMode",
224
223
  "hooks": [
225
- { "type": "command", "command": "python _cc-native/hooks/cc-native-plan-review.py", "timeout": 600000 }
224
+ { "type": "command", "command": "bun run .aiwcli/_cc-native/hooks/cc-native-plan-review.ts", "timeout": 600000 }
226
225
  ]
227
226
  }]
228
227
  }
@@ -233,10 +232,9 @@ Hook scripts live in `_cc-native/hooks/`. IDE-specific wiring in `.claude/settin
233
232
 
234
233
  | Hook | Trigger | Purpose |
235
234
  |------|---------|---------|
236
- | `cc-native-plan-review.py` | ExitPlanMode | Unified review: CLI + orchestrator + agents |
237
- | `archive_plan.py` | PermissionRequest:ExitPlanMode | Archives plan content and stores hash/signature before user acceptance |
238
- | `plan_accepted.py` | PostToolUse:ExitPlanMode | Sets context mode to has_plan |
239
- | `plan_questions_early.py` | UserPromptSubmit | Injects Phase A clarification in plan mode |
235
+ | `cc-native-plan-review.ts` | ExitPlanMode | Unified review: CLI + orchestrator + agents |
236
+ | `add_plan_context.ts` | PostToolUse:AskUserQuestion, PreToolUse:Task | Mark questions asked; nudge Plan subagent |
237
+ | `plan_questions_early.ts` | UserPromptSubmit | Injects Phase A clarification in plan mode |
240
238
 
241
239
  ### Claude Feedback Mechanism
242
240
 
@@ -256,7 +254,7 @@ When a plan fails review and `blockOnFail` is enabled, Claude is blocked from pr
256
254
 
257
255
  ### Unified Review Pipeline
258
256
 
259
- The `cc-native-plan-review.py` hook runs 4 phases:
257
+ The `cc-native-plan-review.ts` hook runs 4 phases:
260
258
 
261
259
  1. **Phase 1: CLI Reviewers** - Sends plan to Codex/Gemini for external review
262
260
  2. **Phase 2: Orchestrator** - Analyzes plan complexity and selects appropriate agents
@@ -276,7 +274,7 @@ Simple plans skip agent review entirely. Medium/high complexity plans get 1-4 ag
276
274
 
277
275
  Each selected agent:
278
276
  1. Runs as a headless Claude Code instance with `--agent` flag
279
- 2. Executes in parallel via ThreadPoolExecutor
277
+ 2. Executes in parallel via Promise.all()
280
278
  3. Uses `--permission-mode bypassPermissions` and `--max-turns 3`
281
279
  4. Returns structured JSON verdict (pass/warn/fail)
282
280
 
@@ -94,8 +94,6 @@ Each agent file has:
94
94
  - **Frontmatter (YAML):** name, model, focus, categories, enabled
95
95
  - **Body (Markdown):** Full persona content → becomes `system_prompt` for `--system-prompt` flag
96
96
 
97
- The `aggregate_agents.py` script (`_cc-native/scripts/aggregate_agents.py`) extracts both parts. The body becomes `AgentConfig.system_prompt`.
98
-
99
97
  ## --setting-sources "" Requirement
100
98
 
101
99
  **Decision:** Use `--setting-sources ""` to disable user/project settings loading