start-vibing 1.1.2 → 1.1.3

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 (39) hide show
  1. package/package.json +1 -1
  2. package/template/.claude/CLAUDE.md +129 -168
  3. package/template/.claude/README.md +135 -126
  4. package/template/.claude/agents/analyzer.md +0 -14
  5. package/template/.claude/agents/commit-manager.md +0 -19
  6. package/template/.claude/agents/documenter.md +0 -10
  7. package/template/.claude/agents/domain-updater.md +194 -200
  8. package/template/.claude/agents/final-validator.md +0 -18
  9. package/template/.claude/agents/orchestrator.md +0 -12
  10. package/template/.claude/agents/quality-checker.md +0 -24
  11. package/template/.claude/agents/research.md +251 -262
  12. package/template/.claude/agents/security-auditor.md +1 -14
  13. package/template/.claude/agents/tester.md +0 -8
  14. package/template/.claude/agents/ui-ux-reviewer.md +0 -8
  15. package/template/.claude/commands/feature.md +48 -102
  16. package/template/.claude/config/README.md +30 -30
  17. package/template/.claude/config/domain-mapping.json +55 -26
  18. package/template/.claude/config/project-config.json +56 -53
  19. package/template/.claude/config/quality-gates.json +46 -46
  20. package/template/.claude/config/security-rules.json +45 -45
  21. package/template/.claude/config/testing-config.json +168 -168
  22. package/template/.claude/hooks/SETUP.md +52 -181
  23. package/template/.claude/hooks/user-prompt-submit.py +37 -246
  24. package/template/.claude/settings.json +39 -267
  25. package/template/.claude/skills/codebase-knowledge/SKILL.md +71 -145
  26. package/template/.claude/skills/codebase-knowledge/domains/claude-system.md +54 -321
  27. package/template/.claude/skills/docs-tracker/SKILL.md +63 -239
  28. package/template/.claude/skills/final-check/SKILL.md +72 -284
  29. package/template/.claude/skills/quality-gate/SKILL.md +71 -278
  30. package/template/.claude/skills/research-cache/SKILL.md +73 -207
  31. package/template/.claude/skills/security-scan/SKILL.md +75 -206
  32. package/template/.claude/skills/test-coverage/SKILL.md +66 -441
  33. package/template/.claude/skills/ui-ux-audit/SKILL.md +68 -254
  34. package/template/.claude/hooks/post-tool-use.py +0 -155
  35. package/template/.claude/hooks/pre-tool-use.py +0 -159
  36. package/template/.claude/hooks/stop-validation.py +0 -155
  37. package/template/.claude/hooks/validate-commit.py +0 -200
  38. package/template/.claude/hooks/workflow-manager.py +0 -350
  39. package/template/.claude/workflow-state.schema.json +0 -200
@@ -1,277 +1,68 @@
1
1
  #!/usr/bin/env python3
2
2
  """
3
- UserPromptSubmit Hook - Agent Selection Enforcement
4
-
5
- This hook runs BEFORE Claude processes any user prompt and:
6
- 1. Lists all available agents
7
- 2. Analyzes the prompt to suggest the best agent
8
- 3. Reminds Claude to follow the workflow strictly
9
- 4. Prevents over-engineering and redundant file creation
10
-
11
- Output is sent to Claude as context before processing the user's request.
12
-
13
- Based on official Claude Code documentation:
14
- https://code.claude.com/docs/en/hooks.md
3
+ UserPromptSubmit Hook - Lightweight workflow guidance.
4
+ Provides brief context to Claude without verbose output.
15
5
  """
16
6
 
17
7
  import json
18
8
  import sys
