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.
- package/package.json +1 -1
- package/template/.claude/CLAUDE.md +129 -168
- package/template/.claude/README.md +135 -126
- package/template/.claude/agents/analyzer.md +0 -14
- package/template/.claude/agents/commit-manager.md +0 -19
- package/template/.claude/agents/documenter.md +0 -10
- package/template/.claude/agents/domain-updater.md +194 -200
- package/template/.claude/agents/final-validator.md +0 -18
- package/template/.claude/agents/orchestrator.md +0 -12
- package/template/.claude/agents/quality-checker.md +0 -24
- package/template/.claude/agents/research.md +251 -262
- package/template/.claude/agents/security-auditor.md +1 -14
- package/template/.claude/agents/tester.md +0 -8
- package/template/.claude/agents/ui-ux-reviewer.md +0 -8
- package/template/.claude/commands/feature.md +48 -102
- package/template/.claude/config/README.md +30 -30
- package/template/.claude/config/domain-mapping.json +55 -26
- package/template/.claude/config/project-config.json +56 -53
- package/template/.claude/config/quality-gates.json +46 -46
- package/template/.claude/config/security-rules.json +45 -45
- package/template/.claude/config/testing-config.json +168 -168
- package/template/.claude/hooks/SETUP.md +52 -181
- package/template/.claude/hooks/user-prompt-submit.py +37 -246
- package/template/.claude/settings.json +39 -267
- package/template/.claude/skills/codebase-knowledge/SKILL.md +71 -145
- package/template/.claude/skills/codebase-knowledge/domains/claude-system.md +54 -321
- package/template/.claude/skills/docs-tracker/SKILL.md +63 -239
- package/template/.claude/skills/final-check/SKILL.md +72 -284
- package/template/.claude/skills/quality-gate/SKILL.md +71 -278
- package/template/.claude/skills/research-cache/SKILL.md +73 -207
- package/template/.claude/skills/security-scan/SKILL.md +75 -206
- package/template/.claude/skills/test-coverage/SKILL.md +66 -441
- package/template/.claude/skills/ui-ux-audit/SKILL.md +68 -254
- package/template/.claude/hooks/post-tool-use.py +0 -155
- package/template/.claude/hooks/pre-tool-use.py +0 -159
- package/template/.claude/hooks/stop-validation.py +0 -155
- package/template/.claude/hooks/validate-commit.py +0 -200
- package/template/.claude/hooks/workflow-manager.py +0 -350
- package/template/.claude/workflow-state.schema.json +0 -200
|
@@ -1,168 +1,168 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$comment": "Testing configuration. Used by tester agent.",
|
|
3
|
-
|
|
4
|
-
"framework": {
|
|
5
|
-
"unit": "vitest",
|
|
6
|
-
"e2e": "playwright",
|
|
7
|
-
"version": "1.40+"
|
|
8
|
-
},
|
|
9
|
-
|
|
10
|
-
"paths": {
|
|
11
|
-
"unitTests": "tests/unit/*.test.ts",
|
|
12
|
-
"e2eTests": "tests/e2e/**/*.spec.ts",
|
|
13
|
-
"fixtures": "tests/e2e/fixtures/",
|
|
14
|
-
"pages": "tests/e2e/pages/",
|
|
15
|
-
"flows": "tests/e2e/flows/",
|
|
16
|
-
"api": "tests/e2e/api/",
|
|
17
|
-
"authState": "tests/e2e/.auth/"
|
|
18
|
-
},
|
|
19
|
-
|
|
20
|
-
"viewports": {
|
|
21
|
-
"desktop": {
|
|
22
|
-
"device": "Desktop Chrome",
|
|
23
|
-
"width": 1280,
|
|
24
|
-
"height": 800,
|
|
25
|
-
"required": true
|
|
26
|
-
},
|
|
27
|
-
"tablet": {
|
|
28
|
-
"device": "iPad",
|
|
29
|
-
"width": 768,
|
|
30
|
-
"height": 1024,
|
|
31
|
-
"required": true
|
|
32
|
-
},
|
|
33
|
-
"mobile": {
|
|
34
|
-
"device": "iPhone SE",
|
|
35
|
-
"width": 375,
|
|
36
|
-
"height": 667,
|
|
37
|
-
"required": true
|
|
38
|
-
},
|
|
39
|
-
"mobileLarge": {
|
|
40
|
-
"device": "iPhone 14",
|
|
41
|
-
"width": 390,
|
|
42
|
-
"height": 844,
|
|
43
|
-
"required": false
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
"auth": {
|
|
48
|
-
"storageStatePath": "tests/e2e/.auth/user.json",
|
|
49
|
-
"loginPage": "/auth/login",
|
|
50
|
-
"registerPage": "/auth/register",
|
|
51
|
-
"protectedPrefix": "/app",
|
|
52
|
-
"setupProject": "setup",
|
|
53
|
-
"reuseSession": true
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
"database": {
|
|
57
|
-
"type": "mongodb",
|
|
58
|
-
"testConnectionEnv": "MONGODB_URI",
|
|
59
|
-
"cleanupStrategy": "fixture-tracking",
|
|
60
|
-
"verifyAfterActions": true
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
"cleanup": {
|
|
64
|
-
"strategy": "fixture-based",
|
|
65
|
-
"trackCreatedIds": true,
|
|
66
|
-
"deleteOnlyTracked": true,
|
|
67
|
-
"cleanupOnFailure": true,
|
|
68
|
-
"collections": ["users", "items", "sessions"]
|
|
69
|
-
},
|
|
70
|
-
|
|
71
|
-
"dataTestIds": {
|
|
72
|
-
"form": {
|
|
73
|
-
"nameInput": "name-input",
|
|
74
|
-
"emailInput": "email-input",
|
|
75
|
-
"passwordInput": "password-input",
|
|
76
|
-
"confirmPasswordInput": "confirm-password-input",
|
|
77
|
-
"submitButton": "submit-button"
|
|
78
|
-
},
|
|
79
|
-
"feedback": {
|
|
80
|
-
"errorMessage": "error-message",
|
|
81
|
-
"successMessage": "success-message",
|
|
82
|
-
"loadingSpinner": "loading-spinner"
|
|
83
|
-
},
|
|
84
|
-
"navigation": {
|
|
85
|
-
"sidebar": "sidebar",
|
|
86
|
-
"hamburgerMenu": "hamburger-menu",
|
|
87
|
-
"mobileNav": "mobile-nav",
|
|
88
|
-
"logoutButton": "logout-button"
|
|
89
|
-
},
|
|
90
|
-
"actions": {
|
|
91
|
-
"deleteButton": "delete-button",
|
|
92
|
-
"editButton": "edit-button",
|
|
93
|
-
"confirmDelete": "confirm-delete",
|
|
94
|
-
"cancelButton": "cancel-button"
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
|
|
98
|
-
"api": {
|
|
99
|
-
"rest": {
|
|
100
|
-
"baseUrl": "/api",
|
|
101
|
-
"authEndpoint": "/api/auth/login",
|
|
102
|
-
"validateInput": true,
|
|
103
|
-
"requireAuth": true
|
|
104
|
-
},
|
|
105
|
-
"trpc": {
|
|
106
|
-
"baseUrl": "/api/trpc",
|
|
107
|
-
"batchEnabled": true,
|
|
108
|
-
"validateInput": true
|
|
109
|
-
}
|
|
110
|
-
},
|
|
111
|
-
|
|
112
|
-
"security": {
|
|
113
|
-
"testForbiddenRequests": true,
|
|
114
|
-
"testRateLimiting": true,
|
|
115
|
-
"testCrossUserAccess": true,
|
|
116
|
-
"testUnauthenticated": true,
|
|
117
|
-
"expectedForbiddenStatus": 403,
|
|
118
|
-
"expectedUnauthorizedStatus": 401,
|
|
119
|
-
"expectedRateLimitStatus": 429
|
|
120
|
-
},
|
|
121
|
-
|
|
122
|
-
"flows": {
|
|
123
|
-
"required": [
|
|
124
|
-
"registration",
|
|
125
|
-
"login",
|
|
126
|
-
"logout",
|
|
127
|
-
"crud-create",
|
|
128
|
-
"crud-read",
|
|
129
|
-
"crud-update",
|
|
130
|
-
"crud-delete",
|
|
131
|
-
"permissions"
|
|
132
|
-
],
|
|
133
|
-
"optional": [
|
|
134
|
-
"password-reset",
|
|
135
|
-
"email-verification",
|
|
136
|
-
"profile-update"
|
|
137
|
-
]
|
|
138
|
-
},
|
|
139
|
-
|
|
140
|
-
"commands": {
|
|
141
|
-
"install": "bun add -D @playwright/test && bunx playwright install",
|
|
142
|
-
"run": "bunx playwright test",
|
|
143
|
-
"runUi": "bunx playwright test --ui",
|
|
144
|
-
"runHeaded": "bunx playwright test --headed",
|
|
145
|
-
"runMobile": "bunx playwright test --project='iPhone SE'",
|
|
146
|
-
"debug": "bunx playwright test --debug",
|
|
147
|
-
"report": "bunx playwright show-report",
|
|
148
|
-
"codegen": "bunx playwright codegen"
|
|
149
|
-
},
|
|
150
|
-
|
|
151
|
-
"rules": {
|
|
152
|
-
"noSkip": true,
|
|
153
|
-
"noMockAuth": true,
|
|
154
|
-
"requireCleanup": true,
|
|
155
|
-
"requireDbValidation": true,
|
|
156
|
-
"requireViewportTests": true,
|
|
157
|
-
"requireDataTestId": true,
|
|
158
|
-
"uniqueTestData": true,
|
|
159
|
-
"timestampEmails": true
|
|
160
|
-
},
|
|
161
|
-
|
|
162
|
-
"reporting": {
|
|
163
|
-
"trace": "on-first-retry",
|
|
164
|
-
"screenshot": "only-on-failure",
|
|
165
|
-
"video": "retain-on-failure",
|
|
166
|
-
"outputFolder": "test-results"
|
|
167
|
-
}
|
|
168
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Testing configuration. Used by tester agent.",
|
|
3
|
+
|
|
4
|
+
"framework": {
|
|
5
|
+
"unit": "vitest",
|
|
6
|
+
"e2e": "playwright",
|
|
7
|
+
"version": "1.40+"
|
|
8
|
+
},
|
|
9
|
+
|
|
10
|
+
"paths": {
|
|
11
|
+
"unitTests": "tests/unit/*.test.ts",
|
|
12
|
+
"e2eTests": "tests/e2e/**/*.spec.ts",
|
|
13
|
+
"fixtures": "tests/e2e/fixtures/",
|
|
14
|
+
"pages": "tests/e2e/pages/",
|
|
15
|
+
"flows": "tests/e2e/flows/",
|
|
16
|
+
"api": "tests/e2e/api/",
|
|
17
|
+
"authState": "tests/e2e/.auth/"
|
|
18
|
+
},
|
|
19
|
+
|
|
20
|
+
"viewports": {
|
|
21
|
+
"desktop": {
|
|
22
|
+
"device": "Desktop Chrome",
|
|
23
|
+
"width": 1280,
|
|
24
|
+
"height": 800,
|
|
25
|
+
"required": true
|
|
26
|
+
},
|
|
27
|
+
"tablet": {
|
|
28
|
+
"device": "iPad",
|
|
29
|
+
"width": 768,
|
|
30
|
+
"height": 1024,
|
|
31
|
+
"required": true
|
|
32
|
+
},
|
|
33
|
+
"mobile": {
|
|
34
|
+
"device": "iPhone SE",
|
|
35
|
+
"width": 375,
|
|
36
|
+
"height": 667,
|
|
37
|
+
"required": true
|
|
38
|
+
},
|
|
39
|
+
"mobileLarge": {
|
|
40
|
+
"device": "iPhone 14",
|
|
41
|
+
"width": 390,
|
|
42
|
+
"height": 844,
|
|
43
|
+
"required": false
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
"auth": {
|
|
48
|
+
"storageStatePath": "tests/e2e/.auth/user.json",
|
|
49
|
+
"loginPage": "/auth/login",
|
|
50
|
+
"registerPage": "/auth/register",
|
|
51
|
+
"protectedPrefix": "/app",
|
|
52
|
+
"setupProject": "setup",
|
|
53
|
+
"reuseSession": true
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
"database": {
|
|
57
|
+
"type": "mongodb",
|
|
58
|
+
"testConnectionEnv": "MONGODB_URI",
|
|
59
|
+
"cleanupStrategy": "fixture-tracking",
|
|
60
|
+
"verifyAfterActions": true
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
"cleanup": {
|
|
64
|
+
"strategy": "fixture-based",
|
|
65
|
+
"trackCreatedIds": true,
|
|
66
|
+
"deleteOnlyTracked": true,
|
|
67
|
+
"cleanupOnFailure": true,
|
|
68
|
+
"collections": ["users", "items", "sessions"]
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
"dataTestIds": {
|
|
72
|
+
"form": {
|
|
73
|
+
"nameInput": "name-input",
|
|
74
|
+
"emailInput": "email-input",
|
|
75
|
+
"passwordInput": "password-input",
|
|
76
|
+
"confirmPasswordInput": "confirm-password-input",
|
|
77
|
+
"submitButton": "submit-button"
|
|
78
|
+
},
|
|
79
|
+
"feedback": {
|
|
80
|
+
"errorMessage": "error-message",
|
|
81
|
+
"successMessage": "success-message",
|
|
82
|
+
"loadingSpinner": "loading-spinner"
|
|
83
|
+
},
|
|
84
|
+
"navigation": {
|
|
85
|
+
"sidebar": "sidebar",
|
|
86
|
+
"hamburgerMenu": "hamburger-menu",
|
|
87
|
+
"mobileNav": "mobile-nav",
|
|
88
|
+
"logoutButton": "logout-button"
|
|
89
|
+
},
|
|
90
|
+
"actions": {
|
|
91
|
+
"deleteButton": "delete-button",
|
|
92
|
+
"editButton": "edit-button",
|
|
93
|
+
"confirmDelete": "confirm-delete",
|
|
94
|
+
"cancelButton": "cancel-button"
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
"api": {
|
|
99
|
+
"rest": {
|
|
100
|
+
"baseUrl": "/api",
|
|
101
|
+
"authEndpoint": "/api/auth/login",
|
|
102
|
+
"validateInput": true,
|
|
103
|
+
"requireAuth": true
|
|
104
|
+
},
|
|
105
|
+
"trpc": {
|
|
106
|
+
"baseUrl": "/api/trpc",
|
|
107
|
+
"batchEnabled": true,
|
|
108
|
+
"validateInput": true
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
|
|
112
|
+
"security": {
|
|
113
|
+
"testForbiddenRequests": true,
|
|
114
|
+
"testRateLimiting": true,
|
|
115
|
+
"testCrossUserAccess": true,
|
|
116
|
+
"testUnauthenticated": true,
|
|
117
|
+
"expectedForbiddenStatus": 403,
|
|
118
|
+
"expectedUnauthorizedStatus": 401,
|
|
119
|
+
"expectedRateLimitStatus": 429
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
"flows": {
|
|
123
|
+
"required": [
|
|
124
|
+
"registration",
|
|
125
|
+
"login",
|
|
126
|
+
"logout",
|
|
127
|
+
"crud-create",
|
|
128
|
+
"crud-read",
|
|
129
|
+
"crud-update",
|
|
130
|
+
"crud-delete",
|
|
131
|
+
"permissions"
|
|
132
|
+
],
|
|
133
|
+
"optional": [
|
|
134
|
+
"password-reset",
|
|
135
|
+
"email-verification",
|
|
136
|
+
"profile-update"
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
"commands": {
|
|
141
|
+
"install": "bun add -D @playwright/test && bunx playwright install",
|
|
142
|
+
"run": "bunx playwright test",
|
|
143
|
+
"runUi": "bunx playwright test --ui",
|
|
144
|
+
"runHeaded": "bunx playwright test --headed",
|
|
145
|
+
"runMobile": "bunx playwright test --project='iPhone SE'",
|
|
146
|
+
"debug": "bunx playwright test --debug",
|
|
147
|
+
"report": "bunx playwright show-report",
|
|
148
|
+
"codegen": "bunx playwright codegen"
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
"rules": {
|
|
152
|
+
"noSkip": true,
|
|
153
|
+
"noMockAuth": true,
|
|
154
|
+
"requireCleanup": true,
|
|
155
|
+
"requireDbValidation": true,
|
|
156
|
+
"requireViewportTests": true,
|
|
157
|
+
"requireDataTestId": true,
|
|
158
|
+
"uniqueTestData": true,
|
|
159
|
+
"timestampEmails": true
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
"reporting": {
|
|
163
|
+
"trace": "on-first-retry",
|
|
164
|
+
"screenshot": "only-on-failure",
|
|
165
|
+
"video": "retain-on-failure",
|
|
166
|
+
"outputFolder": "test-results"
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -1,181 +1,52 @@
|
|
|
1
|
-
# Workflow Enforcement Hooks - Setup Guide
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
This system
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
3.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
"scripts": {
|
|
55
|
-
"prepare": "husky"
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
## Claude Code Configuration
|
|
61
|
-
|
|
62
|
-
The hooks are configured in `.claude/settings.json`:
|
|
63
|
-
|
|
64
|
-
```json
|
|
65
|
-
{
|
|
66
|
-
"hooks": {
|
|
67
|
-
"PreToolUse": [
|
|
68
|
-
{
|
|
69
|
-
"matcher": "Edit|Write|NotebookEdit",
|
|
70
|
-
"hooks": [
|
|
71
|
-
{
|
|
72
|
-
"type": "command",
|
|
73
|
-
"command": "python \"$CLAUDE_PROJECT_DIR/.claude/hooks/pre-tool-use.py\"",
|
|
74
|
-
"timeout": 30
|
|
75
|
-
}
|
|
76
|
-
]
|
|
77
|
-
}
|
|
78
|
-
],
|
|
79
|
-
"PostToolUse": [
|
|
80
|
-
{
|
|
81
|
-
"matcher": "Edit|Write|NotebookEdit",
|
|
82
|
-
"hooks": [
|
|
83
|
-
{
|
|
84
|
-
"type": "command",
|
|
85
|
-
"command": "python \"$CLAUDE_PROJECT_DIR/.claude/hooks/post-tool-use.py\"",
|
|
86
|
-
"timeout": 30
|
|
87
|
-
}
|
|
88
|
-
]
|
|
89
|
-
}
|
|
90
|
-
],
|
|
91
|
-
"Stop": [
|
|
92
|
-
{
|
|
93
|
-
"matcher": "",
|
|
94
|
-
"hooks": [
|
|
95
|
-
{
|
|
96
|
-
"type": "command",
|
|
97
|
-
"command": "python \"$CLAUDE_PROJECT_DIR/.claude/hooks/stop-validation.py\"",
|
|
98
|
-
"timeout": 30
|
|
99
|
-
}
|
|
100
|
-
]
|
|
101
|
-
}
|
|
102
|
-
]
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
**IMPORTANT:** Use `$CLAUDE_PROJECT_DIR` to ensure hooks work from any directory.
|
|
108
|
-
|
|
109
|
-
## Workflow Manager CLI
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
# Start a task (REQUIRED FIRST)
|
|
113
|
-
python .claude/hooks/workflow-manager.py start-task --type feature --description "Add user auth"
|
|
114
|
-
|
|
115
|
-
# Approve files for modification
|
|
116
|
-
python .claude/hooks/workflow-manager.py approve-files --files "src/auth.ts" "app/login/*"
|
|
117
|
-
|
|
118
|
-
# Mark agent as executed
|
|
119
|
-
python .claude/hooks/workflow-manager.py agent-executed --agent analyzer --result approved
|
|
120
|
-
|
|
121
|
-
# Record quality gate result
|
|
122
|
-
python .claude/hooks/workflow-manager.py quality-gate --gate typecheck --passed true
|
|
123
|
-
|
|
124
|
-
# Record security audit
|
|
125
|
-
python .claude/hooks/workflow-manager.py security-audit --result approved
|
|
126
|
-
|
|
127
|
-
# Final validation
|
|
128
|
-
python .claude/hooks/workflow-manager.py final-validation --result approved --ready-to-commit true
|
|
129
|
-
|
|
130
|
-
# Complete task after commit
|
|
131
|
-
python .claude/hooks/workflow-manager.py complete-task --commit-hash abc123def
|
|
132
|
-
|
|
133
|
-
# Check current status
|
|
134
|
-
python .claude/hooks/workflow-manager.py status
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
## Error Messages
|
|
138
|
-
|
|
139
|
-
### "BLOCKED: No active task"
|
|
140
|
-
|
|
141
|
-
Run `workflow-manager.py start-task` first.
|
|
142
|
-
|
|
143
|
-
### "BLOCKED: Analyzer agent has not executed"
|
|
144
|
-
|
|
145
|
-
Run the analyzer agent and call `workflow-manager.py agent-executed --agent analyzer --result approved`.
|
|
146
|
-
|
|
147
|
-
### "BLOCKED: File not in approved list"
|
|
148
|
-
|
|
149
|
-
Add the file to approved list via `workflow-manager.py approve-files --files "path/to/file"`.
|
|
150
|
-
|
|
151
|
-
### "WORKFLOW INCOMPLETE - Cannot stop yet"
|
|
152
|
-
|
|
153
|
-
Execute all required agents before stopping the session.
|
|
154
|
-
|
|
155
|
-
### "COMMIT BLOCKED - Workflow validation failed"
|
|
156
|
-
|
|
157
|
-
Ensure all agents executed, tests created, and final validation approved.
|
|
158
|
-
|
|
159
|
-
## Environment Variables
|
|
160
|
-
|
|
161
|
-
| Variable | Default | Description |
|
|
162
|
-
| -------------------- | ------------- | ---------------------- |
|
|
163
|
-
| `CLAUDE_PROJECT_DIR` | `os.getcwd()` | Project root directory |
|
|
164
|
-
|
|
165
|
-
## Troubleshooting
|
|
166
|
-
|
|
167
|
-
### Hooks not executing
|
|
168
|
-
|
|
169
|
-
1. Verify Python is in PATH
|
|
170
|
-
2. Check `.claude/settings.json` hooks configuration
|
|
171
|
-
3. Ensure hook files have execute permissions
|
|
172
|
-
|
|
173
|
-
### Workflow state corrupted
|
|
174
|
-
|
|
175
|
-
Delete `.claude/workflow-state.json` and start fresh.
|
|
176
|
-
|
|
177
|
-
### Husky not running
|
|
178
|
-
|
|
179
|
-
1. Run `bun run prepare`
|
|
180
|
-
2. Check `.husky/pre-commit` has execute permissions
|
|
181
|
-
3. Verify Git hooks are enabled: `git config core.hooksPath`
|
|
1
|
+
# Workflow Enforcement Hooks - Setup Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This system provides agent selection guidance by analyzing prompts and suggesting the best agent for the task.
|
|
6
|
+
|
|
7
|
+
## Requirements
|
|
8
|
+
|
|
9
|
+
- Python 3.8+
|
|
10
|
+
|
|
11
|
+
## Files
|
|
12
|
+
|
|
13
|
+
| File | Purpose |
|
|
14
|
+
| ------------------------ | ----------------------------------------------------- |
|
|
15
|
+
| `user-prompt-submit.py` | Analyzes prompts and suggests appropriate agents |
|
|
16
|
+
|
|
17
|
+
## Claude Code Configuration
|
|
18
|
+
|
|
19
|
+
The hooks are configured in `.claude/settings.local.json`:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"hooks": {
|
|
24
|
+
"UserPromptSubmit": [
|
|
25
|
+
{
|
|
26
|
+
"matcher": "",
|
|
27
|
+
"hooks": [
|
|
28
|
+
{
|
|
29
|
+
"type": "command",
|
|
30
|
+
"command": "python .claude/hooks/user-prompt-submit.py",
|
|
31
|
+
"timeout": 10
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Environment Variables
|
|
41
|
+
|
|
42
|
+
| Variable | Default | Description |
|
|
43
|
+
| -------------------- | ------------- | ---------------------- |
|
|
44
|
+
| `CLAUDE_PROJECT_DIR` | `os.getcwd()` | Project root directory |
|
|
45
|
+
|
|
46
|
+
## Troubleshooting
|
|
47
|
+
|
|
48
|
+
### Hooks not executing
|
|
49
|
+
|
|
50
|
+
1. Verify Python is in PATH
|
|
51
|
+
2. Check `.claude/settings.local.json` hooks configuration
|
|
52
|
+
3. Ensure hook files have execute permissions
|