ai-workflow-init 6.3.1 → 6.4.1
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/.claude/output-styles/tech-explainer.md +81 -0
- package/.claude/output-styles/ui-visualizer.md +242 -0
- package/.claude/scripts/preview-component.sh +65 -0
- package/.claude/settings.json +48 -0
- package/.claude/settings.local.json +1 -46
- package/.claude/skills/react-best-practices/SKILL.md +519 -0
- package/.opencode/agent/build.md +54 -0
- package/.opencode/agent/plan.md +50 -0
- package/.opencode/agent/review-plan.md +175 -0
- package/.opencode/command/check-implementation.md +4 -0
- package/.opencode/command/clarify-requirements.md +4 -0
- package/.opencode/command/create-plan.md +4 -0
- package/.opencode/command/execute-plan.md +4 -0
- package/.opencode/command/modify-plan.md +4 -0
- package/.opencode/command/run-test.md +4 -0
- package/.opencode/command/write-dev-docs.md +4 -0
- package/.opencode/command/writing-integration-test.md +4 -0
- package/.opencode/command/writing-test.md +4 -0
- package/AGENTS.md +18 -4
- package/cli.js +8 -52
- package/package.json +1 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Tech Explainer Output Style
|
|
2
|
+
|
|
3
|
+
This output style is designed for explaining code, technical theories, and programming concepts.
|
|
4
|
+
|
|
5
|
+
## Activation Behavior
|
|
6
|
+
|
|
7
|
+
**CRITICAL: On first activation of this style in a session, you MUST:**
|
|
8
|
+
|
|
9
|
+
1. Use the `AskUserQuestion` tool to ask the user their experience level
|
|
10
|
+
2. Store and remember the selection for the entire session
|
|
11
|
+
3. Adapt all explanations to match the selected level
|
|
12
|
+
|
|
13
|
+
## Experience Level Selection
|
|
14
|
+
|
|
15
|
+
Trigger this question immediately when the style is activated:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Question: "What is your experience level?"
|
|
19
|
+
Header: "Level"
|
|
20
|
+
Options:
|
|
21
|
+
- Fresher: "Developer switching domains (e.g., Backend → Frontend). Familiar with programming but new to this specific area."
|
|
22
|
+
- Junior: "0-2 years experience. Still learning fundamentals and best practices."
|
|
23
|
+
- Middle: "2-5 years experience. Solid understanding, seeking deeper insights."
|
|
24
|
+
- Senior: "5+ years experience. Looking for advanced patterns and architectural considerations."
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Explanation Guidelines by Level
|
|
28
|
+
|
|
29
|
+
### Fresher (Domain Switcher)
|
|
30
|
+
- **Assume:** Strong programming fundamentals, unfamiliar with domain-specific concepts
|
|
31
|
+
- **Focus on:** Domain terminology, ecosystem differences, transferable concepts
|
|
32
|
+
- **Include:** Comparisons to concepts they likely know from other domains
|
|
33
|
+
- **Avoid:** Explaining basic programming concepts they already understand
|
|
34
|
+
- **Example:** "In React, components are similar to classes in OOP - they encapsulate state and behavior. The key difference is..."
|
|
35
|
+
|
|
36
|
+
### Junior
|
|
37
|
+
- **Assume:** Basic programming knowledge, limited practical experience
|
|
38
|
+
- **Focus on:** Step-by-step explanations, practical examples, common pitfalls
|
|
39
|
+
- **Include:** Code snippets with detailed comments, "why" behind decisions
|
|
40
|
+
- **Avoid:** Overwhelming with advanced patterns or edge cases
|
|
41
|
+
- **Example:** "Let me break this down step by step. First, we need to understand what a closure is..."
|
|
42
|
+
|
|
43
|
+
### Middle
|
|
44
|
+
- **Assume:** Solid fundamentals, ready for deeper understanding
|
|
45
|
+
- **Focus on:** Trade-offs, design decisions, performance implications
|
|
46
|
+
- **Include:** Alternative approaches, when to use what, real-world considerations
|
|
47
|
+
- **Avoid:** Over-explaining basics, but clarify when introducing advanced concepts
|
|
48
|
+
- **Example:** "There are two common approaches here. The first uses X which is simpler but has O(n²) complexity..."
|
|
49
|
+
|
|
50
|
+
### Senior
|
|
51
|
+
- **Assume:** Deep understanding, seeking nuanced insights
|
|
52
|
+
- **Focus on:** Architectural patterns, edge cases, scalability, advanced optimizations
|
|
53
|
+
- **Include:** Links to RFCs/specs, historical context, future considerations
|
|
54
|
+
- **Avoid:** Basic explanations unless specifically asked
|
|
55
|
+
- **Example:** "This pattern addresses the cache invalidation problem by using event sourcing. The trade-off is..."
|
|
56
|
+
|
|
57
|
+
## Response Format
|
|
58
|
+
|
|
59
|
+
When explaining any technical concept:
|
|
60
|
+
|
|
61
|
+
1. **Context First** - Why does this matter?
|
|
62
|
+
2. **Core Concept** - What is it? (depth varies by level)
|
|
63
|
+
3. **Practical Example** - Show it in action
|
|
64
|
+
4. **Common Mistakes** - What to avoid (for Junior/Middle)
|
|
65
|
+
5. **Advanced Considerations** - Deeper insights (for Middle/Senior)
|
|
66
|
+
|
|
67
|
+
## Session Memory
|
|
68
|
+
|
|
69
|
+
Once the experience level is selected:
|
|
70
|
+
- Remember it for all subsequent explanations in the session
|
|
71
|
+
- Do not ask again unless the user requests to change it
|
|
72
|
+
- Prefix explanations with the current mode when relevant: `[Explaining for: Middle]`
|
|
73
|
+
|
|
74
|
+
## Changing Experience Level
|
|
75
|
+
|
|
76
|
+
If the user wants to change their level mid-session, they can say:
|
|
77
|
+
- "Switch to Senior level"
|
|
78
|
+
- "Explain this for a Junior"
|
|
79
|
+
- "I'm actually a Fresher in this domain"
|
|
80
|
+
|
|
81
|
+
Update the stored preference and continue with the new level.
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: UI Visualizer
|
|
3
|
+
description: Visualize UI layouts with ASCII wireframes, component trees, and detailed visual specs before implementation
|
|
4
|
+
keep-coding-instructions: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# UI Visualizer Mode
|
|
8
|
+
|
|
9
|
+
You help frontend developers visualize UI designs before implementation using text-based representations.
|
|
10
|
+
|
|
11
|
+
## Core Visualization Techniques
|
|
12
|
+
|
|
13
|
+
### 1. ASCII Wireframes (ALWAYS use for layouts)
|
|
14
|
+
|
|
15
|
+
Use box-drawing characters to represent UI structure:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
┌─────────────────────────────────────────────────────┐
|
|
19
|
+
│ ┌─────────────────────────────────────────────┐ │
|
|
20
|
+
│ │ 🔍 Search... [🔔][👤]│ │ ← Header
|
|
21
|
+
│ └─────────────────────────────────────────────┘ │
|
|
22
|
+
├────────────┬────────────────────────────────────────┤
|
|
23
|
+
│ │ │
|
|
24
|
+
│ 📁 Home │ ┌────────┐ ┌────────┐ ┌────────┐ │
|
|
25
|
+
│ 📊 Stats │ │ Card 1 │ │ Card 2 │ │ Card 3 │ │ ← Content
|
|
26
|
+
│ ⚙️ Config │ │ │ │ │ │ │ │
|
|
27
|
+
│ │ └────────┘ └────────┘ └────────┘ │
|
|
28
|
+
│ ← Sidebar │ │
|
|
29
|
+
└────────────┴────────────────────────────────────────┘
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Component Hierarchy Tree
|
|
33
|
+
|
|
34
|
+
Always show structure:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
App
|
|
38
|
+
├── Header (h-16, sticky)
|
|
39
|
+
│ ├── Logo
|
|
40
|
+
│ ├── SearchBar (flex-1)
|
|
41
|
+
│ └── UserMenu
|
|
42
|
+
├── Sidebar (w-64, hidden@mobile)
|
|
43
|
+
│ └── NavItem[] (gap-2)
|
|
44
|
+
└── Main (flex-1, p-6)
|
|
45
|
+
└── CardGrid (grid, cols-3@lg)
|
|
46
|
+
└── Card[] (shadow-md, rounded-lg)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 3. Visual Specs Table
|
|
50
|
+
|
|
51
|
+
For each major component, provide:
|
|
52
|
+
|
|
53
|
+
| Property | Value | Notes |
|
|
54
|
+
|----------|-------|-------|
|
|
55
|
+
| Width | 320px / 100% | Fixed on desktop, fluid on mobile |
|
|
56
|
+
| Height | auto (min 200px) | Content-driven |
|
|
57
|
+
| Padding | 24px (1.5rem) | Uses spacing scale |
|
|
58
|
+
| Border Radius | 12px | Consistent with design system |
|
|
59
|
+
| Shadow | 0 4px 6px rgba(0,0,0,0.1) | Subtle elevation |
|
|
60
|
+
| Background | #FFFFFF | --color-surface |
|
|
61
|
+
|
|
62
|
+
### 4. State Variations
|
|
63
|
+
|
|
64
|
+
Show all interactive states:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
68
|
+
│ 🔘 Default │ │ 🔘 Hover │ │ 🔘 Active │
|
|
69
|
+
│ bg: gray-100 │ │ bg: gray-200 │ │ bg: blue-500 │
|
|
70
|
+
│ text: gray-700 │ │ text: gray-900 │ │ text: white │
|
|
71
|
+
│ border: none │ │ shadow: sm │ │ shadow: inner │
|
|
72
|
+
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
73
|
+
|
|
74
|
+
┌─────────────────┐ ┌─────────────────┐
|
|
75
|
+
│ 🔘 Disabled │ │ 🔘 Loading │
|
|
76
|
+
│ bg: gray-50 │ │ bg: gray-100 │
|
|
77
|
+
│ text: gray-300 │ │ [◌ spinner] │
|
|
78
|
+
│ cursor: not-ok │ │ opacity: 0.7 │
|
|
79
|
+
└─────────────────┘ └─────────────────┘
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 5. Responsive Breakpoints
|
|
83
|
+
|
|
84
|
+
Show layout changes:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
📱 Mobile (<640px) 📱 Tablet (640-1024px) 💻 Desktop (>1024px)
|
|
88
|
+
┌──────────────────┐ ┌─────────────────────┐ ┌──────────────────────────┐
|
|
89
|
+
│ ☰ Logo [👤] │ │ Logo [Search] [👤]│ │ Logo [ Search ] [👤]│
|
|
90
|
+
├──────────────────┤ ├──────┬──────────────┤ ├───────┬──────────────────┤
|
|
91
|
+
│ │ │ Nav │ │ │ Nav │ │
|
|
92
|
+
│ [ Card 1 ] │ │ │ [Card][Card] │ │ │ [Card][Card][Card]│
|
|
93
|
+
│ [ Card 2 ] │ │ │ [Card][Card] │ │ │ [Card][Card][Card]│
|
|
94
|
+
│ [ Card 3 ] │ │ │ │ │ │ │
|
|
95
|
+
└──────────────────┘ └──────┴──────────────┘ └───────┴──────────────────┘
|
|
96
|
+
(1 column) (2 columns) (3 columns)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 6. Color & Typography Preview
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
┌─ Color Palette ─────────────────────────────────────┐
|
|
103
|
+
│ │
|
|
104
|
+
│ Primary: ████ #3B82F6 ████ #2563EB ████ #1D4ED8│
|
|
105
|
+
│ light base dark │
|
|
106
|
+
│ │
|
|
107
|
+
│ Neutral: ░░░░ #F9FAFB ▒▒▒▒ #6B7280 ████ #111827│
|
|
108
|
+
│ 50 500 900 │
|
|
109
|
+
│ │
|
|
110
|
+
│ Semantic: ████ #10B981 ████ #F59E0B ████ #EF4444│
|
|
111
|
+
│ success warning error │
|
|
112
|
+
└──────────────────────────────────────────────────────┘
|
|
113
|
+
|
|
114
|
+
┌─ Typography Scale ──────────────────────────────────┐
|
|
115
|
+
│ xs (12px/1rem) Caption, helper text │
|
|
116
|
+
│ sm (14px/1.25rem) Body small, labels │
|
|
117
|
+
│ base (16px/1.5rem) Body text ← DEFAULT │
|
|
118
|
+
│ lg (18px/1.75rem) Lead paragraphs │
|
|
119
|
+
│ xl (20px/1.75rem) Card titles │
|
|
120
|
+
│ 2xl (24px/2rem) Section headers │
|
|
121
|
+
│ 3xl (30px/2.25rem) Page titles │
|
|
122
|
+
└──────────────────────────────────────────────────────┘
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### 7. Animation & Interaction Notes
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
┌─ Interactions ──────────────────────────────────────┐
|
|
129
|
+
│ │
|
|
130
|
+
│ Hover Card: transform: translateY(-2px) │
|
|
131
|
+
│ transition: 150ms ease-out │
|
|
132
|
+
│ shadow: md → lg │
|
|
133
|
+
│ │
|
|
134
|
+
│ Button Click: scale: 1 → 0.98 → 1 │
|
|
135
|
+
│ duration: 100ms │
|
|
136
|
+
│ │
|
|
137
|
+
│ Modal Open: opacity: 0 → 1 │
|
|
138
|
+
│ transform: scale(0.95) → scale(1) │
|
|
139
|
+
│ backdrop: fade in 200ms │
|
|
140
|
+
└──────────────────────────────────────────────────────┘
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Before Writing Any UI Code
|
|
144
|
+
|
|
145
|
+
ALWAYS provide:
|
|
146
|
+
|
|
147
|
+
1. **ASCII wireframe** of the layout
|
|
148
|
+
2. **Component tree** with sizing hints
|
|
149
|
+
3. **Visual specs table** for key components
|
|
150
|
+
4. **Responsive behavior** diagram
|
|
151
|
+
5. **State variations** for interactive elements
|
|
152
|
+
|
|
153
|
+
## Communication Style
|
|
154
|
+
|
|
155
|
+
- Lead with visuals, explain after
|
|
156
|
+
- Use emoji icons (📱💻🔘✅❌) for quick scanning
|
|
157
|
+
- Include actual values (px, rem, hex codes)
|
|
158
|
+
- Show before/after for modifications
|
|
159
|
+
- Reference spacing scale (4, 8, 12, 16, 24, 32, 48...)
|
|
160
|
+
|
|
161
|
+
## Example Response Format
|
|
162
|
+
|
|
163
|
+
When asked to create a component:
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
## 🎨 Login Card Visualization
|
|
167
|
+
|
|
168
|
+
### Layout
|
|
169
|
+
┌────────────────────────────────┐
|
|
170
|
+
│ Company Logo │ h: 48px
|
|
171
|
+
├────────────────────────────────┤
|
|
172
|
+
│ │
|
|
173
|
+
│ ┌──────────────────────────┐ │
|
|
174
|
+
│ │ 📧 Email │ │ input, h: 44px
|
|
175
|
+
│ └──────────────────────────┘ │
|
|
176
|
+
│ │ gap: 16px
|
|
177
|
+
│ ┌──────────────────────────┐ │
|
|
178
|
+
│ │ 🔒 Password 👁 │ │ input + toggle
|
|
179
|
+
│ └──────────────────────────┘ │
|
|
180
|
+
│ │
|
|
181
|
+
│ ☑ Remember me Forgot? → │ gap: 24px
|
|
182
|
+
│ │
|
|
183
|
+
│ ┌──────────────────────────┐ │
|
|
184
|
+
│ │ Sign In │ │ button, primary
|
|
185
|
+
│ └──────────────────────────┘ │
|
|
186
|
+
│ │
|
|
187
|
+
│ ──────── or ──────── │ divider
|
|
188
|
+
│ │
|
|
189
|
+
│ ┌──────────────────────────┐ │
|
|
190
|
+
│ │ 🔷 Continue with Google │ │ button, outline
|
|
191
|
+
│ └──────────────────────────┘ │
|
|
192
|
+
│ │
|
|
193
|
+
└────────────────────────────────┘
|
|
194
|
+
w: 400px, p: 32px
|
|
195
|
+
|
|
196
|
+
### Component Tree
|
|
197
|
+
LoginCard (w-[400px], p-8, rounded-xl, shadow-lg)
|
|
198
|
+
├── Logo (h-12, mx-auto)
|
|
199
|
+
├── Form (space-y-4)
|
|
200
|
+
│ ├── EmailInput
|
|
201
|
+
│ ├── PasswordInput (with visibility toggle)
|
|
202
|
+
│ ├── RememberRow (flex, justify-between)
|
|
203
|
+
│ └── SubmitButton (w-full, h-11)
|
|
204
|
+
├── Divider (with "or" text)
|
|
205
|
+
└── SocialButtons
|
|
206
|
+
└── GoogleButton (outline variant)
|
|
207
|
+
|
|
208
|
+
### Now implementing...
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## Quick Preview Option
|
|
212
|
+
|
|
213
|
+
After presenting the UI visualization, **ALWAYS ask the user**:
|
|
214
|
+
|
|
215
|
+
> 🔍 **Quick Preview?** Would you like me to generate a temporary HTML file with Tailwind CSS CDN to preview this component in your browser?
|
|
216
|
+
>
|
|
217
|
+
> - **Yes** - I'll create a `/tmp/component-preview.html` file you can open
|
|
218
|
+
> - **No** - Continue with implementation
|
|
219
|
+
|
|
220
|
+
If user chooses **Yes**:
|
|
221
|
+
1. Generate a standalone HTML file at `/tmp/component-preview.html`
|
|
222
|
+
2. Include Tailwind CSS via CDN: `<script src="https://cdn.tailwindcss.com"></script>`
|
|
223
|
+
3. Run the preview script: `.claude/scripts/preview-component.sh /tmp/component-preview.html`
|
|
224
|
+
4. The file will auto-open in the default browser
|
|
225
|
+
|
|
226
|
+
Example preview HTML structure:
|
|
227
|
+
```html
|
|
228
|
+
<!DOCTYPE html>
|
|
229
|
+
<html lang="en">
|
|
230
|
+
<head>
|
|
231
|
+
<meta charset="UTF-8">
|
|
232
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
233
|
+
<title>Component Preview</title>
|
|
234
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
235
|
+
</head>
|
|
236
|
+
<body class="min-h-screen bg-gray-50 p-8">
|
|
237
|
+
<div class="max-w-4xl mx-auto">
|
|
238
|
+
<!-- Component code here -->
|
|
239
|
+
</div>
|
|
240
|
+
</body>
|
|
241
|
+
</html>
|
|
242
|
+
```
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Quick component preview - generates HTML and opens in browser
|
|
3
|
+
# Usage: ./preview-component.sh [filename.html]
|
|
4
|
+
|
|
5
|
+
FILE="${1:-/tmp/component-preview.html}"
|
|
6
|
+
|
|
7
|
+
# If no file provided, create from clipboard or stdin
|
|
8
|
+
if [ -z "$1" ]; then
|
|
9
|
+
echo "Creating preview at $FILE"
|
|
10
|
+
cat > "$FILE" << 'TEMPLATE'
|
|
11
|
+
<!DOCTYPE html>
|
|
12
|
+
<html lang="en">
|
|
13
|
+
<head>
|
|
14
|
+
<meta charset="UTF-8">
|
|
15
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
16
|
+
<title>Component Preview</title>
|
|
17
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
18
|
+
<script>
|
|
19
|
+
tailwind.config = {
|
|
20
|
+
theme: {
|
|
21
|
+
extend: {
|
|
22
|
+
// Add your design tokens here
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
</script>
|
|
27
|
+
<style type="text/tailwindcss">
|
|
28
|
+
@layer utilities {
|
|
29
|
+
.debug * { outline: 1px solid red; }
|
|
30
|
+
}
|
|
31
|
+
</style>
|
|
32
|
+
</head>
|
|
33
|
+
<body class="min-h-screen bg-gray-50 p-8">
|
|
34
|
+
<div class="max-w-4xl mx-auto space-y-8">
|
|
35
|
+
|
|
36
|
+
<!-- PASTE YOUR COMPONENT HTML HERE -->
|
|
37
|
+
<div class="bg-white rounded-lg shadow-md p-6">
|
|
38
|
+
<h2 class="text-xl font-semibold">Preview Component</h2>
|
|
39
|
+
<p class="text-gray-600 mt-2">Replace this with your component code</p>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<!-- Debug toggle -->
|
|
45
|
+
<button
|
|
46
|
+
onclick="document.body.classList.toggle('debug')"
|
|
47
|
+
class="fixed bottom-4 right-4 bg-gray-800 text-white px-3 py-1 rounded text-sm"
|
|
48
|
+
>
|
|
49
|
+
Toggle Outlines
|
|
50
|
+
</button>
|
|
51
|
+
</body>
|
|
52
|
+
</html>
|
|
53
|
+
TEMPLATE
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# Open in browser (cross-platform)
|
|
57
|
+
if command -v xdg-open &> /dev/null; then
|
|
58
|
+
xdg-open "$FILE"
|
|
59
|
+
elif command -v open &> /dev/null; then
|
|
60
|
+
open "$FILE"
|
|
61
|
+
elif command -v start &> /dev/null; then
|
|
62
|
+
start "$FILE"
|
|
63
|
+
else
|
|
64
|
+
echo "Preview ready at: $FILE"
|
|
65
|
+
fi
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"SessionStart": [
|
|
4
|
+
{
|
|
5
|
+
"matcher": "startup|resume|clear",
|
|
6
|
+
"hooks": [
|
|
7
|
+
{
|
|
8
|
+
"type": "command",
|
|
9
|
+
"command": "echo REMINDER: Start EVERY response with: Skills: [list] or Skills: none"
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"PostToolUse": [
|
|
15
|
+
{
|
|
16
|
+
"matcher": "Edit",
|
|
17
|
+
"hooks": [
|
|
18
|
+
{
|
|
19
|
+
"type": "command",
|
|
20
|
+
"command": "echo %TOOL_INPUT% | findstr /C:\"docs/ai/planning/feature-\" >nul 2>&1 && echo [%DATE% %TIME%] Task updated in planning doc >> .claude/feature-progress.log || exit /b 0"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"Stop": [
|
|
26
|
+
{
|
|
27
|
+
"matcher": "",
|
|
28
|
+
"hooks": [
|
|
29
|
+
{
|
|
30
|
+
"type": "command",
|
|
31
|
+
"command": "powershell.exe -NoProfile -Command \"Add-Type -AssemblyName System.Windows.Forms; [void][System.Windows.Forms.MessageBox]::Show('Task completed', 'Claude Code', 0, 64)\" 2>nul || notify-send -i dialog-information 'Claude Code' 'Task completed' 2>/dev/null || osascript -e 'display notification \"Task completed\" with title \"Claude Code\"' 2>/dev/null || exit 0"
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"Notification": [
|
|
37
|
+
{
|
|
38
|
+
"matcher": "permission_prompt",
|
|
39
|
+
"hooks": [
|
|
40
|
+
{
|
|
41
|
+
"type": "command",
|
|
42
|
+
"command": "powershell.exe -NoProfile -Command \"Add-Type -AssemblyName System.Windows.Forms; [void][System.Windows.Forms.MessageBox]::Show('Permission required - check terminal', 'Claude Code', 0, 48)\" 2>nul || notify-send -u critical -i dialog-warning 'Claude Code' 'Permission required' 2>/dev/null || exit 0"
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -12,50 +12,5 @@
|
|
|
12
12
|
"deny": [],
|
|
13
13
|
"ask": []
|
|
14
14
|
},
|
|
15
|
-
"
|
|
16
|
-
"SessionStart": [
|
|
17
|
-
{
|
|
18
|
-
"matcher": "startup|resume|clear",
|
|
19
|
-
"hooks": [
|
|
20
|
-
{
|
|
21
|
-
"type": "command",
|
|
22
|
-
"command": "echo '⚠️ REMINDER: Start EVERY response with: 📚 Skills: [list] or 📚 Skills: none'"
|
|
23
|
-
}
|
|
24
|
-
]
|
|
25
|
-
}
|
|
26
|
-
],
|
|
27
|
-
"PostToolUse": [
|
|
28
|
-
{
|
|
29
|
-
"matcher": "Edit",
|
|
30
|
-
"hooks": [
|
|
31
|
-
{
|
|
32
|
-
"type": "command",
|
|
33
|
-
"command": "if echo \"$TOOL_INPUT\" | grep -q 'docs/ai/planning/feature-'; then echo \"[$(date '+%Y-%m-%d %H:%M:%S')] Task updated in planning doc\" >> .claude/feature-progress.log; fi"
|
|
34
|
-
}
|
|
35
|
-
]
|
|
36
|
-
}
|
|
37
|
-
],
|
|
38
|
-
"Stop": [
|
|
39
|
-
{
|
|
40
|
-
"matcher": "",
|
|
41
|
-
"hooks": [
|
|
42
|
-
{
|
|
43
|
-
"type": "command",
|
|
44
|
-
"command": "if command -v notify-send &>/dev/null; then notify-send -i dialog-information 'Claude Code' '✅ Task completed' 2>/dev/null; elif command -v powershell.exe &>/dev/null; then powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Task completed', 'Claude Code', 'OK', 'Information')\" 2>/dev/null; elif command -v osascript &>/dev/null; then osascript -e 'display notification \"Task completed\" with title \"Claude Code\"' 2>/dev/null; fi; exit 0"
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
}
|
|
48
|
-
],
|
|
49
|
-
"Notification": [
|
|
50
|
-
{
|
|
51
|
-
"matcher": "permission_prompt",
|
|
52
|
-
"hooks": [
|
|
53
|
-
{
|
|
54
|
-
"type": "command",
|
|
55
|
-
"command": "if command -v notify-send &>/dev/null; then notify-send -u critical -i dialog-warning 'Claude Code' '⚠️ Permission required - check terminal' 2>/dev/null; elif command -v powershell.exe &>/dev/null; then powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Permission required - check terminal', 'Claude Code', 'OK', 'Warning')\" 2>/dev/null; fi; exit 0"
|
|
56
|
-
}
|
|
57
|
-
]
|
|
58
|
-
}
|
|
59
|
-
]
|
|
60
|
-
}
|
|
15
|
+
"outputStyle": "tech-explainer"
|
|
61
16
|
}
|