@torka/claude-workflows 0.7.1 → 0.9.0
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/agents/desk-check-gate.md +199 -134
- package/bmad-workflows/bmm/workflows/4-implementation/implement-epic-with-subagents/checklists/desk-check-checklist.md +76 -0
- package/bmad-workflows/bmm/workflows/4-implementation/implement-epic-with-subagents/steps/step-01c-new.md +2 -2
- package/commands/dev-story-backend.md +467 -0
- package/commands/dev-story-fullstack.md +490 -0
- package/commands/dev-story-ui.md +495 -0
- package/install.js +52 -8
- package/package.json +1 -1
- package/skills/agent-creator/COMMUNITY-REPOS.md +72 -0
- package/skills/agent-creator/SKILL.md +94 -102
- package/skills/agent-creator/STORY-AGENT-TEMPLATE.md +261 -166
- package/skills/agent-creator/expertise/INDEX.md +99 -0
- package/skills/agent-creator/expertise/backend-api.md +161 -0
- package/skills/agent-creator/expertise/database-orm.md +181 -0
- package/skills/agent-creator/expertise/devops-ci.md +211 -0
- package/skills/agent-creator/expertise/nextjs-fullstack.md +159 -0
- package/skills/agent-creator/expertise/react-frontend.md +134 -0
- package/skills/agent-creator/expertise/testing.md +179 -0
- package/uninstall.js +18 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# React Frontend Expertise Profile
|
|
2
|
+
|
|
3
|
+
Use this profile for agents that build UI components, implement user interactions, and handle client-side state.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Trigger Keywords
|
|
8
|
+
|
|
9
|
+
### High Signal (strongly suggests this profile)
|
|
10
|
+
- `component`, `hook`, `JSX`, `form`, `modal`, `dialog`
|
|
11
|
+
- `button`, `card`, `toast`, `responsive`, `accessibility`
|
|
12
|
+
- `shadcn`, `Tailwind`, `CSS`, `animation`
|
|
13
|
+
|
|
14
|
+
### Medium Signal (consider this profile)
|
|
15
|
+
- `UI`, `frontend`, `client`, `interactive`, `design`
|
|
16
|
+
- `layout`, `theme`, `dark mode`, `mobile`
|
|
17
|
+
- `validation` (client-side), `state`
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Core Competencies
|
|
22
|
+
|
|
23
|
+
1. **Component Architecture** - Build reusable, composable components with clear props interfaces
|
|
24
|
+
2. **React Hooks Mastery** - Proper use of useState, useEffect, useMemo, useCallback, custom hooks
|
|
25
|
+
3. **Accessibility (a11y)** - ARIA labels, keyboard navigation, screen reader support
|
|
26
|
+
4. **Responsive Design** - Mobile-first approach, breakpoint handling, fluid layouts
|
|
27
|
+
5. **Form Handling** - Validation, error states, controlled inputs, form libraries
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Typical Tasks
|
|
32
|
+
|
|
33
|
+
- Build new UI components from designs or requirements
|
|
34
|
+
- Implement complex form interactions with validation
|
|
35
|
+
- Add responsive behavior to existing components
|
|
36
|
+
- Integrate shadcn/ui components with customization
|
|
37
|
+
- Create loading/error/empty states for async UI
|
|
38
|
+
- Add keyboard shortcuts and accessibility features
|
|
39
|
+
- Implement animations and transitions
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Quality Markers
|
|
44
|
+
|
|
45
|
+
What separates good frontend work:
|
|
46
|
+
|
|
47
|
+
| Marker | What It Means |
|
|
48
|
+
|--------|---------------|
|
|
49
|
+
| **Props interface clarity** | Types are precise, defaults sensible |
|
|
50
|
+
| **Composition over inheritance** | Uses children, render props, compound components |
|
|
51
|
+
| **Error boundary usage** | Graceful failure for component trees |
|
|
52
|
+
| **Loading states** | Never shows blank/broken UI during async |
|
|
53
|
+
| **Focus management** | Modals trap focus, dialogs restore it |
|
|
54
|
+
| **Semantic HTML** | Uses correct elements (`button`, not `div onClick`) |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Anti-Patterns
|
|
59
|
+
|
|
60
|
+
Common mistakes to avoid:
|
|
61
|
+
|
|
62
|
+
| Anti-Pattern | Better Approach |
|
|
63
|
+
|--------------|-----------------|
|
|
64
|
+
| Inline styles everywhere | Use Tailwind classes consistently |
|
|
65
|
+
| `useEffect` for everything | Derive state, use event handlers |
|
|
66
|
+
| Giant monolithic components | Break into smaller, focused pieces |
|
|
67
|
+
| Prop drilling 5+ levels | Use context or composition |
|
|
68
|
+
| Ignoring keyboard users | Test with Tab key, add shortcuts |
|
|
69
|
+
| No loading states | Always handle pending/loading/error |
|
|
70
|
+
| Hardcoded text | Use translation keys (next-intl) |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Tool Affinities
|
|
75
|
+
|
|
76
|
+
### Required MCPs
|
|
77
|
+
| MCP | Usage |
|
|
78
|
+
|-----|-------|
|
|
79
|
+
| **shadcn** | Get component demos, check examples, run add commands |
|
|
80
|
+
| **Playwright** | Visual verification via screenshots |
|
|
81
|
+
|
|
82
|
+
### Optional MCPs
|
|
83
|
+
| MCP | Usage |
|
|
84
|
+
|-----|-------|
|
|
85
|
+
| **MagicPatterns** | Fetch designed components if available |
|
|
86
|
+
| **Context7** | Query React/Radix/Tailwind docs |
|
|
87
|
+
|
|
88
|
+
### Core Tools
|
|
89
|
+
- `Read` - Check existing component patterns
|
|
90
|
+
- `Glob` - Find related components
|
|
91
|
+
- `Write/Edit` - Create/modify components
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Tech Stack (This Project)
|
|
96
|
+
|
|
97
|
+
| Technology | Usage | Notes |
|
|
98
|
+
|------------|-------|-------|
|
|
99
|
+
| **React 18** | Component framework | Server Components support |
|
|
100
|
+
| **Tailwind CSS** | Styling | Configured in `tailwind.config.ts` |
|
|
101
|
+
| **shadcn/ui** | Component library | Components in `src/components/ui/` |
|
|
102
|
+
| **Radix UI** | Primitives | Base for shadcn components |
|
|
103
|
+
| **next-intl** | i18n | Translations in `src/locales/` |
|
|
104
|
+
| **Lucide Icons** | Icons | `lucide-react` package |
|
|
105
|
+
| **Framer Motion** | Animations | Use sparingly |
|
|
106
|
+
|
|
107
|
+
### Key Paths
|
|
108
|
+
- Components: `src/components/`
|
|
109
|
+
- UI primitives: `src/components/ui/`
|
|
110
|
+
- Pages: `src/app/[locale]/`
|
|
111
|
+
- Translations: `src/locales/{locale}/`
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Example Agent Persona Snippet
|
|
116
|
+
|
|
117
|
+
```markdown
|
|
118
|
+
You are a React frontend specialist with deep expertise in:
|
|
119
|
+
- Building accessible, reusable components with shadcn/ui
|
|
120
|
+
- Implementing responsive designs with Tailwind CSS
|
|
121
|
+
- Managing client-side state with React hooks
|
|
122
|
+
- Creating polished UI interactions with proper loading/error states
|
|
123
|
+
|
|
124
|
+
You prioritize:
|
|
125
|
+
- Accessibility (keyboard navigation, ARIA labels)
|
|
126
|
+
- Mobile-first responsive design
|
|
127
|
+
- Consistent use of existing component patterns
|
|
128
|
+
- Translation support via next-intl
|
|
129
|
+
|
|
130
|
+
You avoid:
|
|
131
|
+
- Inline styles (use Tailwind classes)
|
|
132
|
+
- Prop drilling (use composition or context)
|
|
133
|
+
- Hardcoded text (use translation keys)
|
|
134
|
+
```
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Testing Expertise Profile
|
|
2
|
+
|
|
3
|
+
Use this profile for agents that write unit tests, E2E tests, set up test infrastructure, and improve test coverage.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Trigger Keywords
|
|
8
|
+
|
|
9
|
+
### High Signal (strongly suggests this profile)
|
|
10
|
+
- `test`, `spec`, `Vitest`, `Playwright`
|
|
11
|
+
- `mock`, `fixture`, `assertion`, `coverage`
|
|
12
|
+
- `E2E`, `unit test`, `integration test`
|
|
13
|
+
|
|
14
|
+
### Medium Signal (consider this profile)
|
|
15
|
+
- `TDD`, `red-green`, `test-driven`
|
|
16
|
+
- `stub`, `spy`, `fake`, `snapshot`
|
|
17
|
+
- `CI`, `quality`, `regression`
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Core Competencies
|
|
22
|
+
|
|
23
|
+
1. **Test Design** - Proper arrange/act/assert, test isolation, meaningful names
|
|
24
|
+
2. **Mocking Strategy** - When to mock, what to mock, avoiding over-mocking
|
|
25
|
+
3. **E2E Patterns** - Page objects, selectors, waiting strategies
|
|
26
|
+
4. **Coverage Analysis** - Identifying gaps, prioritizing high-value tests
|
|
27
|
+
5. **Test Data Management** - Fixtures, factories, cleanup strategies
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Typical Tasks
|
|
32
|
+
|
|
33
|
+
- Write unit tests for new functionality
|
|
34
|
+
- Add E2E tests for critical user flows
|
|
35
|
+
- Set up mocks for external dependencies
|
|
36
|
+
- Improve test coverage in specific areas
|
|
37
|
+
- Fix flaky tests
|
|
38
|
+
- Create test utilities and helpers
|
|
39
|
+
- Add visual regression tests
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Quality Markers
|
|
44
|
+
|
|
45
|
+
What separates good test work:
|
|
46
|
+
|
|
47
|
+
| Marker | What It Means |
|
|
48
|
+
|--------|---------------|
|
|
49
|
+
| **Clear test names** | Describes behavior, not implementation |
|
|
50
|
+
| **Single assertion focus** | One logical assertion per test |
|
|
51
|
+
| **No test interdependence** | Tests run in any order |
|
|
52
|
+
| **Meaningful selectors** | data-testid, not fragile CSS |
|
|
53
|
+
| **Proper cleanup** | No leaked state between tests |
|
|
54
|
+
| **Fast unit tests** | < 100ms per test typically |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Anti-Patterns
|
|
59
|
+
|
|
60
|
+
Common mistakes to avoid:
|
|
61
|
+
|
|
62
|
+
| Anti-Pattern | Better Approach |
|
|
63
|
+
|--------------|-----------------|
|
|
64
|
+
| Testing implementation | Test behavior and outcomes |
|
|
65
|
+
| Mocking everything | Mock boundaries, not internals |
|
|
66
|
+
| Fragile selectors | Use data-testid attributes |
|
|
67
|
+
| Test names like "test1" | Describe the expected behavior |
|
|
68
|
+
| Shared mutable state | Fresh setup for each test |
|
|
69
|
+
| Ignoring async properly | await, waitFor, proper assertions |
|
|
70
|
+
| No error case tests | Test happy path AND failures |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Tool Affinities
|
|
75
|
+
|
|
76
|
+
### Required MCPs
|
|
77
|
+
| MCP | Usage |
|
|
78
|
+
|-----|-------|
|
|
79
|
+
| **Playwright** | E2E test execution and debugging |
|
|
80
|
+
|
|
81
|
+
### Optional MCPs
|
|
82
|
+
| MCP | Usage |
|
|
83
|
+
|-----|-------|
|
|
84
|
+
| **Context7** | Query Vitest/Playwright docs |
|
|
85
|
+
|
|
86
|
+
### Core Tools
|
|
87
|
+
- `Read` - Check existing test patterns
|
|
88
|
+
- `Glob` - Find test files, coverage gaps
|
|
89
|
+
- `Bash` - Run tests, check coverage
|
|
90
|
+
- `Write/Edit` - Create/modify tests
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Tech Stack (This Project)
|
|
95
|
+
|
|
96
|
+
| Technology | Usage | Notes |
|
|
97
|
+
|------------|-------|-------|
|
|
98
|
+
| **Vitest** | Unit tests | jsdom for components |
|
|
99
|
+
| **Playwright** | E2E tests | In `tests/` directory |
|
|
100
|
+
| **Testing Library** | Component tests | React Testing Library |
|
|
101
|
+
|
|
102
|
+
### Key Paths
|
|
103
|
+
- Unit tests: Co-located (e.g., `Component.test.tsx`)
|
|
104
|
+
- E2E tests: `tests/*.spec.ts` or `tests/*.e2e.ts`
|
|
105
|
+
- Test setup: `tests/setup.ts`
|
|
106
|
+
- Playwright config: `playwright.config.ts`
|
|
107
|
+
- Vitest config: `vitest.config.ts`
|
|
108
|
+
|
|
109
|
+
### Test Commands
|
|
110
|
+
```bash
|
|
111
|
+
# Unit tests
|
|
112
|
+
npm test # Run all unit tests
|
|
113
|
+
npm test -- --watch # Watch mode
|
|
114
|
+
npm test -- --coverage # With coverage
|
|
115
|
+
|
|
116
|
+
# E2E tests
|
|
117
|
+
npm run test:e2e # Run Playwright tests
|
|
118
|
+
npm run test:e2e -- --ui # With Playwright UI
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Unit Test Pattern (Vitest)
|
|
122
|
+
```typescript
|
|
123
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
124
|
+
import { render, screen } from '@testing-library/react';
|
|
125
|
+
import { MyComponent } from './MyComponent';
|
|
126
|
+
|
|
127
|
+
describe('MyComponent', () => {
|
|
128
|
+
it('renders the title', () => {
|
|
129
|
+
render(<MyComponent title="Hello" />);
|
|
130
|
+
expect(screen.getByText('Hello')).toBeInTheDocument();
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it('calls onClick when button clicked', async () => {
|
|
134
|
+
const onClick = vi.fn();
|
|
135
|
+
render(<MyComponent onClick={onClick} />);
|
|
136
|
+
await userEvent.click(screen.getByRole('button'));
|
|
137
|
+
expect(onClick).toHaveBeenCalledOnce();
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### E2E Test Pattern (Playwright)
|
|
143
|
+
```typescript
|
|
144
|
+
import { test, expect } from '@playwright/test';
|
|
145
|
+
|
|
146
|
+
test.describe('Login flow', () => {
|
|
147
|
+
test('user can sign in', async ({ page }) => {
|
|
148
|
+
await page.goto('/sign-in');
|
|
149
|
+
await page.fill('[data-testid="email"]', 'test@example.com');
|
|
150
|
+
await page.fill('[data-testid="password"]', 'password123');
|
|
151
|
+
await page.click('[data-testid="submit"]');
|
|
152
|
+
await expect(page).toHaveURL('/dashboard');
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Example Agent Persona Snippet
|
|
160
|
+
|
|
161
|
+
```markdown
|
|
162
|
+
You are a testing specialist with deep expertise in:
|
|
163
|
+
- Writing clear, maintainable unit tests with Vitest
|
|
164
|
+
- Building reliable E2E tests with Playwright
|
|
165
|
+
- Designing effective mocking strategies
|
|
166
|
+
- Identifying and improving test coverage gaps
|
|
167
|
+
|
|
168
|
+
You prioritize:
|
|
169
|
+
- Testing behavior, not implementation details
|
|
170
|
+
- Clear, descriptive test names
|
|
171
|
+
- Proper test isolation (no shared state)
|
|
172
|
+
- Stable selectors (data-testid over CSS)
|
|
173
|
+
|
|
174
|
+
You avoid:
|
|
175
|
+
- Over-mocking (mock boundaries, not internals)
|
|
176
|
+
- Fragile selectors that break on refactors
|
|
177
|
+
- Test interdependence (tests must run in any order)
|
|
178
|
+
- Skipping error case coverage
|
|
179
|
+
```
|
package/uninstall.js
CHANGED
|
@@ -39,10 +39,14 @@ const INSTALLED_FILES = {
|
|
|
39
39
|
'implement-epic-with-subagents.md',
|
|
40
40
|
'plan-parallelization.md',
|
|
41
41
|
'git-cleanup-and-merge.md',
|
|
42
|
+
'dev-story-backend.md',
|
|
43
|
+
'dev-story-fullstack.md',
|
|
44
|
+
'dev-story-ui.md',
|
|
42
45
|
],
|
|
43
46
|
agents: [
|
|
44
47
|
'principal-code-reviewer.md',
|
|
45
48
|
'story-prep-master.md',
|
|
49
|
+
'desk-check-gate.md',
|
|
46
50
|
],
|
|
47
51
|
'skills/agent-creator': [
|
|
48
52
|
'SKILL.md',
|
|
@@ -51,6 +55,15 @@ const INSTALLED_FILES = {
|
|
|
51
55
|
'NON-STORY-AGENT-TEMPLATE.md',
|
|
52
56
|
'COMMUNITY-REPOS.md',
|
|
53
57
|
],
|
|
58
|
+
'skills/agent-creator/expertise': [
|
|
59
|
+
'INDEX.md',
|
|
60
|
+
'react-frontend.md',
|
|
61
|
+
'backend-api.md',
|
|
62
|
+
'nextjs-fullstack.md',
|
|
63
|
+
'testing.md',
|
|
64
|
+
'database-orm.md',
|
|
65
|
+
'devops-ci.md',
|
|
66
|
+
],
|
|
54
67
|
'skills/designer-founder': [
|
|
55
68
|
'workflow.md',
|
|
56
69
|
],
|
|
@@ -104,6 +117,9 @@ const BMAD_INSTALLED_FILES = {
|
|
|
104
117
|
'../_bmad/bmm/workflows/4-implementation/implement-epic-with-subagents/validation': [
|
|
105
118
|
'checklist.md',
|
|
106
119
|
],
|
|
120
|
+
'../_bmad/bmm/workflows/4-implementation/implement-epic-with-subagents/checklists': [
|
|
121
|
+
'desk-check-checklist.md',
|
|
122
|
+
],
|
|
107
123
|
};
|
|
108
124
|
|
|
109
125
|
/**
|
|
@@ -226,6 +242,7 @@ function uninstall() {
|
|
|
226
242
|
|
|
227
243
|
// Clean up empty BMAD directories (from deepest to shallowest)
|
|
228
244
|
const bmadDirs = [
|
|
245
|
+
'../_bmad/bmm/workflows/4-implementation/implement-epic-with-subagents/checklists',
|
|
229
246
|
'../_bmad/bmm/workflows/4-implementation/implement-epic-with-subagents/validation',
|
|
230
247
|
'../_bmad/bmm/workflows/4-implementation/implement-epic-with-subagents/templates',
|
|
231
248
|
'../_bmad/bmm/workflows/4-implementation/implement-epic-with-subagents/steps',
|
|
@@ -245,6 +262,7 @@ function uninstall() {
|
|
|
245
262
|
'skills/designer-founder/templates',
|
|
246
263
|
'skills/designer-founder/steps',
|
|
247
264
|
'skills/designer-founder',
|
|
265
|
+
'skills/agent-creator/expertise',
|
|
248
266
|
'skills/agent-creator',
|
|
249
267
|
];
|
|
250
268
|
for (const skillSubDir of skillDirs) {
|