19
- import os
20
- import re
21
- from pathlib import Path
22
-
23
- PROJECT_DIR = os.environ.get('CLAUDE_PROJECT_DIR', os.getcwd())
24
- WORKFLOW_STATE_PATH = Path(PROJECT_DIR) / '.claude' / 'workflow-state.json'
25
- SETTINGS_PATH = Path(PROJECT_DIR) / '.claude' / 'settings.json'
26
-
27
- # Agent definitions with triggers
28
- AGENTS = {
29
- 'orchestrator': {
30
- 'description': 'Coordinates entire development flow',
31
- 'triggers': ['implement feature', 'build', 'create', 'fix and test', 'full workflow', 'multi-step'],
32
- 'priority': 1,
33
- 'when': 'Task requires >2 agents or touches >3 files'
34
- },
35
- 'analyzer': {
36
- 'description': 'Analyzes impact before code modification',
37
- 'triggers': ['implement', 'add feature', 'fix bug', 'refactor', 'change', 'modify', 'update code'],
38
- 'priority': 2,
39
- 'when': 'BEFORE any Edit/Write to source files'
40
- },
41
- 'research': {
42
- 'description': 'Researches best practices and recent solutions (2024-2025)',
43
- 'triggers': ['research', 'investigate', 'study', 'best practice', 'how to', 'pattern'],
44
- 'priority': 3,
45
- 'when': 'AFTER analyzer - finds best practices before implementation'
46
- },
47
- 'ui-ux-reviewer': {
48
- 'description': 'Reviews UI/UX and researches competitors',
49
- 'triggers': ['ui', 'component', 'page', 'design', 'layout', 'style', 'responsive', 'frontend'],
50
- 'priority': 3,
51
- 'when': 'Files in components/, app/, or .tsx with JSX'
52
- },
53
- 'documenter': {
54
- 'description': 'Creates and maintains documentation',
55
- 'triggers': ['document', 'readme', 'docs', 'explain'],
56
- 'priority': 4,
57
- 'when': 'After code implementation completes'
58
- },
59
- 'tester': {
60
- 'description': 'Creates unit tests (Vitest) and E2E tests (Playwright)',
61
- 'triggers': ['test', 'coverage', 'spec', 'e2e'],
62
- 'priority': 5,
63
- 'when': 'After any code implementation'
64
- },
65
- 'security-auditor': {
66
- 'description': 'Audits security (CAN VETO)',
67
- 'triggers': ['auth', 'session', 'password', 'token', 'api', 'database', 'user data', 'security'],
68
- 'priority': 6,
69
- 'when': 'Code touches auth/, api/, server/, or sensitive data',
70
- 'can_veto': True
71
- },
72
- 'quality-checker': {
73
- 'description': 'Runs typecheck, lint, test, build',
74
- 'triggers': ['check', 'verify', 'validate', 'run tests', 'quality'],
75
- 'priority': 7,
76
- 'when': 'After implementation and tests complete'
77
- },
78
- 'final-validator': {
79
- 'description': 'Final validation before commit (CAN VETO)',
80
- 'triggers': ['final', 'commit ready', 'approve'],
81
- 'priority': 8,
82
- 'when': 'Before any commit operation',
83
- 'can_veto': True
84
- },
85
- 'commit-manager': {
86
- 'description': 'Creates conventional commits and completes workflow',
87
- 'triggers': ['commit', 'save changes', 'push', 'finalize', 'git'],
88
- 'priority': 10,
89
- 'when': 'FINAL step - after domain-updater, runs complete-task'
90
- },
91
- 'domain-updater': {
92
- 'description': 'Updates domain knowledge with session learnings',
93
- 'triggers': ['update domain', 'document learnings', 'session end'],
94
- 'priority': 9,
95
- 'when': 'BEFORE commit-manager - updates domains so git stays clean'
96
- }
97
- }
98
-
99
- # Workflow sequences (research after analyzer, domain-updater BEFORE commit-manager for clean git)
100
- WORKFLOWS = {
101
- 'feature': ['analyzer', 'research', 'ui-ux-reviewer', 'documenter', 'tester', 'security-auditor', 'quality-checker', 'final-validator', 'domain-updater', 'commit-manager'],
102
- 'fix': ['analyzer', 'research', 'tester', 'security-auditor', 'quality-checker', 'final-validator', 'domain-updater', 'commit-manager'],
103
- 'refactor': ['analyzer', 'tester', 'quality-checker', 'final-validator', 'domain-updater', 'commit-manager'],
104
- 'config': ['quality-checker', 'domain-updater', 'commit-manager']
105
- }
106
-
107
-
108
- def load_workflow_state():
109
- """Load current workflow state"""
110
- if not WORKFLOW_STATE_PATH.exists():
111
- return None
112
- try:
113
- with open(WORKFLOW_STATE_PATH) as f:
114
- return json.load(f)
115
- except (json.JSONDecodeError, IOError):
116
- return None
117
-
118
9
 
119
10
  def detect_task_type(prompt: str) -> str:
120
- """Detect task type from prompt"""
121
- prompt_lower = prompt.lower()
122
-
123
- if any(word in prompt_lower for word in ['bug', 'fix', 'error', 'broken', 'not working', 'issue']):
11
+ """Detect task type from prompt."""
12
+ p = prompt.lower()
13
+ if any(w in p for w in ['bug', 'fix', 'error', 'broken', 'issue']):
124
14
  return 'fix'
