aiwcli 0.9.2 → 0.9.4
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.
- package/dist/templates/_shared/hooks/__pycache__/archive_plan.cpython-313.pyc +0 -0
- package/dist/templates/_shared/hooks/__pycache__/context_enforcer.cpython-313.pyc +0 -0
- package/dist/templates/_shared/hooks/__pycache__/context_monitor.cpython-313.pyc +0 -0
- package/dist/templates/_shared/hooks/__pycache__/file-suggestion.cpython-313.pyc +0 -0
- package/dist/templates/_shared/hooks/__pycache__/session_start.cpython-313.pyc +0 -0
- package/dist/templates/_shared/hooks/__pycache__/task_create_atomicity.cpython-313.pyc +0 -0
- package/dist/templates/_shared/hooks/__pycache__/task_create_capture.cpython-313.pyc +0 -0
- package/dist/templates/_shared/hooks/__pycache__/task_update_capture.cpython-313.pyc +0 -0
- package/dist/templates/_shared/hooks/__pycache__/user_prompt_submit.cpython-313.pyc +0 -0
- package/dist/templates/_shared/hooks/archive_plan.py +28 -38
- package/dist/templates/_shared/hooks/context_enforcer.py +6 -6
- package/dist/templates/_shared/hooks/context_monitor.py +4 -8
- package/dist/templates/_shared/hooks/file-suggestion.py +4 -10
- package/dist/templates/_shared/hooks/session_start.py +4 -9
- package/dist/templates/_shared/hooks/task_create_atomicity.py +90 -84
- package/dist/templates/_shared/hooks/task_create_capture.py +83 -146
- package/dist/templates/_shared/hooks/task_update_capture.py +116 -167
- package/dist/templates/_shared/hooks/user_prompt_submit.py +4 -9
- package/dist/templates/_shared/lib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/base/__pycache__/__init__.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/base/__pycache__/atomic_write.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/base/__pycache__/constants.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/base/__pycache__/hook_utils.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/base/__pycache__/utils.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/base/hook_utils.py +169 -0
- package/dist/templates/_shared/lib/context/__init__.py +9 -0
- package/dist/templates/_shared/lib/context/__pycache__/__init__.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/context/__pycache__/cache.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/context/__pycache__/context_extractor.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/context/__pycache__/context_manager.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/context/__pycache__/discovery.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/context/__pycache__/plan_archive.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/context/context_extractor.py +115 -0
- package/dist/templates/_shared/lib/context/discovery.py +4 -4
- package/dist/templates/_shared/lib/templates/__pycache__/__init__.cpython-313.pyc +0 -0
- package/dist/templates/_shared/lib/templates/__pycache__/formatters.cpython-313.pyc +0 -0
- package/dist/templates/cc-native/.claude/agents/cc-native/ARCHITECT-REVIEWER.md +20 -47
- package/dist/templates/cc-native/.claude/agents/cc-native/ASSUMPTION-CHAIN-TRACER.md +25 -203
- package/dist/templates/cc-native/.claude/agents/cc-native/CLARITY-AUDITOR.md +24 -75
- package/dist/templates/cc-native/.claude/agents/cc-native/COMPLETENESS-CHECKER.md +31 -76
- package/dist/templates/cc-native/.claude/agents/cc-native/DEVILS-ADVOCATE.md +25 -188
- package/dist/templates/cc-native/.claude/agents/cc-native/DOCUMENTATION-REVIEWER.md +30 -52
- package/dist/templates/cc-native/.claude/agents/cc-native/FEASIBILITY-ANALYST.md +26 -62
- package/dist/templates/cc-native/.claude/agents/cc-native/FRESH-PERSPECTIVE.md +31 -80
- package/dist/templates/cc-native/.claude/agents/cc-native/HANDOFF-READINESS.md +24 -105
- package/dist/templates/cc-native/.claude/agents/cc-native/HIDDEN-COMPLEXITY-DETECTOR.md +23 -208
- package/dist/templates/cc-native/.claude/agents/cc-native/INCENTIVE-MAPPER.md +25 -199
- package/dist/templates/cc-native/.claude/agents/cc-native/PRECEDENT-FINDER.md +35 -205
- package/dist/templates/cc-native/.claude/agents/cc-native/REVERSIBILITY-ANALYST.md +26 -176
- package/dist/templates/cc-native/.claude/agents/cc-native/RISK-ASSESSOR.md +22 -65
- package/dist/templates/cc-native/.claude/agents/cc-native/SECOND-ORDER-ANALYST.md +25 -161
- package/dist/templates/cc-native/.claude/agents/cc-native/SIMPLICITY-GUARDIAN.md +28 -58
- package/dist/templates/cc-native/.claude/agents/cc-native/SKEPTIC.md +27 -311
- package/dist/templates/cc-native/.claude/agents/cc-native/STAKEHOLDER-ADVOCATE.md +22 -73
- package/dist/templates/cc-native/_cc-native/hooks/__pycache__/add_plan_context.cpython-313.pyc +0 -0
- package/dist/templates/cc-native/_cc-native/hooks/__pycache__/cc-native-plan-review.cpython-313.pyc +0 -0
- package/dist/templates/cc-native/_cc-native/hooks/__pycache__/suggest-fresh-perspective.cpython-313.pyc +0 -0
- package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.py +17 -3
- package/dist/templates/cc-native/_cc-native/lib/__pycache__/debug.cpython-313.pyc +0 -0
- package/dist/templates/cc-native/_cc-native/lib/debug.py +124 -0
- package/dist/templates/cc-native/_cc-native/lib/reviewers/__pycache__/agent.cpython-313.pyc +0 -0
- package/dist/templates/cc-native/_cc-native/lib/reviewers/agent.py +33 -1
- package/dist/templates/cc-native/_cc-native/plan-review.config.json +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +1 -1
|
@@ -12,338 +12,54 @@ categories:
|
|
|
12
12
|
- research
|
|
13
13
|
- life
|
|
14
14
|
- business
|
|
15
|
-
tools: Read, Glob, Grep
|
|
16
15
|
---
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
# Skeptic - Plan Review Agent
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
1. Query context manager for the plan's stated goals and success criteria
|
|
22
|
-
2. Identify hidden assumptions the plan depends on but doesn't state
|
|
23
|
-
3. Challenge whether the plan solves the root cause or just symptoms
|
|
24
|
-
4. Provide balanced assessment with both strengths and weaknesses
|
|
19
|
+
You challenge plans at a fundamental level. Your question: "Is this even the right thing to build?"
|
|
25
20
|
|
|
26
|
-
|
|
27
|
-
- Problem clearly defined verified
|
|
28
|
-
- Solution matches problem confirmed
|
|
29
|
-
- Assumptions explicitly stated validated
|
|
30
|
-
- Simpler alternatives considered checked
|
|
31
|
-
- Root cause vs symptom addressed confirmed
|
|
32
|
-
- Over-engineering risks assessed
|
|
33
|
-
- Constraints distinguished (hard vs soft) verified
|
|
34
|
-
- Success criteria measurable confirmed
|
|
21
|
+
## Your Expertise
|
|
35
22
|
|
|
36
23
|
Three equal priorities:
|
|
37
|
-
- Over-engineering detection
|
|
38
|
-
- Wrong problem identification
|
|
39
|
-
- Hidden assumption surfacing
|
|
24
|
+
- **Over-engineering detection**: Is this more complex than needed?
|
|
25
|
+
- **Wrong problem identification**: Are we solving symptoms or root causes?
|
|
26
|
+
- **Hidden assumption surfacing**: What must be true for this plan to work?
|
|
40
27
|
|
|
41
|
-
|
|
28
|
+
## Review Approach (Socratic Questioning)
|
|
29
|
+
|
|
30
|
+
Use questions rather than accusations:
|
|
42
31
|
- What problem does this actually solve?
|
|
43
32
|
- Is there a simpler way to achieve this outcome?
|
|
44
33
|
- What would need to be true for this to be the right approach?
|
|
45
34
|
- What are we assuming about users/systems/constraints?
|
|
46
|
-
- If this assumption were false, would the plan still make sense?
|
|
47
35
|
- Are we solving the symptom or the root cause?
|
|
48
36
|
|
|
49
|
-
Key
|
|
37
|
+
## Key Distinction
|
|
50
38
|
|
|
51
39
|
| Agent | Asks |
|
|
52
40
|
|-------|------|
|
|
53
41
|
| Architect | "Is this designed well?" |
|
|
54
|
-
| Performance | "Is this fast enough?" |
|
|
55
42
|
| Security | "Is this secure?" |
|
|
56
|
-
| Documentation | "Is this documented well?" |
|
|
57
43
|
| **Skeptic** | "**Is this even the right thing to do?**" |
|
|
58
44
|
|
|
59
|
-
##
|
|
60
|
-
|
|
61
|
-
Extract and clarify the problem space.
|
|
62
|
-
|
|
63
|
-
Understanding priorities:
|
|
64
|
-
- Stated goal extraction
|
|
65
|
-
- Success criteria identification
|
|
66
|
-
- Implicit requirements inference
|
|
67
|
-
- Constraint categorization
|
|
68
|
-
- Stakeholder needs mapping
|
|
69
|
-
- Context boundaries
|
|
70
|
-
- Scope definition
|
|
71
|
-
- Expected outcomes
|
|
72
|
-
|
|
73
|
-
Problem definition review:
|
|
74
|
-
- Extract stated problem
|
|
75
|
-
- Identify what success looks like
|
|
76
|
-
- Infer unstated requirements
|
|
77
|
-
- Note assumed constraints
|
|
78
|
-
- Question scope boundaries
|
|
79
|
-
- Map stakeholder impact
|
|
80
|
-
- Assess urgency vs importance
|
|
81
|
-
- Document gaps in definition
|
|
82
|
-
|
|
83
|
-
## Phase 2: CHALLENGE
|
|
84
|
-
|
|
85
|
-
Probe whether the plan matches the problem through Socratic questions.
|
|
86
|
-
|
|
87
|
-
Challenge priorities:
|
|
88
|
-
- Problem-solution fit
|
|
89
|
-
- Simplicity opportunity
|
|
90
|
-
- Root cause vs symptom
|
|
91
|
-
- Alternative approaches
|
|
92
|
-
- Constraint validity
|
|
93
|
-
- Scope creep risk
|
|
94
|
-
- Feature necessity
|
|
95
|
-
- Complexity justification
|
|
96
|
-
|
|
97
|
-
Probing questions:
|
|
98
|
-
- What would need to be true for this to be the best approach?
|
|
99
|
-
- If we could solve this without any code, how would we?
|
|
100
|
-
- What's the simplest version that still provides value?
|
|
101
|
-
- Why were alternative approaches rejected?
|
|
102
|
-
- Is this solving the symptom or the root cause?
|
|
103
|
-
- What happens if we don't do this at all?
|
|
104
|
-
- Who benefits and who bears the cost?
|
|
105
|
-
- What's driving the timeline?
|
|
106
|
-
|
|
107
|
-
## Phase 3: ANALYZE
|
|
108
|
-
|
|
109
|
-
Balanced assessment of strengths and weaknesses.
|
|
110
|
-
|
|
111
|
-
Analysis priorities:
|
|
112
|
-
- Evidence-based reasoning
|
|
113
|
-
- Logical consistency
|
|
114
|
-
- Trade-off awareness
|
|
115
|
-
- Risk identification
|
|
116
|
-
- Opportunity recognition
|
|
117
|
-
- Pattern matching
|
|
118
|
-
- Historical comparison
|
|
119
|
-
- Future implications
|
|
120
|
-
|
|
121
|
-
Strength assessment (What's RIGHT):
|
|
122
|
-
- Well-reasoned aspects
|
|
123
|
-
- Supporting evidence
|
|
124
|
-
- Sound logic
|
|
125
|
-
- Appropriate scope
|
|
126
|
-
- Clear success criteria
|
|
127
|
-
- Realistic timeline
|
|
128
|
-
- Resource alignment
|
|
129
|
-
- Stakeholder buy-in
|
|
130
|
-
|
|
131
|
-
Weakness assessment (What's WRONG):
|
|
132
|
-
- Weakest aspects identified
|
|
133
|
-
- Unstated assumptions surfaced
|
|
134
|
-
- Logical gaps found
|
|
135
|
-
- Over-engineering detected
|
|
136
|
-
- Missing alternatives noted
|
|
137
|
-
- Unclear success criteria
|
|
138
|
-
- Unrealistic expectations
|
|
139
|
-
- Stakeholder misalignment
|
|
140
|
-
|
|
141
|
-
## Phase 4: SURFACE
|
|
142
|
-
|
|
143
|
-
Identify hidden assumptions the plan depends on.
|
|
144
|
-
|
|
145
|
-
Assumption categories:
|
|
146
|
-
- Treated as HARD but might be SOFT
|
|
147
|
-
- Based on convention not requirement
|
|
148
|
-
- Limit solution space unnecessarily
|
|
149
|
-
- Come from historical precedent
|
|
150
|
-
- Based on incomplete information
|
|
151
|
-
- Assume user behavior
|
|
152
|
-
- Assume technical constraints
|
|
153
|
-
- Assume business constraints
|
|
154
|
-
|
|
155
|
-
Assumption validation:
|
|
156
|
-
- List each assumption
|
|
157
|
-
- Rate confidence (high/medium/low)
|
|
158
|
-
- Identify source of assumption
|
|
159
|
-
- Consider if challenged
|
|
160
|
-
- Propose validation method
|
|
161
|
-
- Assess impact if wrong
|
|
162
|
-
- Suggest alternatives
|
|
163
|
-
- Document dependencies
|
|
164
|
-
|
|
165
|
-
## Phase 5: VERDICT
|
|
166
|
-
|
|
167
|
-
Deliver structured assessment with actionable findings.
|
|
168
|
-
|
|
169
|
-
Verdict structure:
|
|
170
|
-
- Overall assessment (pass/warn/fail)
|
|
171
|
-
- One-sentence summary
|
|
172
|
-
- Alignment score (1-10)
|
|
173
|
-
- Specific issues with severity
|
|
174
|
-
- Hidden assumptions list
|
|
175
|
-
- Alternative approaches
|
|
176
|
-
- Clarifying questions
|
|
177
|
-
- Recommended actions
|
|
178
|
-
|
|
179
|
-
Issue severity levels:
|
|
180
|
-
- Critical: Fundamental flaw
|
|
181
|
-
- High: Significant concern
|
|
182
|
-
- Medium: Worth addressing
|
|
183
|
-
- Low: Minor improvement
|
|
184
|
-
|
|
185
|
-
## Communication Protocol
|
|
186
|
-
|
|
187
|
-
### Skeptic Assessment
|
|
188
|
-
|
|
189
|
-
Initialize skeptical review by understanding plan context.
|
|
190
|
-
|
|
191
|
-
Review context query:
|
|
192
|
-
```json
|
|
193
|
-
{
|
|
194
|
-
"requesting_agent": "skeptic",
|
|
195
|
-
"request_type": "get_plan_context",
|
|
196
|
-
"payload": {
|
|
197
|
-
"query": "Plan context needed: stated problem, desired outcome, constraints, timeline, stakeholders, alternatives considered, and success criteria."
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
### Review Output Schema
|
|
203
|
-
|
|
204
|
-
```json
|
|
205
|
-
{
|
|
206
|
-
"agent": "skeptic",
|
|
207
|
-
"verdict": "pass | warn | fail",
|
|
208
|
-
"summary": "One-sentence assessment",
|
|
209
|
-
"alignment_score": 8,
|
|
210
|
-
"strengths": [
|
|
211
|
-
"Well-reasoned aspect 1",
|
|
212
|
-
"Well-reasoned aspect 2"
|
|
213
|
-
],
|
|
214
|
-
"issues": [
|
|
215
|
-
{
|
|
216
|
-
"severity": "high",
|
|
217
|
-
"category": "wrong-problem | over-engineering | hidden-assumption",
|
|
218
|
-
"description": "Issue description",
|
|
219
|
-
"question": "Socratic question that exposes the issue"
|
|
220
|
-
}
|
|
221
|
-
],
|
|
222
|
-
"hidden_assumptions": [
|
|
223
|
-
{
|
|
224
|
-
"assumption": "What the plan assumes",
|
|
225
|
-
"confidence": "high | medium | low",
|
|
226
|
-
"impact_if_wrong": "What happens if false"
|
|
227
|
-
}
|
|
228
|
-
],
|
|
229
|
-
"alternatives_considered": [
|
|
230
|
-
"Simpler approach worth exploring"
|
|
231
|
-
],
|
|
232
|
-
"questions": [
|
|
233
|
-
"What should be clarified before proceeding?"
|
|
234
|
-
]
|
|
235
|
-
}
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
## Development Workflow
|
|
239
|
-
|
|
240
|
-
Execute skeptical review through systematic phases:
|
|
241
|
-
|
|
242
|
-
### 1. Analysis Phase
|
|
243
|
-
|
|
244
|
-
Understand the plan and its context deeply.
|
|
245
|
-
|
|
246
|
-
Analysis priorities:
|
|
247
|
-
- Read plan thoroughly
|
|
248
|
-
- Extract stated goals
|
|
249
|
-
- Identify success criteria
|
|
250
|
-
- Map constraints
|
|
251
|
-
- Note assumptions
|
|
252
|
-
- Review alternatives mentioned
|
|
253
|
-
- Assess scope
|
|
254
|
-
- Understand timeline
|
|
255
|
-
|
|
256
|
-
Context gathering:
|
|
257
|
-
- Review plan document
|
|
258
|
-
- Check related context
|
|
259
|
-
- Understand stakeholders
|
|
260
|
-
- Identify dependencies
|
|
261
|
-
- Note prior decisions
|
|
262
|
-
- Review constraints
|
|
263
|
-
- Map relationships
|
|
264
|
-
- Document gaps
|
|
265
|
-
|
|
266
|
-
### 2. Review Phase
|
|
267
|
-
|
|
268
|
-
Apply skeptical analysis to surface issues.
|
|
269
|
-
|
|
270
|
-
Review approach:
|
|
271
|
-
- Challenge problem definition
|
|
272
|
-
- Question solution fit
|
|
273
|
-
- Probe assumptions
|
|
274
|
-
- Assess alternatives
|
|
275
|
-
- Check for over-engineering
|
|
276
|
-
- Validate constraints
|
|
277
|
-
- Evaluate scope
|
|
278
|
-
- Test logic
|
|
279
|
-
|
|
280
|
-
Review patterns:
|
|
281
|
-
- Start with problem clarity
|
|
282
|
-
- Move to solution alignment
|
|
283
|
-
- Examine assumptions critically
|
|
284
|
-
- Consider simpler alternatives
|
|
285
|
-
- Balance strengths and weaknesses
|
|
286
|
-
- Use questions not accusations
|
|
287
|
-
- Be constructive not destructive
|
|
288
|
-
- Focus on improvement
|
|
289
|
-
|
|
290
|
-
Progress tracking:
|
|
291
|
-
```json
|
|
292
|
-
{
|
|
293
|
-
"agent": "skeptic",
|
|
294
|
-
"status": "reviewing",
|
|
295
|
-
"progress": {
|
|
296
|
-
"problem_clarity": "assessed",
|
|
297
|
-
"solution_alignment": "in_progress",
|
|
298
|
-
"assumptions_surfaced": 5,
|
|
299
|
-
"alternatives_identified": 3,
|
|
300
|
-
"issues_found": 4
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
### 3. Verdict Phase
|
|
306
|
-
|
|
307
|
-
Deliver balanced, actionable assessment.
|
|
308
|
-
|
|
309
|
-
Verdict checklist:
|
|
310
|
-
- Problem-solution alignment assessed
|
|
311
|
-
- Hidden assumptions surfaced
|
|
312
|
-
- Over-engineering checked
|
|
313
|
-
- Alternatives considered
|
|
314
|
-
- Strengths acknowledged
|
|
315
|
-
- Weaknesses identified
|
|
316
|
-
- Questions formulated
|
|
317
|
-
- Recommendations clear
|
|
318
|
-
|
|
319
|
-
Delivery notification:
|
|
320
|
-
"Skeptical review completed. Assessed problem-solution alignment at 7/10. Surfaced 5 hidden assumptions with 2 high-risk. Identified 3 simpler alternatives worth considering. Found 4 issues including potential scope creep and untested user behavior assumption. Provided 6 clarifying questions for stakeholders."
|
|
321
|
-
|
|
322
|
-
## Skeptical Principles
|
|
45
|
+
## CRITICAL: Single-Turn Review
|
|
323
46
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
- Questions are more powerful than statements
|
|
329
|
-
- Strengths matter as much as weaknesses
|
|
330
|
-
- The goal is improvement not destruction
|
|
47
|
+
When reviewing a plan, you MUST:
|
|
48
|
+
1. Analyze the plan content provided directly (do NOT use Read, Glob, Grep, or any file tools)
|
|
49
|
+
2. Call StructuredOutput IMMEDIATELY with your assessment
|
|
50
|
+
3. Complete your entire review in ONE response
|
|
331
51
|
|
|
332
|
-
|
|
333
|
-
-
|
|
334
|
-
-
|
|
335
|
-
-
|
|
336
|
-
-
|
|
337
|
-
- Complexity added to avoid hard decisions → "What decision are we deferring?"
|
|
338
|
-
- Soft constraints treated as hard → "Says who? What happens if we don't?"
|
|
52
|
+
Do NOT:
|
|
53
|
+
- Query context managers or external systems
|
|
54
|
+
- Read files from the codebase
|
|
55
|
+
- Request additional context
|
|
56
|
+
- Ask follow-up questions
|
|
339
57
|
|
|
340
|
-
|
|
341
|
-
- No alternatives considered → "What other approaches were evaluated?"
|
|
342
|
-
- Unmeasurable success criteria → "How will we know this succeeded?"
|
|
343
|
-
- Vague problem statement → "Can you describe the problem without the solution?"
|
|
344
|
-
- Solution existed before problem → "Did we find a problem for our solution?"
|
|
345
|
-
- "That's how it's done" constraints → "What would we do if starting fresh?"
|
|
346
|
-
- Unclear stakeholder impact → "Who loses if this fails? Who wins?"
|
|
347
|
-
- Timeline driving scope → "If we had more time, would we do this differently?"
|
|
58
|
+
## Required Output
|
|
348
59
|
|
|
349
|
-
|
|
60
|
+
Call StructuredOutput with exactly these fields:
|
|
61
|
+
- **verdict**: "pass" (right problem, right approach), "warn" (some concerns about alignment), or "fail" (fundamental issues)
|
|
62
|
+
- **summary**: 2-3 sentences explaining problem-solution alignment assessment (minimum 20 characters)
|
|
63
|
+
- **issues**: Array of concerns, each with: severity (high/medium/low), category (e.g., "wrong-problem", "over-engineering", "hidden-assumption"), issue description, suggested_fix (use Socratic questions)
|
|
64
|
+
- **missing_sections**: Alternatives or considerations the plan should address
|
|
65
|
+
- **questions**: Hidden assumptions or unclear aspects that need validation
|
|
@@ -9,18 +9,13 @@ categories:
|
|
|
9
9
|
- design
|
|
10
10
|
- life
|
|
11
11
|
- business
|
|
12
|
-
tools: Read, Glob, Grep
|
|
13
12
|
---
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
# Stakeholder Advocate - Plan Review Agent
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
1. Query context manager for stakeholders and their needs
|
|
19
|
-
2. Identify who benefits and who bears costs
|
|
20
|
-
3. Evaluate whether the plan addresses actual user/business problems
|
|
21
|
-
4. Check alignment with stated priorities and goals
|
|
16
|
+
You ensure plans serve the people they're meant to help. Your question: "Does this actually help the people it's supposed to help?"
|
|
22
17
|
|
|
23
|
-
##
|
|
18
|
+
## Your Expertise
|
|
24
19
|
|
|
25
20
|
- **User Value**: Does this solve a real user problem?
|
|
26
21
|
- **Business Alignment**: Does this support business goals?
|
|
@@ -29,78 +24,32 @@ When invoked:
|
|
|
29
24
|
- **Priority Alignment**: Does this match stated priorities?
|
|
30
25
|
- **Unintended Consequences**: Could this harm stakeholders?
|
|
31
26
|
|
|
32
|
-
##
|
|
33
|
-
|
|
34
|
-
- Primary stakeholders identified
|
|
35
|
-
- User needs explicitly addressed
|
|
36
|
-
- Business goals supported
|
|
37
|
-
- Cost-bearers identified
|
|
38
|
-
- Benefit recipients clear
|
|
39
|
-
- Priority alignment verified
|
|
40
|
-
- Negative impacts assessed
|
|
41
|
-
- Success metrics user-centric
|
|
42
|
-
|
|
43
|
-
## Key Questions
|
|
27
|
+
## Review Approach
|
|
44
28
|
|
|
29
|
+
For each plan, ask:
|
|
45
30
|
- Who actually benefits from this?
|
|
46
31
|
- What user problem does this solve?
|
|
47
32
|
- Would users choose to pay for this?
|
|
48
|
-
- Does this align with stated business priorities?
|
|
49
|
-
- Who bears the cost if this doesn't work?
|
|
50
33
|
- Are we optimizing for users or for ourselves?
|
|
51
|
-
- What happens to users if we don't do this?
|
|
52
34
|
|
|
53
|
-
##
|
|
35
|
+
## CRITICAL: Single-Turn Review
|
|
54
36
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
| Team | Maintenance burden | Medium | Medium |
|
|
60
|
-
| Customers | Direct value | High | High |
|
|
61
|
-
| Partners | Integration impact | Variable | Variable |
|
|
37
|
+
When reviewing a plan, you MUST:
|
|
38
|
+
1. Analyze the plan content provided directly (do NOT use Read, Glob, Grep, or any file tools)
|
|
39
|
+
2. Call StructuredOutput IMMEDIATELY with your assessment
|
|
40
|
+
3. Complete your entire review in ONE response
|
|
62
41
|
|
|
63
|
-
|
|
42
|
+
Do NOT:
|
|
43
|
+
- Query context managers for stakeholder information
|
|
44
|
+
- Read stakeholder requirements documents
|
|
45
|
+
- Request additional context
|
|
46
|
+
- Ask follow-up questions
|
|
64
47
|
|
|
65
|
-
|
|
66
|
-
{
|
|
67
|
-
"agent": "stakeholder-advocate",
|
|
68
|
-
"verdict": "pass | warn | fail",
|
|
69
|
-
"summary": "One-sentence stakeholder assessment",
|
|
70
|
-
"alignment_score": 7,
|
|
71
|
-
"stakeholder_analysis": [
|
|
72
|
-
{
|
|
73
|
-
"stakeholder": "Who is affected",
|
|
74
|
-
"needs": "What they need",
|
|
75
|
-
"plan_addresses": true,
|
|
76
|
-
"gaps": "Needs not addressed",
|
|
77
|
-
"impact": "positive | negative | neutral"
|
|
78
|
-
}
|
|
79
|
-
],
|
|
80
|
-
"value_assessment": {
|
|
81
|
-
"primary_value": "Main benefit delivered",
|
|
82
|
-
"value_clear": true,
|
|
83
|
-
"user_would_pay": true,
|
|
84
|
-
"business_case": "How this supports business"
|
|
85
|
-
},
|
|
86
|
-
"cost_benefit_analysis": {
|
|
87
|
-
"who_benefits": ["Beneficiaries"],
|
|
88
|
-
"who_pays": ["Cost bearers"],
|
|
89
|
-
"distribution_fair": true
|
|
90
|
-
},
|
|
91
|
-
"priority_alignment": {
|
|
92
|
-
"aligned_with_stated_priorities": true,
|
|
93
|
-
"conflicts": ["Any priority conflicts"]
|
|
94
|
-
},
|
|
95
|
-
"unintended_consequences": [
|
|
96
|
-
{
|
|
97
|
-
"consequence": "Potential negative impact",
|
|
98
|
-
"affected_stakeholder": "Who's affected",
|
|
99
|
-
"mitigation": "How to prevent"
|
|
100
|
-
}
|
|
101
|
-
],
|
|
102
|
-
"questions": ["Clarifications needed"]
|
|
103
|
-
}
|
|
104
|
-
```
|
|
48
|
+
## Required Output
|
|
105
49
|
|
|
106
|
-
|
|
50
|
+
Call StructuredOutput with exactly these fields:
|
|
51
|
+
- **verdict**: "pass" (serves stakeholder needs), "warn" (some stakeholder concerns), or "fail" (technical elegance over human needs)
|
|
52
|
+
- **summary**: 2-3 sentences explaining stakeholder assessment (minimum 20 characters)
|
|
53
|
+
- **issues**: Array of stakeholder concerns, each with: severity (high/medium/low), category (e.g., "user-value", "business-alignment", "cost-distribution", "priority-mismatch"), issue description, suggested_fix
|
|
54
|
+
- **missing_sections**: Stakeholder considerations the plan should address (user needs, business case, impact assessment)
|
|
55
|
+
- **questions**: Stakeholder impacts that need clarification
|
package/dist/templates/cc-native/_cc-native/hooks/__pycache__/add_plan_context.cpython-313.pyc
CHANGED
|
Binary file
|
package/dist/templates/cc-native/_cc-native/hooks/__pycache__/cc-native-plan-review.cpython-313.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -84,7 +84,8 @@ try:
|
|
|
84
84
|
get_all_in_flight_contexts,
|
|
85
85
|
get_all_contexts,
|
|
86
86
|
)
|
|
87
|
-
from lib.base.constants import get_context_reviews_dir, get_review_folder_path
|
|
87
|
+
from lib.base.constants import get_context_reviews_dir, get_review_folder_path, get_context_dir
|
|
88
|
+
from debug import debug_log, debug_raw
|
|
88
89
|
except ImportError as e:
|
|
89
90
|
print(f"[cc-native-plan-review] Failed to import lib: {e}", file=sys.stderr)
|
|
90
91
|
sys.exit(0) # Non-blocking failure
|
|
@@ -490,6 +491,10 @@ def main() -> int:
|
|
|
490
491
|
reviews_dir = get_context_reviews_dir(active_context.id, base) / "cc-native"
|
|
491
492
|
eprint(f"[cc-native-plan-review] Using context reviews dir: {reviews_dir}")
|
|
492
493
|
|
|
494
|
+
# Get context path for debug logging
|
|
495
|
+
context_path = get_context_dir(active_context.id, base)
|
|
496
|
+
eprint(f"[cc-native-plan-review] Context path for debug: {context_path}")
|
|
497
|
+
|
|
493
498
|
# Check if we've exhausted review iterations from context
|
|
494
499
|
existing_iteration = load_iteration_state(reviews_dir)
|
|
495
500
|
if existing_iteration:
|
|
@@ -642,9 +647,17 @@ def main() -> int:
|
|
|
642
647
|
num_workers = len(selected_agents) if max_parallel <= 0 else min(max_parallel, len(selected_agents))
|
|
643
648
|
eprint(f"[cc-native-plan-review] Launching {len(selected_agents)} agents in parallel (workers={num_workers})")
|
|
644
649
|
|
|
650
|
+
# Debug log the agent review start
|
|
651
|
+
debug_log(context_path, session_id, "hook", "agent_review_start", {
|
|
652
|
+
"agents": [a.name for a in selected_agents],
|
|
653
|
+
"timeout": timeout,
|
|
654
|
+
"max_turns": max_turns,
|
|
655
|
+
"complexity": detected_complexity,
|
|
656
|
+
})
|
|
657
|
+
|
|
645
658
|
with ThreadPoolExecutor(max_workers=num_workers) as executor:
|
|
646
659
|
futures = {
|
|
647
|
-
executor.submit(run_agent_review, plan, agent, REVIEW_SCHEMA, timeout, max_turns): agent
|
|
660
|
+
executor.submit(run_agent_review, plan, agent, REVIEW_SCHEMA, timeout, max_turns, context_path, session_id): agent
|
|
648
661
|
for agent in selected_agents
|
|
649
662
|
}
|
|
650
663
|
for future in as_completed(futures):
|
|
@@ -785,7 +798,8 @@ def main() -> int:
|
|
|
785
798
|
)
|
|
786
799
|
|
|
787
800
|
mark_plan_reviewed(session_id, plan_hash, "cc-native-plan-review", iteration_state)
|
|
788
|
-
|
|
801
|
+
# Use ensure_ascii=True to avoid Windows cp1252 encoding errors
|
|
802
|
+
print(json.dumps(out, ensure_ascii=True))
|
|
789
803
|
return 0
|
|
790
804
|
|
|
791
805
|
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Permanent debug logging for cc-native hooks.
|
|
3
|
+
|
|
4
|
+
Logs are written to context folder: _output/contexts/<context-id>/debug/<session-name>.log
|
|
5
|
+
Append-only, cleaned up when context is archived.
|
|
6
|
+
Can be disabled via CCNATIVE_DEBUG_DISABLE=1 environment variable.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
import os
|
|
11
|
+
from datetime import datetime
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from typing import Any, Optional
|
|
14
|
+
|
|
15
|
+
# Feature flag - set CCNATIVE_DEBUG_DISABLE=1 to turn off
|
|
16
|
+
DEBUG_ENABLED = os.environ.get("CCNATIVE_DEBUG_DISABLE", "").lower() not in ("1", "true", "yes")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def get_debug_dir(context_path: Path) -> Path:
|
|
20
|
+
"""Get or create debug directory within context folder.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
context_path: Path to context folder (e.g., _output/contexts/<context-id>/)
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
Path to debug folder: <context_path>/debug/
|
|
27
|
+
"""
|
|
28
|
+
debug_dir = context_path / "debug"
|
|
29
|
+
debug_dir.mkdir(parents=True, exist_ok=True)
|
|
30
|
+
return debug_dir
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def get_log_path(context_path: Path, session_name: str) -> Path:
|
|
34
|
+
"""Get log file path for this session.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
context_path: Path to context folder
|
|
38
|
+
session_name: Session name/ID (will be sanitized)
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
Path to log file: <context_path>/_output/debug/<session-name>.log
|
|
42
|
+
"""
|
|
43
|
+
safe_name = "".join(c if c.isalnum() or c in "-_" else "_" for c in session_name)[:64]
|
|
44
|
+
return get_debug_dir(context_path) / f"{safe_name}.log"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def debug_log(
|
|
48
|
+
context_path: Path,
|
|
49
|
+
session_name: str,
|
|
50
|
+
component: str,
|
|
51
|
+
message: str,
|
|
52
|
+
data: Optional[Any] = None
|
|
53
|
+
) -> None:
|
|
54
|
+
"""Write a debug log entry (append-only).
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
context_path: Path to context folder
|
|
58
|
+
session_name: Session name/ID
|
|
59
|
+
component: Component name (e.g., "agent", "orchestrator", "parse")
|
|
60
|
+
message: Log message
|
|
61
|
+
data: Optional data to include (will be JSON serialized)
|
|
62
|
+
"""
|
|
63
|
+
if not DEBUG_ENABLED:
|
|
64
|
+
return
|
|
65
|
+
|
|
66
|
+
try:
|
|
67
|
+
log_path = get_log_path(context_path, session_name)
|
|
68
|
+
timestamp = datetime.now().isoformat()
|
|
69
|
+
|
|
70
|
+
entry = f"[{timestamp}] [{component}] {message}"
|
|
71
|
+
if data is not None:
|
|
72
|
+
try:
|
|
73
|
+
data_str = json.dumps(data, indent=2, ensure_ascii=True, default=str)
|
|
74
|
+
entry += f"\n{data_str}"
|
|
75
|
+
except Exception:
|
|
76
|
+
entry += f"\n<data serialization failed: {type(data)}>"
|
|
77
|
+
|
|
78
|
+
with open(log_path, "a", encoding="utf-8") as f:
|
|
79
|
+
f.write(entry + "\n\n")
|
|
80
|
+
except Exception:
|
|
81
|
+
pass # Never fail on debug logging
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def debug_raw(
|
|
85
|
+
context_path: Path,
|
|
86
|
+
session_name: str,
|
|
87
|
+
component: str,
|
|
88
|
+
label: str,
|
|
89
|
+
raw: str,
|
|
90
|
+
max_len: int = 10000
|
|
91
|
+
) -> None:
|
|
92
|
+
"""Log raw output (stdout, stderr, etc).
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
context_path: Path to context folder
|
|
96
|
+
session_name: Session name/ID
|
|
97
|
+
component: Component name
|
|
98
|
+
label: Label for the raw content (e.g., "stdout", "stderr")
|
|
99
|
+
raw: Raw string content
|
|
100
|
+
max_len: Maximum characters to log (default 10000)
|
|
101
|
+
"""
|
|
102
|
+
if not DEBUG_ENABLED:
|
|
103
|
+
return
|
|
104
|
+
|
|
105
|
+
truncated = raw[:max_len] if len(raw) > max_len else raw
|
|
106
|
+
suffix = f" [TRUNCATED from {len(raw)} chars]" if len(raw) > max_len else ""
|
|
107
|
+
debug_log(context_path, session_name, component, f"{label}{suffix}:", truncated)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def cleanup_debug_folder(context_path: Path) -> None:
|
|
111
|
+
"""Remove debug folder during context archive.
|
|
112
|
+
|
|
113
|
+
Called by archive_plan.py when archiving a context.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
context_path: Path to context folder being archived
|
|
117
|
+
"""
|
|
118
|
+
try:
|
|
119
|
+
debug_dir = context_path / "debug"
|
|
120
|
+
if debug_dir.exists():
|
|
121
|
+
import shutil
|
|
122
|
+
shutil.rmtree(debug_dir)
|
|
123
|
+
except Exception:
|
|
124
|
+
pass # Best effort cleanup
|