start-vibing 1.1.2 → 1.1.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.
Files changed (38) hide show
  1. package/package.json +1 -1
  2. package/template/.claude/CLAUDE.md +129 -168
  3. package/template/.claude/agents/analyzer.md +0 -14
  4. package/template/.claude/agents/commit-manager.md +0 -19
  5. package/template/.claude/agents/documenter.md +0 -10
  6. package/template/.claude/agents/domain-updater.md +194 -200
  7. package/template/.claude/agents/final-validator.md +0 -18
  8. package/template/.claude/agents/orchestrator.md +36 -34
  9. package/template/.claude/agents/quality-checker.md +0 -24
  10. package/template/.claude/agents/research.md +299 -262
  11. package/template/.claude/agents/security-auditor.md +1 -14
  12. package/template/.claude/agents/tester.md +0 -8
  13. package/template/.claude/agents/ui-ux-reviewer.md +80 -18
  14. package/template/.claude/commands/feature.md +48 -102
  15. package/template/.claude/config/README.md +30 -30
  16. package/template/.claude/config/project-config.json +53 -53
  17. package/template/.claude/config/quality-gates.json +46 -46
  18. package/template/.claude/config/security-rules.json +45 -45
  19. package/template/.claude/config/testing-config.json +168 -168
  20. package/template/.claude/hooks/SETUP.md +52 -181
  21. package/template/.claude/hooks/user-prompt-submit.py +184 -46
  22. package/template/.claude/settings.json +0 -39
  23. package/template/.claude/skills/codebase-knowledge/SKILL.md +145 -145
  24. package/template/.claude/skills/codebase-knowledge/domains/claude-system.md +260 -321
  25. package/template/.claude/skills/docs-tracker/SKILL.md +239 -239
  26. package/template/.claude/skills/final-check/SKILL.md +284 -284
  27. package/template/.claude/skills/quality-gate/SKILL.md +278 -278
  28. package/template/.claude/skills/research-cache/SKILL.md +207 -207
  29. package/template/.claude/skills/security-scan/SKILL.md +206 -206
  30. package/template/.claude/skills/test-coverage/SKILL.md +441 -441
  31. package/template/.claude/skills/ui-ux-audit/SKILL.md +254 -254
  32. package/template/.claude/config/domain-mapping.json +0 -26
  33. package/template/.claude/hooks/post-tool-use.py +0 -155
  34. package/template/.claude/hooks/pre-tool-use.py +0 -159
  35. package/template/.claude/hooks/stop-validation.py +0 -155
  36. package/template/.claude/hooks/validate-commit.py +0 -200
  37. package/template/.claude/hooks/workflow-manager.py +0 -350
  38. package/template/.claude/workflow-state.schema.json +0 -200