125
- elif any(word in prompt_lower for word in ['refactor', 'restructure', 'reorganize', 'clean up']):
15
+ if any(w in p for w in ['refactor', 'restructure', 'clean up']):
126
16
  return 'refactor'
127
- elif any(word in prompt_lower for word in ['config', 'setting', 'env', 'package.json', 'tsconfig']):
17
+ if any(w in p for w in ['config', 'setting', '.env', 'package.json']):
128
18
  return 'config'
129
- else:
130
- return 'feature'
131
-
132
-
133
- def detect_best_agent(prompt: str) -> tuple[str, str]:
134
- """Detect best agent for the task"""
135
- prompt_lower = prompt.lower()
136
-
137
- # Check for multi-step tasks first
138
- multi_step_indicators = ['and then', 'after that', 'also', 'implement', 'build', 'create feature']
139
- if any(indicator in prompt_lower for indicator in multi_step_indicators):
140
- return 'orchestrator', 'Multi-step task detected - orchestrator will coordinate all agents'
141
-
142
- # Check each agent's triggers
143
- matches = []
144
- for agent_name, agent_info in AGENTS.items():
145
- for trigger in agent_info['triggers']:
146
- if trigger in prompt_lower:
147
- matches.append((agent_name, agent_info['priority'], trigger))
148
-
149
- if matches:
150
- # Sort by priority (lower is better)
151
- matches.sort(key=lambda x: x[1])
152
- best = matches[0]
153
- return best[0], f"Matched trigger '{best[2]}'"
154
-
155
- # Default to orchestrator for unknown tasks
156
- return 'orchestrator', 'No specific trigger matched - orchestrator will analyze'
157
-
158
-
159
- def format_agent_list() -> str:
160
- """Format agent list for display"""
161
- lines = []
162
- for name, info in sorted(AGENTS.items(), key=lambda x: x[1]['priority']):
163
- veto = ' [CAN VETO]' if info.get('can_veto') else ''
164
- lines.append(f" - {name}: {info['description']}{veto}")
165
- return '\n'.join(lines)
166
-
167
-
168
- def format_workflow_status(state: dict) -> str:
169
- """Format current workflow status"""
170
- if not state or not state.get('currentTask'):
171
- return "STATUS: No active task. Start with orchestrator or workflow-manager.py start-task"
172
-
173
- task = state['currentTask']
174
- agents = task.get('agents', {})
175
-
176
- executed = [name for name, status in agents.items() if status.get('executed')]
177
- pending = [name for name, status in agents.items() if not status.get('executed')]
178
-
179
- return f"""STATUS: Task active
180
- ID: {task.get('id', 'unknown')}
181
- Type: {task.get('type', 'unknown')}
182
- Description: {task.get('description', 'unknown')}
183
- Executed: {', '.join(executed) if executed else 'none'}
184
- Pending: {', '.join(pending) if pending else 'none'}
185
- Approved files: {len(task.get('approvedFiles', []))}"""
186
-
19
+ return 'feature'
20
+
21
+ def get_workflow(task_type: str) -> list:
22
+ """Get workflow for task type."""
23
+ workflows = {
24
+ 'feature': ['commit-manager:branch', 'analyzer', 'research', 'implement', 'tester', 'quality-checker', 'domain-updater', 'commit-manager:commit'],
25
+ 'fix': ['commit-manager:branch', 'analyzer', 'implement', 'tester', 'quality-checker', 'domain-updater', 'commit-manager:commit'],
26
+ 'refactor': ['commit-manager:branch', 'analyzer', 'implement', 'tester', 'quality-checker', 'domain-updater', 'commit-manager:commit'],
27
+ 'config': ['quality-checker', 'commit-manager:commit']
28
+ }
29
+ return workflows.get(task_type, workflows['feature'])
187
30
 
188
31
  def main():
189
- # Read hook input from stdin
190
32
  try:
191
33
  hook_input = json.load(sys.stdin)
192
34
  except json.JSONDecodeError:
193
- hook_input = {}
194
-
195
- # Get user prompt (may not be available in all hook contexts)
196
- prompt = hook_input.get('user_prompt', hook_input.get('prompt', ''))
197
-
198
- # Load current state
199
- state = load_workflow_state()
200
-
201
- # Detect task type and best agent
202
- task_type = detect_task_type(prompt) if prompt else 'unknown'
203
- best_agent, reason = detect_best_agent(prompt) if prompt else ('orchestrator', 'Default')
35
+ sys.exit(0)
204
36
 
205
- # Build output message
206
- output = f"""
207
- ================================================================================
208
- WORKFLOW ENFORCEMENT - UserPromptSubmit Hook
209
- ================================================================================
37
+ prompt = hook_input.get('prompt', '')
38
+ if not prompt:
39
+ sys.exit(0)
210
40
 
211
- AVAILABLE AGENTS:
212
- {format_agent_list()}
41
+ task_type = detect_task_type(prompt)
42
+ workflow = get_workflow(task_type)
213
43
 
214
- TASK ANALYSIS:
215
- Detected type: {task_type}
216
- Recommended agent: {best_agent}
217
- Reason: {reason}
218
- Workflow sequence: {' -> '.join(WORKFLOWS.get(task_type, WORKFLOWS['feature']))}
44
+ # Compact context for Claude
45
+ context = f"""Task: {task_type}
46
+ Workflow: {' → '.join(workflow)}
219
47
 
220
- {format_workflow_status(state)}
48
+ Rules:
49
+ - START: commit-manager creates feature branch
50
+ - IMPLEMENT: follow workflow sequence
51
+ - UPDATE: domain-updater before commit
52
+ - END: commit-manager commits and merges to main
221
53
 
222
- ================================================================================
223
- CRITICAL: INVOKE AGENTS VIA TASK TOOL - NOT MANUALLY
224
- ================================================================================
54
+ Agents: analyzer, research, tester, quality-checker, security-auditor, documenter, ui-ux-reviewer, domain-updater, commit-manager"""
225
55
 
226
- You MUST use the Task tool with subagent_type to invoke agents.
227
- DO NOT execute agent logic manually - INVOKE the agent properly.
228
-
229
- AGENTS THAT CAN BE INVOKED VIA TASK TOOL:
230
- - commit-manager: Use Task(subagent_type="commit-manager", prompt="...")
231
- - analyzer: Use Task(subagent_type="analyzer", prompt="...")
232
- - tester: Use Task(subagent_type="tester", prompt="...")
233
- - security-auditor: Use Task(subagent_type="security-auditor", prompt="...")
234
- - quality-checker: Use Task(subagent_type="quality-checker", prompt="...")
235
- - final-validator: Use Task(subagent_type="final-validator", prompt="...")
236
- - documenter: Use Task(subagent_type="documenter", prompt="...")
237
- - ui-ux-reviewer: Use Task(subagent_type="ui-ux-reviewer", prompt="...")
238
- - orchestrator: Use Task(subagent_type="orchestrator", prompt="...")
239
-
240
- WRONG (manual execution):
241
- "Let me create the commit..." then git commands directly
242
-
243
- CORRECT (agent invocation):
244
- Use Task tool with subagent_type="commit-manager"
245
-
246
- ================================================================================
247
- MANDATORY RULES:
248
- ================================================================================
249
-
250
- 1. I WILL use Task tool to invoke agent: {best_agent}
251
- 2. I WILL NOT execute agent logic manually - ALWAYS invoke via Task tool
252
- 3. I WILL NOT create redundant files
253
- 4. I WILL NOT over-engineer - keep solutions simple and focused
254
- 5. I WILL follow the workflow sequence strictly
255
- 6. I MUST run analyzer BEFORE any Edit/Write to source files
256
- 7. I MUST run commit-manager via Task tool for ALL commits
257
- 8. After commit, I MUST update domains and run complete-task
258
-
259
- WORKFLOW COMMANDS (for tracking, not replacement for agents):
260
- Start task: python .claude/hooks/workflow-manager.py start-task --type {task_type} --description "..."
261
- Approve files: python .claude/hooks/workflow-manager.py approve-files --files "path/to/file"
262
-
263
- ================================================================================
264
- """
265
-
266
- # Return as JSON with decision to continue
267
56
  result = {
268
57
  "continue": True,
269
- "systemMessage": output
58
+ "hookSpecificOutput": {
59
+ "hookEventName": "UserPromptSubmit",
60
+ "additionalContext": context
61
+ }
270
62
  }
271
63
 
272
64
  print(json.dumps(result))
273
65
  sys.exit(0)
274
66
 
275
-
276
67
  if __name__ == '__main__':
277
68
  main()