@@ -1,350 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Workflow Manager - Helper Script for Agents
4
-
5
- This script provides utilities for agents to update workflow state.
6
- Called by agents to track their execution.
7
-
8
- Usage:
9
- workflow-manager.py start-task --type feature --description "Add login"
10
- workflow-manager.py agent-executed --agent analyzer --result approved
11
- workflow-manager.py approve-files --files "src/*.ts" "app/page.tsx"
12
- workflow-manager.py quality-gate --gate typecheck --passed true
13
- workflow-manager.py security-audit --result approved
14
- workflow-manager.py final-validation --result approved --ready-to-commit true
15
- workflow-manager.py complete-task --commit-hash abc123
16
- """
17
-
18
- import json
19
- import sys
20
- import os
21
- import argparse
22
- from datetime import datetime
23
- from pathlib import Path
24
-
25
- PROJECT_DIR = os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
26
- WORKFLOW_STATE_PATH = Path(PROJECT_DIR) / '.claude' / 'workflow-state.json'
27
-
28
-
29
- def load_state():
30
- if not WORKFLOW_STATE_PATH.exists():
31
- return {"version": "1.0.0", "currentTask": None, "sessions": []}
32
- with open(WORKFLOW_STATE_PATH) as f:
33
- return json.load(f)
34
-
35
-
36
- def save_state(state):
37
- WORKFLOW_STATE_PATH.parent.mkdir(parents=True, exist_ok=True)
38
- with open(WORKFLOW_STATE_PATH, 'w') as f:
39
- json.dump(state, f, indent=2)
40
-
41
-
42
- def start_task(args):
43
- """Start a new task"""
44
- state = load_state()
45
-
46
- # Archive current task if exists
47
- if state.get('currentTask'):
48
- print("Warning: Previous task was not completed. Archiving.", file=sys.stderr)
49
-
50
- task_id = datetime.now().strftime('%Y%m%d_%H%M%S')
51
-
52
- state['currentTask'] = {
53
- 'id': task_id,
54
- 'type': args.type,
55
- 'description': args.description,
56
- 'startedAt': datetime.now().isoformat(),
57
- 'agents': {
58
- 'orchestrator': {'executed': True, 'executedAt': datetime.now().isoformat(), 'result': 'approved'},
59
- 'analyzer': {'executed': False},
60
- 'research': {'executed': False},
61
- 'uiUxReviewer': {'executed': False},
62
- 'documenter': {'executed': False},
63
- 'tester': {'executed': False},
64
- 'securityAuditor': {'executed': False},
65
- 'qualityChecker': {'executed': False},
66
- 'finalValidator': {'executed': False},
67
- 'domainUpdater': {'executed': False},
68
- 'commitManager': {'executed': False},
69
- },
70
- 'approvedFiles': [],
71
- 'modifiedFiles': [],
72
- 'testsCreated': [],
73
- 'docsUpdated': [],
74
- 'qualityGates': {},
75
- 'securityAudit': {},
76
- 'finalValidation': {}
77
- }
78
-
79
- save_state(state)
80
- print(f"[OK] Task started: {task_id}")
81
- print(f" Type: {args.type}")
82
- print(f" Description: {args.description}")
83
-
84
-
85
- def agent_executed(args):
86
- """Mark an agent as executed"""
87
- state = load_state()
88
-
89
- if not state.get('currentTask'):
90
- print("Error: No active task", file=sys.stderr)
91
- sys.exit(1)
92
-
93
- # Map CLI names to JSON keys
94
- agent_map = {
95
- 'orchestrator': 'orchestrator',
96
- 'analyzer': 'analyzer',
97
- 'research': 'research',
98
- 'ui-ux-reviewer': 'uiUxReviewer',
99
- 'documenter': 'documenter',
100
- 'tester': 'tester',
101
- 'security-auditor': 'securityAuditor',
102
- 'quality-checker': 'qualityChecker',
103
- 'final-validator': 'finalValidator',
104
- 'domain-updater': 'domainUpdater',
105
- 'domainUpdater': 'domainUpdater',
106
- 'commit-manager': 'commitManager',
107
- }
108
-
109
- agent_key = agent_map.get(args.agent, args.agent)
110
-
111
- state['currentTask']['agents'][agent_key] = {
112
- 'executed': True,
113
- 'executedAt': datetime.now().isoformat(),
114
- 'result': args.result,
115
- 'notes': args.notes or ''
116
- }
117
-
118
- save_state(state)
119
- print(f"[OK] Agent '{args.agent}' marked as executed with result: {args.result}")
120
-
121
-
122
- def approve_files(args):
123
- """Add files to approved list"""
124
- state = load_state()
125
-
126
- if not state.get('currentTask'):
127
- print("Error: No active task", file=sys.stderr)
128
- sys.exit(1)
129
-
130
- # Get current approved files
131
- approved = state['currentTask'].get('approvedFiles', [])
132
-
133
- # Add new files
134
- for file in args.files:
135
- if file not in approved:
136
- approved.append(file)
137
-
138
- state['currentTask']['approvedFiles'] = approved
139
-
140
- save_state(state)
141
- print(f"[OK] Approved {len(args.files)} file(s) for modification:")
142
- for f in args.files:
143
- print(f" - {f}")
144
-
145
-
146
- def quality_gate(args):
147
- """Record quality gate result"""
148
- state = load_state()
149
-
150
- if not state.get('currentTask'):
151
- print("Error: No active task", file=sys.stderr)
152
- sys.exit(1)
153
-
154
- passed = args.passed.lower() == 'true'
155
-
156
- state['currentTask']['qualityGates'][args.gate] = {
157
- 'passed': passed,
158
- 'executedAt': datetime.now().isoformat(),
159
- 'errors': args.errors.split(',') if args.errors else []
160
- }
161
-
162
- save_state(state)
163
- status = "[PASS]" if passed else "[FAIL]"
164
- print(f"{status}: Quality gate '{args.gate}'")
165
-
166
-
167
- def security_audit(args):
168
- """Record security audit result"""
169
- state = load_state()
170
-
171
- if not state.get('currentTask'):
172
- print("Error: No active task", file=sys.stderr)
173
- sys.exit(1)
174
-
175
- state['currentTask']['securityAudit'] = {
176
- 'executed': True,
177
- 'executedAt': datetime.now().isoformat(),
178
- 'result': args.result,
179
- 'vulnerabilities': args.vulnerabilities.split(',') if args.vulnerabilities else []
180
- }
181
-
182
- # Update agent status
183
- state['currentTask']['agents']['securityAuditor'] = {
184
- 'executed': True,
185
- 'executedAt': datetime.now().isoformat(),
186
- 'result': args.result
187
- }
188
-
189
- save_state(state)
190
- status = "[APPROVED]" if args.result == 'approved' else "[VETOED]"
191
- print(f"{status}: Security audit")
192
-
193
-
194
- def final_validation(args):
195
- """Record final validation result"""
196
- state = load_state()
197
-
198
- if not state.get('currentTask'):
199
- print("Error: No active task", file=sys.stderr)
200
- sys.exit(1)
201
-
202
- ready = args.ready_to_commit.lower() == 'true' if args.ready_to_commit else False
203
-
204
- state['currentTask']['finalValidation'] = {
205
- 'executed': True,
206
- 'executedAt': datetime.now().isoformat(),
207
- 'result': args.result,
208
- 'violations': args.violations.split(',') if args.violations else [],
209
- 'readyToCommit': ready
210
- }
211
-
212
- # Update agent status
213
- state['currentTask']['agents']['finalValidator'] = {
214
- 'executed': True,
215
- 'executedAt': datetime.now().isoformat(),
216
- 'result': args.result
217
- }
218
-
219
- save_state(state)
220
- status = "[APPROVED]" if args.result == 'approved' else "[VETOED]"
221
- print(f"{status}: Final validation (ready to commit: {ready})")
222
-
223
-
224
- def complete_task(args):
225
- """Complete current task and archive"""
226
- state = load_state()
227
-
228
- if not state.get('currentTask'):
229
- print("Error: No active task", file=sys.stderr)
230
- sys.exit(1)
231
-
232
- task = state['currentTask']
233
-
234
- # Check if ready to commit
235
- final = task.get('finalValidation', {})
236
- if not final.get('readyToCommit'):
237
- print("Error: Task is not ready to commit. Run final validation first.", file=sys.stderr)
238
- sys.exit(1)
239
-
240
- # Archive task
241
- session = {
242
- 'id': task['id'],
243
- 'task': task,
244
- 'completedAt': datetime.now().isoformat(),
245
- 'commitHash': args.commit_hash
246
- }
247
-
248
- state['sessions'].append(session)
249
- state['currentTask'] = None
250
-
251
- save_state(state)
252
- print(f"[OK] Task completed and archived")
253
- print(f" Commit: {args.commit_hash}")
254
-
255
-
256
- def show_status(args):
257
- """Show current workflow status"""
258
- state = load_state()
259
-
260
- if not state.get('currentTask'):
261
- print("No active task")
262
- print("Run: workflow-manager.py start-task --type <type> --description <desc>")
263
- return
264
-
265
- task = state['currentTask']
266
- print(f"Current Task: {task['id']}")
267
- print(f"Type: {task['type']}")
268
- print(f"Description: {task['description']}")
269
- print(f"Started: {task['startedAt']}")
270
- print()
271
- print("Agents:")
272
- for name, agent_status in task['agents'].items():
273
- icon = "[x]" if agent_status.get('executed') else "[ ]"
274
- result = f" ({agent_status.get('result', 'pending')})" if agent_status.get('executed') else ""
275
- print(f" {icon} {name}{result}")
276
- print()
277
- print(f"Approved files: {len(task.get('approvedFiles', []))}")
278
- print(f"Modified files: {len(task.get('modifiedFiles', []))}")
279
- print(f"Tests created: {len(task.get('testsCreated', []))}")
280
- print(f"Docs updated: {len(task.get('docsUpdated', []))}")
281
-
282
-
283
- def main():
284
- parser = argparse.ArgumentParser(description='Workflow Manager')
285
- subparsers = parser.add_subparsers(dest='command', help='Commands')
286
-
287
- # start-task
288
- p = subparsers.add_parser('start-task', help='Start a new task')
289
- p.add_argument('--type', required=True, choices=['feature', 'fix', 'refactor', 'config', 'research'])
290
- p.add_argument('--description', required=True)
291
-
292
- # agent-executed
293
- p = subparsers.add_parser('agent-executed', help='Mark agent as executed')
294
- p.add_argument('--agent', required=True)
295
- p.add_argument('--result', required=True, choices=['approved', 'vetoed', 'skipped'])
296
- p.add_argument('--notes', default='')
297
-
298
- # approve-files
299
- p = subparsers.add_parser('approve-files', help='Approve files for modification')
300
- p.add_argument('--files', nargs='+', required=True)
301
-
302
- # quality-gate
303
- p = subparsers.add_parser('quality-gate', help='Record quality gate result')
304
- p.add_argument('--gate', required=True, choices=['typecheck', 'lint', 'unitTests', 'e2eTests', 'build'])
305
- p.add_argument('--passed', required=True, choices=['true', 'false'])
306
- p.add_argument('--errors', default='')
307
-
308
- # security-audit
309
- p = subparsers.add_parser('security-audit', help='Record security audit')
310
- p.add_argument('--result', required=True, choices=['approved', 'vetoed'])
311
- p.add_argument('--vulnerabilities', default='')
312
-
313
- # final-validation
314
- p = subparsers.add_parser('final-validation', help='Record final validation')
315
- p.add_argument('--result', required=True, choices=['approved', 'vetoed'])
316
- p.add_argument('--ready-to-commit', default='false')
317
- p.add_argument('--violations', default='')
318
-
319
- # complete-task
320
- p = subparsers.add_parser('complete-task', help='Complete and archive task')
321
- p.add_argument('--commit-hash', required=True)
322
-
323
- # status
324
- subparsers.add_parser('status', help='Show current status')
325
-
326
- args = parser.parse_args()
327
-
328
- if args.command == 'start-task':
329
- start_task(args)
330
- elif args.command == 'agent-executed':
331
- agent_executed(args)
332
- elif args.command == 'approve-files':
333
- approve_files(args)
334
- elif args.command == 'quality-gate':
335
- quality_gate(args)
336
- elif args.command == 'security-audit':
337
- security_audit(args)
338
- elif args.command == 'final-validation':
339
- final_validation(args)
340
- elif args.command == 'complete-task':
341
- complete_task(args)
342
- elif args.command == 'status':
343
- show_status(args)
344
- else:
345
- parser.print_help()
346
- sys.exit(1)
347
-
348
-
349
- if __name__ == '__main__':
350
- main()
@@ -1,200 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "title": "Claude Workflow State",
4
- "description": "Tracks agent workflow execution state for enforcement",
5
- "type": "object",
6
- "required": ["version", "currentTask", "sessions"],
7
- "properties": {
8
- "version": {
9
- "type": "string",
10
- "description": "Schema version"
11
- },
12
- "currentTask": {
13
- "oneOf": [{ "type": "null" }, { "$ref": "#/definitions/task" }],
14
- "description": "Currently active task (null if no task in progress)"
15
- },
16
- "sessions": {
17
- "type": "array",
18
- "items": { "$ref": "#/definitions/session" },
19
- "description": "History of completed sessions"
20
- }
21
- },
22
- "definitions": {
23
- "task": {
24
- "type": "object",
25
- "required": [
26
- "id",
27
- "type",
28
- "description",
29
- "startedAt",
30
- "agents",
31
- "approvedFiles",
32
- "modifiedFiles"
33
- ],
34
- "properties": {
35
- "id": {
36
- "type": "string",
37
- "description": "Unique task ID (timestamp-based)"
38
- },
39
- "type": {
40
- "type": "string",
41
- "enum": ["feature", "fix", "refactor", "config", "research"],
42
- "description": "Task classification"
43
- },
44
- "description": {
45
- "type": "string",
46
- "description": "Task description from user"
47
- },
48
- "startedAt": {
49
- "type": "string",
50
- "format": "date-time",
51
- "description": "When task started"
52
- },
53
- "agents": {
54
- "$ref": "#/definitions/agentExecution",
55
- "description": "Track which agents have executed"
56
- },
57
- "approvedFiles": {
58
- "type": "array",
59
- "items": { "type": "string" },
60
- "description": "Files approved for modification by analyzer"
61
- },
62
- "modifiedFiles": {
63
- "type": "array",
64
- "items": { "$ref": "#/definitions/fileModification" },
65
- "description": "Files actually modified"
66
- },
67
- "testsCreated": {
68
- "type": "array",
69
- "items": { "type": "string" },
70
- "description": "Test files created"
71
- },
72
- "docsUpdated": {
73
- "type": "array",
74
- "items": { "type": "string" },
75
- "description": "Documentation files updated"
76
- },
77
- "qualityGates": {
78
- "$ref": "#/definitions/qualityGates",
79
- "description": "Quality gate results"
80
- },
81
- "securityAudit": {
82
- "$ref": "#/definitions/securityAudit",
83
- "description": "Security audit result"
84
- },
85
- "finalValidation": {
86
- "$ref": "#/definitions/finalValidation",
87
- "description": "Final validation result"
88
- }
89
- }
90
- },
91
- "agentExecution": {
92
- "type": "object",
93
- "properties": {
94
- "orchestrator": { "$ref": "#/definitions/agentStatus" },
95
- "analyzer": { "$ref": "#/definitions/agentStatus" },
96
- "uiUxReviewer": { "$ref": "#/definitions/agentStatus" },
97
- "documenter": { "$ref": "#/definitions/agentStatus" },
98
- "tester": { "$ref": "#/definitions/agentStatus" },
99
- "securityAuditor": { "$ref": "#/definitions/agentStatus" },
100
- "qualityChecker": { "$ref": "#/definitions/agentStatus" },
101
- "finalValidator": { "$ref": "#/definitions/agentStatus" },
102
- "commitManager": { "$ref": "#/definitions/agentStatus" }
103
- }
104
- },
105
- "agentStatus": {
106
- "type": "object",
107
- "required": ["executed"],
108
- "properties": {
109
- "executed": {
110
- "type": "boolean",
111
- "description": "Whether this agent has executed"
112
- },
113
- "executedAt": {
114
- "type": "string",
115
- "format": "date-time",
116
- "description": "When executed"
117
- },
118
- "result": {
119
- "type": "string",
120
- "enum": ["pending", "approved", "vetoed", "skipped"],
121
- "description": "Agent result"
122
- },
123
- "notes": {
124
- "type": "string",
125
- "description": "Any notes from execution"
126
- }
127
- }
128
- },
129
- "fileModification": {
130
- "type": "object",
131
- "required": ["path", "action", "timestamp"],
132
- "properties": {
133
- "path": {
134
- "type": "string",
135
- "description": "File path"
136
- },
137
- "action": {
138
- "type": "string",
139
- "enum": ["created", "modified", "deleted"],
140
- "description": "Type of modification"
141
- },
142
- "timestamp": {
143
- "type": "string",
144
- "format": "date-time"
145
- },
146
- "approved": {
147
- "type": "boolean",
148
- "description": "Was this file in approvedFiles list?"
149
- }
150
- }
151
- },
152
- "qualityGates": {
153
- "type": "object",
154
- "properties": {
155
- "typecheck": { "$ref": "#/definitions/gateResult" },
156
- "lint": { "$ref": "#/definitions/gateResult" },
157
- "unitTests": { "$ref": "#/definitions/gateResult" },
158
- "e2eTests": { "$ref": "#/definitions/gateResult" },
159
- "build": { "$ref": "#/definitions/gateResult" }
160
- }
161
- },
162
- "gateResult": {
163
- "type": "object",
164
- "properties": {
165
- "passed": { "type": "boolean" },
166
- "executedAt": { "type": "string", "format": "date-time" },
167
- "errors": { "type": "array", "items": { "type": "string" } }
168
- }
169
- },
170
- "securityAudit": {
171
- "type": "object",
172
- "properties": {
173
- "executed": { "type": "boolean" },
174
- "executedAt": { "type": "string", "format": "date-time" },
175
- "result": { "type": "string", "enum": ["approved", "vetoed"] },
176
- "vulnerabilities": { "type": "array", "items": { "type": "string" } }
177
- }
178
- },
179
- "finalValidation": {
180
- "type": "object",
181
- "properties": {
182
- "executed": { "type": "boolean" },
183
- "executedAt": { "type": "string", "format": "date-time" },
184
- "result": { "type": "string", "enum": ["approved", "vetoed"] },
185
- "violations": { "type": "array", "items": { "type": "string" } },
186
- "readyToCommit": { "type": "boolean" }
187
- }
188
- },
189
- "session": {
190
- "type": "object",
191
- "required": ["id", "task", "completedAt", "commitHash"],
192
- "properties": {
193
- "id": { "type": "string" },
194
- "task": { "$ref": "#/definitions/task" },
195
- "completedAt": { "type": "string", "format": "date-time" },
196
- "commitHash": { "type": "string" }
197
- }
198
- }
199
- }
200
- }