@@ -1,269 +1,41 @@
1
1
  {
2
- "name": "AI Builder Development",
3
- "version": "1.2.0",
4
- "description": "Configuracao para agentes de desenvolvimento do AI Builder - Todos agentes pesquisam best practices",
5
-
6
- "model": "claude-opus-4-5-20251101",
7
- "max_tokens": 8192,
8
- "max_turns": 100,
9
-
10
- "context": {
11
- "compaction_threshold": 0.85,
12
- "enable_compaction": true,
13
- "enable_semantic_search": true,
14
- "memory_files": [".claude/CLAUDE.md", "claude.md"]
15
- },
16
-
17
- "permissions": {
18
- "mode": "strict",
19
- "allowed_tools": [
20
- "file_read",
21
- "file_write",
22
- "file_edit",
23
- "bash_grep",
24
- "bash_find",
25
- "bash_ls",
26
- "bash_bun",
27
- "bash_git",
28
- "web_search"
29
- ],
30
- "disallowed_tools": [
31
- "bash_rm_rf",
32
- "bash_sudo",
33
- "bash_chmod",
34
- "bash_chown",
35
- "file_delete_recursive"
36
- ],
37
- "allowed_directories": [
38
- ".",
39
- "app",
40
- "components",
41
- "lib",
42
- "server",
43
- "tests",
44
- "docs",
45
- "types",
46
- ".claude"
47
- ],
48
- "protected_files": [".env", ".env.local", ".env.production", "bun.lockb"],
49
- "allow": [
50
- "Bash(bun run typecheck:*)",
51
- "Bash(git add:*)",
52
- "Bash(git commit:*)",
53
- "Bash(python .claude/hooks/*)"
54
- ]
55
- },
56
-
57
- "hooks": {
58
- "UserPromptSubmit": [
59
- {
60
- "matcher": "",
61
- "hooks": [
62
- {
63
- "type": "command",
64
- "command": "python .claude/hooks/user-prompt-submit.py",
65
- "timeout": 10
66
- }
67
- ]
68
- }
69
- ],
70
- "PreToolUse": [
71
- {
72
- "matcher": "Edit|Write|NotebookEdit",
73
- "hooks": [
74
- {
75
- "type": "command",
76
- "command": "python .claude/hooks/pre-tool-use.py",
77
- "timeout": 5
78
- }
79
- ]
80
- }
81
- ],
82
- "PostToolUse": [
83
- {
84
- "matcher": "Edit|Write|NotebookEdit",
85
- "hooks": [
86
- {
87
- "type": "command",
88
- "command": "python .claude/hooks/post-tool-use.py",
89
- "timeout": 5
90
- }
91
- ]
92
- }
93
- ],
94
- "Stop": [
95
- {
96
- "matcher": "",
97
- "hooks": [
98
- {
99
- "type": "command",
100
- "command": "python .claude/hooks/stop-validation.py",
101
- "timeout": 10
102
- }
103
- ]
104
- }
105
- ]
106
- },
107
-
108
- "agents": {
109
- "orchestrator": {
110
- "file": "agents/orchestrator.md",
111
- "description": "Coordena todo o fluxo de desenvolvimento",
112
- "priority": 1
113
- },
114
- "analyzer": {
115
- "file": "agents/analyzer.md",
116
- "description": "Analisa impacto de mudancas",
117
- "priority": 2
118
- },
119
- "research": {
120
- "file": "agents/research.md",
121
- "description": "Pesquisa best practices e solucoes recentes (2024-2025) antes da implementacao",
122
- "priority": 3
123
- },
124
- "documenter": {
125
- "file": "agents/documenter.md",
126
- "description": "Cria e mantem documentacao",
127
- "priority": 3
128
- },
129
- "tester": {
130
- "file": "agents/tester.md",
131
- "description": "Cria e executa testes",
132
- "priority": 4
133
- },
134
- "security-auditor": {
135
- "file": "agents/security-auditor.md",
136
- "description": "Audita seguranca do codigo",
137
- "priority": 5,
138
- "can_veto": true
139
- },
140
- "ui-ux-reviewer": {
141
- "file": "agents/ui-ux-reviewer.md",
142
- "description": "Revisa UI/UX e pesquisa competidores",
143
- "priority": 6
144
- },
145
- "quality-checker": {
146
- "file": "agents/quality-checker.md",
147
- "description": "Verifica qualidade (typecheck, lint, build)",
148
- "priority": 7
149
- },
150
- "final-validator": {
151
- "file": "agents/final-validator.md",
152
- "description": "Validacao final antes do commit",
153
- "priority": 8,
154
- "can_veto": true
155
- },
156
- "commit-manager": {
157
- "file": "agents/commit-manager.md",
158
- "description": "Manages commits and workflow state tracking",
159
- "priority": 9
160
- },
161
- "domain-updater": {
162
- "file": "agents/domain-updater.md",
163
- "description": "Updates domain documentation with session learnings and problems solved. FINAL step after commit.",
164
- "priority": 10
165
- }
166
- },
167
-
168
- "workflow": {
169
- "default_flow": [
170
- "analyzer",
171
- "research",
172
- "ui-ux-reviewer",
173
- "documenter",
174
- "tester",
175
- "security-auditor",
176
- "quality-checker",
177
- "final-validator",
178
- "domain-updater",
179
- "commit-manager"
180
- ],
181
- "bug_fix_flow": [
182
- "analyzer",
183
- "research",
184
- "tester",
185
- "security-auditor",
186
- "quality-checker",
187
- "final-validator",
188
- "domain-updater",
189
- "commit-manager"
190
- ],
191
- "refactor_flow": [
192
- "analyzer",
193
- "tester",
194
- "security-auditor",
195
- "quality-checker",
196
- "final-validator",
197
- "domain-updater",
198
- "commit-manager"
199
- ],
200
- "config_flow": ["quality-checker", "domain-updater", "commit-manager"]
201
- },
202
-
203
- "rules": {
204
- "research": {
205
- "required_before_implementation": true,
206
- "sources_must_be_recent": "2024-2025",
207
- "must_document_findings": true,
208
- "must_cite_sources": true
209
- },
210
- "typescript": {
211
- "strict": true,
212
- "no_any": true,
213
- "explicit_return_types": true
214
- },
215
- "security": {
216
- "user_id_from_session_only": true,
217
- "sanitize_all_responses": true,
218
- "zod_validation_required": true,
219
- "explicit_select_required": true,
220
- "owasp_validation_required": true,
221
- "cve_check_required": true
222
- },
223
- "ux": {
224
- "skeleton_required_for_async": true,
225
- "touch_friendly_min_size": "44px",
226
- "competitor_research_required": true,
227
- "wcag_compliance_required": true
228
- },
229
- "testing": {
230
- "unit_tests_required": true,
231
- "e2e_for_ui_features": true,
232
- "data_testid_required": true,
233
- "edge_cases_research_required": true
234
- },
235
- "documentation": {
236
- "flow_docs_required": true,
237
- "competitor_research_for_ui": true,
238
- "research_must_be_documented": true
239
- }
240
- },
241
-
242
- "quality_gates": {
243
- "typecheck": {
244
- "command": "bun run typecheck",
245
- "required": true,
246
- "blocking": true
247
- },
248
- "lint": {
249
- "command": "bun run lint",
250
- "required": true,
251
- "blocking": true
252
- },
253
- "test": {
254
- "command": "bun run test",
255
- "required": true,
256
- "blocking": true
257
- },
258
- "test_e2e": {
259
- "command": "bun run test:e2e",
260
- "required": "when_ui_changes",
261
- "blocking": true
262
- },
263
- "build": {
264
- "command": "bun run build",
265
- "required": true,
266
- "blocking": true
267
- }
268
- }
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(bun run typecheck:*)",
5
+ "Bash(bun run lint:*)",
6
+ "Bash(bun run test:*)",
7
+ "Bash(bun run build)",
8
+ "Bash(git add:*)",
9
+ "Bash(git commit:*)",
10
+ "Bash(git status)",
11
+ "Bash(git diff:*)",
12
+ "Bash(git log:*)",
13
+ "Bash(python .claude/hooks/*)",
14
+ "Bash(cat:*)",
15
+ "Bash(bunx:*)",
16
+ "Bash(docker compose:*)"
17
+ ],
18
+ "deny": [
19
+ "Bash(rm -rf /)",
20
+ "Bash(sudo:*)",
21
+ "Bash(chmod 777:*)"
22
+ ]
23
+ },
24
+
25
+ "hooks": {
26
+ "UserPromptSubmit": [
27
+ {
28
+ "matcher": "",
29
+ "hooks": [
30
+ {
31
+ "type": "command",
32
+ "command": "python .claude/hooks/user-prompt-submit.py",
33
+ "timeout": 10
34
+ }
35
+ ]
36
+ }
37
+ ]
38
+ },
39
+
40
+ "disableAllHooks": false
269
41
  }