mirror of
https://github.com/duthaho/claudekit.git
synced 2026-06-10 20:24:57 +03:00
feat: restructure website documentation
This commit is contained in:
+11
-128
@@ -10,7 +10,7 @@ export default defineConfig({
|
||||
integrations: [
|
||||
starlight({
|
||||
title: 'Claude Kit',
|
||||
description: 'The open-source AI dev toolkit for Claude Code. Ship faster with 27+ commands, 7 modes, and 34+ skills. Free forever.',
|
||||
description: 'The open-source AI dev toolkit for Claude Code. 43 skills, 20 agents, 7 modes — structure that makes Claude Code production-ready. Free forever.',
|
||||
social: [
|
||||
{ icon: 'github', label: 'GitHub', href: 'https://github.com/duthaho/claudekit' }
|
||||
],
|
||||
@@ -37,148 +37,31 @@ export default defineConfig({
|
||||
items: [
|
||||
{ label: 'Introduction', slug: 'getting-started/introduction' },
|
||||
{ label: 'Installation', slug: 'getting-started/installation' },
|
||||
{ label: 'Quick Start', slug: 'getting-started/quick-start' },
|
||||
{ label: 'Configuration', slug: 'getting-started/configuration' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Commands',
|
||||
collapsed: false,
|
||||
label: 'Workflows',
|
||||
items: [
|
||||
{ label: 'Overview', slug: 'commands/overview' },
|
||||
{
|
||||
label: 'Development',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: '/feature', slug: 'commands/feature' },
|
||||
{ label: '/fix', slug: 'commands/fix' },
|
||||
{ label: '/review', slug: 'commands/review' },
|
||||
{ label: '/test', slug: 'commands/test' },
|
||||
{ label: '/refactor', slug: 'commands/refactor' },
|
||||
{ label: '/debug', slug: 'commands/debug' },
|
||||
{ label: '/tdd', slug: 'commands/tdd' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Planning',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: '/plan', slug: 'commands/plan' },
|
||||
{ label: '/brainstorm', slug: 'commands/brainstorm' },
|
||||
{ label: '/execute-plan', slug: 'commands/execute-plan' },
|
||||
{ label: '/research', slug: 'commands/research' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Git & Deployment',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: '/ship', slug: 'commands/ship' },
|
||||
{ label: '/commit', slug: 'commands/commit' },
|
||||
{ label: '/pr', slug: 'commands/pr' },
|
||||
{ label: '/deploy', slug: 'commands/deploy' },
|
||||
{ label: '/changelog', slug: 'commands/changelog' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Documentation',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: '/doc', slug: 'commands/doc' },
|
||||
{ label: '/api-gen', slug: 'commands/api-gen' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Utilities',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: '/mode', slug: 'commands/mode' },
|
||||
{ label: '/index', slug: 'commands/index-cmd' },
|
||||
{ label: '/load', slug: 'commands/load' },
|
||||
{ label: '/checkpoint', slug: 'commands/checkpoint' },
|
||||
{ label: '/spawn', slug: 'commands/spawn' },
|
||||
{ label: '/status', slug: 'commands/status' },
|
||||
{ label: '/help', slug: 'commands/help' },
|
||||
{ label: '/optimize', slug: 'commands/optimize' },
|
||||
{ label: '/security-scan', slug: 'commands/security-scan' },
|
||||
],
|
||||
},
|
||||
{ label: 'Planning & Building', slug: 'workflows/planning-and-building' },
|
||||
{ label: 'Testing & Debugging', slug: 'workflows/testing-and-debugging' },
|
||||
{ label: 'Reviewing & Shipping', slug: 'workflows/reviewing-and-shipping' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'MCP Integrations',
|
||||
collapsed: false,
|
||||
label: 'Reference',
|
||||
items: [
|
||||
{ label: 'Overview', slug: 'mcp/overview' },
|
||||
{ label: 'Context7', slug: 'mcp/context7' },
|
||||
{ label: 'Sequential Thinking', slug: 'mcp/sequential' },
|
||||
{ label: 'Playwright', slug: 'mcp/playwright' },
|
||||
{ label: 'Memory', slug: 'mcp/memory' },
|
||||
{ label: 'Filesystem', slug: 'mcp/filesystem' },
|
||||
{ label: 'Command Integration', slug: 'mcp/integration' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Modes',
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ label: 'Overview', slug: 'modes/overview' },
|
||||
{ label: 'Default', slug: 'modes/default' },
|
||||
{ label: 'Brainstorm', slug: 'modes/brainstorm' },
|
||||
{ label: 'Token-Efficient', slug: 'modes/token-efficient' },
|
||||
{ label: 'Deep Research', slug: 'modes/deep-research' },
|
||||
{ label: 'Implementation', slug: 'modes/implementation' },
|
||||
{ label: 'Review', slug: 'modes/review' },
|
||||
{ label: 'Orchestration', slug: 'modes/orchestration' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Skills',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Overview', slug: 'skills/overview' },
|
||||
{
|
||||
label: 'Methodology',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Brainstorming', slug: 'skills/methodology/brainstorming' },
|
||||
{ label: 'Writing Plans', slug: 'skills/methodology/writing-plans' },
|
||||
{ label: 'Executing Plans', slug: 'skills/methodology/executing-plans' },
|
||||
{ label: 'TDD', slug: 'skills/methodology/tdd' },
|
||||
{ label: 'Systematic Debugging', slug: 'skills/methodology/systematic-debugging' },
|
||||
{ label: 'Code Review', slug: 'skills/methodology/code-review' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Languages',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Python', slug: 'skills/languages/python' },
|
||||
{ label: 'TypeScript', slug: 'skills/languages/typescript' },
|
||||
{ label: 'JavaScript', slug: 'skills/languages/javascript' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Frameworks',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'React', slug: 'skills/frameworks/react' },
|
||||
{ label: 'Next.js', slug: 'skills/frameworks/nextjs' },
|
||||
{ label: 'FastAPI', slug: 'skills/frameworks/fastapi' },
|
||||
{ label: 'Django', slug: 'skills/frameworks/django' },
|
||||
],
|
||||
},
|
||||
{ label: 'Skills', slug: 'reference/skills' },
|
||||
{ label: 'Agents', slug: 'reference/agents' },
|
||||
{ label: 'Modes', slug: 'reference/modes' },
|
||||
{ label: 'MCP Servers', slug: 'reference/mcp-servers' },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Customization',
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ label: 'Overview', slug: 'customization/overview' },
|
||||
{ label: 'Creating Commands', slug: 'customization/creating-commands' },
|
||||
{ label: 'Creating Modes', slug: 'customization/creating-modes' },
|
||||
{ label: 'Creating Skills', slug: 'customization/creating-skills' },
|
||||
{ label: 'CLAUDE.md Reference', slug: 'customization/claude-md' },
|
||||
{ label: 'Creating Agents & Modes', slug: 'customization/creating-agents-and-modes' },
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
@@ -1,422 +0,0 @@
|
||||
---
|
||||
title: /api-gen
|
||||
description: Generate API endpoints, documentation, or client code from specifications
|
||||
---
|
||||
|
||||
# /api-gen
|
||||
|
||||
## Purpose
|
||||
|
||||
Generate API endpoints, documentation, or client code from specifications. Accelerates API development by creating boilerplate code, OpenAPI specs, and client SDKs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/api-gen [resource-name-or-spec]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **resource-name-or-spec**:
|
||||
- Resource name: `User`, `Order`, `Product` - Generate CRUD API
|
||||
- OpenAPI spec path: `openapi.yaml` - Generate from specification
|
||||
- Description: `"User management API"` - Generate from description
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Define Resource
|
||||
|
||||
1. **Identify resource properties**
|
||||
- Field names and types
|
||||
- Required vs optional
|
||||
- Validation rules
|
||||
|
||||
2. **Define relationships**
|
||||
- One-to-many
|
||||
- Many-to-many
|
||||
- Foreign keys
|
||||
|
||||
3. **Determine operations**
|
||||
- CRUD operations needed
|
||||
- Custom endpoints
|
||||
- Business logic
|
||||
|
||||
### Step 2: Generate Code
|
||||
|
||||
1. **Create model/schema**
|
||||
- Database model
|
||||
- Validation schema
|
||||
- Type definitions
|
||||
|
||||
2. **Create routes/endpoints**
|
||||
- HTTP methods
|
||||
- Path parameters
|
||||
- Request/response handling
|
||||
|
||||
3. **Add validation**
|
||||
- Input validation
|
||||
- Type checking
|
||||
- Error handling
|
||||
|
||||
4. **Generate tests**
|
||||
- Endpoint tests
|
||||
- Validation tests
|
||||
- Error case tests
|
||||
|
||||
### Step 3: Document
|
||||
|
||||
1. **Create OpenAPI spec**
|
||||
- Endpoint descriptions
|
||||
- Request/response schemas
|
||||
- Authentication
|
||||
|
||||
2. **Add examples**
|
||||
- Request examples
|
||||
- Response examples
|
||||
- cURL commands
|
||||
|
||||
3. **Document errors**
|
||||
- Error codes
|
||||
- Error messages
|
||||
- Resolution steps
|
||||
|
||||
## Examples
|
||||
|
||||
### Generate CRUD API for Resource
|
||||
|
||||
```bash
|
||||
/api-gen User
|
||||
```
|
||||
|
||||
Creates:
|
||||
- `src/models/user.ts` - Data model
|
||||
- `src/routes/user.ts` - API routes
|
||||
- `src/controllers/user.ts` - Business logic
|
||||
- `tests/user.test.ts` - Test suite
|
||||
- `docs/api/user.md` - API documentation
|
||||
|
||||
### Generate from OpenAPI Spec
|
||||
|
||||
```bash
|
||||
/api-gen openapi.yaml
|
||||
```
|
||||
|
||||
Generates code matching the specification.
|
||||
|
||||
### Generate with Description
|
||||
|
||||
```bash
|
||||
/api-gen "Product catalog API with categories and tags"
|
||||
```
|
||||
|
||||
Creates API based on natural language description.
|
||||
|
||||
## Output
|
||||
|
||||
```markdown
|
||||
## API Generated: User Management
|
||||
|
||||
### Endpoints Created
|
||||
|
||||
| Method | Path | Description |
|
||||
|--------|------|-------------|
|
||||
| GET | /api/users | List all users |
|
||||
| POST | /api/users | Create new user |
|
||||
| GET | /api/users/:id | Get user by ID |
|
||||
| PUT | /api/users/:id | Update user |
|
||||
| DELETE | /api/users/:id | Delete user |
|
||||
| GET | /api/users/:id/posts | Get user's posts |
|
||||
|
||||
### Files Created
|
||||
|
||||
#### Model
|
||||
- `src/models/user.ts`
|
||||
```typescript
|
||||
export interface User {
|
||||
id: string;
|
||||
email: string;
|
||||
name: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
}
|
||||
|
||||
export const UserSchema = z.object({
|
||||
email: z.string().email(),
|
||||
name: z.string().min(1).max(100),
|
||||
});
|
||||
```
|
||||
|
||||
#### Routes
|
||||
- `src/routes/user.ts`
|
||||
```typescript
|
||||
router.get('/users', listUsers);
|
||||
router.post('/users', validateBody(UserSchema), createUser);
|
||||
router.get('/users/:id', getUser);
|
||||
router.put('/users/:id', validateBody(UserSchema), updateUser);
|
||||
router.delete('/users/:id', deleteUser);
|
||||
```
|
||||
|
||||
#### Controller
|
||||
- `src/controllers/user.ts`
|
||||
```typescript
|
||||
export async function createUser(req, res) {
|
||||
const user = await db.user.create({
|
||||
data: req.body,
|
||||
});
|
||||
res.status(201).json(user);
|
||||
}
|
||||
// ... other handlers
|
||||
```
|
||||
|
||||
#### Tests
|
||||
- `tests/user.test.ts`
|
||||
```typescript
|
||||
describe('User API', () => {
|
||||
it('should create user', async () => {
|
||||
const res = await request(app)
|
||||
.post('/api/users')
|
||||
.send({ email: 'test@example.com', name: 'Test' });
|
||||
expect(res.status).toBe(201);
|
||||
expect(res.body).toHaveProperty('id');
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
#### Documentation
|
||||
- `docs/api/user.md` - Full API documentation
|
||||
|
||||
### OpenAPI Specification
|
||||
|
||||
Generated `openapi.yaml`:
|
||||
```yaml
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
title: User API
|
||||
version: 1.0.0
|
||||
paths:
|
||||
/api/users:
|
||||
get:
|
||||
summary: List all users
|
||||
responses:
|
||||
'200':
|
||||
description: Success
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/User'
|
||||
post:
|
||||
summary: Create new user
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreateUser'
|
||||
responses:
|
||||
'201':
|
||||
description: Created
|
||||
```
|
||||
|
||||
### Next Steps
|
||||
|
||||
1. ✅ API endpoints generated
|
||||
2. 🔧 Add authentication middleware
|
||||
3. 🔧 Implement business validation
|
||||
4. 🔧 Add pagination to list endpoint
|
||||
5. 📝 Review and customize as needed
|
||||
```
|
||||
|
||||
## Generation Modes
|
||||
|
||||
### CRUD Generation
|
||||
```bash
|
||||
/api-gen Product
|
||||
```
|
||||
Full Create, Read, Update, Delete operations
|
||||
|
||||
### Spec-Based Generation
|
||||
```bash
|
||||
/api-gen swagger.json
|
||||
```
|
||||
Generate from existing OpenAPI/Swagger spec
|
||||
|
||||
### Client Generation
|
||||
```bash
|
||||
/api-gen --client openapi.yaml
|
||||
```
|
||||
Generate TypeScript/Python client SDK
|
||||
|
||||
### Documentation Only
|
||||
```bash
|
||||
/api-gen --docs-only api/
|
||||
```
|
||||
Generate documentation for existing endpoints
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--framework=[express\|fastapi\|nestjs]` | Target framework |
|
||||
| `--db=[postgres\|mongodb\|prisma]` | Database/ORM |
|
||||
| `--auth` | Include authentication |
|
||||
| `--client` | Generate client SDK |
|
||||
| `--docs-only` | Documentation only |
|
||||
| `--test-framework=[jest\|vitest\|pytest]` | Testing framework |
|
||||
|
||||
## Advanced Examples
|
||||
|
||||
### Express + PostgreSQL + Auth
|
||||
|
||||
```bash
|
||||
/api-gen Order \
|
||||
--framework=express \
|
||||
--db=postgres \
|
||||
--auth
|
||||
```
|
||||
|
||||
### FastAPI + MongoDB
|
||||
|
||||
```bash
|
||||
/api-gen Product \
|
||||
--framework=fastapi \
|
||||
--db=mongodb
|
||||
```
|
||||
|
||||
### Generate Client SDK
|
||||
|
||||
```bash
|
||||
/api-gen --client openapi.yaml
|
||||
```
|
||||
|
||||
Creates TypeScript client:
|
||||
```typescript
|
||||
import { UserAPI } from './generated/client';
|
||||
|
||||
const api = new UserAPI({ baseUrl: 'http://localhost:3000' });
|
||||
const users = await api.getUsers();
|
||||
const user = await api.createUser({
|
||||
email: 'test@example.com',
|
||||
name: 'Test User'
|
||||
});
|
||||
```
|
||||
|
||||
## Resource Definition
|
||||
|
||||
When generating from resource name, you'll be asked:
|
||||
|
||||
```markdown
|
||||
### Define Resource: User
|
||||
|
||||
**Fields:**
|
||||
1. email (string, required, unique)
|
||||
2. name (string, required)
|
||||
3. role (enum: user|admin, optional, default: user)
|
||||
4. createdAt (datetime, auto)
|
||||
|
||||
**Relationships:**
|
||||
- Has many: Post
|
||||
- Belongs to: Organization (optional)
|
||||
|
||||
**Custom Endpoints:**
|
||||
- POST /users/:id/verify-email
|
||||
- POST /users/:id/reset-password
|
||||
|
||||
**Validation:**
|
||||
- Email must be valid format
|
||||
- Name: 1-100 characters
|
||||
- Password: min 8 characters
|
||||
|
||||
Proceed with generation? (y/n)
|
||||
```
|
||||
|
||||
## OpenAPI Templates
|
||||
|
||||
### Complete Endpoint
|
||||
|
||||
```yaml
|
||||
/api/orders:
|
||||
post:
|
||||
summary: Create new order
|
||||
tags:
|
||||
- Orders
|
||||
security:
|
||||
- bearerAuth: []
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreateOrder'
|
||||
examples:
|
||||
basic:
|
||||
value:
|
||||
items:
|
||||
- productId: "123"
|
||||
quantity: 2
|
||||
shippingAddress:
|
||||
street: "123 Main St"
|
||||
city: "New York"
|
||||
responses:
|
||||
'201':
|
||||
description: Order created
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Order'
|
||||
'400':
|
||||
description: Invalid input
|
||||
'401':
|
||||
description: Unauthorized
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Start with Design**: Define API before generating
|
||||
2. **Review Generated Code**: Don't blindly accept all generated code
|
||||
3. **Customize**: Generated code is a starting point
|
||||
4. **Add Business Logic**: Implement domain-specific validation
|
||||
5. **Security**: Add authentication and authorization
|
||||
6. **Testing**: Extend generated tests with edge cases
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Rapid Prototyping
|
||||
|
||||
```bash
|
||||
# Quickly scaffold multiple resources
|
||||
/api-gen User
|
||||
/api-gen Post
|
||||
/api-gen Comment
|
||||
```
|
||||
|
||||
### API-First Development
|
||||
|
||||
```bash
|
||||
# Design spec, then generate
|
||||
# 1. Create openapi.yaml
|
||||
# 2. Generate code
|
||||
/api-gen openapi.yaml
|
||||
```
|
||||
|
||||
### Client SDK Distribution
|
||||
|
||||
```bash
|
||||
# Generate client for API consumers
|
||||
/api-gen --client openapi.yaml
|
||||
```
|
||||
|
||||
### Documentation Generation
|
||||
|
||||
```bash
|
||||
# Document existing API
|
||||
/api-gen --docs-only src/api/
|
||||
```
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/doc](/claudekit/commands/doc) - Generate documentation
|
||||
- [/feature](/claudekit/core-commands/feature) - Full feature development
|
||||
- [/test](/claudekit/core-commands/test) - Generate tests
|
||||
- [/review](/claudekit/core-commands/review) - Review generated code
|
||||
@@ -1,303 +0,0 @@
|
||||
---
|
||||
title: /brainstorm
|
||||
description: Interactive design session using one-question-at-a-time methodology
|
||||
---
|
||||
|
||||
# /brainstorm
|
||||
|
||||
Start an interactive brainstorming session to refine rough ideas into fully-formed designs through collaborative dialogue.
|
||||
|
||||
## Purpose
|
||||
|
||||
The `/brainstorm` command uses a proven one-question-at-a-time methodology to help you design features, architectures, and solutions. It guides you through thoughtful decision-making via sequential questions and validates designs incrementally.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/brainstorm [topic or feature to design]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **topic**: The topic, feature, or problem you want to brainstorm about
|
||||
|
||||
## How It Works
|
||||
|
||||
The brainstorming process follows three phases:
|
||||
|
||||
### Phase 1: Understanding
|
||||
|
||||
**Goal:** Clarify requirements through sequential questioning
|
||||
|
||||
The assistant asks **one question at a time** and waits for your response before proceeding. Questions are typically multiple-choice to reduce cognitive load.
|
||||
|
||||
**Example interaction:**
|
||||
```
|
||||
Claude: "What type of authentication should we support?
|
||||
a) Username/password only
|
||||
b) OAuth providers (Google, GitHub)
|
||||
c) Both options
|
||||
d) Magic link (passwordless)"
|
||||
|
||||
You: "b"
|
||||
|
||||
Claude: "Which OAuth providers should we integrate?
|
||||
a) Google only
|
||||
b) GitHub only
|
||||
c) Both Google and GitHub
|
||||
d) Let me specify others..."
|
||||
```
|
||||
|
||||
### Phase 2: Exploration
|
||||
|
||||
**Goal:** Present alternatives with clear trade-offs
|
||||
|
||||
The assistant presents 2-3 approaches with their pros and cons, leading with the recommended option:
|
||||
|
||||
```markdown
|
||||
## Approach 1: JWT-based (Recommended)
|
||||
- Stateless, highly scalable
|
||||
- Works well with microservices
|
||||
- Cons: Can't revoke instantly
|
||||
|
||||
## Approach 2: Session-based
|
||||
- Easy revocation control
|
||||
- Simpler mental model
|
||||
- Cons: Requires session store (Redis/DB)
|
||||
|
||||
Which approach aligns better with your goals?
|
||||
```
|
||||
|
||||
### Phase 3: Design Presentation
|
||||
|
||||
**Goal:** Present validated design incrementally
|
||||
|
||||
The design is presented in digestible 200-300 word sections:
|
||||
1. Architecture overview
|
||||
2. Component breakdown
|
||||
3. Data flow
|
||||
4. Error handling
|
||||
5. Testing considerations
|
||||
|
||||
You validate each section before moving to the next.
|
||||
|
||||
## Core Principles
|
||||
|
||||
### YAGNI Ruthlessly
|
||||
|
||||
Features are aggressively pruned:
|
||||
- Questions every "nice to have"
|
||||
- Starts with minimal viable design
|
||||
- "We might need this later" means remove it
|
||||
|
||||
### One Question at a Time
|
||||
|
||||
Sequential questioning produces better results:
|
||||
- Gives you time to think deeply
|
||||
- Prevents overwhelming with choices
|
||||
- Creates natural conversation flow
|
||||
|
||||
### Multiple-Choice Preference
|
||||
|
||||
Structured options when possible:
|
||||
- Reduces cognitive load
|
||||
- Surfaces the assistant's understanding
|
||||
- Makes decisions concrete
|
||||
|
||||
## Output
|
||||
|
||||
After the design is validated, a design document is created:
|
||||
|
||||
```markdown
|
||||
# Design: [Feature Name]
|
||||
Date: [YYYY-MM-DD]
|
||||
|
||||
## Summary
|
||||
[2-3 sentence overview]
|
||||
|
||||
## Architecture
|
||||
[Architecture decisions made]
|
||||
|
||||
## Components
|
||||
[Component breakdown with responsibilities]
|
||||
|
||||
## Data Flow
|
||||
[How data moves through the system]
|
||||
|
||||
## Error Handling
|
||||
[Error scenarios and handling strategies]
|
||||
|
||||
## Testing Strategy
|
||||
[How the feature will be tested]
|
||||
|
||||
## Open Questions
|
||||
[Any remaining unknowns]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--mode=[mode]` | Use specific behavioral mode | `--mode=brainstorm` |
|
||||
| `--depth=[1-5]` | Exploration depth level | `--depth=4` |
|
||||
| `--format=[fmt]` | Output format (concise/detailed) | `--format=detailed` |
|
||||
| `--save=[path]` | Save design document to file | `--save=docs/design.md` |
|
||||
| `--quick` | Shorter session, fewer questions | `--quick` |
|
||||
| `--comprehensive` | Longer session, thorough exploration | `--comprehensive` |
|
||||
|
||||
### Session Depth
|
||||
|
||||
| Level | Questions | Exploration |
|
||||
|-------|-----------|-------------|
|
||||
| 1 | 2-3 | Quick validation only |
|
||||
| 2 | 4-5 | Standard session |
|
||||
| 3 | 6-8 | Thorough exploration |
|
||||
| 4 | 8-10 | Comprehensive |
|
||||
| 5 | 10+ | Exhaustive, all angles |
|
||||
|
||||
## Examples
|
||||
|
||||
### Quick Feature Design
|
||||
|
||||
```bash
|
||||
/brainstorm --quick "simple file upload feature"
|
||||
```
|
||||
|
||||
Runs a short session (2-3 questions) to design a straightforward file upload.
|
||||
|
||||
### Comprehensive Architecture Design
|
||||
|
||||
```bash
|
||||
/brainstorm --comprehensive "authentication system design"
|
||||
```
|
||||
|
||||
Runs an extensive session (10+ questions) exploring architecture thoroughly.
|
||||
|
||||
### Design with Custom Depth
|
||||
|
||||
```bash
|
||||
/brainstorm --depth=4 "microservices architecture"
|
||||
```
|
||||
|
||||
Runs a comprehensive session with 8-10 questions exploring the microservices approach.
|
||||
|
||||
### Save Design to File
|
||||
|
||||
```bash
|
||||
/brainstorm --save=docs/payment-design.md "payment integration"
|
||||
```
|
||||
|
||||
Creates a design document and saves it to the specified file.
|
||||
|
||||
### Deep Research Mode
|
||||
|
||||
```bash
|
||||
/brainstorm --mode=deep-research "distributed caching strategy"
|
||||
```
|
||||
|
||||
Uses deep-research mode for thorough analysis with citations.
|
||||
|
||||
## Workflow Integration
|
||||
|
||||
### Brainstorm → Plan → Execute
|
||||
|
||||
1. **Design the feature:**
|
||||
```bash
|
||||
/brainstorm "OAuth authentication"
|
||||
```
|
||||
|
||||
2. **Create detailed implementation plan:**
|
||||
```bash
|
||||
/plan --detailed "implement OAuth from design doc"
|
||||
```
|
||||
|
||||
3. **Execute with automation:**
|
||||
```bash
|
||||
/execute-plan path/to/plan.md
|
||||
```
|
||||
|
||||
### Research → Brainstorm → Plan
|
||||
|
||||
1. **Research options:**
|
||||
```bash
|
||||
/research --compare "state management libraries"
|
||||
```
|
||||
|
||||
2. **Design the solution:**
|
||||
```bash
|
||||
/brainstorm "state management architecture"
|
||||
```
|
||||
|
||||
3. **Plan implementation:**
|
||||
```bash
|
||||
/plan "implement state management"
|
||||
```
|
||||
|
||||
## When to Use
|
||||
|
||||
**Good use cases:**
|
||||
- Designing new features with unclear requirements
|
||||
- Exploring architectural decisions
|
||||
- Evaluating multiple approaches
|
||||
- Refining vague ideas into concrete designs
|
||||
- Making technology choices
|
||||
|
||||
**When NOT to use:**
|
||||
- Clear "mechanical" processes with known implementation
|
||||
- Simple bug fixes with obvious solutions
|
||||
- Tasks with explicit requirements already defined
|
||||
|
||||
For these cases, use direct implementation instead.
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Prepare Context
|
||||
Before brainstorming, have ready:
|
||||
- Current architecture understanding
|
||||
- Constraints (performance, budget, timeline)
|
||||
- Related features or systems
|
||||
- Team capabilities
|
||||
|
||||
### Engage Actively
|
||||
- Take time to think through each question
|
||||
- Ask for clarification when needed
|
||||
- Push back if suggestions don't fit
|
||||
- Validate each section before moving on
|
||||
|
||||
### Document Decisions
|
||||
- Save designs to version control
|
||||
- Include rationale for decisions
|
||||
- Note rejected alternatives
|
||||
- Track open questions
|
||||
|
||||
### Follow Through
|
||||
After brainstorming:
|
||||
1. Commit design document to repo
|
||||
2. Share with team for feedback
|
||||
3. Use `/plan --detailed` for implementation planning
|
||||
4. Reference design during development
|
||||
|
||||
## Tips for Better Sessions
|
||||
|
||||
1. **Be specific** about constraints and requirements
|
||||
2. **Mention existing systems** that need integration
|
||||
3. **State preferences** if you have strong opinions
|
||||
4. **Ask "why"** to understand recommendations
|
||||
5. **Take breaks** for complex designs (use `--checkpoint`)
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/plan](/claudekit/commands/plan) - Create implementation plans from designs
|
||||
- [/execute-plan](/claudekit/commands/execute-plan) - Execute plans with automation
|
||||
- [/research](/claudekit/commands/research) - Research technologies before designing
|
||||
- [/review](/claudekit/commands/review) - Review existing designs
|
||||
|
||||
## Customization
|
||||
|
||||
Brainstorming behavior can be customized via `CLAUDE.md`:
|
||||
- Question style (sequential vs all-at-once)
|
||||
- Default depth level
|
||||
- Required design sections
|
||||
- Output format preferences
|
||||
|
||||
See the [Configuration Guide](/claudekit/configuration) for details.
|
||||
@@ -1,427 +0,0 @@
|
||||
---
|
||||
title: /changelog
|
||||
description: Auto-generate changelog entries from git commits with proper categorization
|
||||
---
|
||||
|
||||
# /changelog
|
||||
|
||||
Automatically generate beautiful, user-friendly changelogs from your git commit history.
|
||||
|
||||
## Purpose
|
||||
|
||||
Creates changelog entries by:
|
||||
- Analyzing git commit messages
|
||||
- Categorizing changes by type
|
||||
- Generating user-friendly descriptions
|
||||
- Linking to PRs and issues
|
||||
- Following [Keep a Changelog](https://keepachangelog.com/) format
|
||||
|
||||
Perfect for release notes, version documentation, and keeping users informed.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/changelog [version or range]
|
||||
```
|
||||
|
||||
**Generate for latest changes:**
|
||||
```bash
|
||||
/changelog
|
||||
```
|
||||
|
||||
**Generate for specific version:**
|
||||
```bash
|
||||
/changelog v1.2.0
|
||||
```
|
||||
|
||||
**Generate since last tag:**
|
||||
```bash
|
||||
/changelog since:v1.1.0
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
| Argument | Description | Example |
|
||||
|----------|-------------|---------|
|
||||
| `[version]` | Version number for release | `v1.2.0`, `2.0.0` |
|
||||
| `since:[tag]` | Changes since specific tag | `since:v1.1.0` |
|
||||
| `[date]` | Changes since date | `since:2024-01-01` |
|
||||
| (none) | Changes since last tag | `/changelog` |
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Analyze Commits
|
||||
|
||||
Retrieves commits in the specified range:
|
||||
|
||||
```bash
|
||||
# Since last tag
|
||||
git describe --tags --abbrev=0
|
||||
git log [last-tag]..HEAD --oneline
|
||||
|
||||
# Or custom range
|
||||
git log v1.1.0..HEAD --oneline
|
||||
```
|
||||
|
||||
### Step 2: Categorize Changes
|
||||
|
||||
Groups commits by type:
|
||||
|
||||
| Category | Commit Types | Description |
|
||||
|----------|-------------|-------------|
|
||||
| **Added** | `feat` | New features |
|
||||
| **Changed** | `refactor`, `perf` | Improvements, changes |
|
||||
| **Fixed** | `fix` | Bug fixes |
|
||||
| **Removed** | `remove` | Removed features |
|
||||
| **Security** | `security` | Security fixes |
|
||||
| **Deprecated** | `deprecate` | Deprecations |
|
||||
|
||||
### Step 3: Generate User-Friendly Descriptions
|
||||
|
||||
Transforms technical commits into readable descriptions:
|
||||
|
||||
**Commit:**
|
||||
```
|
||||
feat(auth): add OAuth2 support for Google and GitHub providers
|
||||
```
|
||||
|
||||
**Changelog entry:**
|
||||
```
|
||||
- OAuth2 authentication support for Google and GitHub (#123)
|
||||
```
|
||||
|
||||
### Step 4: Link References
|
||||
|
||||
Automatically links:
|
||||
- Pull requests: `(#123)`
|
||||
- Issues: References `Closes #456` → Links to #456
|
||||
- Commits: Links to full commit hash
|
||||
|
||||
## Examples
|
||||
|
||||
### Generate Latest Version
|
||||
|
||||
```bash
|
||||
/changelog v1.2.0
|
||||
```
|
||||
|
||||
**Output:**
|
||||
```markdown
|
||||
## [1.2.0] - 2024-01-15
|
||||
|
||||
### Added
|
||||
- OAuth2 authentication support for Google and GitHub (#123)
|
||||
- Dark mode theme switching (#125)
|
||||
- Export data feature for user profiles (#127)
|
||||
- Real-time notifications using WebSockets (#130)
|
||||
|
||||
### Changed
|
||||
- Improved database query performance by 40% (#124)
|
||||
- Updated user interface with modern design (#126)
|
||||
- Migrated from REST to GraphQL for better flexibility (#129)
|
||||
|
||||
### Fixed
|
||||
- Null pointer crash in user profile endpoint (#122)
|
||||
- Memory leak in WebSocket connections (#128)
|
||||
- Timezone display issues in date formatting (#131)
|
||||
|
||||
### Security
|
||||
- Patched XSS vulnerability in comment system (#132)
|
||||
- Updated authentication token generation (#133)
|
||||
```
|
||||
|
||||
### Generate Since Last Tag
|
||||
|
||||
```bash
|
||||
/changelog
|
||||
```
|
||||
|
||||
Automatically finds last tag and generates changelog from there:
|
||||
|
||||
```markdown
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
- New export functionality (#142)
|
||||
|
||||
### Fixed
|
||||
- Bug in date picker component (#143)
|
||||
```
|
||||
|
||||
### Generate Since Specific Tag
|
||||
|
||||
```bash
|
||||
/changelog since:v1.1.0
|
||||
```
|
||||
|
||||
```markdown
|
||||
## [1.2.0] - 2024-01-15
|
||||
|
||||
Changes since v1.1.0 (released 2023-12-01)
|
||||
|
||||
### Added
|
||||
- Feature A (#140)
|
||||
- Feature B (#141)
|
||||
|
||||
### Changed
|
||||
- Improvement A (#145)
|
||||
|
||||
### Fixed
|
||||
- Bug A (#146)
|
||||
- Bug B (#147)
|
||||
|
||||
**Full Changelog**: https://github.com/org/repo/compare/v1.1.0...v1.2.0
|
||||
```
|
||||
|
||||
### Generate Since Date
|
||||
|
||||
```bash
|
||||
/changelog since:2024-01-01
|
||||
```
|
||||
|
||||
```markdown
|
||||
## Changes Since 2024-01-01
|
||||
|
||||
### Added
|
||||
- Features added this month
|
||||
|
||||
### Fixed
|
||||
- Bugs fixed this month
|
||||
```
|
||||
|
||||
### Full Release Example
|
||||
|
||||
Major version release with breaking changes:
|
||||
|
||||
```bash
|
||||
/changelog v2.0.0
|
||||
```
|
||||
|
||||
```markdown
|
||||
## [2.0.0] - 2024-01-15
|
||||
|
||||
### ⚠️ BREAKING CHANGES
|
||||
- Authentication API changed from v1 to v2 (#150)
|
||||
- Database schema updated - migration required (#151)
|
||||
- Minimum Node.js version now 18+ (#152)
|
||||
|
||||
### Added
|
||||
- New GraphQL API with comprehensive schema (#153)
|
||||
- Advanced search with filters and sorting (#154)
|
||||
- User roles and permissions system (#155)
|
||||
|
||||
### Changed
|
||||
- Complete UI redesign with improved UX (#156)
|
||||
- Migrated to TypeScript for better type safety (#157)
|
||||
- Updated all dependencies to latest versions (#158)
|
||||
|
||||
### Fixed
|
||||
- Multiple security vulnerabilities patched (#159)
|
||||
- Performance issues under high load (#160)
|
||||
|
||||
### Removed
|
||||
- Legacy REST API endpoints (deprecated in v1.5) (#161)
|
||||
- Internet Explorer support (#162)
|
||||
|
||||
### Migration Guide
|
||||
See [MIGRATION.md](./MIGRATION.md) for upgrade instructions.
|
||||
|
||||
**Full Changelog**: https://github.com/org/repo/compare/v1.9.0...v2.0.0
|
||||
```
|
||||
|
||||
## Changelog Format
|
||||
|
||||
Follows [Keep a Changelog](https://keepachangelog.com/) format:
|
||||
|
||||
```markdown
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
- Features in development
|
||||
|
||||
## [1.2.0] - 2024-01-15
|
||||
|
||||
### Added
|
||||
- New features in this version
|
||||
|
||||
### Changed
|
||||
- Changes in existing functionality
|
||||
|
||||
### Deprecated
|
||||
- Soon-to-be removed features
|
||||
|
||||
### Removed
|
||||
- Removed features
|
||||
|
||||
### Fixed
|
||||
- Bug fixes
|
||||
|
||||
### Security
|
||||
- Security patches
|
||||
|
||||
## [1.1.0] - 2023-12-01
|
||||
|
||||
...
|
||||
|
||||
[Unreleased]: https://github.com/org/repo/compare/v1.2.0...HEAD
|
||||
[1.2.0]: https://github.com/org/repo/compare/v1.1.0...v1.2.0
|
||||
[1.1.0]: https://github.com/org/repo/releases/tag/v1.1.0
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
After generating the changelog:
|
||||
|
||||
```markdown
|
||||
## Changelog Generated
|
||||
|
||||
**Version**: v1.2.0
|
||||
**Date**: 2024-01-15
|
||||
**Commits Analyzed**: 23
|
||||
|
||||
### Summary
|
||||
- **Added**: 4 features
|
||||
- **Changed**: 3 improvements
|
||||
- **Fixed**: 5 bugs
|
||||
- **Security**: 2 patches
|
||||
|
||||
### File Updated
|
||||
`CHANGELOG.md` - New section added at top
|
||||
|
||||
### Next Steps
|
||||
1. Review generated changelog
|
||||
2. Edit for clarity if needed
|
||||
3. Commit the changelog
|
||||
4. Tag the release
|
||||
```
|
||||
|
||||
## Integration with Releases
|
||||
|
||||
### Create Release with Changelog
|
||||
|
||||
```bash
|
||||
# Generate changelog
|
||||
/changelog v1.2.0
|
||||
|
||||
# Create git tag
|
||||
git tag -a v1.2.0 -m "Release v1.2.0"
|
||||
|
||||
# Push tag
|
||||
git push origin v1.2.0
|
||||
|
||||
# Create GitHub release
|
||||
gh release create v1.2.0 \
|
||||
--title "Version 1.2.0" \
|
||||
--notes-file CHANGELOG.md
|
||||
```
|
||||
|
||||
### Automated Release Notes
|
||||
|
||||
The changelog can be used for:
|
||||
- GitHub Releases
|
||||
- GitLab Release Notes
|
||||
- NPM package releases
|
||||
- Documentation sites
|
||||
- Email announcements
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--format=[style]` | Output format | `/changelog --format=github v1.2.0` |
|
||||
| `--output=[file]` | Output file | `/changelog --output=RELEASE.md` |
|
||||
| `--template=[file]` | Custom template | `/changelog --template=.github/changelog.md` |
|
||||
| `--include-authors` | Include contributor names | `/changelog --include-authors` |
|
||||
|
||||
## Format Options
|
||||
|
||||
### Standard (Keep a Changelog)
|
||||
```markdown
|
||||
### Added
|
||||
- Feature description (#123)
|
||||
```
|
||||
|
||||
### GitHub Release
|
||||
```markdown
|
||||
## What's Changed
|
||||
* Feature description by @username in #123
|
||||
```
|
||||
|
||||
### Compact
|
||||
```markdown
|
||||
- Add: Feature description (#123)
|
||||
- Fix: Bug description (#124)
|
||||
```
|
||||
|
||||
## Commit Message Requirements
|
||||
|
||||
For best results, use [Conventional Commits](https://www.conventionalcommits.org/):
|
||||
|
||||
```
|
||||
type(scope): description
|
||||
|
||||
[optional body]
|
||||
|
||||
[optional footer]
|
||||
```
|
||||
|
||||
**Examples:**
|
||||
```
|
||||
feat(auth): add OAuth2 support
|
||||
fix(api): handle null users
|
||||
docs(readme): update installation
|
||||
refactor(db): optimize queries
|
||||
```
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/ship](/claudekit/commands/ship/) - Ship with auto-generated commits
|
||||
- [/commit](/claudekit/commands/commit/) - Create conventional commits
|
||||
- [/deploy](/claudekit/commands/deploy/) - Deploy with release notes
|
||||
|
||||
## Tips
|
||||
|
||||
**Use conventional commits**: The better your commit messages, the better the generated changelog.
|
||||
|
||||
**Review before committing**: Always review and edit the generated changelog for clarity.
|
||||
|
||||
**Link to issues**: Reference issues in commits to auto-link in changelog.
|
||||
|
||||
**Keep it user-focused**: Edit technical language to be user-friendly.
|
||||
|
||||
**Group related changes**: Combine similar commits into single changelog entries.
|
||||
|
||||
**Highlight breaking changes**: Always call out breaking changes prominently.
|
||||
|
||||
**Update regularly**: Generate changelog with each release, don't let it get stale.
|
||||
|
||||
**Include migration guides**: For breaking changes, link to migration documentation.
|
||||
|
||||
## Customization
|
||||
|
||||
Modify changelog behavior in `CLAUDE.md`:
|
||||
|
||||
```markdown
|
||||
## Changelog Settings
|
||||
|
||||
### Format
|
||||
- Style: Keep a Changelog
|
||||
- Include authors: Yes
|
||||
- Link format: GitHub
|
||||
|
||||
### Categories
|
||||
- Added: feat
|
||||
- Changed: refactor, perf
|
||||
- Fixed: fix
|
||||
- Security: security
|
||||
|
||||
### Template
|
||||
Use custom template from `.github/changelog-template.md`
|
||||
```
|
||||
@@ -1,192 +0,0 @@
|
||||
---
|
||||
title: /checkpoint
|
||||
description: Save and restore conversation context using git-based checkpoints
|
||||
---
|
||||
|
||||
# /checkpoint
|
||||
|
||||
## Purpose
|
||||
|
||||
Save and restore conversation context using git-based checkpoints. Enables session recovery and state preservation for complex, multi-session work.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/checkpoint [operation] [name] [flags]
|
||||
```
|
||||
|
||||
## Operations
|
||||
|
||||
### Save Checkpoint
|
||||
|
||||
Create a checkpoint of current state:
|
||||
|
||||
```bash
|
||||
/checkpoint save [name]
|
||||
```
|
||||
|
||||
**Process:**
|
||||
1. Create git stash with descriptive message
|
||||
2. Record current context (files being worked on, task state)
|
||||
3. Save checkpoint metadata to `.claude/checkpoints/[name].json`
|
||||
|
||||
**Metadata Format:**
|
||||
```json
|
||||
{
|
||||
"name": "feature-auth",
|
||||
"created": "2024-01-15T14:30:00Z",
|
||||
"git_stash": "stash@{0}",
|
||||
"files_in_context": ["src/auth/login.ts", "src/auth/token.ts"],
|
||||
"current_task": "Implementing JWT refresh",
|
||||
"notes": "User-provided notes"
|
||||
}
|
||||
```
|
||||
|
||||
### List Checkpoints
|
||||
|
||||
Show available checkpoints:
|
||||
|
||||
```bash
|
||||
/checkpoint list
|
||||
```
|
||||
|
||||
**Output:**
|
||||
```markdown
|
||||
## Available Checkpoints
|
||||
|
||||
| Name | Created | Task | Stash |
|
||||
|------|---------|------|-------|
|
||||
| feature-auth | 2h ago | JWT refresh | stash@{0} |
|
||||
| bugfix-login | 1d ago | Login timeout | stash@{1} |
|
||||
```
|
||||
|
||||
### Restore Checkpoint
|
||||
|
||||
Restore a previous checkpoint:
|
||||
|
||||
```bash
|
||||
/checkpoint restore [name]
|
||||
```
|
||||
|
||||
**Process:**
|
||||
1. Apply git stash
|
||||
2. Load checkpoint metadata
|
||||
3. Summarize restored context
|
||||
4. Ready to continue work
|
||||
|
||||
### Delete Checkpoint
|
||||
|
||||
Remove a checkpoint:
|
||||
|
||||
```bash
|
||||
/checkpoint delete [name]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--notes="[text]"` | Add notes to checkpoint |
|
||||
| `--force` | Overwrite existing checkpoint |
|
||||
| `--include-uncommitted` | Include uncommitted changes |
|
||||
| `--dry-run` | Show what would be saved |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Save current state
|
||||
/checkpoint save auth-progress
|
||||
|
||||
# Save with notes
|
||||
/checkpoint save auth --notes="WIP: implementing token refresh"
|
||||
|
||||
# Show all checkpoints
|
||||
/checkpoint list
|
||||
|
||||
# Restore a checkpoint
|
||||
/checkpoint restore auth-progress
|
||||
|
||||
# Remove old checkpoint
|
||||
/checkpoint delete old-checkpoint
|
||||
|
||||
# Preview what will be saved
|
||||
/checkpoint save feature-x --dry-run
|
||||
```
|
||||
|
||||
## Auto-Checkpoint
|
||||
|
||||
For complex tasks, checkpoints are automatically suggested:
|
||||
- Before major refactoring
|
||||
- When switching contexts
|
||||
- Before risky operations
|
||||
- At natural breakpoints
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Name Descriptively**: Use task-related names (e.g., `auth-oauth-integration`)
|
||||
2. **Add Notes**: Future you will thank present you
|
||||
3. **Checkpoint Often**: Before context switches or risky changes
|
||||
4. **Clean Up**: Delete obsolete checkpoints regularly
|
||||
|
||||
## Recovery Workflow
|
||||
|
||||
When resuming work after a break:
|
||||
|
||||
```bash
|
||||
# 1. See what checkpoints exist
|
||||
/checkpoint list
|
||||
|
||||
# 2. Restore the relevant context
|
||||
/checkpoint restore feature-auth
|
||||
|
||||
# 3. Continue where you left off
|
||||
# Context is loaded, files are restored
|
||||
```
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Multi-Day Feature Work
|
||||
|
||||
```bash
|
||||
# End of day 1
|
||||
/checkpoint save oauth-day1 --notes="Completed user model, starting token service"
|
||||
|
||||
# Start of day 2
|
||||
/checkpoint restore oauth-day1
|
||||
```
|
||||
|
||||
### Experimental Changes
|
||||
|
||||
```bash
|
||||
# Before trying risky refactor
|
||||
/checkpoint save before-refactor
|
||||
|
||||
# If refactor doesn't work out
|
||||
/checkpoint restore before-refactor
|
||||
```
|
||||
|
||||
### Context Switching
|
||||
|
||||
```bash
|
||||
# Save current work
|
||||
/checkpoint save feature-payments
|
||||
|
||||
# Switch to urgent bug
|
||||
/fix "login timeout issue"
|
||||
|
||||
# Return to feature work
|
||||
/checkpoint restore feature-payments
|
||||
```
|
||||
|
||||
## Limitations
|
||||
|
||||
- Checkpoints use git stash (requires git repository)
|
||||
- Large uncommitted changes may be slow to save/restore
|
||||
- Metadata stored in `.claude/checkpoints/`
|
||||
- Consider committing before checkpointing for safety
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/load](/claudekit/commands/load) - Load specific components
|
||||
- [/status](/claudekit/commands/status) - Check current project status
|
||||
- [/spawn](/claudekit/commands/spawn) - Launch parallel tasks
|
||||
@@ -1,362 +0,0 @@
|
||||
---
|
||||
title: /commit
|
||||
description: Create a well-formatted commit with auto-generated conventional commit messages
|
||||
---
|
||||
|
||||
# /commit
|
||||
|
||||
Smart commit creation with auto-generated messages that follow the Conventional Commits standard.
|
||||
|
||||
## Purpose
|
||||
|
||||
Creates well-structured commits by:
|
||||
- Analyzing your staged changes
|
||||
- Auto-generating descriptive commit messages
|
||||
- Following Conventional Commits format
|
||||
- Adding helpful metadata and co-author attribution
|
||||
|
||||
Perfect for when you want to commit without creating a PR (use `/ship` for the full workflow).
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/commit [optional hint]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
| Argument | Description | Example |
|
||||
|----------|-------------|---------|
|
||||
| `[hint]` | Optional hint for message focus | `auth`, `bugfix`, `refactor` |
|
||||
|
||||
The hint helps guide the message generation but isn't required.
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Analyze Changes
|
||||
|
||||
The command first examines your repository state:
|
||||
|
||||
```bash
|
||||
git status
|
||||
git diff --staged
|
||||
git log --oneline -5
|
||||
```
|
||||
|
||||
This provides context about:
|
||||
- What files are staged
|
||||
- What changes were made
|
||||
- Recent commit history
|
||||
|
||||
### Step 2: Categorize Changes
|
||||
|
||||
Automatically determines the commit type:
|
||||
|
||||
| Type | Used For |
|
||||
|------|----------|
|
||||
| `feat` | New features |
|
||||
| `fix` | Bug fixes |
|
||||
| `docs` | Documentation only |
|
||||
| `style` | Formatting, whitespace |
|
||||
| `refactor` | Code restructuring without behavior change |
|
||||
| `test` | Adding or updating tests |
|
||||
| `chore` | Maintenance (deps, config, etc.) |
|
||||
|
||||
### Step 3: Generate Message
|
||||
|
||||
Creates a message following this format:
|
||||
|
||||
```
|
||||
type(scope): subject
|
||||
|
||||
body (optional)
|
||||
|
||||
footer (optional)
|
||||
```
|
||||
|
||||
**Components:**
|
||||
- **Type**: From categorization above
|
||||
- **Scope**: Affected area (auth, api, ui, etc.)
|
||||
- **Subject**: Concise description (max 50 chars)
|
||||
- **Body**: Detailed explanation with bullet points
|
||||
- **Footer**: Issue references, breaking changes
|
||||
|
||||
### Step 4: Create Commit
|
||||
|
||||
Executes the commit with the generated message:
|
||||
|
||||
```bash
|
||||
git commit -m "$(cat <<'EOF'
|
||||
type(scope): subject
|
||||
|
||||
- Change 1
|
||||
- Change 2
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
EOF
|
||||
)"
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Feature Commit
|
||||
|
||||
**Staged changes:** New authentication files
|
||||
|
||||
```bash
|
||||
/commit auth
|
||||
```
|
||||
|
||||
**Generated commit:**
|
||||
```
|
||||
feat(auth): add password reset functionality
|
||||
|
||||
- Add reset token generation
|
||||
- Implement email sending
|
||||
- Add rate limiting for reset requests
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
```
|
||||
|
||||
### Bug Fix Commit
|
||||
|
||||
**Staged changes:** Fix in profile endpoint
|
||||
|
||||
```bash
|
||||
/commit
|
||||
```
|
||||
|
||||
**Generated commit:**
|
||||
```
|
||||
fix(api): handle null user in profile endpoint
|
||||
|
||||
The profile endpoint crashed when accessing deleted users.
|
||||
Added null check and proper 404 response.
|
||||
|
||||
Fixes #456
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
```
|
||||
|
||||
### Refactor Commit
|
||||
|
||||
**Staged changes:** Database code reorganization
|
||||
|
||||
```bash
|
||||
/commit refactor
|
||||
```
|
||||
|
||||
**Generated commit:**
|
||||
```
|
||||
refactor(database): extract query builders
|
||||
|
||||
Split large database service into focused modules
|
||||
for better maintainability and testing.
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
```
|
||||
|
||||
### Documentation Commit
|
||||
|
||||
**Staged changes:** README updates
|
||||
|
||||
```bash
|
||||
/commit docs
|
||||
```
|
||||
|
||||
**Generated commit:**
|
||||
```
|
||||
docs(readme): update installation instructions
|
||||
|
||||
- Add prerequisites section
|
||||
- Update configuration examples
|
||||
- Fix broken links
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
```
|
||||
|
||||
### Test Commit
|
||||
|
||||
**Staged changes:** New test files
|
||||
|
||||
```bash
|
||||
/commit test
|
||||
```
|
||||
|
||||
**Generated commit:**
|
||||
```
|
||||
test(auth): add missing login tests
|
||||
|
||||
- Add test for invalid credentials
|
||||
- Add test for locked account
|
||||
- Add test for expired session
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
```
|
||||
|
||||
### Chore Commit
|
||||
|
||||
**Staged changes:** Package updates
|
||||
|
||||
```bash
|
||||
/commit
|
||||
```
|
||||
|
||||
**Generated commit:**
|
||||
```
|
||||
chore(deps): update dependencies
|
||||
|
||||
- Update React to 18.2
|
||||
- Update TypeScript to 5.3
|
||||
- Remove unused packages
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
```
|
||||
|
||||
## Commit Message Guidelines
|
||||
|
||||
### Subject Line Rules
|
||||
- **Max 50 characters** - Keep it concise
|
||||
- **Imperative mood** - "Add" not "Added" or "Adds"
|
||||
- **No period** at the end
|
||||
- **Capitalize** the first letter
|
||||
- **Be specific** - Describe what changed, not why
|
||||
|
||||
### Body Guidelines
|
||||
- **Wrap at 72 characters** for readability
|
||||
- **Explain what and why**, not how
|
||||
- **Use bullet points** for multiple changes
|
||||
- **Reference issues** when applicable
|
||||
|
||||
### Good vs Bad Examples
|
||||
|
||||
**Good:**
|
||||
```
|
||||
feat(auth): add OAuth2 support
|
||||
|
||||
- Implement Google and GitHub providers
|
||||
- Add token refresh mechanism
|
||||
- Update user model for OAuth data
|
||||
|
||||
Closes #123
|
||||
```
|
||||
|
||||
**Bad:**
|
||||
```
|
||||
Added oauth stuff
|
||||
|
||||
I added oauth because we need it. It works now.
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
After creating the commit, you'll see:
|
||||
|
||||
```markdown
|
||||
## Commit Created
|
||||
|
||||
**Hash**: `abc1234`
|
||||
**Branch**: `feature/auth-improvements`
|
||||
|
||||
### Message
|
||||
```
|
||||
feat(auth): add OAuth2 login support
|
||||
|
||||
- Implement Google OAuth provider
|
||||
- Implement GitHub OAuth provider
|
||||
- Add session token generation
|
||||
- Update user model for OAuth data
|
||||
|
||||
Closes #789
|
||||
```
|
||||
|
||||
### Files Changed
|
||||
| Status | File |
|
||||
|--------|------|
|
||||
| M | src/auth/providers.ts |
|
||||
| A | src/auth/oauth/google.ts |
|
||||
| A | src/auth/oauth/github.ts |
|
||||
| M | src/models/user.ts |
|
||||
| A | tests/auth/oauth.test.ts |
|
||||
|
||||
### Stats
|
||||
- 5 files changed
|
||||
- 234 insertions(+)
|
||||
- 12 deletions(-)
|
||||
|
||||
### Next Steps
|
||||
```bash
|
||||
# Push to remote
|
||||
git push -u origin feature/auth-improvements
|
||||
|
||||
# Create PR
|
||||
gh pr create
|
||||
```
|
||||
```
|
||||
|
||||
## Pre-Commit Checks
|
||||
|
||||
Before committing, the command validates:
|
||||
|
||||
- [ ] No secrets in staged files
|
||||
- [ ] No debug statements (`console.log`, `debugger`, `print`)
|
||||
- [ ] No unintentional TODO comments
|
||||
- [ ] Code is properly formatted
|
||||
|
||||
If issues are found, you'll be prompted to fix them first.
|
||||
|
||||
## Amending Commits
|
||||
|
||||
If pre-commit hooks modify files automatically (like formatters), the command handles it:
|
||||
|
||||
```bash
|
||||
# Stage modified files and amend
|
||||
git add -A
|
||||
git commit --amend --no-edit
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--mode=[mode]` | Behavioral mode | `/commit --mode=token-efficient` |
|
||||
| `--format=[fmt]` | Output format | `/commit --format=concise` |
|
||||
| `--no-verify` | Skip pre-commit hooks | `/commit --no-verify` |
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/ship](/claudekit/commands/ship/) - Full workflow with commit + PR
|
||||
- [/pr](/claudekit/commands/pr/) - Create PR from commits
|
||||
- [/changelog](/claudekit/commands/changelog/) - Generate changelog from commits
|
||||
|
||||
## Tips
|
||||
|
||||
**Use descriptive hints**: While optional, hints like `auth`, `api`, or `ui` help generate more accurate messages.
|
||||
|
||||
**Review before committing**: The command shows you the message before creating the commit, so you can verify it's accurate.
|
||||
|
||||
**Amend if needed**: If the generated message isn't quite right, you can amend it:
|
||||
```bash
|
||||
git commit --amend
|
||||
```
|
||||
|
||||
**Customize format**: Modify commit message format in `CLAUDE.md` under "Git Conventions".
|
||||
|
||||
**Breaking changes**: For breaking changes, the footer will include:
|
||||
```
|
||||
BREAKING CHANGE: describe the breaking change
|
||||
```
|
||||
@@ -1,312 +0,0 @@
|
||||
---
|
||||
title: /debug
|
||||
description: Analyze and debug errors, exceptions, and unexpected behavior
|
||||
---
|
||||
|
||||
# /debug - Debug Command
|
||||
|
||||
## Purpose
|
||||
|
||||
Analyze and debug errors, exceptions, or unexpected behavior with systematic investigation and root cause analysis. This is a streamlined version of `/fix` focused on diagnosis and investigation.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/debug [error message or description]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- `[error message]` - Stack trace or error output
|
||||
- `[description]` - Natural language description of unexpected behavior
|
||||
|
||||
## How It Works
|
||||
|
||||
The `/debug` command follows a systematic 3-step debugging process:
|
||||
|
||||
### Step 1: Analyze Error
|
||||
|
||||
1. **Parse Error Message and Stack Trace**
|
||||
- Extracts error type (TypeError, ValueError, etc.)
|
||||
- Identifies file and line number
|
||||
- Reads stack trace for execution path
|
||||
|
||||
2. **Identify Error Location**
|
||||
- Pinpoints the exact failing line
|
||||
- Examines surrounding code
|
||||
- Checks function context
|
||||
|
||||
3. **Understand Error Type**
|
||||
- Categorizes error (logic, runtime, type, etc.)
|
||||
- Identifies common causes for this error type
|
||||
- Notes relevant language-specific behavior
|
||||
|
||||
### Step 2: Investigate
|
||||
|
||||
1. **Trace Execution Path**
|
||||
- Follows code flow from entry to error
|
||||
- Maps variable states at each step
|
||||
- Identifies where state becomes invalid
|
||||
|
||||
2. **Check Related Code**
|
||||
- Examines caller functions
|
||||
- Reviews recent changes to area
|
||||
- Searches for similar patterns
|
||||
|
||||
3. **Form Hypotheses**
|
||||
- Lists possible root causes
|
||||
- Ranks by likelihood
|
||||
- Identifies tests to validate each hypothesis
|
||||
|
||||
### Step 3: Fix
|
||||
|
||||
1. **Implement Minimal Fix**
|
||||
- Addresses root cause
|
||||
- Keeps changes focused
|
||||
- Preserves existing behavior
|
||||
|
||||
2. **Verify Fix Works**
|
||||
- Tests the specific error case
|
||||
- Runs related tests
|
||||
- Checks for side effects
|
||||
|
||||
3. **Add Regression Test**
|
||||
- Creates test that would catch this bug
|
||||
- Documents the error scenario
|
||||
- Ensures test fails without fix
|
||||
|
||||
## Debug Output Format
|
||||
|
||||
```markdown
|
||||
## Debug Report
|
||||
|
||||
### Error
|
||||
```
|
||||
TypeError: Cannot read property 'email' of undefined
|
||||
at getUserEmail (src/services/UserService.ts:45)
|
||||
at processUser (src/api/users.ts:23)
|
||||
```
|
||||
|
||||
### Analysis
|
||||
The error occurs when trying to access `user.email` but `user` is undefined.
|
||||
|
||||
### Location
|
||||
**File**: `src/services/UserService.ts`
|
||||
**Line**: 45
|
||||
**Function**: `getUserEmail`
|
||||
|
||||
### Execution Trace
|
||||
1. API receives request → `processUser()`
|
||||
2. Calls `getUserEmail(userId)`
|
||||
3. Inside getUserEmail:
|
||||
```typescript
|
||||
const user = this.fetchUser(userId); // Missing await!
|
||||
return user.email; // user is a Promise, not User object
|
||||
```
|
||||
|
||||
### Root Cause
|
||||
**Missing `await` keyword** - `fetchUser()` is async but wasn't awaited, so `user` is a Promise object instead of a User object.
|
||||
|
||||
### Hypotheses Tested
|
||||
1. ✅ Missing await - Confirmed by checking function signature
|
||||
2. ❌ User doesn't exist - Would be null, not undefined
|
||||
3. ❌ Database error - Would throw different error
|
||||
|
||||
### Fix
|
||||
```typescript
|
||||
// Before
|
||||
async getUserEmail(userId: string) {
|
||||
const user = this.fetchUser(userId);
|
||||
return user.email;
|
||||
}
|
||||
|
||||
// After
|
||||
async getUserEmail(userId: string) {
|
||||
const user = await this.fetchUser(userId);
|
||||
if (!user) {
|
||||
throw new NotFoundError(`User ${userId} not found`);
|
||||
}
|
||||
return user.email;
|
||||
}
|
||||
```
|
||||
|
||||
### Verification
|
||||
```bash
|
||||
# Test the fix
|
||||
pnpm test src/services/UserService.test.ts
|
||||
|
||||
# Run full suite
|
||||
pnpm test
|
||||
```
|
||||
|
||||
### Prevention
|
||||
Added regression test: `test_getUserEmail_awaits_user_fetch`
|
||||
```
|
||||
|
||||
## Common Debug Patterns
|
||||
|
||||
### Null/Undefined Errors
|
||||
|
||||
```typescript
|
||||
// Symptom
|
||||
Cannot read property 'X' of undefined
|
||||
|
||||
// Common Causes
|
||||
- Missing await on async function
|
||||
- Object not initialized
|
||||
- API returned null
|
||||
- Array/object access out of bounds
|
||||
|
||||
// Investigation
|
||||
1. Check if value should exist
|
||||
2. Trace where it's set
|
||||
3. Verify async operations
|
||||
```
|
||||
|
||||
### Type Errors
|
||||
|
||||
```python
|
||||
# Symptom
|
||||
TypeError: unsupported operand type(s) for +: 'int' and 'str'
|
||||
|
||||
# Common Causes
|
||||
- Mixed types in operation
|
||||
- Missing type conversion
|
||||
- Unexpected input type
|
||||
|
||||
# Investigation
|
||||
1. Print types at error line
|
||||
2. Check input sources
|
||||
3. Verify type conversions
|
||||
```
|
||||
|
||||
### Race Conditions
|
||||
|
||||
```typescript
|
||||
// Symptom
|
||||
Intermittent failures, works sometimes
|
||||
|
||||
// Common Causes
|
||||
- Async operations out of order
|
||||
- Shared state without locking
|
||||
- Component unmounted during async
|
||||
|
||||
// Investigation
|
||||
1. Add logging to trace timing
|
||||
2. Check for missing awaits
|
||||
3. Look for shared mutable state
|
||||
```
|
||||
|
||||
### Infinite Loops/Recursion
|
||||
|
||||
```python
|
||||
# Symptom
|
||||
RecursionError: maximum recursion depth exceeded
|
||||
|
||||
# Common Causes
|
||||
- Missing base case
|
||||
- Base case never reached
|
||||
- Infinite loop condition
|
||||
|
||||
# Investigation
|
||||
1. Check base/termination condition
|
||||
2. Verify condition can be met
|
||||
3. Add iteration counter logging
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--depth=[1-5]` | Investigation depth (1=quick, 5=exhaustive) | `--depth=4` |
|
||||
| `--trace` | Show detailed execution trace | `--trace` |
|
||||
| `--hypothesis` | Show all hypotheses considered | `--hypothesis` |
|
||||
| `--format=[fmt]` | Output format (concise/detailed) | `--format=concise` |
|
||||
|
||||
### Flag Examples
|
||||
|
||||
```bash
|
||||
# Quick debug with minimal output
|
||||
/debug --depth=1 --format=concise "error message"
|
||||
|
||||
# Deep investigation with full trace
|
||||
/debug --depth=5 --trace --hypothesis "intermittent failure"
|
||||
|
||||
# Detailed analysis
|
||||
/debug --format=detailed "TypeError in auth.ts"
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Runtime Error
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/debug IndexError: list index out of range in process_items at line 42
|
||||
```
|
||||
|
||||
**Output:**
|
||||
1. Identifies array access issue
|
||||
2. Traces loop bounds
|
||||
3. Finds off-by-one error
|
||||
4. Suggests fix with correct range
|
||||
|
||||
### Unexpected Behavior
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/debug "User authentication succeeds but session not created"
|
||||
```
|
||||
|
||||
**Output:**
|
||||
1. Traces auth flow
|
||||
2. Finds session creation after response sent
|
||||
3. Identifies async timing issue
|
||||
4. Recommends await before response
|
||||
|
||||
### Intermittent Issue
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/debug --depth=5 "Test fails randomly, passes on retry"
|
||||
```
|
||||
|
||||
**Output:**
|
||||
1. Analyzes for race conditions
|
||||
2. Checks for time-dependent logic
|
||||
3. Reviews shared state access
|
||||
4. Identifies missing await in test setup
|
||||
|
||||
## When to Use
|
||||
|
||||
Use `/debug` when you need to:
|
||||
|
||||
- **Investigate an error** without immediately fixing it
|
||||
- **Understand why** something breaks
|
||||
- **Diagnose intermittent** issues
|
||||
- **Trace execution** paths
|
||||
- **Form hypotheses** about root causes
|
||||
|
||||
Use `/fix` instead when you want to:
|
||||
|
||||
- Fix the issue immediately
|
||||
- Add regression tests
|
||||
- Complete the full fix workflow
|
||||
|
||||
## Deliverables
|
||||
|
||||
After running `/debug`, you receive:
|
||||
|
||||
1. **Error Analysis** - Detailed breakdown of the error
|
||||
2. **Execution Trace** - Step-by-step flow to error
|
||||
3. **Root Cause** - Explanation of why it fails
|
||||
4. **Hypotheses** - Tested theories about cause
|
||||
5. **Fix Recommendation** - Suggested solution (optional)
|
||||
6. **Prevention Strategy** - How to avoid similar issues
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/fix](/claudekit/commands/fix) - Complete fix workflow with tests
|
||||
- [/test](/claudekit/commands/test) - Generate tests after debugging
|
||||
- [/review](/claudekit/commands/review) - Review code for potential issues
|
||||
- [/refactor](/claudekit/commands/refactor) - Improve code after fix
|
||||
@@ -1,467 +0,0 @@
|
||||
---
|
||||
title: /deploy
|
||||
description: Deploy your application to staging or production with comprehensive safety checks
|
||||
---
|
||||
|
||||
# /deploy
|
||||
|
||||
Safe, automated deployments with built-in validation, health checks, and rollback capabilities.
|
||||
|
||||
## Purpose
|
||||
|
||||
Handles deployment workflow including:
|
||||
- Pre-deployment validation
|
||||
- Build verification
|
||||
- Security scanning
|
||||
- Environment-specific deployment
|
||||
- Post-deployment health checks
|
||||
- Monitoring and rollback
|
||||
|
||||
Ensures safe deployments with comprehensive checks at every stage.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/deploy [environment]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
| Argument | Description |
|
||||
|----------|-------------|
|
||||
| `staging` | Deploy to staging environment |
|
||||
| `production` | Deploy to production (requires confirmation) |
|
||||
| `preview` | Deploy to preview/ephemeral environment |
|
||||
|
||||
## Workflow
|
||||
|
||||
### Pre-Deploy Checks
|
||||
|
||||
Before any deployment, the command validates:
|
||||
|
||||
#### 1. Build Verification
|
||||
|
||||
**Python projects:**
|
||||
```bash
|
||||
python -m build
|
||||
python -m pytest
|
||||
```
|
||||
|
||||
**Node.js projects:**
|
||||
```bash
|
||||
pnpm build
|
||||
pnpm test
|
||||
```
|
||||
|
||||
**Validation:**
|
||||
- [ ] Build completes successfully
|
||||
- [ ] No build warnings
|
||||
- [ ] Build artifacts are generated
|
||||
- [ ] Output size is reasonable
|
||||
|
||||
#### 2. Run Tests
|
||||
|
||||
Executes full test suite:
|
||||
|
||||
```bash
|
||||
# Python
|
||||
pytest -v --cov=src --cov-report=term
|
||||
|
||||
# Node.js
|
||||
pnpm test
|
||||
pnpm test:e2e
|
||||
```
|
||||
|
||||
**Requirements:**
|
||||
- [ ] All tests pass
|
||||
- [ ] Coverage meets threshold (80%+)
|
||||
- [ ] No skipped tests
|
||||
- [ ] E2E tests pass
|
||||
|
||||
#### 3. Security Scan
|
||||
|
||||
Checks for vulnerabilities:
|
||||
|
||||
**Node.js:**
|
||||
```bash
|
||||
npm audit --audit-level=high
|
||||
pnpm audit --audit-level=high
|
||||
```
|
||||
|
||||
**Python:**
|
||||
```bash
|
||||
pip-audit
|
||||
safety check
|
||||
```
|
||||
|
||||
**Validation:**
|
||||
- [ ] No high/critical vulnerabilities
|
||||
- [ ] Dependencies are up to date
|
||||
- [ ] No known security issues
|
||||
|
||||
#### 4. Environment Verification
|
||||
|
||||
**Staging:**
|
||||
- [ ] Staging branch is up to date
|
||||
- [ ] No merge conflicts
|
||||
- [ ] Environment variables configured
|
||||
|
||||
**Production:**
|
||||
- [ ] Production branch matches main/master
|
||||
- [ ] All PRs merged and approved
|
||||
- [ ] Release notes prepared
|
||||
- [ ] Rollback plan ready
|
||||
|
||||
### Deploy Process
|
||||
|
||||
#### Staging Deployment
|
||||
|
||||
Automated deployment to staging:
|
||||
|
||||
```bash
|
||||
# Build for staging
|
||||
pnpm build:staging
|
||||
|
||||
# Deploy to staging environment
|
||||
# (Implementation depends on your hosting)
|
||||
```
|
||||
|
||||
**Common platforms:**
|
||||
|
||||
**Vercel:**
|
||||
```bash
|
||||
vercel deploy --prod=false
|
||||
```
|
||||
|
||||
**Cloudflare Pages:**
|
||||
```bash
|
||||
wrangler pages deploy dist --project-name=app-staging
|
||||
```
|
||||
|
||||
**AWS:**
|
||||
```bash
|
||||
aws deploy create-deployment \
|
||||
--application-name my-app \
|
||||
--deployment-group-name staging
|
||||
```
|
||||
|
||||
**Heroku:**
|
||||
```bash
|
||||
git push heroku-staging main
|
||||
```
|
||||
|
||||
#### Production Deployment
|
||||
|
||||
**Requires explicit confirmation:**
|
||||
|
||||
```
|
||||
⚠️ Production Deployment
|
||||
This will deploy to production environment.
|
||||
|
||||
Environment: production
|
||||
Version: v1.2.3
|
||||
Commits: 15 new commits since last deploy
|
||||
|
||||
Continue? (yes/no):
|
||||
```
|
||||
|
||||
**After confirmation:**
|
||||
|
||||
```bash
|
||||
# Tag release
|
||||
git tag -a v1.2.3 -m "Release v1.2.3"
|
||||
git push origin v1.2.3
|
||||
|
||||
# Build for production
|
||||
pnpm build:production
|
||||
|
||||
# Deploy
|
||||
# (Platform-specific deployment)
|
||||
```
|
||||
|
||||
### Post-Deploy Validation
|
||||
|
||||
After deployment, automated checks run:
|
||||
|
||||
#### 1. Health Checks
|
||||
|
||||
```bash
|
||||
# Check application health
|
||||
curl https://app.example.com/health
|
||||
|
||||
# Expected response:
|
||||
{
|
||||
"status": "healthy",
|
||||
"version": "v1.2.3",
|
||||
"timestamp": "2024-01-15T10:30:00Z"
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. Smoke Tests
|
||||
|
||||
Essential functionality tests:
|
||||
|
||||
- [ ] Homepage loads
|
||||
- [ ] API endpoints respond
|
||||
- [ ] Authentication works
|
||||
- [ ] Database connection active
|
||||
- [ ] Critical features functional
|
||||
|
||||
#### 3. Monitor Logs
|
||||
|
||||
Watch for errors:
|
||||
|
||||
```bash
|
||||
# Check recent logs
|
||||
# (Platform-specific log viewing)
|
||||
|
||||
# Look for:
|
||||
# - Error patterns
|
||||
# - Performance issues
|
||||
# - Unexpected warnings
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Deploy to Staging
|
||||
|
||||
```bash
|
||||
/deploy staging
|
||||
```
|
||||
|
||||
**Output:**
|
||||
```markdown
|
||||
## Deployment Started
|
||||
|
||||
**Environment**: staging
|
||||
**Version**: main@abc1234
|
||||
**Time**: 2024-01-15 10:30:00 UTC
|
||||
|
||||
### Pre-Deploy Checks
|
||||
- [x] Build successful
|
||||
- [x] Tests passing (127 tests)
|
||||
- [x] Security scan clean
|
||||
- [x] Environment variables verified
|
||||
|
||||
### Deploying...
|
||||
- [x] Build artifacts created
|
||||
- [x] Uploading to staging
|
||||
- [x] Deployment complete
|
||||
|
||||
### Post-Deploy Checks
|
||||
- [x] Health check passed
|
||||
- [x] Smoke tests passed
|
||||
- [x] No errors in logs
|
||||
|
||||
## Deployment Complete
|
||||
|
||||
**URL**: https://staging.example.com
|
||||
**Status**: Healthy
|
||||
**Response Time**: 234ms
|
||||
|
||||
### Next Steps
|
||||
1. Test the staging deployment
|
||||
2. Verify all features work
|
||||
3. Deploy to production when ready
|
||||
```
|
||||
|
||||
### Deploy to Production
|
||||
|
||||
```bash
|
||||
/deploy production
|
||||
```
|
||||
|
||||
**Interactive confirmation:**
|
||||
```markdown
|
||||
⚠️ Production Deployment
|
||||
|
||||
**Environment**: production
|
||||
**Version**: v1.2.3
|
||||
**Branch**: main
|
||||
|
||||
### Changes Since Last Deploy
|
||||
- feat(auth): add OAuth2 support (#123)
|
||||
- fix(api): handle null users (#124)
|
||||
- perf(db): optimize queries (#125)
|
||||
|
||||
**15 commits** | **5 PRs** | **3 contributors**
|
||||
|
||||
### Pre-Deploy Checklist
|
||||
- [x] All tests passing
|
||||
- [x] Security scan clean
|
||||
- [x] Changelog updated
|
||||
- [x] Team notified
|
||||
|
||||
Continue with production deployment? (yes/no): yes
|
||||
```
|
||||
|
||||
**After confirmation:**
|
||||
```markdown
|
||||
## Deployment Started
|
||||
|
||||
**Environment**: production
|
||||
**Version**: v1.2.3
|
||||
**Time**: 2024-01-15 14:30:00 UTC
|
||||
|
||||
### Pre-Deploy Checks
|
||||
- [x] Build successful
|
||||
- [x] Tests passing (127 tests)
|
||||
- [x] Security scan clean
|
||||
- [x] Release tagged
|
||||
|
||||
### Deploying...
|
||||
- [x] Build artifacts created
|
||||
- [x] Uploading to production
|
||||
- [x] Deployment complete
|
||||
- [x] Cache invalidated
|
||||
|
||||
### Post-Deploy Checks
|
||||
- [x] Health check passed
|
||||
- [x] Smoke tests passed
|
||||
- [x] Performance metrics normal
|
||||
- [x] No errors in logs
|
||||
|
||||
## Deployment Complete
|
||||
|
||||
**URL**: https://example.com
|
||||
**Version**: v1.2.3
|
||||
**Status**: Healthy
|
||||
**Response Time**: 189ms
|
||||
|
||||
### Monitoring
|
||||
- [ ] Watch error rates (5 min)
|
||||
- [ ] Monitor performance (15 min)
|
||||
- [ ] Check user feedback
|
||||
|
||||
### Rollback Plan
|
||||
If issues occur:
|
||||
```bash
|
||||
/deploy rollback v1.2.2
|
||||
```
|
||||
```
|
||||
|
||||
### Deploy to Preview
|
||||
|
||||
For preview deployments (PR previews):
|
||||
|
||||
```bash
|
||||
/deploy preview
|
||||
```
|
||||
|
||||
Creates ephemeral environment for testing:
|
||||
|
||||
```markdown
|
||||
## Preview Deployment
|
||||
|
||||
**Environment**: preview-pr-123
|
||||
**Branch**: feature/new-ui
|
||||
**URL**: https://preview-pr-123.example.com
|
||||
|
||||
### Status
|
||||
- [x] Deployed successfully
|
||||
- [x] Ready for testing
|
||||
|
||||
**Expires**: 7 days
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
Standard deployment output includes:
|
||||
|
||||
```markdown
|
||||
## Deployment Complete
|
||||
|
||||
**Environment**: staging
|
||||
**Version**: v1.2.3
|
||||
**URL**: https://staging.example.com
|
||||
|
||||
### Checks
|
||||
- [x] Build successful
|
||||
- [x] Tests passing
|
||||
- [x] Security scan clean
|
||||
- [x] Health check passed
|
||||
|
||||
### Metrics
|
||||
- **Build Time**: 2m 34s
|
||||
- **Deploy Time**: 1m 12s
|
||||
- **Total Time**: 3m 46s
|
||||
- **Response Time**: 234ms
|
||||
|
||||
### Next Steps
|
||||
1. Test deployment
|
||||
2. Monitor logs
|
||||
3. Verify functionality
|
||||
```
|
||||
|
||||
## Rollback
|
||||
|
||||
If deployment issues occur:
|
||||
|
||||
```bash
|
||||
/deploy rollback [version]
|
||||
```
|
||||
|
||||
**Example:**
|
||||
```bash
|
||||
/deploy rollback v1.2.2
|
||||
```
|
||||
|
||||
Reverts to previous version with zero-downtime.
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--skip-tests` | Skip test execution | `/deploy staging --skip-tests` |
|
||||
| `--force` | Skip confirmations (dangerous!) | `/deploy production --force` |
|
||||
| `--dry-run` | Simulate deployment | `/deploy production --dry-run` |
|
||||
| `--tag=[version]` | Specify release tag | `/deploy production --tag=v1.3.0` |
|
||||
|
||||
## Environment Configuration
|
||||
|
||||
Configure deployment settings in `CLAUDE.md`:
|
||||
|
||||
```markdown
|
||||
## Deployment
|
||||
|
||||
### Staging
|
||||
- **URL**: https://staging.example.com
|
||||
- **Platform**: Vercel
|
||||
- **Branch**: main
|
||||
- **Auto-deploy**: Yes
|
||||
|
||||
### Production
|
||||
- **URL**: https://example.com
|
||||
- **Platform**: Vercel
|
||||
- **Branch**: main
|
||||
- **Auto-deploy**: No (manual approval)
|
||||
- **Confirmation**: Required
|
||||
|
||||
### Checks
|
||||
- Required: tests, security scan, build
|
||||
- Optional: performance benchmarks
|
||||
```
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/ship](/claudekit/commands/ship/) - Commit and create PR
|
||||
- [/test](/claudekit/commands/test/) - Run tests
|
||||
- [/changelog](/claudekit/commands/changelog/) - Generate release notes
|
||||
|
||||
## Tips
|
||||
|
||||
**Test on staging first**: Always deploy to staging before production.
|
||||
|
||||
**Use dry-run**: Preview what will happen with `--dry-run` flag.
|
||||
|
||||
**Monitor after deploy**: Watch logs and metrics for at least 15 minutes after production deploys.
|
||||
|
||||
**Have a rollback plan**: Know how to quickly revert if issues occur.
|
||||
|
||||
**Automate staging**: Let staging deploy automatically, but keep production manual.
|
||||
|
||||
**Tag releases**: Use semantic versioning for production releases.
|
||||
|
||||
**Update changelog**: Keep changelog current with each production deployment.
|
||||
|
||||
**Notify team**: Alert team before production deployments.
|
||||
@@ -1,382 +0,0 @@
|
||||
---
|
||||
title: /doc
|
||||
description: Generate or update documentation including API docs, README files, and code comments
|
||||
---
|
||||
|
||||
# /doc
|
||||
|
||||
## Purpose
|
||||
|
||||
Generate or update documentation including API docs, README files, code comments, and technical specifications. Creates comprehensive, accurate documentation that helps developers understand and use the codebase effectively.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/doc [target]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **target**: What to document
|
||||
- File/function path: `src/services/auth.ts` - Document specific code
|
||||
- `api` - Generate API documentation
|
||||
- `readme` - Update README file
|
||||
- `changelog` - Generate changelog from commits
|
||||
- `all` - Document everything
|
||||
|
||||
## Workflow
|
||||
|
||||
### For Code Documentation
|
||||
|
||||
#### 1. Analyze Code
|
||||
- Read the code thoroughly
|
||||
- Understand purpose and behavior
|
||||
- Identify inputs and outputs
|
||||
- Note side effects and edge cases
|
||||
|
||||
#### 2. Generate Documentation
|
||||
- Add docstrings/JSDoc
|
||||
- Include examples
|
||||
- Document edge cases
|
||||
- Add type annotations
|
||||
|
||||
### For API Documentation
|
||||
|
||||
#### 1. Find All Endpoints
|
||||
- Scan route definitions
|
||||
- Identify HTTP methods
|
||||
- Note authentication requirements
|
||||
|
||||
#### 2. Document Each Endpoint
|
||||
- Request format
|
||||
- Response format
|
||||
- Error responses
|
||||
- Examples
|
||||
|
||||
### For README
|
||||
|
||||
#### 1. Analyze Project
|
||||
- Purpose and features
|
||||
- Installation steps
|
||||
- Usage examples
|
||||
- Configuration
|
||||
|
||||
#### 2. Generate/Update
|
||||
- Clear structure
|
||||
- Working examples
|
||||
- Up-to-date information
|
||||
|
||||
### For Changelog
|
||||
|
||||
#### 1. Analyze Commits
|
||||
```bash
|
||||
git log --oneline --since="last release"
|
||||
```
|
||||
|
||||
#### 2. Categorize Changes
|
||||
- Added
|
||||
- Changed
|
||||
- Fixed
|
||||
- Removed
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Document a specific file
|
||||
/doc src/services/auth.ts
|
||||
|
||||
# Generate API documentation
|
||||
/doc api
|
||||
|
||||
# Update README
|
||||
/doc readme
|
||||
|
||||
# Generate changelog
|
||||
/doc changelog
|
||||
|
||||
# Document all API endpoints
|
||||
/doc api/
|
||||
|
||||
# Add docstrings to all functions in a module
|
||||
/doc src/utils/
|
||||
```
|
||||
|
||||
## Documentation Templates
|
||||
|
||||
### Python Docstring
|
||||
|
||||
```python
|
||||
def calculate_discount(price: float, percentage: float) -> float:
|
||||
"""
|
||||
Calculate discounted price.
|
||||
|
||||
Args:
|
||||
price: Original price in dollars.
|
||||
percentage: Discount percentage (0-100).
|
||||
|
||||
Returns:
|
||||
The discounted price.
|
||||
|
||||
Raises:
|
||||
ValueError: If percentage is not between 0 and 100.
|
||||
|
||||
Example:
|
||||
>>> calculate_discount(100.0, 20)
|
||||
80.0
|
||||
"""
|
||||
```
|
||||
|
||||
### TypeScript JSDoc
|
||||
|
||||
```typescript
|
||||
/**
|
||||
* Calculate discounted price.
|
||||
*
|
||||
* @param price - Original price in dollars
|
||||
* @param percentage - Discount percentage (0-100)
|
||||
* @returns The discounted price
|
||||
* @throws {RangeError} If percentage is not between 0 and 100
|
||||
*
|
||||
* @example
|
||||
* calculateDiscount(100, 20); // returns 80
|
||||
*/
|
||||
function calculateDiscount(price: number, percentage: number): number {
|
||||
```
|
||||
|
||||
### API Endpoint Documentation
|
||||
|
||||
```markdown
|
||||
## POST /api/orders
|
||||
|
||||
Create a new order.
|
||||
|
||||
### Authentication
|
||||
Requires Bearer token.
|
||||
|
||||
### Request Body
|
||||
|
||||
\`\`\`json
|
||||
{
|
||||
"items": [
|
||||
{ "productId": "123", "quantity": 2 }
|
||||
],
|
||||
"shippingAddress": {
|
||||
"street": "123 Main St",
|
||||
"city": "New York",
|
||||
"zip": "10001"
|
||||
}
|
||||
}
|
||||
\`\`\`
|
||||
|
||||
#### Parameters
|
||||
|
||||
| Field | Type | Required | Description |
|
||||
|-------|------|----------|-------------|
|
||||
| items | array | Yes | Array of order items |
|
||||
| items[].productId | string | Yes | Product identifier |
|
||||
| items[].quantity | number | Yes | Quantity to order |
|
||||
| shippingAddress | object | Yes | Delivery address |
|
||||
|
||||
### Response (201 Created)
|
||||
|
||||
\`\`\`json
|
||||
{
|
||||
"id": "order_456",
|
||||
"status": "pending",
|
||||
"total": 99.99,
|
||||
"createdAt": "2024-01-15T10:00:00Z"
|
||||
}
|
||||
\`\`\`
|
||||
|
||||
### Error Responses
|
||||
|
||||
| Status | Code | Description |
|
||||
|--------|------|-------------|
|
||||
| 400 | INVALID_ITEMS | Items array is empty or invalid |
|
||||
| 401 | UNAUTHORIZED | Invalid or missing token |
|
||||
| 422 | OUT_OF_STOCK | One or more items unavailable |
|
||||
```
|
||||
|
||||
### README Section
|
||||
|
||||
```markdown
|
||||
## Installation
|
||||
|
||||
\`\`\`bash
|
||||
npm install my-package
|
||||
\`\`\`
|
||||
|
||||
## Quick Start
|
||||
|
||||
\`\`\`typescript
|
||||
import { Client } from 'my-package';
|
||||
|
||||
const client = new Client({ apiKey: 'your-key' });
|
||||
const result = await client.fetch();
|
||||
\`\`\`
|
||||
|
||||
## Configuration
|
||||
|
||||
| Option | Type | Default | Description |
|
||||
|--------|------|---------|-------------|
|
||||
| apiKey | string | required | Your API key |
|
||||
| timeout | number | 5000 | Request timeout in ms |
|
||||
| retries | number | 3 | Number of retry attempts |
|
||||
```
|
||||
|
||||
### Changelog Entry
|
||||
|
||||
```markdown
|
||||
## [1.2.0] - 2024-01-15
|
||||
|
||||
### Added
|
||||
- Password reset functionality (#123)
|
||||
- Email verification for new accounts
|
||||
- Two-factor authentication support
|
||||
|
||||
### Changed
|
||||
- Improved error messages for validation failures
|
||||
- Updated dependencies to latest versions
|
||||
- Enhanced logging for debugging
|
||||
|
||||
### Fixed
|
||||
- Race condition in session handling (#456)
|
||||
- Incorrect timezone in date displays
|
||||
- Memory leak in WebSocket connections
|
||||
|
||||
### Security
|
||||
- Patched XSS vulnerability in user input
|
||||
- Updated authentication token expiry
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
```markdown
|
||||
## Documentation Updated
|
||||
|
||||
### Files Modified
|
||||
- `src/services/auth.ts` - Added JSDoc comments
|
||||
- `docs/api/auth.md` - New API documentation
|
||||
- `README.md` - Updated configuration section
|
||||
|
||||
### Documentation Added
|
||||
|
||||
#### Code Comments
|
||||
- `AuthService.login()` - Full JSDoc with examples
|
||||
- `AuthService.logout()` - Parameter documentation
|
||||
- `validateToken()` - Return type and exceptions
|
||||
- `refreshToken()` - Error scenarios
|
||||
|
||||
#### API Documentation
|
||||
- POST /api/auth/login
|
||||
- POST /api/auth/logout
|
||||
- POST /api/auth/refresh
|
||||
- POST /api/auth/verify
|
||||
|
||||
#### README Sections
|
||||
- Installation instructions
|
||||
- Quick start guide
|
||||
- Configuration options
|
||||
- Environment variables
|
||||
|
||||
### Coverage
|
||||
|
||||
- Functions documented: 15/18 (83%)
|
||||
- Endpoints documented: 12/12 (100%)
|
||||
- README completeness: 90%
|
||||
|
||||
### Quality Checks
|
||||
|
||||
✅ All examples tested and working
|
||||
✅ Type annotations complete
|
||||
✅ Error cases documented
|
||||
✅ Links verified
|
||||
|
||||
### Next Steps
|
||||
|
||||
1. Add examples to remaining 3 functions
|
||||
2. Create getting started tutorial
|
||||
3. Add architecture diagram
|
||||
4. Document deployment process
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--format=[md\|html\|openapi]` | Documentation format |
|
||||
| `--update` | Update existing docs only |
|
||||
| `--examples` | Include code examples |
|
||||
| `--comprehensive` | Maximum detail level |
|
||||
|
||||
## Documentation Types
|
||||
|
||||
### Code Documentation
|
||||
- Function/method docstrings
|
||||
- Class documentation
|
||||
- Module-level documentation
|
||||
- Inline comments for complex logic
|
||||
|
||||
### API Documentation
|
||||
- Endpoint descriptions
|
||||
- Request/response formats
|
||||
- Authentication requirements
|
||||
- Error codes and handling
|
||||
|
||||
### User Documentation
|
||||
- README files
|
||||
- Getting started guides
|
||||
- Configuration guides
|
||||
- Troubleshooting guides
|
||||
|
||||
### Technical Documentation
|
||||
- Architecture diagrams
|
||||
- Design decisions
|
||||
- Database schemas
|
||||
- Deployment guides
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Keep It Current**: Update docs with code changes
|
||||
2. **Include Examples**: Real, working code examples
|
||||
3. **Document Edge Cases**: Error scenarios and limitations
|
||||
4. **Clear Language**: Write for your audience
|
||||
5. **Test Examples**: Ensure all code examples work
|
||||
6. **Version Docs**: Match documentation to code versions
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Onboarding New Developers
|
||||
|
||||
```bash
|
||||
# Generate comprehensive project documentation
|
||||
/doc all
|
||||
```
|
||||
|
||||
### Before Release
|
||||
|
||||
```bash
|
||||
# Update changelog and README
|
||||
/doc changelog
|
||||
/doc readme
|
||||
```
|
||||
|
||||
### API Development
|
||||
|
||||
```bash
|
||||
# Document all API endpoints
|
||||
/doc api
|
||||
```
|
||||
|
||||
### Code Maintainability
|
||||
|
||||
```bash
|
||||
# Add docstrings to service layer
|
||||
/doc src/services/
|
||||
```
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/api-gen](/claudekit/commands/api-gen) - Generate API code and docs
|
||||
- [/review](/claudekit/core-commands/review) - Review documentation quality
|
||||
- [/help](/claudekit/commands/help) - Command help
|
||||
@@ -1,338 +0,0 @@
|
||||
---
|
||||
title: /execute-plan
|
||||
description: Execute detailed implementation plans using subagents with code review gates
|
||||
---
|
||||
|
||||
# /execute-plan
|
||||
|
||||
Execute a detailed implementation plan using fresh subagents per task with mandatory code review gates between tasks.
|
||||
|
||||
## Purpose
|
||||
|
||||
The `/execute-plan` command automates plan execution while maintaining high quality through systematic code reviews. It spawns fresh subagents for each task, preventing context pollution and ensuring focused implementation.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/execute-plan [plan-file-path]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **plan-file-path**: Path to the plan file (created with `/plan --detailed`)
|
||||
|
||||
## Core Pattern
|
||||
|
||||
**"Fresh subagent per task + review between tasks = high quality, fast iteration"**
|
||||
|
||||
### Why Fresh Agents?
|
||||
|
||||
- Prevents context pollution between tasks
|
||||
- Each task gets focused attention
|
||||
- Failures don't cascade to other tasks
|
||||
- Easier to retry individual tasks
|
||||
|
||||
### Why Code Review Between Tasks?
|
||||
|
||||
- Catches issues early before they compound
|
||||
- Ensures code matches intent
|
||||
- Prevents technical debt accumulation
|
||||
- Creates natural checkpoints for rollback
|
||||
|
||||
## How It Works
|
||||
|
||||
### Step 1: Load Plan
|
||||
|
||||
1. Reads the plan file
|
||||
2. Verifies plan is complete and approved
|
||||
3. Creates TodoWrite tracking with all tasks
|
||||
4. Sets first task to `in_progress`
|
||||
|
||||
### Step 2: Execute Task (For Each Task)
|
||||
|
||||
For each task in the plan:
|
||||
|
||||
1. **Dispatch fresh subagent** with task details
|
||||
2. **Subagent implements** following TDD cycle:
|
||||
- Write failing test
|
||||
- Verify test fails
|
||||
- Implement minimally
|
||||
- Verify test passes
|
||||
- Commit changes
|
||||
3. **Subagent returns** completion summary
|
||||
|
||||
### Step 3: Code Review
|
||||
|
||||
After each task completes:
|
||||
|
||||
1. Dispatch code-reviewer subagent
|
||||
2. Review scope: **only changes from current task**
|
||||
3. Reviewer returns findings categorized as:
|
||||
- **Critical**: Must fix before proceeding
|
||||
- **Important**: Should fix before proceeding
|
||||
- **Minor**: Can fix later
|
||||
|
||||
### Step 4: Handle Review Findings
|
||||
|
||||
```
|
||||
IF Critical or Important issues found:
|
||||
1. Dispatch fix subagent for each issue
|
||||
2. Re-request code review
|
||||
3. Repeat until no Critical/Important issues
|
||||
|
||||
IF only Minor issues:
|
||||
1. Note for later cleanup
|
||||
2. Proceed to next task
|
||||
```
|
||||
|
||||
### Step 5: Mark Complete
|
||||
|
||||
1. Update TodoWrite - mark task completed
|
||||
2. Move to next task
|
||||
3. Repeat from Step 2
|
||||
|
||||
### Step 6: Final Review
|
||||
|
||||
After all tasks complete:
|
||||
|
||||
1. Dispatch comprehensive code review
|
||||
2. Review entire implementation against plan
|
||||
3. Verify all success criteria met
|
||||
4. Run full test suite
|
||||
5. Use `finishing-development-branch` skill
|
||||
|
||||
## Critical Rules
|
||||
|
||||
### Never Skip Code Reviews
|
||||
|
||||
Every single task must be reviewed before proceeding. No exceptions.
|
||||
|
||||
### Never Proceed with Critical Issues
|
||||
|
||||
Critical issues must be fixed immediately:
|
||||
```
|
||||
implement → review → fix critical → re-review → proceed
|
||||
```
|
||||
|
||||
### Never Run Parallel Implementation
|
||||
|
||||
Tasks run **sequentially**, one at a time:
|
||||
```
|
||||
WRONG: Run Task 1, 2, 3 simultaneously
|
||||
RIGHT: Task 1 → Review → Task 2 → Review → Task 3 → Review
|
||||
```
|
||||
|
||||
### Always Read Plan Before Implementing
|
||||
|
||||
```
|
||||
WRONG: Start coding based on memory of plan
|
||||
RIGHT: Read plan file, extract task details, then implement
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
### When a Task Fails
|
||||
|
||||
1. Capture error details
|
||||
2. Attempt fix (max 2 retries)
|
||||
3. If still failing:
|
||||
- Pause execution
|
||||
- Report to user with:
|
||||
- Which task failed
|
||||
- Error details
|
||||
- Suggested resolution
|
||||
- Wait for user decision
|
||||
|
||||
### When Review Finds Major Issues
|
||||
|
||||
1. List all Critical/Important issues
|
||||
2. Dispatch fix subagent for each
|
||||
3. Re-run code review
|
||||
4. If issues persist after 2 cycles:
|
||||
- Pause execution
|
||||
- Report to user
|
||||
- May need plan revision
|
||||
|
||||
## Output
|
||||
|
||||
### Progress Updates
|
||||
|
||||
During execution, you see real-time progress:
|
||||
|
||||
```markdown
|
||||
## Execution Progress
|
||||
|
||||
### Task 1: Create User model ✓
|
||||
- Files modified: src/models/user.ts
|
||||
- Tests added: 3
|
||||
- Review: Passed
|
||||
|
||||
### Task 2: Add validation ✓
|
||||
- Files modified: src/models/user.ts
|
||||
- Tests added: 2
|
||||
- Review: Passed (1 minor deferred)
|
||||
|
||||
### Task 3: Create endpoint [IN PROGRESS]
|
||||
- Status: Implementing...
|
||||
```
|
||||
|
||||
### Completion Summary
|
||||
|
||||
When execution completes:
|
||||
|
||||
```markdown
|
||||
## Execution Complete
|
||||
|
||||
### Summary
|
||||
- Tasks completed: 8/8
|
||||
- Tests added: 24
|
||||
- Coverage: 92%
|
||||
|
||||
### Files Created
|
||||
- src/models/user.ts
|
||||
- src/services/user-service.ts
|
||||
- src/routes/user.ts
|
||||
|
||||
### Files Modified
|
||||
- src/routes/index.ts
|
||||
- src/types/index.ts
|
||||
|
||||
### Deferred Items
|
||||
- Minor: Variable rename in user-service.ts line 12
|
||||
|
||||
### Next Steps
|
||||
- Run full test suite
|
||||
- Use /ship to create PR
|
||||
```
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before using this command:
|
||||
|
||||
1. **Plan file exists** and is complete
|
||||
2. **Plan was created** with `/plan --detailed`
|
||||
3. **Plan has been reviewed** and approved
|
||||
4. **Tests can be run** (`npm test` or `pytest` works)
|
||||
|
||||
## Examples
|
||||
|
||||
### Execute a Saved Plan
|
||||
|
||||
```bash
|
||||
/execute-plan plans/user-authentication.md
|
||||
```
|
||||
|
||||
Executes the detailed plan from the specified file.
|
||||
|
||||
### After Creating a Plan
|
||||
|
||||
```bash
|
||||
# Step 1: Create detailed plan
|
||||
/plan --detailed --save=plans/oauth.md "implement OAuth2 authentication"
|
||||
|
||||
# Step 2: Execute the plan
|
||||
/execute-plan plans/oauth.md
|
||||
```
|
||||
|
||||
Complete workflow from planning to automated execution.
|
||||
|
||||
### Resume After Pause
|
||||
|
||||
If execution pauses due to an error:
|
||||
|
||||
```bash
|
||||
# Fix the issue manually, then resume
|
||||
/execute-plan --resume plans/oauth.md
|
||||
```
|
||||
|
||||
Resumes from the last completed task.
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Before Execution
|
||||
|
||||
1. **Review the plan** - Make sure it's accurate
|
||||
2. **Check environment** - Tests run, dependencies installed
|
||||
3. **Clean working directory** - Commit or stash changes
|
||||
4. **Set aside time** - Don't interrupt during execution
|
||||
|
||||
### During Execution
|
||||
|
||||
1. **Monitor progress** - Watch for warnings or issues
|
||||
2. **Don't interrupt** - Let tasks complete
|
||||
3. **Review deferred items** - Note minor issues for cleanup
|
||||
|
||||
### After Execution
|
||||
|
||||
1. **Run full test suite** - Verify everything works
|
||||
2. **Review deferred issues** - Fix minor items
|
||||
3. **Manual testing** - Test critical paths
|
||||
4. **Create PR** - Use `/ship` command
|
||||
|
||||
## Workflow Integration
|
||||
|
||||
### Complete Feature Development Flow
|
||||
|
||||
```bash
|
||||
# 1. Brainstorm design
|
||||
/brainstorm "user authentication system"
|
||||
|
||||
# 2. Create detailed plan
|
||||
/plan --detailed --save=plans/auth.md "implement authentication from design"
|
||||
|
||||
# 3. Execute plan with automation
|
||||
/execute-plan plans/auth.md
|
||||
|
||||
# 4. Ship to production
|
||||
/ship "feat: add user authentication system"
|
||||
```
|
||||
|
||||
### Plan Review Flow
|
||||
|
||||
```bash
|
||||
# 1. Create plan
|
||||
/plan --detailed --save=plans/feature.md "feature description"
|
||||
|
||||
# 2. Review plan with team
|
||||
/review plans/feature.md
|
||||
|
||||
# 3. Execute reviewed plan
|
||||
/execute-plan plans/feature.md
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "Plan file not found"
|
||||
- Check the file path is correct
|
||||
- Use absolute paths or paths relative to repo root
|
||||
|
||||
### "Plan not detailed enough"
|
||||
- Plan must be created with `--detailed` flag
|
||||
- Regular plans need manual execution
|
||||
|
||||
### "Tests failing during execution"
|
||||
- Check test environment is set up correctly
|
||||
- Verify dependencies are installed
|
||||
- May need to fix plan or environment
|
||||
|
||||
### "Code review keeps failing"
|
||||
- Review the critical issues being reported
|
||||
- May need to revise the plan
|
||||
- Consider pausing and fixing manually
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/plan](/claudekit/commands/plan) - Create detailed plans for execution
|
||||
- [/brainstorm](/claudekit/commands/brainstorm) - Design features before planning
|
||||
- [/ship](/claudekit/commands/ship) - Create PR after execution
|
||||
- [/review](/claudekit/commands/review) - Review code or plans
|
||||
|
||||
## Customization
|
||||
|
||||
Execution behavior can be customized via `CLAUDE.md`:
|
||||
- Review strictness levels
|
||||
- Retry counts for failures
|
||||
- Parallel task limits
|
||||
- TDD enforcement
|
||||
|
||||
See the [Configuration Guide](/claudekit/configuration) for details.
|
||||
@@ -1,203 +0,0 @@
|
||||
---
|
||||
title: /feature
|
||||
description: End-to-end feature development workflow with planning, implementation, testing, and review
|
||||
---
|
||||
|
||||
# /feature - Feature Development Workflow
|
||||
|
||||
## Purpose
|
||||
|
||||
Complete end-to-end feature development workflow that orchestrates planning, implementation guidance, testing, and code review. This command guides you through the entire lifecycle of building a new feature from requirements to merge-ready code.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/feature [feature description or issue reference]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- `[feature description]` - Natural language description of the feature to build
|
||||
- `[issue reference]` - GitHub issue number or ticket ID
|
||||
|
||||
## How It Works
|
||||
|
||||
The `/feature` command executes a comprehensive 6-phase workflow:
|
||||
|
||||
### Phase 1: Planning
|
||||
|
||||
First, the command analyzes your feature request and creates an implementation plan:
|
||||
|
||||
1. **Understand Requirements**
|
||||
- Parses the feature description thoroughly
|
||||
- Identifies acceptance criteria
|
||||
- Lists assumptions that need validation
|
||||
- Clarifies any ambiguous requirements with you
|
||||
|
||||
2. **Explore Codebase**
|
||||
- Finds related existing implementations
|
||||
- Identifies patterns and conventions to follow
|
||||
- Locates integration points
|
||||
- Notes dependencies
|
||||
|
||||
3. **Create Task Breakdown**
|
||||
- Decomposes into atomic, verifiable tasks
|
||||
- Orders tasks by dependencies
|
||||
- Includes testing requirements
|
||||
- Estimates complexity (S/M/L)
|
||||
|
||||
4. **Track with TodoWrite** - All tasks are tracked for progress
|
||||
|
||||
### Phase 2: Research (If Needed)
|
||||
|
||||
If the feature involves unfamiliar technology:
|
||||
|
||||
1. Research best practices and patterns
|
||||
2. Find examples in the codebase or documentation
|
||||
3. Identify potential pitfalls
|
||||
4. Document key decisions
|
||||
|
||||
### Phase 3: Implementation Guidance
|
||||
|
||||
For each implementation task:
|
||||
|
||||
1. **Identify Target Files**
|
||||
- Existing files to modify
|
||||
- New files to create
|
||||
- Tests to add/update
|
||||
|
||||
2. **Provide Implementation Direction**
|
||||
- Code structure recommendations
|
||||
- Patterns to follow
|
||||
- Edge cases to handle
|
||||
- Error handling approach
|
||||
|
||||
3. **Review Progress**
|
||||
- Mark tasks complete as you go
|
||||
- Identify blockers early
|
||||
- Adjust plan if needed
|
||||
|
||||
### Phase 4: Testing
|
||||
|
||||
After implementation:
|
||||
|
||||
1. **Generate Tests**
|
||||
- Unit tests for new functions
|
||||
- Integration tests for workflows
|
||||
- Edge case coverage
|
||||
|
||||
2. **Run Test Suite**
|
||||
```bash
|
||||
# Python
|
||||
pytest -v --cov=src
|
||||
|
||||
# TypeScript
|
||||
pnpm test
|
||||
```
|
||||
|
||||
3. **Verify Coverage**
|
||||
- Ensure new code is tested
|
||||
- Coverage should not decrease
|
||||
|
||||
### Phase 5: Code Review
|
||||
|
||||
Before completion:
|
||||
|
||||
1. **Self-Review Checklist**
|
||||
- Code follows project conventions
|
||||
- No security vulnerabilities
|
||||
- Error handling is complete
|
||||
- Documentation updated
|
||||
- Tests are passing
|
||||
|
||||
2. **Review Staged Changes**
|
||||
```bash
|
||||
git diff --staged
|
||||
```
|
||||
|
||||
3. **Address Any Issues**
|
||||
- Fix critical issues immediately
|
||||
- Note recommendations for future
|
||||
|
||||
### Phase 6: Completion
|
||||
|
||||
1. **Verify All Tasks Complete**
|
||||
- All TodoWrite items done
|
||||
- All tests passing
|
||||
- Documentation updated
|
||||
|
||||
2. **Prepare for Commit**
|
||||
- Stage appropriate files
|
||||
- Generate commit message
|
||||
- Create PR if requested
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--mode=[mode]` | Use specific behavioral mode | `--mode=implementation` |
|
||||
| `--depth=[1-5]` | Planning thoroughness level (1=quick, 5=exhaustive) | `--depth=3` |
|
||||
| `--checkpoint` | Create checkpoint before starting | `--checkpoint` |
|
||||
| `--skip-tests` | Skip test generation phase | `--skip-tests` |
|
||||
| `--skip-review` | Skip code review phase | `--skip-review` |
|
||||
| `--format=[fmt]` | Output format (concise/detailed) | `--format=concise` |
|
||||
|
||||
### Flag Examples
|
||||
|
||||
```bash
|
||||
# Implementation-focused mode with minimal prose
|
||||
/feature --mode=implementation "add user profile page"
|
||||
|
||||
# Thorough planning with session checkpoint
|
||||
/feature --depth=5 --checkpoint "implement payment flow"
|
||||
|
||||
# Quick feature with concise output
|
||||
/feature --format=concise "add logging utility"
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Basic Feature
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/feature Add password reset functionality with email verification
|
||||
```
|
||||
|
||||
**Output:**
|
||||
1. Implementation plan with 8 tasks covering model, service, routes, email, tests
|
||||
2. Step-by-step implementation of password reset flow
|
||||
3. Tests for happy path and error cases
|
||||
4. Updated API documentation
|
||||
5. Commit message and PR description ready
|
||||
|
||||
### Feature with Issue Reference
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/feature #142 - Add dark mode toggle
|
||||
```
|
||||
|
||||
**Output:**
|
||||
1. Fetches context from GitHub issue #142
|
||||
2. Creates plan based on acceptance criteria
|
||||
3. Implements theme switching logic
|
||||
4. Adds tests for theme persistence
|
||||
5. Updates component documentation
|
||||
|
||||
## Deliverables
|
||||
|
||||
After running `/feature`, you receive:
|
||||
|
||||
1. **Implementation Plan** - Structured task breakdown with estimates
|
||||
2. **Code Changes** - Complete feature implementation
|
||||
3. **Tests** - Comprehensive test coverage
|
||||
4. **Documentation** - Updated docs and comments
|
||||
5. **Commit/PR** - Ready for code review and merge
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/plan](/claudekit/commands/plan) - Create implementation plan only
|
||||
- [/test](/claudekit/commands/test) - Generate tests for existing code
|
||||
- [/review](/claudekit/commands/review) - Comprehensive code review
|
||||
- [/tdd](/claudekit/commands/tdd) - Test-driven development approach
|
||||
@@ -1,298 +0,0 @@
|
||||
---
|
||||
title: /fix
|
||||
description: Smart debugging and bug fixing workflow with root cause analysis and regression tests
|
||||
---
|
||||
|
||||
# /fix - Bug Fix Workflow
|
||||
|
||||
## Purpose
|
||||
|
||||
Intelligent debugging and bug fixing workflow that analyzes errors, identifies root causes, implements fixes, and adds regression tests to prevent recurrence.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/fix [error message, bug description, or issue reference]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- `[error message]` - Stack trace or error output from your application
|
||||
- `[bug description]` - Natural language description of unexpected behavior
|
||||
- `[issue reference]` - GitHub issue number or bug ticket ID
|
||||
|
||||
## How It Works
|
||||
|
||||
The `/fix` command executes a systematic 6-phase debugging workflow:
|
||||
|
||||
### Phase 1: Error Analysis
|
||||
|
||||
1. **Parse Error Information**
|
||||
- Extracts error type and message
|
||||
- Parses stack trace if available
|
||||
- Identifies the failing location
|
||||
|
||||
2. **Gather Context**
|
||||
- When does this error occur?
|
||||
- What triggers it?
|
||||
- Is it reproducible?
|
||||
- When did it start happening?
|
||||
|
||||
3. **Check for Known Patterns**
|
||||
- Common error patterns
|
||||
- Similar issues in codebase
|
||||
- Recent changes that might have caused it
|
||||
|
||||
### Phase 2: Root Cause Investigation
|
||||
|
||||
1. **Trace Execution**
|
||||
- Follows the code path to the error
|
||||
- Identifies state at each step
|
||||
- Finds where expectations diverge
|
||||
|
||||
2. **Form Hypotheses**
|
||||
- Lists possible causes ranked by likelihood
|
||||
- Identifies minimal tests to validate each
|
||||
|
||||
3. **Validate Hypothesis**
|
||||
- Tests the most likely cause first
|
||||
- Confirms root cause before fixing
|
||||
- Doesn't fix symptoms only
|
||||
|
||||
### Phase 3: Search Related Code
|
||||
|
||||
1. **Find Similar Code**
|
||||
- Searches for similar patterns
|
||||
- Checks if same bug exists elsewhere
|
||||
- Identifies shared code that might be affected
|
||||
|
||||
2. **Review Recent Changes**
|
||||
```bash
|
||||
git log --oneline -20
|
||||
git blame [file]
|
||||
```
|
||||
|
||||
### Phase 4: Implement Fix
|
||||
|
||||
1. **Develop Minimal Fix**
|
||||
- Fixes the root cause, not symptoms
|
||||
- Keeps changes minimal and focused
|
||||
- Considers edge cases
|
||||
|
||||
2. **Add Defensive Code** (if appropriate)
|
||||
- Input validation
|
||||
- Null checks
|
||||
- Error handling
|
||||
|
||||
3. **Update Related Code** (if needed)
|
||||
- Fixes same issue in similar code
|
||||
- Updates shared utilities
|
||||
|
||||
### Phase 5: Verification
|
||||
|
||||
1. **Test the Fix**
|
||||
- Verifies original error is resolved
|
||||
- Checks related functionality
|
||||
- Runs existing test suite
|
||||
|
||||
2. **Add Regression Test**
|
||||
- Writes test that would have caught this bug
|
||||
- Includes edge cases discovered
|
||||
- Ensures test fails without fix
|
||||
|
||||
3. **Run Full Test Suite**
|
||||
```bash
|
||||
# Python
|
||||
pytest -v
|
||||
|
||||
# TypeScript
|
||||
pnpm test
|
||||
```
|
||||
|
||||
### Phase 6: Documentation
|
||||
|
||||
1. **Document the Fix**
|
||||
- What was the issue
|
||||
- What caused it
|
||||
- How it was fixed
|
||||
|
||||
2. **Update Comments** (if needed)
|
||||
- Adds clarifying comments
|
||||
- Documents non-obvious behavior
|
||||
|
||||
## Common Fix Patterns
|
||||
|
||||
### Null/Undefined Access
|
||||
|
||||
```typescript
|
||||
// Before - Crashes on null
|
||||
const name = user.profile.name;
|
||||
|
||||
// After - Safe with optional chaining
|
||||
const name = user?.profile?.name ?? 'Unknown';
|
||||
```
|
||||
|
||||
### Missing Error Handling
|
||||
|
||||
```python
|
||||
# Before - Crashes on invalid JSON
|
||||
data = json.loads(response.text)
|
||||
|
||||
# After - Handles errors gracefully
|
||||
try:
|
||||
data = json.loads(response.text)
|
||||
except json.JSONDecodeError as e:
|
||||
logger.error(f"Invalid JSON response: {e}")
|
||||
raise InvalidResponseError("Failed to parse response")
|
||||
```
|
||||
|
||||
### Race Condition
|
||||
|
||||
```typescript
|
||||
// Before - May update unmounted component
|
||||
const data = await fetchData();
|
||||
setState(data);
|
||||
|
||||
// After - Checks if still mounted
|
||||
useEffect(() => {
|
||||
let cancelled = false;
|
||||
fetchData().then(data => {
|
||||
if (!cancelled) setState(data);
|
||||
});
|
||||
return () => { cancelled = true; };
|
||||
}, []);
|
||||
```
|
||||
|
||||
### Off-by-One Error
|
||||
|
||||
```python
|
||||
# Before - IndexError on last iteration
|
||||
for i in range(len(items) + 1):
|
||||
process(items[i])
|
||||
|
||||
# After - Correct range
|
||||
for i in range(len(items)):
|
||||
process(items[i])
|
||||
# Or better: use iteration
|
||||
for item in items:
|
||||
process(item)
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--mode=[mode]` | Use specific behavioral mode | `--mode=deep-research` |
|
||||
| `--persona=[type]` | Apply persona expertise | `--persona=security` |
|
||||
| `--depth=[1-5]` | Investigation thoroughness (1=quick, 5=exhaustive) | `--depth=4` |
|
||||
| `--format=[fmt]` | Output format (concise/detailed) | `--format=concise` |
|
||||
| `--skip-regression` | Skip regression test creation | `--skip-regression` |
|
||||
| `--checkpoint` | Create checkpoint before fixing | `--checkpoint` |
|
||||
|
||||
### Persona Options
|
||||
|
||||
| Persona | Focus Area |
|
||||
|---------|------------|
|
||||
| `security` | Security vulnerabilities, OWASP top 10 |
|
||||
| `performance` | Speed, memory usage, efficiency |
|
||||
| `reliability` | Error handling, edge cases, resilience |
|
||||
|
||||
### Flag Examples
|
||||
|
||||
```bash
|
||||
# Deep investigation for intermittent issues
|
||||
/fix --mode=deep-research "intermittent timeout error"
|
||||
|
||||
# Security-focused fix
|
||||
/fix --persona=security "SQL injection vulnerability"
|
||||
|
||||
# Thorough race condition analysis
|
||||
/fix --depth=5 "race condition in auth flow"
|
||||
|
||||
# Quick typo fix with minimal output
|
||||
/fix --format=concise "typo in error message"
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Runtime Error
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/fix TypeError: Cannot read property 'email' of undefined in UserService.ts:45
|
||||
```
|
||||
|
||||
**Output:**
|
||||
1. Analysis: User object is undefined when accessed
|
||||
2. Root cause: async fetch didn't await, user not loaded yet
|
||||
3. Fix: Add null check and proper async handling
|
||||
4. Regression test: Test for case when user is not loaded
|
||||
5. Verification: All tests passing
|
||||
|
||||
### Bug Description
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/fix Users can see deleted posts in their feed
|
||||
```
|
||||
|
||||
**Output:**
|
||||
1. Investigation: Traces feed generation logic
|
||||
2. Root cause: Soft-delete flag not checked in feed query
|
||||
3. Fix: Add WHERE clause filtering deleted posts
|
||||
4. Tests: Verify deleted posts don't appear
|
||||
5. Check: Scans for similar issues in other queries
|
||||
|
||||
## Deliverables
|
||||
|
||||
After running `/fix`, you receive:
|
||||
|
||||
```markdown
|
||||
## Bug Fix Complete
|
||||
|
||||
### Issue
|
||||
TypeError: Cannot read property 'email' of undefined
|
||||
|
||||
### Root Cause
|
||||
User object is undefined because async fetch wasn't awaited
|
||||
|
||||
### Location
|
||||
`src/services/UserService.ts:45` - getUserEmail method
|
||||
|
||||
### Fix Applied
|
||||
|
||||
**Before:**
|
||||
```typescript
|
||||
async getUserEmail(userId: string) {
|
||||
const user = this.fetchUser(userId); // Missing await
|
||||
return user.email; // Crashes if user is undefined
|
||||
}
|
||||
```
|
||||
|
||||
**After:**
|
||||
```typescript
|
||||
async getUserEmail(userId: string) {
|
||||
const user = await this.fetchUser(userId);
|
||||
if (!user) {
|
||||
throw new NotFoundError(`User ${userId} not found`);
|
||||
}
|
||||
return user.email;
|
||||
}
|
||||
```
|
||||
|
||||
### Regression Test Added
|
||||
`src/services/UserService.test.ts` - `test_getUserEmail_with_nonexistent_user_throws_error`
|
||||
|
||||
### Verification
|
||||
- [x] Original error no longer occurs
|
||||
- [x] Existing tests pass
|
||||
- [x] New regression test passes
|
||||
- [x] No new issues introduced
|
||||
```
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/debug](/claudekit/commands/debug) - Deep debugging analysis
|
||||
- [/test](/claudekit/commands/test) - Generate additional tests
|
||||
- [/review](/claudekit/commands/review) - Code review for fixes
|
||||
- [/refactor](/claudekit/commands/refactor) - Improve code after fix
|
||||
@@ -1,179 +0,0 @@
|
||||
---
|
||||
title: /help
|
||||
description: Display available commands and their usage
|
||||
---
|
||||
|
||||
# /help
|
||||
|
||||
## Purpose
|
||||
|
||||
Display available commands and their usage. Get quick reference for Claude Kit commands or detailed help for specific commands.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/help [command-name]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **command-name** (optional): Specific command to get help for. If omitted, shows all available commands.
|
||||
|
||||
## Available Commands
|
||||
|
||||
### Development Workflow
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `/feature` | Full feature development workflow |
|
||||
| `/fix` | Debug and fix bugs |
|
||||
| `/review` | Comprehensive code review |
|
||||
| `/test` | Generate tests |
|
||||
| `/tdd` | Test-driven development workflow |
|
||||
| `/refactor` | Improve code structure |
|
||||
|
||||
### Planning & Design
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `/plan` | Create detailed implementation plan |
|
||||
| `/brainstorm` | Interactive design session |
|
||||
| `/execute-plan` | Execute plan with subagents |
|
||||
| `/research` | Technology research |
|
||||
|
||||
### Git & Deployment
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `/commit` | Create commit with message |
|
||||
| `/ship` | Commit + PR workflow |
|
||||
| `/pr` | Create pull request |
|
||||
| `/deploy` | Deploy to environment |
|
||||
|
||||
### Documentation
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `/doc` | Generate documentation |
|
||||
| `/api-gen` | Generate API code and docs |
|
||||
|
||||
### Security & Quality
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `/security-scan` | Scan for vulnerabilities |
|
||||
| `/optimize` | Performance optimization |
|
||||
|
||||
### Context Management
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `/mode` | Switch behavioral mode |
|
||||
| `/index` | Generate project index |
|
||||
| `/load` | Load components into context |
|
||||
| `/checkpoint` | Save/restore session state |
|
||||
| `/spawn` | Launch parallel tasks |
|
||||
|
||||
### Utilities
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| `/status` | Project status overview |
|
||||
| `/help` | Display this help |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Show all commands
|
||||
/help
|
||||
|
||||
# Get help for specific command
|
||||
/help feature
|
||||
|
||||
# Get help for mode command
|
||||
/help mode
|
||||
|
||||
# Get help for checkpoint
|
||||
/help checkpoint
|
||||
```
|
||||
|
||||
## Getting Detailed Help
|
||||
|
||||
For detailed help on a specific command:
|
||||
|
||||
```bash
|
||||
/help [command-name]
|
||||
```
|
||||
|
||||
This will show:
|
||||
- Command purpose
|
||||
- Usage syntax
|
||||
- Available arguments
|
||||
- Supported flags
|
||||
- Workflow steps
|
||||
- Practical examples
|
||||
|
||||
## Command Categories
|
||||
|
||||
### Core Workflow
|
||||
Commands for the main development cycle: `/feature`, `/fix`, `/review`, `/test`
|
||||
|
||||
### Enhanced Methodology
|
||||
Advanced workflows: `/plan --detailed`, `/brainstorm`, `/tdd`, `/execute-plan`
|
||||
|
||||
### Context Management
|
||||
Optimize your session: `/mode`, `/index`, `/load`, `/checkpoint`, `/spawn`
|
||||
|
||||
### Quality & Security
|
||||
Code quality tools: `/security-scan`, `/optimize`, `/review`
|
||||
|
||||
### Documentation
|
||||
Generate docs: `/doc`, `/api-gen`
|
||||
|
||||
## Universal Flags
|
||||
|
||||
Most commands support these flags:
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--mode=[mode]` | Override behavioral mode |
|
||||
| `--depth=[1-5]` | Thoroughness level |
|
||||
| `--format=[fmt]` | Output format (concise/detailed/json) |
|
||||
| `--save=[path]` | Save output to file |
|
||||
|
||||
## Quick Start
|
||||
|
||||
New to Claude Kit? Try these commands:
|
||||
|
||||
```bash
|
||||
# 1. See project structure
|
||||
/index
|
||||
|
||||
# 2. Check current status
|
||||
/status
|
||||
|
||||
# 3. Load a component to work on
|
||||
/load api
|
||||
|
||||
# 4. Start development
|
||||
/feature "Add user authentication"
|
||||
```
|
||||
|
||||
## Related Resources
|
||||
|
||||
- **CLAUDE.md**: Project-specific configuration
|
||||
- **Skills**: `.claude/skills/` directory
|
||||
- **Modes**: `.claude/modes/` directory
|
||||
- **Commands**: `.claude/commands/` directory
|
||||
|
||||
## Need More Help?
|
||||
|
||||
- Check command documentation in `/claudekit/commands/`
|
||||
- Review skills in `/claudekit/skills/`
|
||||
- Read methodology guides in `/claudekit/methodology/`
|
||||
- See examples in project CLAUDE.md
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/status](/claudekit/commands/status) - Check project status
|
||||
- [/mode](/claudekit/commands/mode) - Switch modes
|
||||
@@ -1,141 +0,0 @@
|
||||
---
|
||||
title: /index
|
||||
description: Generate a comprehensive project structure index for faster navigation
|
||||
slug: commands/index-cmd
|
||||
---
|
||||
|
||||
# /index
|
||||
|
||||
## Purpose
|
||||
|
||||
Generate a comprehensive project structure index for faster navigation and context loading. Creates a `PROJECT_INDEX.md` file mapping the codebase structure.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/index [flags]
|
||||
```
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Scan Project Structure
|
||||
|
||||
Scans the entire project directory structure, excluding:
|
||||
- `node_modules/`
|
||||
- `.git/`
|
||||
- `__pycache__/`
|
||||
- `dist/`, `build/`, `.next/`
|
||||
- `venv/`, `.venv/`
|
||||
- Coverage and cache directories
|
||||
|
||||
### Step 2: Identify Key Components
|
||||
|
||||
Categorizes files by type:
|
||||
- **Entry Points**: Main files, index files, app entry
|
||||
- **API/Routes**: Endpoint definitions
|
||||
- **Models/Types**: Data structures, schemas
|
||||
- **Services**: Business logic
|
||||
- **Utilities**: Helper functions
|
||||
- **Tests**: Test files
|
||||
- **Configuration**: Config files, env templates
|
||||
- **Documentation**: README, docs
|
||||
|
||||
### Step 3: Map Dependencies
|
||||
|
||||
Identifies:
|
||||
- Package managers and dependencies (package.json, requirements.txt, etc.)
|
||||
- Internal import relationships between key files
|
||||
- External service integrations
|
||||
|
||||
### Step 4: Generate Index
|
||||
|
||||
Creates `PROJECT_INDEX.md` with this structure:
|
||||
|
||||
```markdown
|
||||
# Project Index: [Project Name]
|
||||
|
||||
Generated: [timestamp]
|
||||
|
||||
## Quick Navigation
|
||||
|
||||
| Category | Key Files |
|
||||
|----------|-----------|
|
||||
| Entry Points | [list] |
|
||||
| API Routes | [list] |
|
||||
| Core Services | [list] |
|
||||
| Models | [list] |
|
||||
|
||||
## Directory Structure
|
||||
|
||||
[tree view]
|
||||
|
||||
## Key Files
|
||||
|
||||
### Entry Points
|
||||
- `[path]` - [description]
|
||||
|
||||
### API/Routes
|
||||
- `[path]` - [description]
|
||||
|
||||
### Services
|
||||
- `[path]` - [description]
|
||||
|
||||
### Models/Types
|
||||
- `[path]` - [description]
|
||||
|
||||
## Dependencies
|
||||
|
||||
### External
|
||||
- [package]: [purpose]
|
||||
|
||||
### Internal
|
||||
- [module] → [depends on]
|
||||
|
||||
## Architecture Notes
|
||||
[Brief description of patterns observed]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--depth=[N]` | Limit directory depth (default: 5) |
|
||||
| `--include=[pattern]` | Include additional patterns |
|
||||
| `--exclude=[pattern]` | Exclude additional patterns |
|
||||
| `--output=[path]` | Custom output path |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Generate standard project index
|
||||
/index
|
||||
|
||||
# Generate shallow index (3 levels deep)
|
||||
/index --depth=3
|
||||
|
||||
# Include GraphQL files in the index
|
||||
/index --include="*.graphql"
|
||||
|
||||
# Save to custom location
|
||||
/index --output=docs/INDEX.md
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
After generating the index, you'll receive:
|
||||
1. Index file location
|
||||
2. Number of files indexed
|
||||
3. Key components discovered
|
||||
4. Suggestion to use `/load` to load specific components
|
||||
|
||||
## Benefits
|
||||
|
||||
- **Faster Navigation**: Quickly locate files and components
|
||||
- **Context Loading**: Use with `/load` for efficient context management
|
||||
- **Onboarding**: Help new team members understand codebase structure
|
||||
- **Documentation**: Auto-generated architecture overview
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/load](/claudekit/commands/load) - Load specific components into context
|
||||
- [/status](/claudekit/commands/status) - Check current project status
|
||||
@@ -1,165 +0,0 @@
|
||||
---
|
||||
title: /load
|
||||
description: Load specific project components into context for focused work
|
||||
---
|
||||
|
||||
# /load
|
||||
|
||||
## Purpose
|
||||
|
||||
Load specific project components into context for focused work. Uses the project index to efficiently load relevant files.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/load [component] [flags]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **component**: Can be a category name, file path, or pattern
|
||||
- Category name: `api`, `models`, `services`, `utils`, `tests`, etc.
|
||||
- File path: `src/services/user.ts`
|
||||
- Pattern: `src/auth/*`
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Check for Index
|
||||
|
||||
First, checks if `PROJECT_INDEX.md` exists:
|
||||
- If exists: Uses index for efficient loading
|
||||
- If not: Suggests running `/index` first, or does quick scan
|
||||
|
||||
### Step 2: Identify Component
|
||||
|
||||
Parses the requested component:
|
||||
|
||||
| Request Type | Action |
|
||||
|--------------|--------|
|
||||
| Category name | Load all files in category |
|
||||
| File path | Load specific file |
|
||||
| Pattern | Load matching files |
|
||||
| `--all` | Load key files from all categories |
|
||||
|
||||
### Step 3: Load Files
|
||||
|
||||
Reads the identified files and summarizes:
|
||||
- File purposes
|
||||
- Key exports/functions
|
||||
- Dependencies
|
||||
- Current state
|
||||
|
||||
### Step 4: Context Summary
|
||||
|
||||
Provides a brief summary:
|
||||
|
||||
```markdown
|
||||
## Loaded Context
|
||||
|
||||
### Files Loaded (N)
|
||||
- `path/to/file1.ts` - [purpose]
|
||||
- `path/to/file2.ts` - [purpose]
|
||||
|
||||
### Key Components
|
||||
- [Component]: [description]
|
||||
|
||||
### Ready For
|
||||
- [Suggested actions based on loaded context]
|
||||
```
|
||||
|
||||
## Component Categories
|
||||
|
||||
| Category | What It Loads |
|
||||
|----------|---------------|
|
||||
| `api` | API routes and endpoints |
|
||||
| `models` | Data models and types |
|
||||
| `services` | Business logic services |
|
||||
| `utils` | Utility functions |
|
||||
| `tests` | Test files |
|
||||
| `config` | Configuration files |
|
||||
| `auth` | Authentication related |
|
||||
| `db` | Database related |
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--all` | Load all key components |
|
||||
| `--shallow` | Load only file summaries |
|
||||
| `--deep` | Load full file contents |
|
||||
| `--related` | Include related files |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Load all API routes
|
||||
/load api
|
||||
|
||||
# Load all data models
|
||||
/load models
|
||||
|
||||
# Load specific file
|
||||
/load src/services/user.ts
|
||||
|
||||
# Load auth + related files
|
||||
/load auth --related
|
||||
|
||||
# Load all key components
|
||||
/load --all
|
||||
|
||||
# Quick overview of everything
|
||||
/load --all --shallow
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Start Narrow**: Load specific components first
|
||||
2. **Expand as Needed**: Use `--related` when you need more context
|
||||
3. **Check Index**: Run `/index` if loading seems slow
|
||||
4. **Use Categories**: Category names are faster than patterns
|
||||
|
||||
## After Loading
|
||||
|
||||
The command suggests next actions:
|
||||
- "Ready to work on [component]. What would you like to do?"
|
||||
- "I see [patterns/issues]. Want me to address them?"
|
||||
- "Related files that might be relevant: [list]"
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Starting Work on a Feature
|
||||
|
||||
```bash
|
||||
# Load the entire authentication system
|
||||
/load auth --related
|
||||
|
||||
# Now you can work with full context
|
||||
```
|
||||
|
||||
### Bug Investigation
|
||||
|
||||
```bash
|
||||
# Load the specific service and its tests
|
||||
/load src/services/payment.ts
|
||||
/load tests/payment.test.ts
|
||||
```
|
||||
|
||||
### Code Review
|
||||
|
||||
```bash
|
||||
# Load all files in a directory
|
||||
/load src/api/orders/
|
||||
```
|
||||
|
||||
### Architecture Understanding
|
||||
|
||||
```bash
|
||||
# Get overview of all components
|
||||
/load --all --shallow
|
||||
```
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/index](/claudekit/commands/index) - Generate project structure index
|
||||
- [/status](/claudekit/commands/status) - Check project status
|
||||
- [/checkpoint](/claudekit/commands/checkpoint) - Save/restore session state
|
||||
@@ -1,167 +0,0 @@
|
||||
---
|
||||
title: /mode
|
||||
description: Switch between behavioral modes to optimize responses for different task types
|
||||
---
|
||||
|
||||
# /mode
|
||||
|
||||
## Purpose
|
||||
|
||||
Switch between behavioral modes to optimize responses for different task types. Modes adjust communication style, output format, and problem-solving approach.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/mode [mode-name]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **mode-name** (optional): The mode to activate. If omitted, shows the current active mode.
|
||||
|
||||
## Available Modes
|
||||
|
||||
| Mode | Description | Best For |
|
||||
|------|-------------|----------|
|
||||
| `default` | Balanced standard behavior | General tasks |
|
||||
| `brainstorm` | Creative exploration, more questions | Design, ideation |
|
||||
| `token-efficient` | Compressed, concise output | High-volume, cost savings |
|
||||
| `deep-research` | Thorough analysis, citations | Investigation, audits |
|
||||
| `implementation` | Code-focused, minimal prose | Executing plans |
|
||||
| `review` | Critical analysis, finding issues | Code review, QA |
|
||||
| `orchestration` | Multi-task coordination | Complex parallel work |
|
||||
|
||||
## Mode Details
|
||||
|
||||
### Default Mode
|
||||
- Standard balanced responses
|
||||
- Mix of explanation and code
|
||||
- Normal verification steps
|
||||
|
||||
### Brainstorm Mode
|
||||
- Ask more clarifying questions
|
||||
- Present multiple alternatives
|
||||
- Explore trade-offs explicitly
|
||||
- Delay convergence on solutions
|
||||
|
||||
### Token-Efficient Mode
|
||||
- Minimal explanations
|
||||
- Code-only responses where possible
|
||||
- Skip obvious context
|
||||
- 30-70% token savings
|
||||
|
||||
### Deep-Research Mode
|
||||
- Thorough investigation
|
||||
- Evidence and citations
|
||||
- Confidence levels stated
|
||||
- Comprehensive analysis
|
||||
|
||||
### Implementation Mode
|
||||
- Jump straight to code
|
||||
- Progress indicators
|
||||
- Minimal discussion
|
||||
- Execute don't deliberate
|
||||
|
||||
### Review Mode
|
||||
- Look for issues first
|
||||
- Categorized findings
|
||||
- Severity levels
|
||||
- Actionable feedback
|
||||
|
||||
### Orchestration Mode
|
||||
- Task breakdown
|
||||
- Parallel execution planning
|
||||
- Result aggregation
|
||||
- Coordination focus
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--info` | Show detailed mode description |
|
||||
| `--list` | List all available modes |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Switch to brainstorm mode for design discussions
|
||||
/mode brainstorm
|
||||
|
||||
# Switch to efficient mode for cost savings
|
||||
/mode token-efficient
|
||||
|
||||
# Show current active mode
|
||||
/mode
|
||||
|
||||
# List all available modes
|
||||
/mode --list
|
||||
|
||||
# Reset to default mode
|
||||
/mode default
|
||||
```
|
||||
|
||||
## Mode Persistence
|
||||
|
||||
- Modes persist for the entire session
|
||||
- Explicitly switch when task type changes
|
||||
- Mode affects all subsequent responses
|
||||
- Can be overridden per-command with flags
|
||||
|
||||
## Command Flag Override
|
||||
|
||||
Override mode for a single command:
|
||||
|
||||
```bash
|
||||
/feature --mode=implementation "Add login feature"
|
||||
/review --mode=deep-research src/auth/
|
||||
/plan --mode=brainstorm "Design notification system"
|
||||
```
|
||||
|
||||
## Recommended Workflows
|
||||
|
||||
### Feature Development
|
||||
|
||||
```bash
|
||||
/mode brainstorm # Explore approaches
|
||||
# [discuss design]
|
||||
/mode implementation # Execute plan
|
||||
# [write code]
|
||||
/mode review # Check quality
|
||||
# [review code]
|
||||
```
|
||||
|
||||
### Bug Investigation
|
||||
|
||||
```bash
|
||||
/mode deep-research # Investigate thoroughly
|
||||
# [analyze bug]
|
||||
/mode implementation # Apply fix
|
||||
# [fix bug]
|
||||
/mode default # Return to normal
|
||||
```
|
||||
|
||||
### Cost-Conscious Session
|
||||
|
||||
```bash
|
||||
/mode token-efficient # Set for session
|
||||
# [work on multiple tasks]
|
||||
/mode default # Reset when done
|
||||
```
|
||||
|
||||
## Mode Files
|
||||
|
||||
Mode definitions are stored in `.claude/modes/`:
|
||||
- `default.md`
|
||||
- `brainstorm.md`
|
||||
- `token-efficient.md`
|
||||
- `deep-research.md`
|
||||
- `implementation.md`
|
||||
- `review.md`
|
||||
- `orchestration.md`
|
||||
|
||||
Customize modes by editing these files in your project.
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/help](/claudekit/commands/help) - Get help on any command
|
||||
- [/status](/claudekit/commands/status) - Check project status
|
||||
@@ -1,295 +0,0 @@
|
||||
---
|
||||
title: /optimize
|
||||
description: Analyze and optimize code performance
|
||||
---
|
||||
|
||||
# /optimize
|
||||
|
||||
## Purpose
|
||||
|
||||
Analyze and optimize code performance. Identifies bottlenecks, suggests improvements, and implements optimizations while ensuring correctness.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/optimize [file-or-function]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **file-or-function**: Path to file or function to optimize
|
||||
- File path: `src/services/data-processor.ts`
|
||||
- Function name: `processUserData`
|
||||
- Module: `src/utils/`
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Analyze Current Performance
|
||||
|
||||
1. **Identify bottlenecks**
|
||||
- Analyze time complexity
|
||||
- Check space complexity
|
||||
- Look for redundant operations
|
||||
|
||||
2. **Profile if possible**
|
||||
- Check for N+1 queries
|
||||
- Identify unnecessary loops
|
||||
- Find repeated calculations
|
||||
|
||||
### Step 2: Identify Opportunities
|
||||
|
||||
1. **Algorithm improvements**
|
||||
- Better data structures
|
||||
- More efficient algorithms
|
||||
- Reduce complexity
|
||||
|
||||
2. **Caching opportunities**
|
||||
- Memoization
|
||||
- Result caching
|
||||
- Computed properties
|
||||
|
||||
3. **Async optimizations**
|
||||
- Parallel execution
|
||||
- Batch operations
|
||||
- Lazy loading
|
||||
|
||||
### Step 3: Implement Optimizations
|
||||
|
||||
1. **Make targeted changes**
|
||||
- Implement improvements
|
||||
- Preserve functionality
|
||||
- Add comments
|
||||
|
||||
2. **Verify improvements**
|
||||
- Test correctness
|
||||
- Measure performance
|
||||
- Compare before/after
|
||||
|
||||
## Output
|
||||
|
||||
```markdown
|
||||
## Optimization Report: [Component]
|
||||
|
||||
### Current Performance
|
||||
- Time complexity: O(n²)
|
||||
- Space complexity: O(n)
|
||||
- Estimated execution time: 500ms for 1000 items
|
||||
- Issues found: 3
|
||||
|
||||
### Bottlenecks Identified
|
||||
|
||||
1. **Nested loop in data processing**
|
||||
- Location: `processData()` lines 45-60
|
||||
- Impact: High
|
||||
- Current: O(n²)
|
||||
|
||||
2. **Redundant database queries**
|
||||
- Location: `getUserData()` lines 120-135
|
||||
- Impact: Medium
|
||||
- Issue: N+1 query pattern
|
||||
|
||||
3. **Inefficient array operations**
|
||||
- Location: `filterResults()` lines 88-92
|
||||
- Impact: Low
|
||||
- Issue: Multiple array iterations
|
||||
|
||||
### Optimizations Applied
|
||||
|
||||
#### 1. Algorithm Improvement
|
||||
**Before:**
|
||||
```typescript
|
||||
// O(n²) nested loop
|
||||
for (const item of items) {
|
||||
for (const tag of tags) {
|
||||
if (item.tags.includes(tag)) {
|
||||
results.push(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**After:**
|
||||
```typescript
|
||||
// O(n) with Set lookup
|
||||
const tagSet = new Set(tags);
|
||||
const results = items.filter(item =>
|
||||
item.tags.some(tag => tagSet.has(tag))
|
||||
);
|
||||
```
|
||||
|
||||
**Impact:** Time complexity reduced from O(n²) to O(n)
|
||||
|
||||
#### 2. Caching Implementation
|
||||
**Before:**
|
||||
```typescript
|
||||
function calculateScore(user) {
|
||||
// Recalculates every time
|
||||
return expensiveCalculation(user);
|
||||
}
|
||||
```
|
||||
|
||||
**After:**
|
||||
```typescript
|
||||
const scoreCache = new Map();
|
||||
function calculateScore(user) {
|
||||
if (scoreCache.has(user.id)) {
|
||||
return scoreCache.get(user.id);
|
||||
}
|
||||
const score = expensiveCalculation(user);
|
||||
scoreCache.set(user.id, score);
|
||||
return score;
|
||||
}
|
||||
```
|
||||
|
||||
**Impact:** 95% cache hit rate in typical usage
|
||||
|
||||
#### 3. Batch Processing
|
||||
**Before:**
|
||||
```typescript
|
||||
for (const userId of userIds) {
|
||||
await db.getUser(userId); // N queries
|
||||
}
|
||||
```
|
||||
|
||||
**After:**
|
||||
```typescript
|
||||
const users = await db.getUsers(userIds); // 1 query
|
||||
```
|
||||
|
||||
**Impact:** Reduced database queries from N to 1
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
| Metric | Before | After | Improvement |
|
||||
|--------|--------|-------|-------------|
|
||||
| Time Complexity | O(n²) | O(n log n) | 90% faster |
|
||||
| Execution Time | 500ms | 50ms | 10x faster |
|
||||
| Database Queries | 100 | 1 | 99% reduction |
|
||||
| Memory Usage | 150MB | 80MB | 47% reduction |
|
||||
|
||||
### Testing
|
||||
|
||||
All existing tests pass:
|
||||
- ✅ Unit tests: 45/45
|
||||
- ✅ Integration tests: 12/12
|
||||
- ✅ Performance benchmarks added
|
||||
|
||||
### Recommendations
|
||||
|
||||
1. **Monitor in production**: Track actual performance metrics
|
||||
2. **Consider further optimization**: Implement pagination for large datasets
|
||||
3. **Add benchmarks**: Create performance regression tests
|
||||
|
||||
### Files Modified
|
||||
- `src/services/data-processor.ts`
|
||||
- `tests/data-processor.test.ts` (added benchmarks)
|
||||
```
|
||||
|
||||
## Optimization Strategies
|
||||
|
||||
### 1. Algorithm Optimization
|
||||
- Replace inefficient algorithms
|
||||
- Use appropriate data structures
|
||||
- Reduce time/space complexity
|
||||
|
||||
### 2. Caching
|
||||
- Memoize expensive calculations
|
||||
- Cache API responses
|
||||
- Use computed properties
|
||||
|
||||
### 3. Database Optimization
|
||||
- Batch queries
|
||||
- Add indexes
|
||||
- Optimize query patterns
|
||||
- Use eager loading
|
||||
|
||||
### 4. Async Optimization
|
||||
- Parallel execution with `Promise.all()`
|
||||
- Lazy loading
|
||||
- Stream processing
|
||||
|
||||
### 5. Code-Level Optimization
|
||||
- Avoid premature optimization
|
||||
- Profile before optimizing
|
||||
- Focus on hot paths
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Optimize specific file
|
||||
/optimize src/services/report-generator.ts
|
||||
|
||||
# Optimize by function name
|
||||
/optimize calculateTotalSales
|
||||
|
||||
# Optimize entire module
|
||||
/optimize src/utils/
|
||||
|
||||
# Optimize with performance persona
|
||||
/optimize --persona=performance src/api/users.ts
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--profile` | Include profiling data |
|
||||
| `--benchmark` | Add performance benchmarks |
|
||||
| `--aggressive` | More aggressive optimizations |
|
||||
| `--safe` | Conservative optimizations only |
|
||||
| `--persona=performance` | Performance-focused analysis |
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Profile First**: Don't optimize without measuring
|
||||
2. **Preserve Correctness**: Always verify behavior unchanged
|
||||
3. **Add Tests**: Include performance regression tests
|
||||
4. **Document Changes**: Explain why optimizations were made
|
||||
5. **Measure Impact**: Compare before/after metrics
|
||||
|
||||
## Common Optimizations
|
||||
|
||||
### N+1 Query Prevention
|
||||
```typescript
|
||||
// Before: N+1 queries
|
||||
const users = await db.getUsers();
|
||||
for (const user of users) {
|
||||
user.posts = await db.getPostsByUser(user.id);
|
||||
}
|
||||
|
||||
// After: 2 queries
|
||||
const users = await db.getUsers();
|
||||
const posts = await db.getPostsByUsers(users.map(u => u.id));
|
||||
// Map posts to users
|
||||
```
|
||||
|
||||
### Memoization
|
||||
```typescript
|
||||
const memoize = (fn) => {
|
||||
const cache = new Map();
|
||||
return (...args) => {
|
||||
const key = JSON.stringify(args);
|
||||
if (cache.has(key)) return cache.get(key);
|
||||
const result = fn(...args);
|
||||
cache.set(key, result);
|
||||
return result;
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
### Debouncing
|
||||
```typescript
|
||||
const debounce = (fn, delay) => {
|
||||
let timeout;
|
||||
return (...args) => {
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(() => fn(...args), delay);
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/review](/claudekit/core-commands/review) - Code review with performance checks
|
||||
- [/test](/claudekit/core-commands/test) - Add performance tests
|
||||
- [/fix](/claudekit/core-commands/fix) - Fix performance issues
|
||||
@@ -1,179 +0,0 @@
|
||||
---
|
||||
title: Commands Overview
|
||||
description: All Claude Kit commands organized by category.
|
||||
---
|
||||
|
||||
# Commands Overview
|
||||
|
||||
Claude Kit provides 27+ slash commands that automate common development workflows. Commands are organized into categories based on their purpose.
|
||||
|
||||
## Command Categories
|
||||
|
||||
### Development Commands
|
||||
|
||||
Core commands for building features and fixing bugs:
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| [`/feature`](/claudekit/commands/feature/) | End-to-end feature development workflow |
|
||||
| [`/fix`](/claudekit/commands/fix/) | Smart debugging and bug fixing |
|
||||
| [`/review`](/claudekit/commands/review/) | Comprehensive code review |
|
||||
| [`/test`](/claudekit/commands/test/) | Generate tests for code |
|
||||
| [`/refactor`](/claudekit/commands/refactor/) | Code refactoring workflow |
|
||||
| [`/debug`](/claudekit/commands/debug/) | Interactive debugging session |
|
||||
| [`/tdd`](/claudekit/commands/tdd/) | Test-driven development workflow |
|
||||
|
||||
### Planning Commands
|
||||
|
||||
Commands for planning and research:
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| [`/plan`](/claudekit/commands/plan/) | Create structured implementation plans |
|
||||
| [`/brainstorm`](/claudekit/commands/brainstorm/) | Interactive design and ideation |
|
||||
| [`/execute-plan`](/claudekit/commands/execute-plan/) | Execute a plan with subagents |
|
||||
| [`/research`](/claudekit/commands/research/) | Technology research and analysis |
|
||||
|
||||
### Git & Deployment Commands
|
||||
|
||||
Commands for version control and deployment:
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| [`/ship`](/claudekit/commands/ship/) | Commit and create PR workflow |
|
||||
| [`/commit`](/claudekit/commands/commit/) | Create a git commit |
|
||||
| [`/pr`](/claudekit/commands/pr/) | Create a pull request |
|
||||
| [`/deploy`](/claudekit/commands/deploy/) | Deployment workflow |
|
||||
| [`/changelog`](/claudekit/commands/changelog/) | Generate changelog entries |
|
||||
|
||||
### Documentation Commands
|
||||
|
||||
Commands for generating documentation:
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| [`/doc`](/claudekit/commands/doc/) | Generate documentation |
|
||||
| [`/api-gen`](/claudekit/commands/api-gen/) | Generate API documentation |
|
||||
|
||||
### Utility Commands
|
||||
|
||||
Helper commands for various tasks:
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
| [`/mode`](/claudekit/commands/mode/) | Switch behavioral modes |
|
||||
| [`/index`](/claudekit/commands/index/) | Generate project structure index |
|
||||
| [`/load`](/claudekit/commands/load/) | Load project context |
|
||||
| [`/checkpoint`](/claudekit/commands/checkpoint/) | Save/restore session state |
|
||||
| [`/spawn`](/claudekit/commands/spawn/) | Launch parallel background tasks |
|
||||
| [`/status`](/claudekit/commands/status/) | Show project status |
|
||||
| [`/help`](/claudekit/commands/help/) | Show help information |
|
||||
| [`/optimize`](/claudekit/commands/optimize/) | Optimize code performance |
|
||||
| [`/security-scan`](/claudekit/commands/security-scan/) | Security vulnerability scan |
|
||||
|
||||
## Command Structure
|
||||
|
||||
All commands follow a consistent structure:
|
||||
|
||||
```bash
|
||||
/command [arguments] [--flags]
|
||||
```
|
||||
|
||||
### Arguments
|
||||
|
||||
Most commands accept a description or target as the main argument:
|
||||
|
||||
```bash
|
||||
/feature "add user authentication"
|
||||
/fix "TypeError in UserService.ts"
|
||||
/review src/auth/
|
||||
```
|
||||
|
||||
### Flags
|
||||
|
||||
Commands support flags for customization:
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--mode=[mode]` | Use specific behavioral mode | `--mode=implementation` |
|
||||
| `--depth=[1-5]` | Thoroughness level | `--depth=3` |
|
||||
| `--format=[fmt]` | Output format | `--format=concise` |
|
||||
| `--save=[path]` | Save output to file | `--save=plan.md` |
|
||||
| `--checkpoint` | Create state checkpoint | `--checkpoint` |
|
||||
| `--persona=[type]` | Apply persona expertise | `--persona=security` |
|
||||
|
||||
### Flag Examples
|
||||
|
||||
```bash
|
||||
# Use implementation mode for faster coding
|
||||
/feature --mode=implementation "add logging utility"
|
||||
|
||||
# Deep security review
|
||||
/review --persona=security --depth=5 src/auth/
|
||||
|
||||
# Concise output
|
||||
/fix --format=concise "typo in error message"
|
||||
|
||||
# Save plan to file
|
||||
/plan --save=plans/auth.md "implement authentication"
|
||||
```
|
||||
|
||||
## Common Workflows
|
||||
|
||||
### Feature Development
|
||||
|
||||
```bash
|
||||
# 1. Brainstorm the approach
|
||||
/brainstorm "how should we implement user roles?"
|
||||
|
||||
# 2. Create a detailed plan
|
||||
/plan "implement role-based access control"
|
||||
|
||||
# 3. Build the feature
|
||||
/feature "add RBAC with admin and user roles"
|
||||
|
||||
# 4. Ship it
|
||||
/ship "feat: add role-based access control"
|
||||
```
|
||||
|
||||
### Bug Fixing
|
||||
|
||||
```bash
|
||||
# 1. Debug the issue
|
||||
/fix "users can't login after password reset"
|
||||
|
||||
# 2. Review the fix
|
||||
/review src/auth/password-reset.ts
|
||||
|
||||
# 3. Ship the fix
|
||||
/ship "fix: resolve password reset login issue"
|
||||
```
|
||||
|
||||
### Code Quality
|
||||
|
||||
```bash
|
||||
# 1. Review code
|
||||
/review src/services/
|
||||
|
||||
# 2. Run security scan
|
||||
/security-scan src/
|
||||
|
||||
# 3. Optimize performance
|
||||
/optimize src/services/data-processor.ts
|
||||
```
|
||||
|
||||
## Getting Help
|
||||
|
||||
Get help for any command:
|
||||
|
||||
```bash
|
||||
/help # Show all commands
|
||||
/help feature # Show /feature details
|
||||
/help fix # Show /fix details
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [/feature](/claudekit/commands/feature/) — Learn the flagship command
|
||||
- [/fix](/claudekit/commands/fix/) — Master debugging workflow
|
||||
- [Modes](/claudekit/modes/overview/) — Optimize Claude's behavior
|
||||
@@ -1,257 +0,0 @@
|
||||
---
|
||||
title: /plan
|
||||
description: Create structured implementation plans with task breakdown and time estimates
|
||||
---
|
||||
|
||||
# /plan
|
||||
|
||||
Create structured implementation plans with task breakdown, dependencies, and time estimates for complex work.
|
||||
|
||||
## Purpose
|
||||
|
||||
The `/plan` command helps you transform complex features or tasks into actionable, well-organized implementation plans. It breaks down work into manageable chunks, identifies dependencies, estimates effort, and highlights risks.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/plan [task description or feature request]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **task description**: Description of the feature, task, or work you need planned
|
||||
|
||||
## How It Works
|
||||
|
||||
### Phase 1: Understanding
|
||||
|
||||
The planner first clarifies what you're trying to build:
|
||||
- Identifies core functionality needed
|
||||
- Lists explicit and implicit requirements
|
||||
- Defines acceptance criteria
|
||||
- Asks clarifying questions if needed
|
||||
|
||||
### Phase 2: Research
|
||||
|
||||
Next, it explores your codebase to understand context:
|
||||
- Finds related implementations
|
||||
- Identifies patterns to follow
|
||||
- Locates integration points
|
||||
- Notes existing conventions
|
||||
|
||||
### Phase 3: Task Breakdown
|
||||
|
||||
Work is decomposed into clear, actionable tasks:
|
||||
- Each task takes 15-60 minutes (standard mode)
|
||||
- Clear completion criteria for each task
|
||||
- Dependencies mapped out
|
||||
- Tasks sized as S/M/L/XL
|
||||
|
||||
### Phase 4: Documentation
|
||||
|
||||
Finally, a comprehensive plan document is created:
|
||||
- Task list with phases
|
||||
- Files to create/modify
|
||||
- Risk assessment
|
||||
- Success criteria
|
||||
|
||||
## Planning Modes
|
||||
|
||||
### Standard Mode
|
||||
|
||||
Default planning with 15-60 minute tasks:
|
||||
|
||||
```bash
|
||||
/plan "implement user authentication"
|
||||
```
|
||||
|
||||
**Task sizes:**
|
||||
- **S**: < 30 minutes
|
||||
- **M**: 30-60 minutes
|
||||
- **L**: 1-2 hours
|
||||
- **XL**: 2-4 hours
|
||||
|
||||
### Detailed Mode
|
||||
|
||||
Superpowers-style planning with 2-5 minute tasks and exact code:
|
||||
|
||||
```bash
|
||||
/plan --detailed "implement user authentication"
|
||||
```
|
||||
|
||||
**Features:**
|
||||
- Bite-sized tasks (2-5 minutes each)
|
||||
- Exact file paths included
|
||||
- Complete code samples (not descriptions)
|
||||
- TDD steps per task (write test → verify fail → implement → verify pass → commit)
|
||||
- Expected command outputs specified
|
||||
|
||||
**When to use detailed mode:**
|
||||
- Complex features requiring precision
|
||||
- When you want automated execution with `/execute-plan`
|
||||
- Team members new to the codebase
|
||||
- When you want minimal decision-making during implementation
|
||||
|
||||
## Output Format
|
||||
|
||||
Plans include the following sections:
|
||||
|
||||
### Summary
|
||||
Brief overview of what will be built
|
||||
|
||||
### Scope
|
||||
- **In Scope**: What will be done
|
||||
- **Out of Scope**: What won't be done
|
||||
- **Assumptions**: Key assumptions made
|
||||
|
||||
### Tasks
|
||||
Organized into phases with dependencies:
|
||||
|
||||
| # | Task | Size | Depends On |
|
||||
|---|------|------|------------|
|
||||
| 1 | Create data model | M | - |
|
||||
| 2 | Set up database migration | S | 1 |
|
||||
| 3 | Add model tests | M | 1 |
|
||||
|
||||
### Files to Create/Modify
|
||||
Complete list of files that will be touched
|
||||
|
||||
### Dependencies
|
||||
External packages and internal prerequisites
|
||||
|
||||
### Risks
|
||||
Potential issues and mitigation strategies
|
||||
|
||||
### Success Criteria
|
||||
Checklist for determining completion
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--detailed` | Use 2-5 min tasks with exact code | `--detailed` |
|
||||
| `--mode=[mode]` | Use specific behavioral mode | `--mode=brainstorm` |
|
||||
| `--depth=[1-5]` | Planning thoroughness level | `--depth=4` |
|
||||
| `--format=[fmt]` | Output format (concise/detailed/json) | `--format=detailed` |
|
||||
| `--save=[path]` | Save plan to file | `--save=plans/auth.md` |
|
||||
| `--checkpoint` | Create checkpoint after planning | `--checkpoint` |
|
||||
|
||||
### Mode Recommendations
|
||||
|
||||
| Mode | Best For |
|
||||
|------|----------|
|
||||
| `default` | Standard planning |
|
||||
| `brainstorm` | Exploratory planning, multiple approaches |
|
||||
| `deep-research` | Complex features needing investigation |
|
||||
| `implementation` | Quick plans for clear tasks |
|
||||
|
||||
## Examples
|
||||
|
||||
### Basic Feature Planning
|
||||
|
||||
```bash
|
||||
/plan "add password reset functionality"
|
||||
```
|
||||
|
||||
Creates a standard plan with 15-60 minute tasks for implementing password reset.
|
||||
|
||||
### Detailed Planning for Execution
|
||||
|
||||
```bash
|
||||
/plan --detailed "implement OAuth2 authentication"
|
||||
```
|
||||
|
||||
Creates a detailed plan with 2-5 minute tasks, ready for automated execution with `/execute-plan`.
|
||||
|
||||
### Planning with Brainstorming Mode
|
||||
|
||||
```bash
|
||||
/plan --mode=brainstorm "redesign checkout flow"
|
||||
```
|
||||
|
||||
Uses brainstorming mode to explore multiple approaches before settling on a plan.
|
||||
|
||||
### Saving Plan to File
|
||||
|
||||
```bash
|
||||
/plan --save=plans/payment-integration.md "integrate Stripe payments"
|
||||
```
|
||||
|
||||
Creates plan and saves it to the specified file for later reference.
|
||||
|
||||
### Comprehensive Deep Planning
|
||||
|
||||
```bash
|
||||
/plan --depth=5 --save=plans/migration.md "migrate from MongoDB to PostgreSQL"
|
||||
```
|
||||
|
||||
Creates an exhaustive plan with thorough analysis for a complex migration.
|
||||
|
||||
## Workflow Integration
|
||||
|
||||
### Planning → Execution
|
||||
|
||||
1. Create detailed plan:
|
||||
```bash
|
||||
/plan --detailed "feature description"
|
||||
```
|
||||
|
||||
2. Execute plan with subagents:
|
||||
```bash
|
||||
/execute-plan path/to/plan.md
|
||||
```
|
||||
|
||||
### Design → Planning → Execution
|
||||
|
||||
1. Brainstorm design:
|
||||
```bash
|
||||
/brainstorm "feature concept"
|
||||
```
|
||||
|
||||
2. Create implementation plan:
|
||||
```bash
|
||||
/plan --detailed "feature from design"
|
||||
```
|
||||
|
||||
3. Execute with automation:
|
||||
```bash
|
||||
/execute-plan path/to/plan.md
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### When to Use Standard Mode
|
||||
- Quick features with clear requirements
|
||||
- Experienced developers familiar with codebase
|
||||
- Exploratory or research-heavy tasks
|
||||
- When you want flexibility during implementation
|
||||
|
||||
### When to Use Detailed Mode
|
||||
- Complex features requiring precision
|
||||
- When multiple developers will implement
|
||||
- Features requiring automated execution
|
||||
- When you want to minimize implementation decisions
|
||||
|
||||
### Tips for Better Plans
|
||||
1. **Be specific** in your task description
|
||||
2. **Include context** about existing implementations
|
||||
3. **Mention constraints** (performance, security, etc.)
|
||||
4. **State preferences** for approaches or technologies
|
||||
5. **Ask for comparisons** if uncertain about approach
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/brainstorm](/claudekit/commands/brainstorm) - Design features before planning implementation
|
||||
- [/execute-plan](/claudekit/commands/execute-plan) - Execute detailed plans with subagents
|
||||
- [/research](/claudekit/commands/research) - Research technologies before planning
|
||||
- [/tdd](/claudekit/commands/tdd) - Test-driven development workflow
|
||||
|
||||
## Customization
|
||||
|
||||
Plans can be customized via `CLAUDE.md`:
|
||||
- Task size definitions
|
||||
- Required plan sections
|
||||
- Estimation approach
|
||||
- Risk assessment criteria
|
||||
|
||||
See the [Configuration Guide](/claudekit/configuration) for details.
|
||||
@@ -1,343 +0,0 @@
|
||||
---
|
||||
title: /pr
|
||||
description: Create a well-documented pull request with proper description and checks
|
||||
---
|
||||
|
||||
# /pr
|
||||
|
||||
Create comprehensive pull requests with auto-generated descriptions, checklists, and proper formatting.
|
||||
|
||||
## Purpose
|
||||
|
||||
Generates pull requests that:
|
||||
- Include detailed change summaries
|
||||
- Provide test plans and checklists
|
||||
- Link to related issues
|
||||
- Follow your team's PR template
|
||||
- Are ready for reviewer attention
|
||||
|
||||
Use this when you've already committed changes and just need the PR (for full workflow, use `/ship`).
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/pr [title]
|
||||
```
|
||||
|
||||
**Auto-generate title from commits:**
|
||||
```bash
|
||||
/pr auto
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
| Argument | Description |
|
||||
|----------|-------------|
|
||||
| `[title]` | PR title in conventional commit format |
|
||||
| `auto` | Generate title from recent commits |
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Prepare Changes
|
||||
|
||||
The command first validates your branch is ready:
|
||||
|
||||
```bash
|
||||
git status
|
||||
git diff main...HEAD
|
||||
```
|
||||
|
||||
Analyzes:
|
||||
- All commits on your branch
|
||||
- Files changed
|
||||
- Lines added/removed
|
||||
- Potential conflicts
|
||||
|
||||
### Step 2: Verify Ready
|
||||
|
||||
Checks that your branch meets PR requirements:
|
||||
|
||||
**Required checks:**
|
||||
- [ ] All tests passing
|
||||
- [ ] Code has been reviewed (or self-reviewed)
|
||||
- [ ] No merge conflicts with base branch
|
||||
- [ ] Branch is pushed to remote
|
||||
|
||||
**If checks fail**, you'll get guidance on what to fix before creating the PR.
|
||||
|
||||
### Step 3: Create Pull Request
|
||||
|
||||
Uses GitHub CLI to create the PR:
|
||||
|
||||
```bash
|
||||
gh pr create \
|
||||
--title "type(scope): description" \
|
||||
--body "[generated body]"
|
||||
```
|
||||
|
||||
The PR body includes:
|
||||
- Summary of changes
|
||||
- Test plan
|
||||
- Screenshots (for UI changes)
|
||||
- Checklist
|
||||
- Related issues
|
||||
|
||||
## Examples
|
||||
|
||||
### Feature PR
|
||||
|
||||
**Create PR for new feature:**
|
||||
|
||||
```bash
|
||||
/pr "add OAuth2 authentication support"
|
||||
```
|
||||
|
||||
**Generated PR:**
|
||||
|
||||
**Title:** `feat(auth): add OAuth2 authentication support`
|
||||
|
||||
**Body:**
|
||||
```markdown
|
||||
## Summary
|
||||
- Implement Google OAuth2 provider
|
||||
- Implement GitHub OAuth2 provider
|
||||
- Add token refresh mechanism
|
||||
- Update user model for OAuth data
|
||||
- Add comprehensive test coverage
|
||||
|
||||
## Test Plan
|
||||
- [x] Unit tests for OAuth providers
|
||||
- [x] Integration tests for auth flow
|
||||
- [x] Manual testing with Google account
|
||||
- [x] Manual testing with GitHub account
|
||||
- [x] Token refresh tested
|
||||
|
||||
## Changes
|
||||
**Added:**
|
||||
- `src/auth/oauth/google.ts` - Google OAuth implementation
|
||||
- `src/auth/oauth/github.ts` - GitHub OAuth implementation
|
||||
- `tests/auth/oauth.test.ts` - OAuth test suite
|
||||
|
||||
**Modified:**
|
||||
- `src/models/user.ts` - Added OAuth fields
|
||||
- `src/auth/routes.ts` - Added OAuth routes
|
||||
|
||||
## Checklist
|
||||
- [x] Tests added/updated
|
||||
- [x] Documentation updated
|
||||
- [x] No breaking changes
|
||||
- [x] Follows code style guidelines
|
||||
|
||||
Closes #123
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
```
|
||||
|
||||
### Bug Fix PR
|
||||
|
||||
**Create PR for bug fix:**
|
||||
|
||||
```bash
|
||||
/pr "fix null pointer crash in user profile"
|
||||
```
|
||||
|
||||
**Generated PR:**
|
||||
|
||||
**Title:** `fix(api): handle null user in profile endpoint`
|
||||
|
||||
**Body:**
|
||||
```markdown
|
||||
## Summary
|
||||
- Fixed crash when accessing deleted user profiles
|
||||
- Added null check before user data access
|
||||
- Return proper 404 response for missing users
|
||||
- Added regression test
|
||||
|
||||
## Bug Details
|
||||
The profile endpoint crashed with a null pointer exception when
|
||||
attempting to access a user that had been deleted. This occurred
|
||||
because the endpoint didn't check if the user exists before
|
||||
accessing user properties.
|
||||
|
||||
## Test Plan
|
||||
- [x] Unit test for deleted user scenario
|
||||
- [x] Integration test for 404 response
|
||||
- [x] Manual testing with deleted user ID
|
||||
- [x] Verified fix doesn't affect existing functionality
|
||||
|
||||
## Changes
|
||||
**Modified:**
|
||||
- `src/api/profile.ts` - Added null check
|
||||
- `tests/api/profile.test.ts` - Added regression test
|
||||
|
||||
## Checklist
|
||||
- [x] Tests added/updated
|
||||
- [x] No breaking changes
|
||||
- [x] Follows code style guidelines
|
||||
|
||||
Fixes #456
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
```
|
||||
|
||||
### Auto-Generated PR
|
||||
|
||||
**Let the command create title from commits:**
|
||||
|
||||
```bash
|
||||
/pr auto
|
||||
```
|
||||
|
||||
Analyzes your commits and generates an appropriate title:
|
||||
|
||||
```
|
||||
feat(ui): add dark mode support
|
||||
refactor(ui): improve theme switching
|
||||
test(ui): add dark mode tests
|
||||
```
|
||||
|
||||
**Generated title:** `feat(ui): add dark mode support`
|
||||
|
||||
### Documentation PR
|
||||
|
||||
**Create PR for docs:**
|
||||
|
||||
```bash
|
||||
/pr "update API documentation"
|
||||
```
|
||||
|
||||
**Generated PR:**
|
||||
|
||||
**Title:** `docs(api): update API documentation`
|
||||
|
||||
**Body:**
|
||||
```markdown
|
||||
## Summary
|
||||
- Updated endpoint documentation
|
||||
- Added request/response examples
|
||||
- Fixed broken links
|
||||
- Added authentication section
|
||||
- Improved error documentation
|
||||
|
||||
## Changes
|
||||
**Modified:**
|
||||
- `docs/api.md` - Updated all sections
|
||||
- `README.md` - Fixed API links
|
||||
|
||||
## Checklist
|
||||
- [x] Documentation updated
|
||||
- [x] Examples tested
|
||||
- [x] Links verified
|
||||
- [x] No breaking changes
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
```
|
||||
|
||||
## PR Body Template
|
||||
|
||||
The generated PR follows this structure:
|
||||
|
||||
```markdown
|
||||
## Summary
|
||||
Brief overview of changes with bullet points
|
||||
|
||||
## [Conditional Sections]
|
||||
- **Bug Details** (for fixes)
|
||||
- **Feature Description** (for features)
|
||||
- **Breaking Changes** (if applicable)
|
||||
|
||||
## Test Plan
|
||||
- [ ] Unit tests
|
||||
- [ ] Integration tests
|
||||
- [ ] Manual testing
|
||||
- [ ] Specific scenarios tested
|
||||
|
||||
## Screenshots
|
||||
[For UI changes - automatically detected]
|
||||
|
||||
## Changes
|
||||
**Added:**
|
||||
- List of new files
|
||||
|
||||
**Modified:**
|
||||
- List of changed files
|
||||
|
||||
**Removed:**
|
||||
- List of deleted files
|
||||
|
||||
## Checklist
|
||||
- [ ] Tests added/updated
|
||||
- [ ] Documentation updated
|
||||
- [ ] No breaking changes
|
||||
- [ ] Follows code style
|
||||
|
||||
[Issue references]
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
After creating the PR, you'll see:
|
||||
|
||||
```markdown
|
||||
## Pull Request Created
|
||||
|
||||
**URL**: https://github.com/org/repo/pull/123
|
||||
**Title**: feat(auth): add OAuth support
|
||||
**Base**: main ← feature/oauth
|
||||
|
||||
### Changes
|
||||
- 5 files changed
|
||||
- +234 -12 lines
|
||||
|
||||
### Status
|
||||
✓ Ready for review
|
||||
✓ All checks passing
|
||||
✓ No conflicts
|
||||
|
||||
### Next Steps
|
||||
1. Request reviews from: @teammate1, @teammate2
|
||||
2. Address feedback
|
||||
3. Merge when approved
|
||||
```
|
||||
|
||||
## Pre-PR Validation
|
||||
|
||||
The command checks:
|
||||
|
||||
- [ ] **Branch is pushed** - Must exist on remote
|
||||
- [ ] **Tests passing** - All CI checks green
|
||||
- [ ] **No conflicts** - Clean merge with base branch
|
||||
- [ ] **Commits are valid** - No WIP or fixup commits
|
||||
- [ ] **Required files updated** - Changelog, docs, etc.
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--base=[branch]` | Target branch (default: main) | `/pr --base=develop "new feature"` |
|
||||
| `--draft` | Create as draft PR | `/pr --draft "work in progress"` |
|
||||
| `--reviewers=[users]` | Request specific reviewers | `/pr --reviewers=alice,bob "feature"` |
|
||||
| `--mode=[mode]` | Behavioral mode | `/pr --mode=token-efficient auto` |
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/ship](/claudekit/commands/ship/) - Full commit + PR workflow
|
||||
- [/commit](/claudekit/commands/commit/) - Create commits
|
||||
- [/review](/claudekit/commands/review/) - Review code before PR
|
||||
- [/changelog](/claudekit/commands/changelog/) - Generate changelog
|
||||
|
||||
## Tips
|
||||
|
||||
**Use 'auto' for multi-commit PRs**: When your branch has several related commits, let the command analyze them to generate the best title.
|
||||
|
||||
**Draft PRs for WIP**: Use `--draft` flag for work-in-progress PRs that aren't ready for review.
|
||||
|
||||
**Request reviewers**: Add `--reviewers` to automatically request reviews from specific team members.
|
||||
|
||||
**Link issues**: Reference issues in your title or use keywords like "Closes #123" to auto-link.
|
||||
|
||||
**Customize template**: Modify the PR template in `CLAUDE.md` under "PR Requirements".
|
||||
|
||||
**Screenshot detection**: For UI changes, the command will prompt you to add screenshots to the PR body.
|
||||
@@ -1,390 +0,0 @@
|
||||
---
|
||||
title: /refactor
|
||||
description: Improve code structure, readability, and performance without changing behavior
|
||||
---
|
||||
|
||||
# /refactor - Refactoring Command
|
||||
|
||||
## Purpose
|
||||
|
||||
Improve code structure, readability, or performance without changing external behavior. Applies proven refactoring patterns to make code more maintainable, testable, and efficient.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/refactor [file or function] [goal: clean | extract | simplify | optimize]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- `[file or function]` - Target code to refactor
|
||||
- `[goal]` - Optional refactoring objective:
|
||||
- `clean` - Remove dead code, improve naming
|
||||
- `extract` - Extract reusable functions/components
|
||||
- `simplify` - Reduce complexity and nesting
|
||||
- `optimize` - Improve performance
|
||||
|
||||
## How It Works
|
||||
|
||||
The `/refactor` command follows a safe, incremental approach:
|
||||
|
||||
### Step 1: Understand Current Code
|
||||
|
||||
1. **Read Thoroughly**
|
||||
- Analyzes what the code does
|
||||
- Identifies its purpose and responsibilities
|
||||
- Maps inputs, outputs, and side effects
|
||||
|
||||
2. **Note Existing Tests**
|
||||
- Finds test coverage for the code
|
||||
- Ensures tests exist before refactoring
|
||||
- If no tests exist, generates them first
|
||||
|
||||
3. **Identify Patterns**
|
||||
- Recognizes code smells
|
||||
- Finds refactoring opportunities
|
||||
- Notes dependencies and coupling
|
||||
|
||||
### Step 2: Plan Refactoring
|
||||
|
||||
1. **Identify Improvements**
|
||||
- Code smells to address
|
||||
- Patterns to apply
|
||||
- Metrics to improve
|
||||
|
||||
2. **Ensure Test Safety**
|
||||
- Verifies tests exist
|
||||
- Adds missing tests if needed
|
||||
- Ensures tests are comprehensive
|
||||
|
||||
3. **Plan Incremental Changes**
|
||||
- Breaks into small, safe steps
|
||||
- Orders changes by dependencies
|
||||
- Plans verification after each step
|
||||
|
||||
### Step 3: Execute Refactoring
|
||||
|
||||
1. **Make Small Changes**
|
||||
- One refactoring at a time
|
||||
- Maintains behavior at each step
|
||||
- Keeps code working continuously
|
||||
|
||||
2. **Run Tests After Each Change**
|
||||
```bash
|
||||
# Python
|
||||
pytest -v
|
||||
|
||||
# TypeScript
|
||||
pnpm test
|
||||
```
|
||||
|
||||
3. **Commit Incrementally**
|
||||
- Commits after each successful refactoring
|
||||
- Makes rollback easy if needed
|
||||
- Documents what changed and why
|
||||
|
||||
## Refactoring Types
|
||||
|
||||
### Extract Function/Method
|
||||
|
||||
**When**: Code duplication or long methods
|
||||
|
||||
```typescript
|
||||
// Before
|
||||
function processUser(user: User) {
|
||||
if (!user.email || !user.email.includes('@')) {
|
||||
throw new Error('Invalid email');
|
||||
}
|
||||
if (user.name.length < 2) {
|
||||
throw new Error('Name too short');
|
||||
}
|
||||
// ... more logic
|
||||
}
|
||||
|
||||
// After
|
||||
function processUser(user: User) {
|
||||
validateUser(user);
|
||||
// ... more logic
|
||||
}
|
||||
|
||||
function validateUser(user: User) {
|
||||
validateEmail(user.email);
|
||||
validateName(user.name);
|
||||
}
|
||||
|
||||
function validateEmail(email: string) {
|
||||
if (!email || !email.includes('@')) {
|
||||
throw new Error('Invalid email');
|
||||
}
|
||||
}
|
||||
|
||||
function validateName(name: string) {
|
||||
if (name.length < 2) {
|
||||
throw new Error('Name too short');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Simplify Conditionals
|
||||
|
||||
**When**: Complex nested if statements
|
||||
|
||||
```typescript
|
||||
// Before
|
||||
if (user) {
|
||||
if (user.isActive) {
|
||||
if (user.subscription) {
|
||||
if (user.subscription.isPaid) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
||||
// After
|
||||
return user?.isActive
|
||||
&& user?.subscription?.isPaid
|
||||
?? false;
|
||||
```
|
||||
|
||||
### Replace Magic Numbers
|
||||
|
||||
**When**: Unexplained numeric literals
|
||||
|
||||
```python
|
||||
# Before
|
||||
def calculate_discount(price):
|
||||
if price > 100:
|
||||
return price * 0.9
|
||||
return price
|
||||
|
||||
# After
|
||||
DISCOUNT_THRESHOLD = 100
|
||||
DISCOUNT_RATE = 0.1
|
||||
|
||||
def calculate_discount(price):
|
||||
if price > DISCOUNT_THRESHOLD:
|
||||
return price * (1 - DISCOUNT_RATE)
|
||||
return price
|
||||
```
|
||||
|
||||
### Improve Naming
|
||||
|
||||
**When**: Unclear variable/function names
|
||||
|
||||
```typescript
|
||||
// Before
|
||||
function calc(x: number, y: number): number {
|
||||
const z = x * y * 0.2;
|
||||
return z;
|
||||
}
|
||||
|
||||
// After
|
||||
function calculateTax(subtotal: number, quantity: number): number {
|
||||
const TAX_RATE = 0.2;
|
||||
const totalBeforeTax = subtotal * quantity;
|
||||
return totalBeforeTax * TAX_RATE;
|
||||
}
|
||||
```
|
||||
|
||||
### Remove Dead Code
|
||||
|
||||
**When**: Unused functions, commented code
|
||||
|
||||
```python
|
||||
# Before
|
||||
def old_function(): # Not called anywhere
|
||||
pass
|
||||
|
||||
def current_function():
|
||||
# result = old_way() # Old implementation
|
||||
result = new_way()
|
||||
return result
|
||||
|
||||
# After
|
||||
def current_function():
|
||||
result = new_way()
|
||||
return result
|
||||
```
|
||||
|
||||
### Extract Class/Module
|
||||
|
||||
**When**: Too many responsibilities in one class
|
||||
|
||||
```typescript
|
||||
// Before
|
||||
class User {
|
||||
name: string;
|
||||
email: string;
|
||||
|
||||
validateEmail() { /* ... */ }
|
||||
sendEmail(subject: string, body: string) { /* ... */ }
|
||||
formatEmailTemplate(template: string) { /* ... */ }
|
||||
}
|
||||
|
||||
// After
|
||||
class User {
|
||||
name: string;
|
||||
email: string;
|
||||
|
||||
validateEmail() { /* ... */ }
|
||||
}
|
||||
|
||||
class EmailService {
|
||||
sendEmail(to: string, subject: string, body: string) { /* ... */ }
|
||||
formatTemplate(template: string, data: any) { /* ... */ }
|
||||
}
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--goal=[goal]` | Refactoring objective | `--goal=simplify` |
|
||||
| `--safe` | Extra cautious, more test verification | `--safe` |
|
||||
| `--aggressive` | Larger refactoring steps | `--aggressive` |
|
||||
| `--format=[fmt]` | Output format (concise/detailed) | `--format=concise` |
|
||||
| `--test-first` | Generate tests before refactoring | `--test-first` |
|
||||
|
||||
### Goal Options
|
||||
|
||||
| Goal | Focus |
|
||||
|------|-------|
|
||||
| `clean` | Remove clutter, improve naming |
|
||||
| `extract` | Pull out reusable code |
|
||||
| `simplify` | Reduce complexity |
|
||||
| `optimize` | Improve performance |
|
||||
| `patterns` | Apply design patterns |
|
||||
|
||||
### Flag Examples
|
||||
|
||||
```bash
|
||||
# Simplify complex function
|
||||
/refactor --goal=simplify src/utils/validation.ts
|
||||
|
||||
# Extract with extra safety checks
|
||||
/refactor --safe --goal=extract src/services/user.ts
|
||||
|
||||
# Performance optimization
|
||||
/refactor --goal=optimize src/api/heavy-query.ts
|
||||
|
||||
# Clean up with tests first
|
||||
/refactor --test-first --goal=clean src/legacy/
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Simplify Complex Logic
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/refactor --goal=simplify src/services/auth.ts
|
||||
```
|
||||
|
||||
**Output:**
|
||||
```markdown
|
||||
## Refactoring Complete: src/services/auth.ts
|
||||
|
||||
### Changes Made
|
||||
1. Extracted `validateCredentials()` function
|
||||
2. Simplified nested conditionals using early returns
|
||||
3. Replaced magic numbers with named constants
|
||||
4. Improved variable names for clarity
|
||||
|
||||
### Before
|
||||
```typescript
|
||||
function login(email, pwd) {
|
||||
if (email) {
|
||||
if (pwd) {
|
||||
if (pwd.length >= 8) {
|
||||
const u = db.find(email);
|
||||
if (u) {
|
||||
if (bcrypt.compare(pwd, u.pwd)) {
|
||||
return generateToken(u);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new Error('Invalid');
|
||||
}
|
||||
```
|
||||
|
||||
### After
|
||||
```typescript
|
||||
const MIN_PASSWORD_LENGTH = 8;
|
||||
|
||||
function login(email: string, password: string): string {
|
||||
validateCredentials(email, password);
|
||||
|
||||
const user = db.findByEmail(email);
|
||||
if (!user) {
|
||||
throw new AuthError('Invalid credentials');
|
||||
}
|
||||
|
||||
const passwordMatches = bcrypt.compare(password, user.hashedPassword);
|
||||
if (!passwordMatches) {
|
||||
throw new AuthError('Invalid credentials');
|
||||
}
|
||||
|
||||
return generateToken(user);
|
||||
}
|
||||
|
||||
function validateCredentials(email: string, password: string) {
|
||||
if (!email) {
|
||||
throw new ValidationError('Email required');
|
||||
}
|
||||
if (!password || password.length < MIN_PASSWORD_LENGTH) {
|
||||
throw new ValidationError(`Password must be at least ${MIN_PASSWORD_LENGTH} characters`);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Metrics
|
||||
- Cyclomatic complexity: 8 → 3
|
||||
- Function length: 18 lines → 12 lines
|
||||
- Nesting depth: 5 → 2
|
||||
|
||||
### Tests
|
||||
- All 12 existing tests passing
|
||||
- No behavior changes
|
||||
```
|
||||
|
||||
### Extract Reusable Code
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/refactor --goal=extract src/components/UserList.tsx
|
||||
```
|
||||
|
||||
**Output:**
|
||||
1. Identifies repeated patterns
|
||||
2. Extracts into reusable hooks/components
|
||||
3. Updates all usage sites
|
||||
4. Verifies tests still pass
|
||||
|
||||
## Deliverables
|
||||
|
||||
After running `/refactor`, you receive:
|
||||
|
||||
1. **Refactored Code** - Improved implementation
|
||||
2. **Before/After Comparison** - Clear visual diff
|
||||
3. **Metrics** - Complexity, length, nesting improvements
|
||||
4. **Test Results** - Confirmation of unchanged behavior
|
||||
5. **Commit Message** - Describing the refactoring
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Always Have Tests First** - Never refactor untested code
|
||||
2. **Small Steps** - Make one change at a time
|
||||
3. **Run Tests Frequently** - After each change
|
||||
4. **Commit Often** - Easy rollback if something breaks
|
||||
5. **Preserve Behavior** - Never change what the code does, only how
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/test](/claudekit/commands/test) - Generate tests before refactoring
|
||||
- [/review](/claudekit/commands/review) - Review code quality
|
||||
- [/feature](/claudekit/commands/feature) - Build features with good structure
|
||||
- [/fix](/claudekit/commands/fix) - Fix bugs, then refactor
|
||||
@@ -1,327 +0,0 @@
|
||||
---
|
||||
title: /research
|
||||
description: Research technologies, libraries, or approaches with comprehensive analysis
|
||||
---
|
||||
|
||||
# /research
|
||||
|
||||
Research a technology, library, or approach with comprehensive analysis, comparisons, and recommendations.
|
||||
|
||||
## Purpose
|
||||
|
||||
The `/research` command helps you make informed technology decisions by gathering information, analyzing trade-offs, comparing alternatives, and providing clear recommendations.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/research [topic or technology]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **topic**: The technology, library, pattern, or approach you want to research
|
||||
|
||||
## How It Works
|
||||
|
||||
### 1. Gather Information
|
||||
|
||||
The assistant collects information from:
|
||||
- Official documentation
|
||||
- Community resources and discussions
|
||||
- Best practices and patterns
|
||||
- Known issues and gotchas
|
||||
|
||||
### 2. Analyze
|
||||
|
||||
Thorough analysis includes:
|
||||
- Pros and cons
|
||||
- Performance characteristics
|
||||
- Learning curve and complexity
|
||||
- Ecosystem and community support
|
||||
- Maintenance and longevity
|
||||
- Best practices
|
||||
|
||||
### 3. Recommend
|
||||
|
||||
Clear recommendations with:
|
||||
- Summary of findings
|
||||
- Specific recommendation
|
||||
- Rationale for recommendation
|
||||
- Next steps for implementation
|
||||
- Alternatives if recommendation doesn't fit
|
||||
|
||||
## Output Format
|
||||
|
||||
Research results are presented in a structured format:
|
||||
|
||||
```markdown
|
||||
## Research: [Topic]
|
||||
|
||||
### Summary
|
||||
[High-level overview of the technology]
|
||||
|
||||
### Pros
|
||||
- [Advantage 1]
|
||||
- [Advantage 2]
|
||||
- [Advantage 3]
|
||||
|
||||
### Cons
|
||||
- [Limitation 1]
|
||||
- [Limitation 2]
|
||||
|
||||
### Use Cases
|
||||
- Best for: [Scenarios]
|
||||
- Avoid when: [Scenarios]
|
||||
|
||||
### Alternatives
|
||||
[Comparison table with alternatives]
|
||||
|
||||
### Best Practices
|
||||
- [Practice 1]
|
||||
- [Practice 2]
|
||||
|
||||
### Recommendation
|
||||
[Clear recommendation with rationale]
|
||||
|
||||
### Next Steps
|
||||
1. [Action item 1]
|
||||
2. [Action item 2]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--mode=[mode]` | Use specific behavioral mode | `--mode=deep-research` |
|
||||
| `--depth=[1-5]` | Research thoroughness level | `--depth=5` |
|
||||
| `--format=[fmt]` | Output format (concise/detailed/json) | `--format=detailed` |
|
||||
| `--save=[path]` | Save research to file | `--save=docs/research.md` |
|
||||
| `--compare` | Focus on comparing alternatives | `--compare` |
|
||||
| `--sequential` | Use sequential thinking methodology | `--sequential` |
|
||||
|
||||
### Depth Levels
|
||||
|
||||
| Level | Behavior | Best For |
|
||||
|-------|----------|----------|
|
||||
| 1 | Quick overview, key points only | Quick validation |
|
||||
| 2 | Standard analysis | General research |
|
||||
| 3 | Thorough with examples | Technology evaluation |
|
||||
| 4 | Comprehensive with trade-offs | Important decisions |
|
||||
| 5 | Exhaustive with citations | Critical architecture choices |
|
||||
|
||||
## Examples
|
||||
|
||||
### Basic Technology Research
|
||||
|
||||
```bash
|
||||
/research "Redis for session storage"
|
||||
```
|
||||
|
||||
Standard research on using Redis for sessions.
|
||||
|
||||
### Deep Technology Comparison
|
||||
|
||||
```bash
|
||||
/research --compare "React vs Vue vs Svelte"
|
||||
```
|
||||
|
||||
Comprehensive comparison of frontend frameworks with trade-off analysis.
|
||||
|
||||
### Thorough Investigation
|
||||
|
||||
```bash
|
||||
/research --depth=5 "authentication libraries for Node.js"
|
||||
```
|
||||
|
||||
Exhaustive research with detailed analysis and citations.
|
||||
|
||||
### Sequential Problem Solving
|
||||
|
||||
```bash
|
||||
/research --sequential "root cause of memory leak"
|
||||
```
|
||||
|
||||
Uses step-by-step sequential thinking for complex debugging.
|
||||
|
||||
### Save Research Results
|
||||
|
||||
```bash
|
||||
/research --save=docs/orm-research.md "TypeORM vs Prisma vs Drizzle"
|
||||
```
|
||||
|
||||
Researches ORM options and saves results to file.
|
||||
|
||||
### Quick Overview
|
||||
|
||||
```bash
|
||||
/research --depth=1 "GraphQL subscriptions"
|
||||
```
|
||||
|
||||
Quick overview for validation without deep analysis.
|
||||
|
||||
### Deep Research Mode
|
||||
|
||||
```bash
|
||||
/research --mode=deep-research "distributed tracing approaches"
|
||||
```
|
||||
|
||||
Uses deep-research mode for thorough analysis with citations.
|
||||
|
||||
## Research Types
|
||||
|
||||
### Technology Selection
|
||||
|
||||
Compare libraries, frameworks, or tools:
|
||||
```bash
|
||||
/research --compare "state management libraries for React"
|
||||
```
|
||||
|
||||
### Pattern Exploration
|
||||
|
||||
Research design patterns and architectures:
|
||||
```bash
|
||||
/research "event sourcing patterns"
|
||||
```
|
||||
|
||||
### Best Practices
|
||||
|
||||
Investigate recommended approaches:
|
||||
```bash
|
||||
/research "API versioning strategies"
|
||||
```
|
||||
|
||||
### Problem Investigation
|
||||
|
||||
Debug or understand complex issues:
|
||||
```bash
|
||||
/research --sequential "solving N+1 query problems"
|
||||
```
|
||||
|
||||
### Integration Research
|
||||
|
||||
Research how to integrate technologies:
|
||||
```bash
|
||||
/research "integrating Next.js with Strapi CMS"
|
||||
```
|
||||
|
||||
## Workflow Integration
|
||||
|
||||
### Research → Brainstorm → Plan
|
||||
|
||||
1. **Research options:**
|
||||
```bash
|
||||
/research --compare "authentication approaches"
|
||||
```
|
||||
|
||||
2. **Design solution:**
|
||||
```bash
|
||||
/brainstorm "authentication system design"
|
||||
```
|
||||
|
||||
3. **Plan implementation:**
|
||||
```bash
|
||||
/plan --detailed "implement chosen auth approach"
|
||||
```
|
||||
|
||||
### Research → Direct Implementation
|
||||
|
||||
For simple integrations:
|
||||
```bash
|
||||
# Research the library
|
||||
/research "Stripe payment integration"
|
||||
|
||||
# Implement directly
|
||||
/feature "integrate Stripe payments"
|
||||
```
|
||||
|
||||
### Pre-Planning Research
|
||||
|
||||
Before creating detailed plans:
|
||||
```bash
|
||||
# Research unfamiliar technology
|
||||
/research --depth=4 "WebSocket scaling strategies"
|
||||
|
||||
# Plan with research insights
|
||||
/plan "implement scalable WebSocket server"
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Be Specific
|
||||
|
||||
```bash
|
||||
# Too vague
|
||||
/research "databases"
|
||||
|
||||
# Better
|
||||
/research "time-series databases for IoT data"
|
||||
|
||||
# Even better
|
||||
/research --compare "InfluxDB vs TimescaleDB vs QuestDB for IoT sensor data"
|
||||
```
|
||||
|
||||
### Include Context
|
||||
|
||||
```bash
|
||||
/research "caching strategies for a high-traffic API with 100k+ requests/minute"
|
||||
```
|
||||
|
||||
### State Constraints
|
||||
|
||||
```bash
|
||||
/research "frontend frameworks compatible with SSR and supporting TypeScript"
|
||||
```
|
||||
|
||||
### Save Important Research
|
||||
|
||||
```bash
|
||||
/research --save=docs/decisions/cache-strategy.md --depth=5 "caching architecture"
|
||||
```
|
||||
|
||||
### Use Appropriate Depth
|
||||
|
||||
- **Depth 1-2**: Validation, quick checks
|
||||
- **Depth 3**: Standard technology evaluation
|
||||
- **Depth 4-5**: Critical architecture decisions
|
||||
|
||||
## When to Use
|
||||
|
||||
**Good use cases:**
|
||||
- Evaluating technology options
|
||||
- Understanding new libraries or frameworks
|
||||
- Investigating architectural patterns
|
||||
- Comparing competing solutions
|
||||
- Debugging complex issues
|
||||
- Learning best practices
|
||||
|
||||
**Less useful for:**
|
||||
- Technologies you're already familiar with
|
||||
- Simple implementation questions
|
||||
- Project-specific code (use `/review` instead)
|
||||
|
||||
## Tips for Better Research
|
||||
|
||||
1. **Be specific** about your use case and constraints
|
||||
2. **Include scale** if performance matters (users, requests, data size)
|
||||
3. **Mention existing stack** for compatibility analysis
|
||||
4. **State priorities** (speed vs reliability vs cost)
|
||||
5. **Ask for comparisons** when evaluating options
|
||||
6. **Use --sequential** for complex debugging or investigations
|
||||
7. **Save research** for future reference and team sharing
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/brainstorm](/claudekit/commands/brainstorm) - Design solutions after research
|
||||
- [/plan](/claudekit/commands/plan) - Plan implementation after research
|
||||
- [/review](/claudekit/commands/review) - Review existing code or implementations
|
||||
- [/compare](/claudekit/commands/compare) - Side-by-side comparison (alternative)
|
||||
|
||||
## Customization
|
||||
|
||||
Research behavior can be customized via `CLAUDE.md`:
|
||||
- Default depth level
|
||||
- Output format preferences
|
||||
- Comparison criteria
|
||||
- Citation requirements
|
||||
|
||||
See the [Configuration Guide](/claudekit/configuration) for details.
|
||||
@@ -1,354 +0,0 @@
|
||||
---
|
||||
title: /review
|
||||
description: Comprehensive code review with focus on quality, security, performance, and maintainability
|
||||
---
|
||||
|
||||
# /review - Code Review Command
|
||||
|
||||
## Purpose
|
||||
|
||||
Comprehensive code review that analyzes quality, security, performance, and maintainability. Acts as an automated code reviewer that checks for issues across multiple dimensions before code reaches production.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/review [file path | 'staged' | 'pr' | PR number]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- `[file path]` - Review specific file(s), supports glob patterns
|
||||
- `staged` - Review all staged changes (`git diff --staged`)
|
||||
- `pr` - Review current branch changes vs main
|
||||
- `[PR number]` - Review specific pull request from GitHub
|
||||
|
||||
## How It Works
|
||||
|
||||
The `/review` command executes a comprehensive 5-phase review process:
|
||||
|
||||
### Phase 1: Identify Review Scope
|
||||
|
||||
1. **Determine What to Review**
|
||||
- Single file: Reads the specified file
|
||||
- `staged`: Gets staged changes with `git diff --staged`
|
||||
- `pr`: Gets branch diff with `git diff main...HEAD`
|
||||
- PR number: Fetches PR details with `gh pr view`
|
||||
|
||||
2. **Gather Context**
|
||||
- Understands the purpose of changes
|
||||
- Checks related tests
|
||||
- Reviews CLAUDE.md for project standards
|
||||
|
||||
### Phase 2: Code Quality Review
|
||||
|
||||
Checks each file for:
|
||||
|
||||
1. **Correctness**
|
||||
- Logic errors and bugs
|
||||
- Edge case handling
|
||||
- Null/undefined safety
|
||||
- Type correctness
|
||||
|
||||
2. **Clarity**
|
||||
- Clear naming (variables, functions, classes)
|
||||
- Readable structure
|
||||
- Appropriate comments
|
||||
- Self-documenting code
|
||||
|
||||
3. **Consistency**
|
||||
- Follows project conventions
|
||||
- Matches existing patterns
|
||||
- Style guide compliance
|
||||
|
||||
4. **Complexity**
|
||||
- Function length (prefer <30 lines)
|
||||
- Cyclomatic complexity
|
||||
- Nesting depth
|
||||
|
||||
### Phase 3: Security Review
|
||||
|
||||
Checks for security issues:
|
||||
|
||||
1. **Input Validation**
|
||||
- User input sanitization
|
||||
- Type validation
|
||||
- Size/length limits
|
||||
|
||||
2. **Authentication/Authorization**
|
||||
- Proper auth checks
|
||||
- Role-based access control
|
||||
- Session management
|
||||
|
||||
3. **Data Protection**
|
||||
- Sensitive data handling
|
||||
- Encryption where needed
|
||||
- PII protection
|
||||
|
||||
4. **Injection Prevention**
|
||||
- SQL injection
|
||||
- XSS vulnerabilities
|
||||
- Command injection
|
||||
|
||||
5. **Secrets**
|
||||
- No hardcoded credentials
|
||||
- No API keys in code
|
||||
- Proper env var usage
|
||||
|
||||
### Phase 4: Performance Review
|
||||
|
||||
Checks for performance issues:
|
||||
|
||||
1. **Algorithmic Efficiency**
|
||||
- Time complexity
|
||||
- Unnecessary loops
|
||||
- Redundant operations
|
||||
|
||||
2. **Memory Usage**
|
||||
- Large object creation
|
||||
- Memory leaks
|
||||
- Unbounded caches
|
||||
|
||||
3. **Database**
|
||||
- N+1 queries
|
||||
- Missing indexes
|
||||
- Large result sets
|
||||
|
||||
4. **Async Operations**
|
||||
- Proper async/await
|
||||
- Parallel where possible
|
||||
- Timeout handling
|
||||
|
||||
### Phase 5: Maintainability Review
|
||||
|
||||
Checks for maintainability:
|
||||
|
||||
1. **SOLID Principles**
|
||||
- Single responsibility
|
||||
- Open/closed
|
||||
- Dependency injection
|
||||
|
||||
2. **DRY**
|
||||
- Code duplication
|
||||
- Opportunity for reuse
|
||||
|
||||
3. **Testing**
|
||||
- Test coverage
|
||||
- Test quality
|
||||
- Edge case tests
|
||||
|
||||
4. **Documentation**
|
||||
- API documentation
|
||||
- Complex logic explanation
|
||||
- Usage examples
|
||||
|
||||
## Review Output Format
|
||||
|
||||
```markdown
|
||||
## Code Review: src/api/users.ts
|
||||
|
||||
**Reviewed**: 1 file, 142 lines
|
||||
**Verdict**: Request Changes
|
||||
|
||||
---
|
||||
|
||||
### Critical Issues (Must Fix)
|
||||
|
||||
#### 1. [Security] SQL Injection Risk
|
||||
**File**: `src/api/users.ts:42`
|
||||
**Severity**: Critical
|
||||
|
||||
```typescript
|
||||
// Current code
|
||||
const query = `SELECT * FROM users WHERE id = ${userId}`;
|
||||
```
|
||||
|
||||
**Issue**: User input directly interpolated into SQL query.
|
||||
|
||||
**Fix**:
|
||||
```typescript
|
||||
const query = 'SELECT * FROM users WHERE id = $1';
|
||||
const result = await db.query(query, [userId]);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Recommendations (Should Fix)
|
||||
|
||||
#### 1. Missing Error Handling
|
||||
**File**: `src/services/auth.ts:78`
|
||||
|
||||
```typescript
|
||||
// Current
|
||||
const user = await db.findUser(email);
|
||||
return user.password; // May throw if user is null
|
||||
```
|
||||
|
||||
**Suggestion**:
|
||||
```typescript
|
||||
const user = await db.findUser(email);
|
||||
if (!user) {
|
||||
throw new NotFoundError('User not found');
|
||||
}
|
||||
return user.password;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Suggestions (Nice to Have)
|
||||
|
||||
1. Consider extracting the validation logic in `src/utils/validate.ts:23` into a separate function for reusability.
|
||||
|
||||
2. The constant `MAX_RETRIES` in `src/api/client.ts` could be moved to configuration.
|
||||
|
||||
---
|
||||
|
||||
### What's Good
|
||||
|
||||
- Clean separation of concerns between controller and service layers
|
||||
- Comprehensive error handling in the authentication flow
|
||||
- Good test coverage for edge cases in `auth.test.ts`
|
||||
|
||||
---
|
||||
|
||||
### Summary
|
||||
|
||||
Found **1 critical issue** (security), **2 recommendations**, and **2 suggestions**.
|
||||
|
||||
**Priority Actions**:
|
||||
1. Fix SQL injection vulnerability immediately
|
||||
2. Add null check for user lookup
|
||||
|
||||
**Ready for merge**: No - Critical issues must be addressed first
|
||||
```
|
||||
|
||||
## Review Checklist
|
||||
|
||||
### Security
|
||||
- [ ] No hardcoded secrets
|
||||
- [ ] Input validation present
|
||||
- [ ] Output encoding for rendered content
|
||||
- [ ] SQL parameterization
|
||||
- [ ] Proper auth checks
|
||||
- [ ] No eval() or dynamic code execution
|
||||
|
||||
### Quality
|
||||
- [ ] Clear naming conventions
|
||||
- [ ] Functions are focused (single responsibility)
|
||||
- [ ] Error handling is complete
|
||||
- [ ] No commented-out code
|
||||
- [ ] No debug statements left
|
||||
|
||||
### Testing
|
||||
- [ ] New code has tests
|
||||
- [ ] Edge cases covered
|
||||
- [ ] Tests are deterministic
|
||||
|
||||
### Documentation
|
||||
- [ ] Public APIs documented
|
||||
- [ ] Complex logic explained
|
||||
- [ ] Breaking changes noted
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--mode=[mode]` | Use specific behavioral mode | `--mode=review` |
|
||||
| `--persona=[type]` | Apply persona expertise | `--persona=security` |
|
||||
| `--depth=[1-5]` | Review thoroughness level (1=quick, 5=exhaustive) | `--depth=5` |
|
||||
| `--format=[fmt]` | Output format (concise/detailed/json) | `--format=detailed` |
|
||||
| `--focus=[area]` | Focus on specific area | `--focus=performance` |
|
||||
| `--save` | Save review to file | `--save` |
|
||||
|
||||
### Persona Options
|
||||
|
||||
| Persona | Focus Area |
|
||||
|---------|------------|
|
||||
| `security` | Vulnerabilities, auth, data protection |
|
||||
| `performance` | Efficiency, queries, caching |
|
||||
| `architecture` | Patterns, coupling, SOLID |
|
||||
| `testing` | Coverage, test quality |
|
||||
| `accessibility` | A11y compliance |
|
||||
|
||||
### Focus Areas
|
||||
|
||||
| Focus | Checks |
|
||||
|-------|--------|
|
||||
| `security` | OWASP top 10, auth, input validation |
|
||||
| `performance` | N+1 queries, complexity, memory |
|
||||
| `quality` | Readability, maintainability |
|
||||
| `testing` | Coverage, test patterns |
|
||||
|
||||
### Flag Examples
|
||||
|
||||
```bash
|
||||
# Security-focused review of auth code
|
||||
/review --persona=security src/auth/
|
||||
|
||||
# Thorough review of staged changes
|
||||
/review --depth=5 --format=detailed staged
|
||||
|
||||
# Performance-focused review
|
||||
/review --focus=performance src/services/heavy-computation.ts
|
||||
|
||||
# Deep review with saved report
|
||||
/review --mode=deep-research --save pr
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Review Staged Changes
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/review staged
|
||||
```
|
||||
|
||||
**Output:**
|
||||
Complete review of all staged changes with:
|
||||
- Security vulnerability scan
|
||||
- Code quality assessment
|
||||
- Performance analysis
|
||||
- Actionable feedback organized by severity
|
||||
|
||||
### Review Pull Request
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/review pr #142
|
||||
```
|
||||
|
||||
**Output:**
|
||||
- Fetches PR from GitHub
|
||||
- Reviews all changed files
|
||||
- Categorizes issues by severity
|
||||
- Provides approval recommendation
|
||||
|
||||
### Security-Focused Review
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/review --persona=security --depth=5 src/api/
|
||||
```
|
||||
|
||||
**Output:**
|
||||
- Deep security analysis
|
||||
- OWASP top 10 checks
|
||||
- Auth/authorization review
|
||||
- Input validation verification
|
||||
|
||||
## Deliverables
|
||||
|
||||
After running `/review`, you receive:
|
||||
|
||||
1. **Issue List** - Organized by severity (Critical, Recommendations, Suggestions)
|
||||
2. **Code Examples** - Before/after code snippets for fixes
|
||||
3. **Checklist Results** - Security, quality, testing, documentation
|
||||
4. **Verdict** - Approve, Request Changes, or Needs Discussion
|
||||
5. **Action Items** - Prioritized list of required fixes
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/fix](/claudekit/commands/fix) - Fix identified issues
|
||||
- [/refactor](/claudekit/commands/refactor) - Address code quality suggestions
|
||||
- [/test](/claudekit/commands/test) - Add missing tests
|
||||
- [/feature](/claudekit/commands/feature) - Complete feature workflow with review
|
||||
@@ -1,316 +0,0 @@
|
||||
---
|
||||
title: /security-scan
|
||||
description: Scan code and dependencies for security vulnerabilities
|
||||
---
|
||||
|
||||
# /security-scan
|
||||
|
||||
## Purpose
|
||||
|
||||
Scan code and dependencies for security vulnerabilities. Performs comprehensive security analysis including dependency audits, code pattern scanning, and secret detection.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/security-scan [scope]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **scope** (optional): What to scan
|
||||
- `deps` - Dependency vulnerabilities only
|
||||
- `code` - Code patterns and vulnerabilities
|
||||
- `secrets` - Hardcoded secrets and credentials
|
||||
- `all` - Comprehensive scan (default)
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Dependency Scan
|
||||
|
||||
Check for known vulnerabilities in dependencies:
|
||||
|
||||
```bash
|
||||
# Node.js projects
|
||||
npm audit
|
||||
|
||||
# Python projects
|
||||
pip-audit
|
||||
```
|
||||
|
||||
Identifies:
|
||||
- Outdated packages with security issues
|
||||
- Known CVEs in dependencies
|
||||
- Severity levels (Critical, High, Medium, Low)
|
||||
- Available fixes and upgrades
|
||||
|
||||
### Step 2: Code Scan
|
||||
|
||||
Analyze code for security vulnerabilities:
|
||||
|
||||
**Patterns checked:**
|
||||
- SQL injection vulnerabilities
|
||||
- XSS (Cross-Site Scripting) risks
|
||||
- Command injection
|
||||
- Path traversal
|
||||
- Insecure deserialization
|
||||
- Unsafe eval() usage
|
||||
- Weak cryptography
|
||||
|
||||
### Step 3: Secret Detection
|
||||
|
||||
Scan for exposed secrets:
|
||||
|
||||
**Detected items:**
|
||||
- API keys
|
||||
- Passwords
|
||||
- Tokens and credentials
|
||||
- Private keys
|
||||
- Database connection strings
|
||||
- AWS/cloud credentials
|
||||
|
||||
## Output
|
||||
|
||||
```markdown
|
||||
## Security Scan Results
|
||||
|
||||
### Summary
|
||||
|
||||
| Category | Critical | High | Medium | Low | Total |
|
||||
|----------|----------|------|--------|-----|-------|
|
||||
| Dependencies | 0 | 2 | 5 | 8 | 15 |
|
||||
| Code Vulnerabilities | 0 | 1 | 3 | 2 | 6 |
|
||||
| Exposed Secrets | 0 | 0 | 0 | 0 | 0 |
|
||||
| **Total** | **0** | **3** | **8** | **10** | **21** |
|
||||
|
||||
### Critical Issues
|
||||
|
||||
None found ✅
|
||||
|
||||
### High Severity Issues (3)
|
||||
|
||||
#### 1. SQL Injection Risk
|
||||
**File:** `src/api/users.ts:45`
|
||||
**Severity:** High
|
||||
**Issue:** Unsanitized user input in SQL query
|
||||
|
||||
```typescript
|
||||
// Vulnerable code
|
||||
const query = `SELECT * FROM users WHERE id = ${userId}`;
|
||||
```
|
||||
|
||||
**Recommendation:**
|
||||
```typescript
|
||||
// Use parameterized queries
|
||||
const query = 'SELECT * FROM users WHERE id = ?';
|
||||
const result = await db.query(query, [userId]);
|
||||
```
|
||||
|
||||
#### 2. Outdated Dependency: express
|
||||
**Package:** `express@4.17.1`
|
||||
**Severity:** High
|
||||
**CVE:** CVE-2022-24999
|
||||
**Issue:** Denial of Service vulnerability
|
||||
|
||||
**Recommendation:**
|
||||
```bash
|
||||
npm install express@4.18.2
|
||||
```
|
||||
|
||||
#### 3. Command Injection Risk
|
||||
**File:** `src/utils/file-processor.ts:78`
|
||||
**Severity:** High
|
||||
**Issue:** Unsanitized input to shell command
|
||||
|
||||
```typescript
|
||||
// Vulnerable code
|
||||
exec(`convert ${filename} output.pdf`);
|
||||
```
|
||||
|
||||
**Recommendation:**
|
||||
```typescript
|
||||
// Use safe alternatives
|
||||
import { execFile } from 'child_process';
|
||||
execFile('convert', [filename, 'output.pdf']);
|
||||
```
|
||||
|
||||
### Medium Severity Issues (8)
|
||||
|
||||
#### XSS Risk in Template
|
||||
**File:** `src/views/profile.tsx:23`
|
||||
**Severity:** Medium
|
||||
|
||||
```typescript
|
||||
// Vulnerable
|
||||
<div dangerouslySetInnerHTML={{__html: userBio}} />
|
||||
|
||||
// Safe
|
||||
<div>{sanitize(userBio)}</div>
|
||||
```
|
||||
|
||||
#### Weak Password Hashing
|
||||
**File:** `src/auth/password.ts:12`
|
||||
**Severity:** Medium
|
||||
|
||||
```typescript
|
||||
// Weak
|
||||
crypto.createHash('md5').update(password).digest('hex');
|
||||
|
||||
// Strong
|
||||
import bcrypt from 'bcrypt';
|
||||
await bcrypt.hash(password, 10);
|
||||
```
|
||||
|
||||
[... additional findings ...]
|
||||
|
||||
### Dependencies Requiring Updates
|
||||
|
||||
| Package | Current | Latest | Severity |
|
||||
|---------|---------|--------|----------|
|
||||
| express | 4.17.1 | 4.18.2 | High |
|
||||
| lodash | 4.17.19 | 4.17.21 | Medium |
|
||||
| axios | 0.21.1 | 1.6.0 | Medium |
|
||||
|
||||
### Remediation Steps
|
||||
|
||||
#### Immediate Actions (Critical/High)
|
||||
1. ✅ No critical issues
|
||||
2. 🔧 Fix SQL injection in `src/api/users.ts`
|
||||
3. 🔧 Fix command injection in `src/utils/file-processor.ts`
|
||||
4. 📦 Update express to 4.18.2
|
||||
|
||||
#### Short-term Actions (Medium)
|
||||
1. Implement input sanitization for XSS prevention
|
||||
2. Upgrade password hashing to bcrypt
|
||||
3. Update medium-severity dependencies
|
||||
|
||||
#### Long-term Improvements
|
||||
1. Implement automated security scanning in CI/CD
|
||||
2. Add security headers middleware
|
||||
3. Set up dependency update automation
|
||||
4. Conduct security code review training
|
||||
|
||||
### Best Practices Violations
|
||||
|
||||
- ❌ Secrets in environment variables (not .env)
|
||||
- ❌ Missing rate limiting on public endpoints
|
||||
- ❌ No input validation middleware
|
||||
- ❌ Missing security headers
|
||||
|
||||
### Security Score: 72/100
|
||||
|
||||
**Category Scores:**
|
||||
- Dependencies: 65/100
|
||||
- Code Security: 78/100
|
||||
- Secret Management: 100/100
|
||||
- Best Practices: 60/100
|
||||
```
|
||||
|
||||
## Scan Scopes
|
||||
|
||||
### Dependencies Only
|
||||
```bash
|
||||
/security-scan deps
|
||||
```
|
||||
Fast scan of package vulnerabilities
|
||||
|
||||
### Code Only
|
||||
```bash
|
||||
/security-scan code
|
||||
```
|
||||
Deep code analysis for vulnerability patterns
|
||||
|
||||
### Secrets Only
|
||||
```bash
|
||||
/security-scan secrets
|
||||
```
|
||||
Check for exposed credentials
|
||||
|
||||
### Comprehensive
|
||||
```bash
|
||||
/security-scan all
|
||||
```
|
||||
Full security audit (recommended)
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Full security scan
|
||||
/security-scan
|
||||
|
||||
# Only check dependencies
|
||||
/security-scan deps
|
||||
|
||||
# Code vulnerabilities only
|
||||
/security-scan code
|
||||
|
||||
# Find exposed secrets
|
||||
/security-scan secrets
|
||||
|
||||
# Security-focused review
|
||||
/review --persona=security src/auth/
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--fix` | Auto-fix issues where possible |
|
||||
| `--report=[path]` | Save detailed report to file |
|
||||
| `--exclude=[pattern]` | Exclude files/patterns |
|
||||
| `--strict` | Fail on any medium+ severity |
|
||||
|
||||
## Common Vulnerabilities
|
||||
|
||||
### SQL Injection
|
||||
```typescript
|
||||
// Bad
|
||||
const query = `SELECT * FROM users WHERE email = '${email}'`;
|
||||
|
||||
// Good
|
||||
const query = 'SELECT * FROM users WHERE email = ?';
|
||||
db.query(query, [email]);
|
||||
```
|
||||
|
||||
### XSS (Cross-Site Scripting)
|
||||
```typescript
|
||||
// Bad
|
||||
<div dangerouslySetInnerHTML={{__html: userContent}} />
|
||||
|
||||
// Good
|
||||
import DOMPurify from 'dompurify';
|
||||
<div>{DOMPurify.sanitize(userContent)}</div>
|
||||
```
|
||||
|
||||
### Command Injection
|
||||
```typescript
|
||||
// Bad
|
||||
exec(`ping ${userInput}`);
|
||||
|
||||
// Good
|
||||
execFile('ping', [userInput]);
|
||||
```
|
||||
|
||||
### Hardcoded Secrets
|
||||
```typescript
|
||||
// Bad
|
||||
const apiKey = 'sk_live_abc123xyz';
|
||||
|
||||
// Good
|
||||
const apiKey = process.env.API_KEY;
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Regular Scans**: Run security scans regularly, not just before releases
|
||||
2. **CI/CD Integration**: Automate security scanning in your pipeline
|
||||
3. **Dependency Updates**: Keep dependencies up to date
|
||||
4. **Code Review**: Include security in code review process
|
||||
5. **Principle of Least Privilege**: Minimize permissions and access
|
||||
6. **Input Validation**: Always validate and sanitize user input
|
||||
7. **Secrets Management**: Use environment variables and secret management tools
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/review --persona=security](/claudekit/core-commands/review) - Security-focused code review
|
||||
- [/fix](/claudekit/core-commands/fix) - Fix identified vulnerabilities
|
||||
- [/optimize](/claudekit/commands/optimize) - Performance optimization
|
||||
@@ -1,283 +0,0 @@
|
||||
---
|
||||
title: /ship
|
||||
description: Complete workflow to commit changes, run reviews, execute tests, and create a pull request
|
||||
---
|
||||
|
||||
# /ship
|
||||
|
||||
The ultimate command for shipping code. Runs quality checks, creates commits, and generates pull requests in one streamlined workflow.
|
||||
|
||||
## Purpose
|
||||
|
||||
Complete end-to-end workflow that:
|
||||
- Reviews your code for quality and security
|
||||
- Runs the test suite
|
||||
- Creates a well-formatted commit
|
||||
- Pushes changes to remote
|
||||
- Generates a pull request ready for review
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/ship [commit message]
|
||||
```
|
||||
|
||||
**Quick mode** (skip review):
|
||||
```bash
|
||||
/ship quick
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
| Argument | Description |
|
||||
|----------|-------------|
|
||||
| `[commit message]` | Your commit message - used as the commit subject line |
|
||||
| `quick` | Skip code review and auto-generate commit message |
|
||||
|
||||
## Workflow
|
||||
|
||||
The `/ship` command follows a comprehensive 5-phase workflow:
|
||||
|
||||
### Phase 1: Pre-Ship Checks
|
||||
|
||||
First, the command validates your changes:
|
||||
|
||||
```bash
|
||||
git status
|
||||
git diff --staged
|
||||
```
|
||||
|
||||
**Automatic validation:**
|
||||
- No secrets or API keys in code
|
||||
- No debug statements (`console.log`, `print()`)
|
||||
- No large blocks of commented-out code
|
||||
- Identifies all modified, added, and deleted files
|
||||
|
||||
### Phase 2: Code Review (unless 'quick' mode)
|
||||
|
||||
Runs an automated self-review:
|
||||
|
||||
- **Code quality**: Checks style compliance and best practices
|
||||
- **Security**: Identifies potential vulnerabilities
|
||||
- **Type safety**: Verifies TypeScript types, Python type hints
|
||||
- **Critical issues**: Must be fixed before proceeding
|
||||
- **Recommendations**: Noted but don't block the ship
|
||||
|
||||
### Phase 3: Run Tests
|
||||
|
||||
Executes your test suite and validates coverage:
|
||||
|
||||
**Python projects:**
|
||||
```bash
|
||||
pytest -v
|
||||
```
|
||||
|
||||
**TypeScript/JavaScript projects:**
|
||||
```bash
|
||||
pnpm test
|
||||
```
|
||||
|
||||
**Validation checks:**
|
||||
- All tests must pass
|
||||
- No new warnings introduced
|
||||
- Code coverage not decreased
|
||||
- New code has test coverage
|
||||
|
||||
### Phase 4: Create Commit
|
||||
|
||||
Creates a conventional commit with auto-generated message:
|
||||
|
||||
```bash
|
||||
git add -A
|
||||
git commit -m "type(scope): subject
|
||||
|
||||
body explaining the changes
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>"
|
||||
```
|
||||
|
||||
The commit message follows [Conventional Commits](https://www.conventionalcommits.org/) format.
|
||||
|
||||
### Phase 5: Push and Create PR
|
||||
|
||||
Pushes your branch and creates a pull request:
|
||||
|
||||
```bash
|
||||
git push -u origin [branch-name]
|
||||
gh pr create --title "type(scope): description" --body "[PR body]"
|
||||
```
|
||||
|
||||
The PR includes:
|
||||
- Summary of changes
|
||||
- Test plan checklist
|
||||
- Manual testing notes
|
||||
- Link to related issues
|
||||
|
||||
## Examples
|
||||
|
||||
### Standard Ship
|
||||
|
||||
Ship a new authentication feature:
|
||||
|
||||
```bash
|
||||
/ship "add OAuth2 login support"
|
||||
```
|
||||
|
||||
**Generated commit:**
|
||||
```
|
||||
feat(auth): add OAuth2 login support
|
||||
|
||||
- Implement Google OAuth provider
|
||||
- Implement GitHub OAuth provider
|
||||
- Add session token generation
|
||||
- Update user model for OAuth data
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
```
|
||||
|
||||
### Quick Ship
|
||||
|
||||
For small changes where you want to skip the review:
|
||||
|
||||
```bash
|
||||
/ship quick
|
||||
```
|
||||
|
||||
Auto-generates everything and creates the PR immediately.
|
||||
|
||||
### Bug Fix Ship
|
||||
|
||||
```bash
|
||||
/ship "fix null user crash in profile endpoint"
|
||||
```
|
||||
|
||||
**Generated commit:**
|
||||
```
|
||||
fix(api): handle null user in profile endpoint
|
||||
|
||||
The profile endpoint crashed when accessing deleted users.
|
||||
Added null check and proper 404 response.
|
||||
|
||||
Fixes #456
|
||||
|
||||
🤖 Generated with Claude Code
|
||||
|
||||
Co-Authored-By: Claude <noreply@anthropic.com>
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
After successful completion, you'll see a comprehensive ship report:
|
||||
|
||||
```markdown
|
||||
## Ship Complete
|
||||
|
||||
### Commit
|
||||
**Hash**: `abc1234`
|
||||
**Message**: `feat(auth): add password reset functionality`
|
||||
|
||||
### Changes
|
||||
| File | Change |
|
||||
|------|--------|
|
||||
| `src/auth/reset.ts` | Added |
|
||||
| `src/auth/routes.ts` | Modified |
|
||||
| `tests/auth/reset.test.ts` | Added |
|
||||
|
||||
### Checks
|
||||
- [x] Code review passed
|
||||
- [x] Tests passing (42 tests)
|
||||
- [x] Coverage: 85% (+3%)
|
||||
- [x] No security issues
|
||||
|
||||
### Pull Request
|
||||
**URL**: https://github.com/org/repo/pull/123
|
||||
**Title**: feat(auth): add password reset functionality
|
||||
**Base**: main
|
||||
**Status**: Ready for review
|
||||
|
||||
### Next Steps
|
||||
1. Request review from team
|
||||
2. Address any feedback
|
||||
3. Merge when approved
|
||||
```
|
||||
|
||||
## Commit Message Formats
|
||||
|
||||
The command auto-generates appropriate commit messages based on your changes:
|
||||
|
||||
### Feature Addition
|
||||
```
|
||||
feat(scope): add [feature]
|
||||
|
||||
- Added [component/function]
|
||||
- Implemented [functionality]
|
||||
- Added tests for [scenarios]
|
||||
```
|
||||
|
||||
### Bug Fix
|
||||
```
|
||||
fix(scope): resolve [issue]
|
||||
|
||||
- Fixed [bug description]
|
||||
- Added null check for [case]
|
||||
- Updated tests
|
||||
```
|
||||
|
||||
### Refactoring
|
||||
```
|
||||
refactor(scope): improve [area]
|
||||
|
||||
- Extracted [logic] to [location]
|
||||
- Renamed [old] to [new]
|
||||
- Simplified [complex code]
|
||||
```
|
||||
|
||||
### Documentation
|
||||
```
|
||||
docs(scope): update [documentation]
|
||||
|
||||
- Added [section]
|
||||
- Fixed [errors]
|
||||
- Updated [examples]
|
||||
```
|
||||
|
||||
## Pre-Ship Checklist
|
||||
|
||||
The command automatically validates:
|
||||
|
||||
- [ ] All changes are staged
|
||||
- [ ] No unintended files included
|
||||
- [ ] Tests pass
|
||||
- [ ] No secrets in code
|
||||
- [ ] No debug statements
|
||||
- [ ] Commit message is descriptive
|
||||
- [ ] PR description is complete
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--mode=[mode]` | Override behavioral mode | `/ship --mode=token-efficient "fix bug"` |
|
||||
| `--format=[fmt]` | Output format (concise/detailed) | `/ship --format=concise quick` |
|
||||
| `--skip-tests` | Skip test execution | `/ship --skip-tests "docs update"` |
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/commit](/claudekit/commands/commit/) - Create a commit without PR
|
||||
- [/pr](/claudekit/commands/pr/) - Create PR from existing commits
|
||||
- [/review](/claudekit/commands/review/) - Run code review separately
|
||||
- [/test](/claudekit/commands/test/) - Run tests separately
|
||||
|
||||
## Tips
|
||||
|
||||
**For small changes**: Use `/ship quick` to skip the review and speed up the process.
|
||||
|
||||
**For critical changes**: Let the full workflow run to catch potential issues before they reach reviewers.
|
||||
|
||||
**For documentation**: Use `--skip-tests` to avoid running the full test suite.
|
||||
|
||||
**Customization**: Modify ship behavior in `CLAUDE.md` under "Agent Behavior Overrides".
|
||||
@@ -1,251 +0,0 @@
|
||||
---
|
||||
title: /spawn
|
||||
description: Launch background tasks for parallel execution
|
||||
---
|
||||
|
||||
# /spawn
|
||||
|
||||
## Purpose
|
||||
|
||||
Launch background tasks for parallel execution. Enables concurrent work on independent tasks with result aggregation.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/spawn "[task description]"
|
||||
/spawn [operation]
|
||||
```
|
||||
|
||||
## Operations
|
||||
|
||||
### Launch Task
|
||||
|
||||
Start a new background task:
|
||||
|
||||
```bash
|
||||
/spawn "[task description]"
|
||||
```
|
||||
|
||||
**Process:**
|
||||
1. Analyze task for parallelizability
|
||||
2. Launch subagent with task
|
||||
3. Return task ID for tracking
|
||||
4. Continue main conversation
|
||||
|
||||
**Output:**
|
||||
```markdown
|
||||
Spawned: Task #1
|
||||
- Description: Research authentication patterns
|
||||
- Status: Running
|
||||
- Agent: researcher
|
||||
|
||||
Continue working. Use `/spawn --list` to check status.
|
||||
```
|
||||
|
||||
### List Tasks
|
||||
|
||||
Show running and completed tasks:
|
||||
|
||||
```bash
|
||||
/spawn --list
|
||||
```
|
||||
|
||||
**Output:**
|
||||
```markdown
|
||||
## Active Tasks
|
||||
|
||||
| ID | Description | Status | Duration |
|
||||
|----|-------------|--------|----------|
|
||||
| #1 | Research auth patterns | Running | 2m |
|
||||
| #2 | Analyze security | Complete | 5m |
|
||||
|
||||
## Completed Tasks (last hour)
|
||||
| #2 | Analyze security | ✅ Complete | Results ready |
|
||||
```
|
||||
|
||||
### Collect Results
|
||||
|
||||
Gather results from completed tasks:
|
||||
|
||||
```bash
|
||||
/spawn --collect
|
||||
```
|
||||
|
||||
**Output:**
|
||||
```markdown
|
||||
## Collected Results
|
||||
|
||||
### Task #1: Research auth patterns
|
||||
**Status**: Complete
|
||||
**Findings**:
|
||||
- Pattern A: JWT with refresh tokens
|
||||
- Pattern B: Session-based with Redis
|
||||
- Recommendation: JWT for stateless API
|
||||
|
||||
### Task #2: Analyze security
|
||||
**Status**: Complete
|
||||
**Findings**:
|
||||
- 2 high-priority issues found
|
||||
- See detailed report below
|
||||
```
|
||||
|
||||
### Cancel Task
|
||||
|
||||
Stop a running task:
|
||||
|
||||
```bash
|
||||
/spawn --cancel [id]
|
||||
```
|
||||
|
||||
## Task Types
|
||||
|
||||
| Type | Best For | Agent Used |
|
||||
|------|----------|------------|
|
||||
| Research | Information gathering | researcher |
|
||||
| Analysis | Code analysis | scout |
|
||||
| Review | Code review | code-reviewer |
|
||||
| Test | Test generation | tester |
|
||||
| Scan | Security scanning | security-auditor |
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--list` | Show all tasks |
|
||||
| `--collect` | Gather completed results |
|
||||
| `--cancel [id]` | Cancel running task |
|
||||
| `--wait` | Wait for all tasks to complete |
|
||||
| `--agent=[type]` | Specify agent type |
|
||||
| `--priority=[high\|normal]` | Task priority |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Spawn research task
|
||||
/spawn "Research OAuth2 best practices"
|
||||
|
||||
# Spawn analysis with specific agent
|
||||
/spawn "Analyze user service for performance" --agent=scout
|
||||
|
||||
# Spawn security review
|
||||
/spawn "Review security of auth module" --agent=security-auditor
|
||||
|
||||
# Check task status
|
||||
/spawn --list
|
||||
|
||||
# Collect all results
|
||||
/spawn --collect
|
||||
|
||||
# Wait for all tasks to complete
|
||||
/spawn --wait
|
||||
|
||||
# Cancel a task
|
||||
/spawn --cancel 1
|
||||
```
|
||||
|
||||
## Parallel Workflows
|
||||
|
||||
### Research Phase
|
||||
|
||||
```bash
|
||||
# Launch multiple research tasks
|
||||
/spawn "Research authentication approaches"
|
||||
/spawn "Analyze current auth implementation"
|
||||
/spawn "Review competitor auth patterns"
|
||||
|
||||
# Continue other work...
|
||||
|
||||
# Wait for all to complete
|
||||
/spawn --wait
|
||||
|
||||
# Collect and synthesize
|
||||
/spawn --collect
|
||||
```
|
||||
|
||||
### Multi-File Review
|
||||
|
||||
```bash
|
||||
# Review different modules in parallel
|
||||
/spawn "Review src/auth/ for security"
|
||||
/spawn "Review src/api/ for performance"
|
||||
/spawn "Review src/db/ for SQL injection"
|
||||
|
||||
# Collect findings
|
||||
/spawn --collect
|
||||
|
||||
# Address issues
|
||||
```
|
||||
|
||||
### Comprehensive Analysis
|
||||
|
||||
```bash
|
||||
# Multiple analysis tasks
|
||||
/spawn "Analyze dependencies for vulnerabilities"
|
||||
/spawn "Check code coverage gaps"
|
||||
/spawn "Find performance bottlenecks"
|
||||
|
||||
/spawn --collect
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Independent Tasks**: Only spawn truly independent work that doesn't depend on other tasks
|
||||
2. **Clear Descriptions**: Specific task descriptions get better results
|
||||
3. **Regular Collection**: Don't let results pile up unchecked
|
||||
4. **Resource Awareness**: Don't spawn too many concurrent tasks (3-5 is usually optimal)
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Feature Planning
|
||||
|
||||
```bash
|
||||
# Parallel research before implementation
|
||||
/spawn "Research state management libraries"
|
||||
/spawn "Analyze existing state handling code"
|
||||
/spawn "Find examples of similar features"
|
||||
|
||||
/spawn --collect
|
||||
# Make informed decision based on all research
|
||||
```
|
||||
|
||||
### Code Quality Audit
|
||||
|
||||
```bash
|
||||
# Audit different aspects simultaneously
|
||||
/spawn "Check for security vulnerabilities"
|
||||
/spawn "Identify performance issues"
|
||||
/spawn "Find code duplication"
|
||||
/spawn "Check test coverage gaps"
|
||||
|
||||
/spawn --collect
|
||||
```
|
||||
|
||||
### Documentation Tasks
|
||||
|
||||
```bash
|
||||
# Generate docs for multiple modules
|
||||
/spawn "Document API endpoints"
|
||||
/spawn "Generate type documentation"
|
||||
/spawn "Create usage examples"
|
||||
|
||||
/spawn --collect
|
||||
```
|
||||
|
||||
## Limitations
|
||||
|
||||
- Tasks cannot communicate with each other
|
||||
- Results are collected, not streamed
|
||||
- Heavy tasks may take time to complete
|
||||
- Some tasks benefit from sequential execution (e.g., dependent work)
|
||||
- Spawned tasks use additional API tokens
|
||||
|
||||
## Combines With
|
||||
|
||||
- [/mode orchestration](/claudekit/commands/mode) - Manages multiple spawned tasks
|
||||
- [/plan](/claudekit/core-commands/plan) - Plan tasks, then spawn parallel execution
|
||||
- [/checkpoint](/claudekit/commands/checkpoint) - Save state before spawning tasks
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/status](/claudekit/commands/status) - Check project status
|
||||
- [/load](/claudekit/commands/load) - Load components for tasks
|
||||
@@ -1,166 +0,0 @@
|
||||
---
|
||||
title: /status
|
||||
description: Get current project status including tasks, git state, and recent activity
|
||||
---
|
||||
|
||||
# /status
|
||||
|
||||
## Purpose
|
||||
|
||||
Get current project status including tasks, git state, and recent activity. Provides a comprehensive overview of where you are in your development workflow.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/status
|
||||
```
|
||||
|
||||
## Workflow
|
||||
|
||||
### 1. Check Git Status
|
||||
|
||||
```bash
|
||||
git status
|
||||
git log --oneline -5
|
||||
```
|
||||
|
||||
Provides:
|
||||
- Current branch
|
||||
- Modified/staged/untracked files
|
||||
- Recent commits
|
||||
|
||||
### 2. Review Tasks
|
||||
|
||||
Shows:
|
||||
- Tasks in progress
|
||||
- Pending tasks
|
||||
- Tasks completed today
|
||||
|
||||
### 3. Recent Activity
|
||||
|
||||
Displays:
|
||||
- Recent commits (last 5)
|
||||
- Open pull requests
|
||||
- Open issues
|
||||
|
||||
## Output
|
||||
|
||||
```markdown
|
||||
## Project Status
|
||||
|
||||
### Git
|
||||
- Branch: `feature/oauth-integration`
|
||||
- Status: 3 modified files, 1 staged
|
||||
- Ahead of origin by 2 commits
|
||||
|
||||
### Tasks
|
||||
- In Progress: 2
|
||||
- Implement token refresh
|
||||
- Add OAuth callback
|
||||
- Pending: 5
|
||||
- Completed Today: 3
|
||||
|
||||
### Recent Commits
|
||||
1. feat: add JWT token generation
|
||||
2. test: add auth service tests
|
||||
3. refactor: extract validation logic
|
||||
4. fix: handle expired tokens
|
||||
5. docs: update API documentation
|
||||
|
||||
### Open Pull Requests
|
||||
- #123: Add OAuth2 authentication
|
||||
- #119: Fix session timeout issue
|
||||
|
||||
### Active Spawned Tasks
|
||||
- #1: Research auth patterns (running)
|
||||
- #2: Security scan (completed)
|
||||
|
||||
### Checkpoints
|
||||
- feature-auth (2h ago)
|
||||
- oauth-progress (1d ago)
|
||||
```
|
||||
|
||||
## What It Shows
|
||||
|
||||
| Section | Information |
|
||||
|---------|-------------|
|
||||
| **Git** | Branch, uncommitted changes, sync status |
|
||||
| **Tasks** | In-progress, pending, completed |
|
||||
| **Commits** | Last 5 commits on current branch |
|
||||
| **PRs** | Open pull requests (if GitHub integration) |
|
||||
| **Spawned Tasks** | Active background tasks |
|
||||
| **Checkpoints** | Recent session checkpoints |
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Daily Standup
|
||||
|
||||
```bash
|
||||
# Quick overview before standup
|
||||
/status
|
||||
|
||||
# Shows what you worked on and what's in progress
|
||||
```
|
||||
|
||||
### Context Recovery
|
||||
|
||||
```bash
|
||||
# After coming back from a break
|
||||
/status
|
||||
|
||||
# Reminds you where you left off
|
||||
```
|
||||
|
||||
### Before Switching Branches
|
||||
|
||||
```bash
|
||||
# Check status before switching work
|
||||
/status
|
||||
|
||||
# Ensure nothing uncommitted will be lost
|
||||
```
|
||||
|
||||
### Project Overview
|
||||
|
||||
```bash
|
||||
# Quick snapshot of project state
|
||||
/status
|
||||
|
||||
# See all active work at a glance
|
||||
```
|
||||
|
||||
## Integration with Other Commands
|
||||
|
||||
### With /checkpoint
|
||||
|
||||
```bash
|
||||
/status # See current state
|
||||
/checkpoint save progress # Save before switching
|
||||
```
|
||||
|
||||
### With /spawn
|
||||
|
||||
```bash
|
||||
/spawn --list # See background tasks
|
||||
/status # See overall status including spawned tasks
|
||||
```
|
||||
|
||||
### With /load
|
||||
|
||||
```bash
|
||||
/status # See what's modified
|
||||
/load src/auth/ # Load the changed component
|
||||
```
|
||||
|
||||
## Tips
|
||||
|
||||
1. **Use Regularly**: Quick status check before starting work
|
||||
2. **Before Commits**: Verify what's changed before committing
|
||||
3. **Context Switches**: Check status when switching tasks
|
||||
4. **Team Coordination**: Share status output in team discussions
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/checkpoint](/claudekit/commands/checkpoint) - Save/restore session state
|
||||
- [/spawn](/claudekit/commands/spawn) - Check background tasks
|
||||
- [/help](/claudekit/commands/help) - Get command help
|
||||
@@ -1,457 +0,0 @@
|
||||
---
|
||||
title: /tdd
|
||||
description: Test-driven development workflow - write failing tests first, then implement
|
||||
---
|
||||
|
||||
# /tdd - Test-Driven Development Workflow
|
||||
|
||||
## Purpose
|
||||
|
||||
Start a strict test-driven development (TDD) workflow where you write failing tests first, then implement code to make them pass. Enforces the Red-Green-Refactor cycle with mandatory verification.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/tdd [feature or function description]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- `[feature description]` - What you want to build using TDD
|
||||
- `[function name]` - Specific function to develop with TDD
|
||||
|
||||
## How It Works
|
||||
|
||||
The `/tdd` command enforces a strict 4-phase TDD workflow:
|
||||
|
||||
### Phase 1: Red - Write Failing Tests
|
||||
|
||||
1. **Understand Requirements**
|
||||
- What should the code do?
|
||||
- What are the inputs and outputs?
|
||||
- What edge cases exist?
|
||||
- What errors should be handled?
|
||||
|
||||
2. **Write Tests First**
|
||||
```python
|
||||
def test_feature_does_expected_thing():
|
||||
"""Test the main functionality."""
|
||||
result = feature("input")
|
||||
assert result == "expected"
|
||||
|
||||
def test_feature_handles_edge_case():
|
||||
"""Test edge case behavior."""
|
||||
result = feature("")
|
||||
assert result == "default"
|
||||
|
||||
def test_feature_raises_on_invalid():
|
||||
"""Test error handling."""
|
||||
with pytest.raises(ValueError):
|
||||
feature(None)
|
||||
```
|
||||
|
||||
3. **Run Tests (Expect Failure)**
|
||||
```bash
|
||||
pytest -v # Should FAIL - feature() doesn't exist yet
|
||||
```
|
||||
|
||||
**Non-Negotiable Rule**: NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
|
||||
|
||||
### Phase 2: Green - Make Tests Pass
|
||||
|
||||
1. **Implement Minimal Code**
|
||||
- Write just enough code to pass tests
|
||||
- Don't add extra features
|
||||
- Don't optimize prematurely
|
||||
- Keep it simple
|
||||
|
||||
2. **Run Tests (Expect Success)**
|
||||
```bash
|
||||
pytest -v # Should PASS - all tests green
|
||||
```
|
||||
|
||||
3. **Verify Every Claim**
|
||||
- Don't say "tests should pass"
|
||||
- Run the actual command
|
||||
- Read the complete output
|
||||
- Verify it matches your claim
|
||||
|
||||
### Phase 3: Refactor
|
||||
|
||||
1. **Improve Code Quality**
|
||||
- Clean up implementation
|
||||
- Remove duplication
|
||||
- Improve naming
|
||||
- Apply patterns
|
||||
|
||||
2. **Run Tests (Ensure Still Passing)**
|
||||
```bash
|
||||
pytest -v # Should still PASS
|
||||
```
|
||||
|
||||
3. **Keep Tests Green**
|
||||
- Never break tests during refactoring
|
||||
- If tests fail, revert and try again
|
||||
- Tests are your safety net
|
||||
|
||||
### Phase 4: Repeat
|
||||
|
||||
Add more test cases and repeat the cycle:
|
||||
1. Write next failing test
|
||||
2. Make it pass
|
||||
3. Refactor if needed
|
||||
4. Commit
|
||||
|
||||
## TDD Best Practices
|
||||
|
||||
### DO
|
||||
- ✅ Write one test at a time
|
||||
- ✅ Run tests after every change
|
||||
- ✅ Keep red-green-refactor cycles short (minutes, not hours)
|
||||
- ✅ Commit after each green phase
|
||||
- ✅ Test behavior, not implementation
|
||||
- ✅ Start with simplest test cases
|
||||
|
||||
### DON'T
|
||||
- ❌ Write production code before tests
|
||||
- ❌ Write multiple tests before implementing
|
||||
- ❌ Skip running tests
|
||||
- ❌ Keep code that makes tests pass without running them
|
||||
- ❌ Use vague language like "should work" or "probably passes"
|
||||
|
||||
## Strict TDD Rules
|
||||
|
||||
Based on `.claude/skills/methodology/test-driven-development/SKILL.md`:
|
||||
|
||||
### Rule 1: No Production Code Without Failing Test
|
||||
|
||||
**WRONG:**
|
||||
```
|
||||
"Let me write the function first, then add tests"
|
||||
"I'll implement it and test as I go"
|
||||
```
|
||||
|
||||
**RIGHT:**
|
||||
```
|
||||
1. Write test that calls feature()
|
||||
2. Run test - watch it FAIL
|
||||
3. Write feature() to make test PASS
|
||||
4. Run test - watch it PASS
|
||||
```
|
||||
|
||||
### Rule 2: If You Already Wrote Code, Delete It
|
||||
|
||||
If you accidentally wrote production code before tests:
|
||||
|
||||
**WRONG:**
|
||||
```
|
||||
"I'll keep this code as reference while writing tests"
|
||||
"Let me comment it out for now"
|
||||
```
|
||||
|
||||
**RIGHT:**
|
||||
```
|
||||
Delete the code completely.
|
||||
Write the test.
|
||||
Rewrite the implementation.
|
||||
```
|
||||
|
||||
### Rule 3: Verify Before Claiming
|
||||
|
||||
Based on `.claude/skills/methodology/verification-before-completion/SKILL.md`:
|
||||
|
||||
Before saying "tests pass":
|
||||
|
||||
1. **Identify** the exact command to run tests
|
||||
2. **Execute** it completely and freshly
|
||||
3. **Read** the complete output
|
||||
4. **Verify** output matches your claim
|
||||
5. **Only then** make the claim
|
||||
|
||||
**Forbidden Language:**
|
||||
- ❌ "should work"
|
||||
- ❌ "probably fixed"
|
||||
- ❌ "seems to pass"
|
||||
- ❌ "tests should pass"
|
||||
|
||||
**Required Language:**
|
||||
- ✅ "Tests pass: [paste output]"
|
||||
- ✅ "Verified by running: [command]"
|
||||
|
||||
## Testing Anti-Patterns to Avoid
|
||||
|
||||
Based on `.claude/skills/methodology/testing-anti-patterns/SKILL.md`:
|
||||
|
||||
### 1. Testing Mock Behavior
|
||||
|
||||
**WRONG:**
|
||||
```python
|
||||
def test_sends_email():
|
||||
mock_mailer = Mock()
|
||||
send_email(mock_mailer, "test@example.com")
|
||||
mock_mailer.send.assert_called_once() # Testing mock, not code!
|
||||
```
|
||||
|
||||
**RIGHT:**
|
||||
```python
|
||||
def test_sends_email():
|
||||
mailer = FakeMailer() # Real implementation
|
||||
send_email(mailer, "test@example.com")
|
||||
assert mailer.sent_emails[0].to == "test@example.com"
|
||||
```
|
||||
|
||||
### 2. Test-Only Methods in Production
|
||||
|
||||
**WRONG:**
|
||||
```python
|
||||
class User:
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
|
||||
def set_id_for_testing(self, id): # Only for tests!
|
||||
self.id = id
|
||||
```
|
||||
|
||||
**RIGHT:**
|
||||
```python
|
||||
class User:
|
||||
def __init__(self, name, id=None):
|
||||
self.name = name
|
||||
self.id = id or generate_id()
|
||||
|
||||
# Test uses real constructor
|
||||
user = User("John", id="test-id-123")
|
||||
```
|
||||
|
||||
### 3. Incomplete Mocks
|
||||
|
||||
**WRONG:**
|
||||
```typescript
|
||||
const mockDb = {
|
||||
findUser: vi.fn()
|
||||
// Missing other methods that will be called!
|
||||
};
|
||||
```
|
||||
|
||||
**RIGHT:**
|
||||
```typescript
|
||||
const mockDb: Database = {
|
||||
findUser: vi.fn(),
|
||||
saveUser: vi.fn(),
|
||||
deleteUser: vi.fn(),
|
||||
// All methods implemented
|
||||
};
|
||||
```
|
||||
|
||||
## Example TDD Session
|
||||
|
||||
### Input
|
||||
```bash
|
||||
/tdd "Create a password validator that checks strength"
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```markdown
|
||||
## TDD Session: Password Validator
|
||||
|
||||
### Phase 1: RED - Write Failing Test
|
||||
|
||||
Created `tests/test_password_validator.py`:
|
||||
|
||||
```python
|
||||
import pytest
|
||||
from src.password_validator import validate_password
|
||||
|
||||
def test_validates_strong_password():
|
||||
"""Test that strong password passes validation."""
|
||||
result = validate_password("StrongP@ss123")
|
||||
assert result is True
|
||||
|
||||
def test_rejects_short_password():
|
||||
"""Test that short password fails."""
|
||||
with pytest.raises(ValueError, match="too short"):
|
||||
validate_password("weak")
|
||||
|
||||
def test_rejects_password_without_numbers():
|
||||
"""Test that password without numbers fails."""
|
||||
with pytest.raises(ValueError, match="must contain number"):
|
||||
validate_password("NoNumbers!")
|
||||
```
|
||||
|
||||
Running tests:
|
||||
```bash
|
||||
$ pytest tests/test_password_validator.py -v
|
||||
|
||||
test_password_validator.py::test_validates_strong_password FAILED
|
||||
ModuleNotFoundError: No module named 'src.password_validator'
|
||||
```
|
||||
|
||||
✅ Tests FAIL as expected (module doesn't exist)
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: GREEN - Make Tests Pass
|
||||
|
||||
Created `src/password_validator.py`:
|
||||
|
||||
```python
|
||||
import re
|
||||
|
||||
MIN_LENGTH = 8
|
||||
|
||||
def validate_password(password: str) -> bool:
|
||||
"""
|
||||
Validate password strength.
|
||||
|
||||
Args:
|
||||
password: Password to validate
|
||||
|
||||
Returns:
|
||||
True if password is strong
|
||||
|
||||
Raises:
|
||||
ValueError: If password doesn't meet requirements
|
||||
"""
|
||||
if len(password) < MIN_LENGTH:
|
||||
raise ValueError(f"Password too short (minimum {MIN_LENGTH})")
|
||||
|
||||
if not re.search(r'\d', password):
|
||||
raise ValueError("Password must contain number")
|
||||
|
||||
if not re.search(r'[A-Z]', password):
|
||||
raise ValueError("Password must contain uppercase letter")
|
||||
|
||||
if not re.search(r'[!@#$%^&*]', password):
|
||||
raise ValueError("Password must contain special character")
|
||||
|
||||
return True
|
||||
```
|
||||
|
||||
Running tests:
|
||||
```bash
|
||||
$ pytest tests/test_password_validator.py -v
|
||||
|
||||
test_password_validator.py::test_validates_strong_password PASSED
|
||||
test_password_validator.py::test_rejects_short_password PASSED
|
||||
test_password_validator.py::test_rejects_password_without_numbers PASSED
|
||||
|
||||
====== 3 passed in 0.12s ======
|
||||
```
|
||||
|
||||
✅ All tests PASS
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: REFACTOR - Improve Code
|
||||
|
||||
Extracted validation rules into separate functions:
|
||||
|
||||
```python
|
||||
import re
|
||||
from typing import List
|
||||
|
||||
MIN_LENGTH = 8
|
||||
REQUIRED_PATTERNS = [
|
||||
(r'\d', "number"),
|
||||
(r'[A-Z]', "uppercase letter"),
|
||||
(r'[!@#$%^&*]', "special character"),
|
||||
]
|
||||
|
||||
def validate_password(password: str) -> bool:
|
||||
"""Validate password strength."""
|
||||
check_length(password)
|
||||
check_required_patterns(password)
|
||||
return True
|
||||
|
||||
def check_length(password: str) -> None:
|
||||
"""Check password meets minimum length."""
|
||||
if len(password) < MIN_LENGTH:
|
||||
raise ValueError(f"Password too short (minimum {MIN_LENGTH})")
|
||||
|
||||
def check_required_patterns(password: str) -> None:
|
||||
"""Check password contains required character types."""
|
||||
for pattern, name in REQUIRED_PATTERNS:
|
||||
if not re.search(pattern, password):
|
||||
raise ValueError(f"Password must contain {name}")
|
||||
```
|
||||
|
||||
Running tests:
|
||||
```bash
|
||||
$ pytest tests/test_password_validator.py -v
|
||||
|
||||
====== 3 passed in 0.11s ======
|
||||
```
|
||||
|
||||
✅ Tests still PASS after refactoring
|
||||
|
||||
---
|
||||
|
||||
### Phase 4: REPEAT - Add More Tests
|
||||
|
||||
Added edge case test:
|
||||
|
||||
```python
|
||||
def test_rejects_empty_password():
|
||||
"""Test that empty password fails."""
|
||||
with pytest.raises(ValueError, match="too short"):
|
||||
validate_password("")
|
||||
```
|
||||
|
||||
```bash
|
||||
$ pytest tests/test_password_validator.py -v
|
||||
|
||||
====== 4 passed in 0.13s ======
|
||||
```
|
||||
|
||||
✅ New test passes immediately (covered by existing implementation)
|
||||
|
||||
---
|
||||
|
||||
### Cycle Summary
|
||||
- **Red**: 3 tests written, all failed initially ✅
|
||||
- **Green**: Implementation created, all tests pass ✅
|
||||
- **Refactor**: Extracted helper functions, tests still pass ✅
|
||||
- **Repeat**: Added edge case test ✅
|
||||
|
||||
### Final Stats
|
||||
- Tests: 4 (all passing)
|
||||
- Coverage: 100%
|
||||
- Lines of code: 28
|
||||
- Complexity: Low (simple functions)
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--strict` | Extra strict TDD enforcement | `--strict` |
|
||||
| `--framework=[fw]` | Specify test framework | `--framework=vitest` |
|
||||
| `--format=[fmt]` | Output format (concise/detailed) | `--format=concise` |
|
||||
|
||||
### Flag Examples
|
||||
|
||||
```bash
|
||||
# Strict TDD with verbose output
|
||||
/tdd --strict --format=detailed "user authentication"
|
||||
|
||||
# TDD with specific framework
|
||||
/tdd --framework=jest "form validation"
|
||||
```
|
||||
|
||||
## Deliverables
|
||||
|
||||
After a TDD session, you receive:
|
||||
|
||||
1. **Test File** - Complete test suite written first
|
||||
2. **Implementation** - Minimal code that passes tests
|
||||
3. **Verification** - Proof that tests failed then passed
|
||||
4. **Refactored Code** - Clean, well-structured implementation
|
||||
5. **Coverage Report** - Typically 100% for TDD code
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/test](/claudekit/commands/test) - Generate tests for existing code
|
||||
- [/feature](/claudekit/commands/feature) - Full feature workflow
|
||||
- [/fix](/claudekit/commands/fix) - Fix bugs with regression tests
|
||||
- [/refactor](/claudekit/commands/refactor) - Refactor while keeping tests green
|
||||
@@ -1,355 +0,0 @@
|
||||
---
|
||||
title: /test
|
||||
description: Generate comprehensive tests including unit tests, integration tests, and edge cases
|
||||
---
|
||||
|
||||
# /test - Test Generation Command
|
||||
|
||||
## Purpose
|
||||
|
||||
Generate comprehensive tests for specified code including unit tests, integration tests, and edge cases. Analyzes your code to create test suites that catch bugs and verify behavior.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/test [file path | function name | 'coverage' | 'all']
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- `[file path]` - Generate tests for specific file or pattern
|
||||
- `[function name]` - Generate tests for specific function
|
||||
- `coverage` - Analyze and improve test coverage
|
||||
- `all` - Run all tests and report results
|
||||
|
||||
## How It Works
|
||||
|
||||
The `/test` command has two main modes:
|
||||
|
||||
### Mode 1: File/Function Testing
|
||||
|
||||
1. **Analyze Target Code**
|
||||
- Reads the code to understand functionality
|
||||
- Identifies inputs, outputs, and side effects
|
||||
- Notes dependencies to mock
|
||||
- Finds existing tests for patterns
|
||||
|
||||
2. **Design Test Cases**
|
||||
- **Happy Path**: Normal operation with valid inputs
|
||||
- **Edge Cases**: Boundary values, empty inputs, limits
|
||||
- **Error Cases**: Invalid inputs, exceptions
|
||||
- **Integration Points**: External dependencies
|
||||
|
||||
3. **Generate Tests**
|
||||
- Follows project testing conventions
|
||||
- Uses appropriate mocking strategies
|
||||
- Writes clear, descriptive test names
|
||||
- Includes setup and teardown
|
||||
|
||||
4. **Run and Verify**
|
||||
```bash
|
||||
# Python
|
||||
pytest [test_file] -v
|
||||
|
||||
# TypeScript
|
||||
pnpm test [test_file]
|
||||
```
|
||||
|
||||
### Mode 2: Coverage Analysis
|
||||
|
||||
1. **Run Coverage Report**
|
||||
```bash
|
||||
# Python
|
||||
pytest --cov=src --cov-report=term-missing
|
||||
|
||||
# TypeScript
|
||||
pnpm test --coverage
|
||||
```
|
||||
|
||||
2. **Identify Gaps**
|
||||
- Finds untested functions
|
||||
- Identifies untested branches
|
||||
- Notes missing edge cases
|
||||
|
||||
3. **Generate Missing Tests**
|
||||
- Prioritizes by risk
|
||||
- Focuses on critical paths
|
||||
- Adds edge case coverage
|
||||
|
||||
## Test Templates
|
||||
|
||||
### Python (pytest)
|
||||
|
||||
```python
|
||||
import pytest
|
||||
from unittest.mock import Mock, patch
|
||||
from src.module import function_under_test
|
||||
|
||||
class TestFunctionUnderTest:
|
||||
"""Tests for function_under_test."""
|
||||
|
||||
def test_with_valid_input_returns_expected(self):
|
||||
"""Test that valid input produces expected output."""
|
||||
result = function_under_test("valid_input")
|
||||
assert result == "expected_output"
|
||||
|
||||
def test_with_empty_input_returns_default(self):
|
||||
"""Test that empty input returns default value."""
|
||||
result = function_under_test("")
|
||||
assert result == "default"
|
||||
|
||||
def test_with_invalid_input_raises_error(self):
|
||||
"""Test that invalid input raises ValueError."""
|
||||
with pytest.raises(ValueError, match="Invalid input"):
|
||||
function_under_test(None)
|
||||
|
||||
@pytest.mark.parametrize("input_val,expected", [
|
||||
("a", "result_a"),
|
||||
("b", "result_b"),
|
||||
("c", "result_c"),
|
||||
])
|
||||
def test_parametrized_inputs(self, input_val, expected):
|
||||
"""Test multiple input variations."""
|
||||
assert function_under_test(input_val) == expected
|
||||
|
||||
@patch('src.module.external_service')
|
||||
def test_with_mocked_dependency(self, mock_service):
|
||||
"""Test with mocked external dependency."""
|
||||
mock_service.call.return_value = "mocked_result"
|
||||
result = function_under_test("input")
|
||||
assert result == "expected_with_mock"
|
||||
mock_service.call.assert_called_once_with("input")
|
||||
```
|
||||
|
||||
### TypeScript (vitest)
|
||||
|
||||
```typescript
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { functionUnderTest } from './module';
|
||||
|
||||
describe('functionUnderTest', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
it('should return expected output for valid input', () => {
|
||||
const result = functionUnderTest('valid_input');
|
||||
expect(result).toBe('expected_output');
|
||||
});
|
||||
|
||||
it('should return default for empty input', () => {
|
||||
const result = functionUnderTest('');
|
||||
expect(result).toBe('default');
|
||||
});
|
||||
|
||||
it('should throw error for invalid input', () => {
|
||||
expect(() => functionUnderTest(null)).toThrow('Invalid input');
|
||||
});
|
||||
|
||||
it.each([
|
||||
['a', 'result_a'],
|
||||
['b', 'result_b'],
|
||||
['c', 'result_c'],
|
||||
])('should handle input %s correctly', (input, expected) => {
|
||||
expect(functionUnderTest(input)).toBe(expected);
|
||||
});
|
||||
|
||||
it('should work with mocked dependency', async () => {
|
||||
vi.mock('./external-service', () => ({
|
||||
call: vi.fn().mockResolvedValue('mocked_result'),
|
||||
}));
|
||||
|
||||
const result = await functionUnderTest('input');
|
||||
expect(result).toBe('expected_with_mock');
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
### React Component (Testing Library)
|
||||
|
||||
```typescript
|
||||
import { describe, it, expect, vi } from 'vitest';
|
||||
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
|
||||
import { UserForm } from './UserForm';
|
||||
|
||||
describe('UserForm', () => {
|
||||
it('should render form fields', () => {
|
||||
render(<UserForm onSubmit={vi.fn()} />);
|
||||
|
||||
expect(screen.getByLabelText(/name/i)).toBeInTheDocument();
|
||||
expect(screen.getByLabelText(/email/i)).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: /submit/i })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should call onSubmit with form data', async () => {
|
||||
const onSubmit = vi.fn();
|
||||
render(<UserForm onSubmit={onSubmit} />);
|
||||
|
||||
fireEvent.change(screen.getByLabelText(/name/i), {
|
||||
target: { value: 'John' },
|
||||
});
|
||||
fireEvent.change(screen.getByLabelText(/email/i), {
|
||||
target: { value: 'john@example.com' },
|
||||
});
|
||||
fireEvent.click(screen.getByRole('button', { name: /submit/i }));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(onSubmit).toHaveBeenCalledWith({
|
||||
name: 'John',
|
||||
email: 'john@example.com',
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should show validation error for invalid email', async () => {
|
||||
render(<UserForm onSubmit={vi.fn()} />);
|
||||
|
||||
fireEvent.change(screen.getByLabelText(/email/i), {
|
||||
target: { value: 'invalid' },
|
||||
});
|
||||
fireEvent.blur(screen.getByLabelText(/email/i));
|
||||
|
||||
expect(await screen.findByText(/invalid email/i)).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--coverage` | Generate coverage-focused tests | `--coverage` |
|
||||
| `--type=[type]` | Test type to generate | `--type=integration` |
|
||||
| `--format=[fmt]` | Output format (concise/detailed) | `--format=concise` |
|
||||
| `--framework=[fw]` | Specify test framework | `--framework=vitest` |
|
||||
| `--tdd` | Generate TDD-style with failing tests first | `--tdd` |
|
||||
| `--edge-cases` | Focus on edge case coverage | `--edge-cases` |
|
||||
|
||||
### Test Types
|
||||
|
||||
| Type | Description |
|
||||
|------|-------------|
|
||||
| `unit` | Isolated function tests (default) |
|
||||
| `integration` | Multi-component tests |
|
||||
| `e2e` | End-to-end workflow tests |
|
||||
| `snapshot` | Snapshot tests for UI |
|
||||
| `property` | Property-based testing |
|
||||
|
||||
### Framework Options
|
||||
|
||||
| Framework | Language |
|
||||
|-----------|----------|
|
||||
| `pytest` | Python |
|
||||
| `vitest` | TypeScript/JavaScript |
|
||||
| `jest` | JavaScript |
|
||||
| `playwright` | E2E (any) |
|
||||
|
||||
### Flag Examples
|
||||
|
||||
```bash
|
||||
# Analyze and improve coverage
|
||||
/test --coverage src/services/
|
||||
|
||||
# Generate integration tests
|
||||
/test --type=integration src/api/users.ts
|
||||
|
||||
# TDD mode: failing tests first
|
||||
/test --tdd src/utils/validator.ts
|
||||
|
||||
# Edge case focused testing
|
||||
/test --edge-cases --framework=pytest src/models/user.py
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Generate Tests for File
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/test src/services/auth.ts
|
||||
```
|
||||
|
||||
**Output:**
|
||||
```markdown
|
||||
## Tests Generated
|
||||
|
||||
### Target
|
||||
`src/services/auth.ts` - AuthService class
|
||||
|
||||
### Tests Created
|
||||
- `src/services/auth.test.ts`
|
||||
|
||||
### Test Cases
|
||||
1. `login_with_valid_credentials_returns_token` - Happy path
|
||||
2. `login_with_invalid_password_throws_error` - Error case
|
||||
3. `login_with_nonexistent_user_throws_error` - Error case
|
||||
4. `refresh_token_with_valid_token_returns_new_token` - Happy path
|
||||
5. `refresh_token_with_expired_token_throws_error` - Edge case
|
||||
6. `logout_invalidates_session` - Happy path
|
||||
|
||||
### Coverage Impact
|
||||
- Before: 65%
|
||||
- After: 88%
|
||||
- New lines covered: 42
|
||||
|
||||
### Run Tests
|
||||
```bash
|
||||
pytest src/services/auth.test.ts -v
|
||||
```
|
||||
|
||||
### Notes
|
||||
- Mocked database calls using pytest-mock
|
||||
- Added edge case for token expiration
|
||||
- Consider adding integration tests for full auth flow
|
||||
```
|
||||
|
||||
### Coverage Analysis
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/test coverage
|
||||
```
|
||||
|
||||
**Output:**
|
||||
1. Runs coverage report
|
||||
2. Identifies untested files/functions
|
||||
3. Generates tests for gaps
|
||||
4. Prioritizes by criticality
|
||||
5. Shows before/after coverage metrics
|
||||
|
||||
### Generate Integration Tests
|
||||
|
||||
**Input:**
|
||||
```bash
|
||||
/test --type=integration src/api/
|
||||
```
|
||||
|
||||
**Output:**
|
||||
1. Identifies API endpoints
|
||||
2. Creates end-to-end request tests
|
||||
3. Mocks external dependencies
|
||||
4. Tests error responses
|
||||
5. Verifies status codes and payloads
|
||||
|
||||
## Deliverables
|
||||
|
||||
After running `/test`, you receive:
|
||||
|
||||
1. **Test File(s)** - Complete test suite with:
|
||||
- Happy path tests
|
||||
- Edge case tests
|
||||
- Error scenario tests
|
||||
- Mocked dependencies
|
||||
|
||||
2. **Coverage Report** - Before/after metrics showing improvement
|
||||
|
||||
3. **Run Commands** - Exact commands to execute tests
|
||||
|
||||
4. **Notes** - Testing strategy and recommendations
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/tdd](/claudekit/commands/tdd) - Test-driven development workflow
|
||||
- [/feature](/claudekit/commands/feature) - Includes test generation
|
||||
- [/fix](/claudekit/commands/fix) - Includes regression tests
|
||||
- [/review](/claudekit/commands/review) - Reviews test quality
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,214 @@
|
||||
---
|
||||
title: Creating Agents & Modes
|
||||
description: How to create custom agents and behavioral modes for Claude Kit.
|
||||
---
|
||||
|
||||
# Creating Agents & Modes
|
||||
|
||||
Beyond skills, you can create specialized agents for focused tasks and behavioral modes for different work contexts.
|
||||
|
||||
---
|
||||
|
||||
## Creating Agents
|
||||
|
||||
Agents are specialized subagents that Claude dispatches for independent, focused work. Each agent gets a fresh context and specific tool access.
|
||||
|
||||
### Agent Structure
|
||||
|
||||
Agent files live in `.claude/agents/`:
|
||||
|
||||
```
|
||||
.claude/agents/
|
||||
├── code-reviewer.md
|
||||
├── debugger.md
|
||||
└── my-custom-agent.md
|
||||
```
|
||||
|
||||
### Agent File Format
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: my-agent
|
||||
description: One-line description of what this agent does and when to use it.
|
||||
tools: [Read, Write, Edit, Bash, Grep, Glob]
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
# My Agent
|
||||
|
||||
## Role
|
||||
[What this agent specializes in]
|
||||
|
||||
## Approach
|
||||
[How it should work through problems]
|
||||
|
||||
## Output Format
|
||||
[What it should return]
|
||||
|
||||
## Examples
|
||||
[Example inputs and expected outputs]
|
||||
```
|
||||
|
||||
### Frontmatter Fields
|
||||
|
||||
| Field | Required | Description |
|
||||
|-------|----------|-------------|
|
||||
| `name` | Yes | Agent identifier |
|
||||
| `description` | Yes | When to dispatch this agent |
|
||||
| `tools` | No | Tools the agent can use (defaults to all) |
|
||||
| `model` | No | Model override (sonnet, opus, haiku) |
|
||||
|
||||
### Example: Custom Agent
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: migration-checker
|
||||
description: Use when running database migrations to verify safety.
|
||||
Check for destructive operations, missing rollbacks, and data loss risks.
|
||||
tools: [Read, Grep, Glob, Bash]
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
# Migration Checker
|
||||
|
||||
## Role
|
||||
Review database migration files for safety before execution.
|
||||
|
||||
## Checklist
|
||||
1. Check for destructive operations (DROP TABLE, DROP COLUMN)
|
||||
2. Verify rollback/down migration exists
|
||||
3. Check for data loss risks (column type changes, NOT NULL without default)
|
||||
4. Estimate lock duration on large tables
|
||||
5. Verify migration is idempotent
|
||||
|
||||
## Output Format
|
||||
Return a safety report:
|
||||
- SAFE: No issues found
|
||||
- WARNING: Issues that need review (list them)
|
||||
- BLOCKED: Destructive changes that need approval
|
||||
```
|
||||
|
||||
### When to Create an Agent vs. a Skill
|
||||
|
||||
| Use an Agent when... | Use a Skill when... |
|
||||
|---------------------|---------------------|
|
||||
| Task needs isolated context | Knowledge should be in main conversation |
|
||||
| Work can run independently | Patterns apply inline to current work |
|
||||
| Multiple tasks can parallelize | Guidance is sequential/conversational |
|
||||
| Fresh perspective needed | Context from conversation matters |
|
||||
|
||||
---
|
||||
|
||||
## Creating Modes
|
||||
|
||||
Modes change Claude's communication style, output format, and problem-solving approach for the duration of a session.
|
||||
|
||||
### Mode Structure
|
||||
|
||||
Mode files live in `.claude/modes/`:
|
||||
|
||||
```
|
||||
.claude/modes/
|
||||
├── brainstorm.md
|
||||
├── implementation.md
|
||||
└── my-custom-mode.md
|
||||
```
|
||||
|
||||
### Mode File Format
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: my-mode
|
||||
description: One-line description of this mode's behavior.
|
||||
---
|
||||
|
||||
# My Mode
|
||||
|
||||
## Communication Style
|
||||
[How Claude should communicate in this mode]
|
||||
|
||||
## Output Format
|
||||
[What outputs should look like]
|
||||
|
||||
## Problem-Solving Approach
|
||||
[How Claude should approach tasks]
|
||||
|
||||
## When to Use
|
||||
[Best scenarios for this mode]
|
||||
```
|
||||
|
||||
### Example: Custom Mode
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: pair-programming
|
||||
description: Interactive pair programming mode with frequent check-ins.
|
||||
---
|
||||
|
||||
# Pair Programming Mode
|
||||
|
||||
## Communication Style
|
||||
- Think out loud — explain reasoning as you code
|
||||
- Ask before making non-obvious decisions
|
||||
- Suggest alternatives when multiple approaches exist
|
||||
- Keep explanations conversational, not formal
|
||||
|
||||
## Output Format
|
||||
- Show code in small chunks (10-20 lines)
|
||||
- Pause after each chunk for feedback
|
||||
- Use comments to explain "why", not "what"
|
||||
|
||||
## Problem-Solving Approach
|
||||
- Start with the simplest approach
|
||||
- Refactor only when the user agrees
|
||||
- Test each change before moving on
|
||||
- Never make large changes without discussion
|
||||
|
||||
## When to Use
|
||||
- Learning a new codebase together
|
||||
- Complex features where design decisions need discussion
|
||||
- Mentoring or teaching scenarios
|
||||
```
|
||||
|
||||
### Example: Compliance Mode
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: compliance
|
||||
description: Strict compliance mode for regulated industries.
|
||||
---
|
||||
|
||||
# Compliance Mode
|
||||
|
||||
## Communication Style
|
||||
- Formal, precise language
|
||||
- Reference specific regulations when relevant
|
||||
- Flag compliance risks proactively
|
||||
|
||||
## Output Format
|
||||
- Include audit trail comments in code
|
||||
- Document all security decisions
|
||||
- Generate compliance checklists
|
||||
|
||||
## Problem-Solving Approach
|
||||
- Security and compliance over convenience
|
||||
- Prefer established patterns over novel solutions
|
||||
- Require explicit approval for any data handling changes
|
||||
```
|
||||
|
||||
## Activating Custom Modes
|
||||
|
||||
Once created, switch to your mode naturally:
|
||||
|
||||
```
|
||||
"switch to pair-programming mode"
|
||||
"use compliance mode"
|
||||
```
|
||||
|
||||
Or reference the mode-switching skill keywords.
|
||||
|
||||
## Related Pages
|
||||
|
||||
- [Agents Reference](/claudekit/reference/agents/) — All 20 built-in agents
|
||||
- [Modes Reference](/claudekit/reference/modes/) — All 7 built-in modes
|
||||
- [Creating Skills](/claudekit/customization/creating-skills/) — Custom skill creation
|
||||
@@ -1,590 +0,0 @@
|
||||
---
|
||||
title: Creating Custom Commands
|
||||
description: Learn how to create custom slash commands for your project-specific workflows.
|
||||
---
|
||||
|
||||
# Creating Custom Commands
|
||||
|
||||
Custom commands let you automate project-specific workflows with simple slash commands. This guide shows you how to create commands that integrate seamlessly with Claude Kit.
|
||||
|
||||
## Command File Structure
|
||||
|
||||
Commands are markdown files in `.claude/commands/`:
|
||||
|
||||
```
|
||||
.claude/commands/
|
||||
├── your-command.md # /your-command
|
||||
├── deploy-prod.md # /deploy-prod
|
||||
└── weekly-report.md # /weekly-report
|
||||
```
|
||||
|
||||
The filename (without `.md`) becomes the command name.
|
||||
|
||||
## Command Template
|
||||
|
||||
Here's the complete template for a command file:
|
||||
|
||||
```markdown
|
||||
# /command-name - Short Description
|
||||
|
||||
## Purpose
|
||||
|
||||
Brief description of what this command does and why it exists.
|
||||
|
||||
## Usage
|
||||
|
||||
\`\`\`
|
||||
/command-name [arguments]
|
||||
\`\`\`
|
||||
|
||||
## Arguments
|
||||
|
||||
- `$ARGUMENTS`: Description of what arguments this command accepts
|
||||
|
||||
---
|
||||
|
||||
Execute workflow for: **$ARGUMENTS**
|
||||
|
||||
## Workflow
|
||||
|
||||
### Phase 1: First Step
|
||||
|
||||
Description of what happens in this phase.
|
||||
|
||||
1. **Task 1**
|
||||
- Details about task 1
|
||||
- What to check or do
|
||||
|
||||
2. **Task 2**
|
||||
- Details about task 2
|
||||
- Expected outcomes
|
||||
|
||||
### Phase 2: Second Step
|
||||
|
||||
Description of next phase.
|
||||
|
||||
1. **Task 1**
|
||||
- Details
|
||||
- Actions
|
||||
|
||||
## Output
|
||||
|
||||
Describe what the command should produce:
|
||||
|
||||
\`\`\`markdown
|
||||
## [Command Name] Complete
|
||||
|
||||
### Summary
|
||||
[What was done]
|
||||
|
||||
### Results
|
||||
- Item 1
|
||||
- Item 2
|
||||
|
||||
### Next Steps
|
||||
1. Next action
|
||||
2. Another action
|
||||
\`\`\`
|
||||
|
||||
## Example
|
||||
|
||||
**Input**: `/command-name example input`
|
||||
|
||||
**Output**: Description of what happens with this example
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--flag-name` | What this flag does | `--flag-name=value` |
|
||||
|
||||
<!-- CUSTOMIZATION POINT -->
|
||||
## Variations
|
||||
|
||||
Optional section for project-specific variations.
|
||||
```
|
||||
|
||||
## Command Anatomy
|
||||
|
||||
### 1. Header Section
|
||||
|
||||
```markdown
|
||||
# /deploy - Deploy Application
|
||||
|
||||
## Purpose
|
||||
|
||||
Deploy the application to specified environment with pre-deployment checks,
|
||||
database migrations, and post-deployment verification.
|
||||
```
|
||||
|
||||
The header includes:
|
||||
|
||||
- **Title**: Command name and one-line description
|
||||
- **Purpose**: Detailed explanation of what and why
|
||||
|
||||
### 2. Usage Section
|
||||
|
||||
```markdown
|
||||
## Usage
|
||||
|
||||
\`\`\`
|
||||
/deploy [environment] [--skip-tests]
|
||||
\`\`\`
|
||||
|
||||
## Arguments
|
||||
|
||||
- `environment`: Target environment (staging, production)
|
||||
- `--skip-tests`: Skip running tests before deployment
|
||||
```
|
||||
|
||||
Define:
|
||||
|
||||
- How to invoke the command
|
||||
- What arguments it accepts
|
||||
- Optional flags
|
||||
|
||||
### 3. Separator Line
|
||||
|
||||
```markdown
|
||||
---
|
||||
|
||||
Deploy to **$ARGUMENTS** environment:
|
||||
```
|
||||
|
||||
The `---` separator is important:
|
||||
|
||||
- Everything above is documentation
|
||||
- Everything below is the instruction Claude executes
|
||||
- Use `$ARGUMENTS` to inject user input
|
||||
|
||||
### 4. Workflow Section
|
||||
|
||||
```markdown
|
||||
## Workflow
|
||||
|
||||
### Phase 1: Pre-deployment Checks
|
||||
|
||||
1. **Verify Environment**
|
||||
- Check environment exists
|
||||
- Verify credentials
|
||||
- Confirm deployment is allowed
|
||||
|
||||
2. **Run Tests**
|
||||
- Execute full test suite
|
||||
- Check code coverage
|
||||
- Fail if tests don't pass
|
||||
```
|
||||
|
||||
Break down the command into:
|
||||
|
||||
- Logical phases
|
||||
- Numbered steps within phases
|
||||
- Clear success criteria
|
||||
|
||||
### 5. Output Section
|
||||
|
||||
```markdown
|
||||
## Output
|
||||
|
||||
\`\`\`markdown
|
||||
## Deployment Complete
|
||||
|
||||
### Environment
|
||||
Production
|
||||
|
||||
### Changes Deployed
|
||||
- API v2.3.1
|
||||
- Database migration: add_user_preferences
|
||||
- Updated 15 files
|
||||
|
||||
### Verification
|
||||
- Health check: ✓ Passed
|
||||
- Smoke tests: ✓ Passed
|
||||
|
||||
### Rollback Command
|
||||
/rollback production v2.3.0
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
Show what the successful output should look like.
|
||||
|
||||
### 6. Examples Section
|
||||
|
||||
```markdown
|
||||
## Example
|
||||
|
||||
**Input**: `/deploy production`
|
||||
|
||||
**Output**:
|
||||
1. Runs test suite (2 min)
|
||||
2. Builds production bundle (1 min)
|
||||
3. Deploys to production servers
|
||||
4. Runs smoke tests
|
||||
5. Reports deployment status
|
||||
```
|
||||
|
||||
Provide concrete examples of usage.
|
||||
|
||||
### 7. Flags Section
|
||||
|
||||
```markdown
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--skip-tests` | Skip pre-deployment tests | `/deploy staging --skip-tests` |
|
||||
| `--force` | Force deployment without confirmation | `/deploy prod --force` |
|
||||
| `--rollback` | Rollback to previous version | `/deploy prod --rollback` |
|
||||
```
|
||||
|
||||
Document all available flags.
|
||||
|
||||
## Complete Example: Custom Deploy Command
|
||||
|
||||
Here's a real-world example:
|
||||
|
||||
```markdown
|
||||
# /deploy - Deploy Application
|
||||
|
||||
## Purpose
|
||||
|
||||
Deploy the application to specified environment with automated checks,
|
||||
database migrations, and verification steps.
|
||||
|
||||
## Usage
|
||||
|
||||
\`\`\`
|
||||
/deploy [environment]
|
||||
\`\`\`
|
||||
|
||||
## Arguments
|
||||
|
||||
- `environment`: Target environment (staging, production)
|
||||
|
||||
---
|
||||
|
||||
Deploy to **$ARGUMENTS** environment:
|
||||
|
||||
## Workflow
|
||||
|
||||
### Phase 1: Pre-deployment Checks
|
||||
|
||||
1. **Verify Environment Configuration**
|
||||
- Check `.env.[environment]` file exists
|
||||
- Verify required secrets are set
|
||||
- Confirm environment is accessible
|
||||
|
||||
2. **Run Test Suite**
|
||||
```bash
|
||||
pnpm test
|
||||
pnpm test:e2e
|
||||
```
|
||||
- All tests must pass
|
||||
- Coverage must be >= 80%
|
||||
|
||||
3. **Check for Breaking Changes**
|
||||
- Review CHANGELOG.md
|
||||
- Identify migration requirements
|
||||
- Confirm database backup exists
|
||||
|
||||
### Phase 2: Build
|
||||
|
||||
1. **Build Production Bundle**
|
||||
```bash
|
||||
pnpm build
|
||||
```
|
||||
- Verify build completes without errors
|
||||
- Check bundle size
|
||||
- Validate output directory
|
||||
|
||||
2. **Run Database Migrations**
|
||||
```bash
|
||||
pnpm migrate:$ARGUMENTS
|
||||
```
|
||||
- Apply pending migrations
|
||||
- Verify migration success
|
||||
- Create rollback script
|
||||
|
||||
### Phase 3: Deploy
|
||||
|
||||
1. **Deploy to Environment**
|
||||
```bash
|
||||
pnpm deploy:$ARGUMENTS
|
||||
```
|
||||
- Upload built assets
|
||||
- Update environment variables
|
||||
- Restart services
|
||||
|
||||
2. **Health Checks**
|
||||
- Wait for services to start (30s)
|
||||
- Verify API health endpoint
|
||||
- Check database connectivity
|
||||
|
||||
### Phase 4: Verification
|
||||
|
||||
1. **Run Smoke Tests**
|
||||
```bash
|
||||
pnpm smoke:$ARGUMENTS
|
||||
```
|
||||
- Test critical user paths
|
||||
- Verify external integrations
|
||||
- Check error rates
|
||||
|
||||
2. **Monitor Deployment**
|
||||
- Check application logs for errors
|
||||
- Monitor performance metrics
|
||||
- Verify no spike in error rate
|
||||
|
||||
### Phase 5: Documentation
|
||||
|
||||
1. **Update Deployment Log**
|
||||
- Record deployment time
|
||||
- Note version deployed
|
||||
- List any manual steps taken
|
||||
|
||||
2. **Notify Team**
|
||||
- Post to Slack #deployments channel
|
||||
- Include deployment summary
|
||||
- Provide rollback instructions
|
||||
|
||||
## Output
|
||||
|
||||
\`\`\`markdown
|
||||
## Deployment Complete: $ARGUMENTS
|
||||
|
||||
### Version
|
||||
v2.3.1 (commit: abc1234)
|
||||
|
||||
### Deployment Time
|
||||
2024-01-15 14:30 UTC (Duration: 4m 32s)
|
||||
|
||||
### Changes Deployed
|
||||
- Feature: User profile redesign
|
||||
- Fix: Payment processing timeout
|
||||
- Database: Migration #045 (add_user_preferences)
|
||||
|
||||
### Verification Results
|
||||
- Health Check: ✓ Passed
|
||||
- Smoke Tests: ✓ All passed (12/12)
|
||||
- Error Rate: 0.01% (normal)
|
||||
|
||||
### Rollback Command
|
||||
If issues arise, rollback with:
|
||||
\`/rollback $ARGUMENTS v2.3.0\`
|
||||
|
||||
### Monitoring
|
||||
- Dashboard: https://monitoring.example.com
|
||||
- Logs: https://logs.example.com
|
||||
\`\`\`
|
||||
|
||||
## Example
|
||||
|
||||
**Input**: `/deploy production`
|
||||
|
||||
**Output**:
|
||||
1. Runs full test suite (3 min)
|
||||
2. Builds production bundle (2 min)
|
||||
3. Applies database migrations (30s)
|
||||
4. Deploys to production cluster (1 min)
|
||||
5. Runs smoke tests (1 min)
|
||||
6. Posts deployment notification to Slack
|
||||
7. Provides rollback command
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `--skip-tests` | Skip test suite (not recommended for production) | `--skip-tests` |
|
||||
| `--skip-migrations` | Skip database migrations | `--skip-migrations` |
|
||||
| `--dry-run` | Simulate deployment without executing | `--dry-run` |
|
||||
| `--force` | Skip confirmation prompts | `--force` |
|
||||
|
||||
### Flag Usage
|
||||
|
||||
```bash
|
||||
/deploy staging --skip-tests # Deploy to staging without tests
|
||||
/deploy production --dry-run # Simulate production deployment
|
||||
/deploy production --skip-migrations # Deploy without DB changes
|
||||
```
|
||||
|
||||
<!-- CUSTOMIZATION POINT -->
|
||||
## Project-Specific Variations
|
||||
|
||||
Modify the workflow based on your deployment strategy:
|
||||
|
||||
- Add CDN cache invalidation steps
|
||||
- Include blue-green deployment logic
|
||||
- Add feature flag configuration
|
||||
- Include monitoring alert setup
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### 1. Keep Commands Focused
|
||||
|
||||
Each command should do ONE thing well:
|
||||
|
||||
```markdown
|
||||
# Good: Focused commands
|
||||
/deploy [env] # Just deployment
|
||||
/migrate [env] # Just migrations
|
||||
/rollback [env] # Just rollback
|
||||
|
||||
# Bad: Doing too much
|
||||
/deploy-and-test-and-notify [env]
|
||||
```
|
||||
|
||||
### 2. Use Clear Phase Names
|
||||
|
||||
```markdown
|
||||
# Good: Clear phases
|
||||
### Phase 1: Pre-deployment Checks
|
||||
### Phase 2: Build and Test
|
||||
### Phase 3: Deploy
|
||||
|
||||
# Bad: Vague phases
|
||||
### Phase 1: Setup
|
||||
### Phase 2: Main stuff
|
||||
### Phase 3: Finish
|
||||
```
|
||||
|
||||
### 3. Provide Verification Steps
|
||||
|
||||
```markdown
|
||||
## Workflow
|
||||
|
||||
### Phase 2: Build
|
||||
|
||||
1. **Build Application**
|
||||
```bash
|
||||
pnpm build
|
||||
```
|
||||
|
||||
**Verification**:
|
||||
- Check `dist/` folder exists
|
||||
- Verify no build errors in output
|
||||
- Confirm bundle size < 500KB
|
||||
```
|
||||
|
||||
### 4. Include Error Handling
|
||||
|
||||
```markdown
|
||||
### Phase 3: Deploy
|
||||
|
||||
1. **Deploy to Server**
|
||||
- Upload build artifacts
|
||||
|
||||
**If deployment fails**:
|
||||
- Check server connectivity
|
||||
- Verify deployment credentials
|
||||
- Review server logs at `/var/log/app.log`
|
||||
- Consider using `--force` flag
|
||||
```
|
||||
|
||||
### 5. Add Real Examples
|
||||
|
||||
```markdown
|
||||
## Example
|
||||
|
||||
**Scenario**: Deploy new feature to staging
|
||||
|
||||
**Input**: `/deploy staging`
|
||||
|
||||
**What happens**:
|
||||
1. ✓ Tests pass (2m 15s)
|
||||
2. ✓ Build succeeds (45s)
|
||||
3. ✓ Migrations applied (2 migrations)
|
||||
4. ✓ Deployment complete (30s)
|
||||
5. ✓ Smoke tests pass (5/5)
|
||||
|
||||
**Output**: Deployment summary with rollback command
|
||||
```
|
||||
|
||||
## Common Command Patterns
|
||||
|
||||
### Pattern 1: Multi-Step Workflow
|
||||
|
||||
```markdown
|
||||
# /release - Create Release
|
||||
|
||||
## Workflow
|
||||
|
||||
### Phase 1: Prepare
|
||||
1. Verify clean working directory
|
||||
2. Pull latest changes
|
||||
3. Run full test suite
|
||||
|
||||
### Phase 2: Version
|
||||
1. Bump version number
|
||||
2. Update CHANGELOG.md
|
||||
3. Commit version changes
|
||||
|
||||
### Phase 3: Release
|
||||
1. Create git tag
|
||||
2. Push to remote
|
||||
3. Trigger CI/CD pipeline
|
||||
|
||||
### Phase 4: Verify
|
||||
1. Wait for CI build
|
||||
2. Verify release artifacts
|
||||
3. Post release notes
|
||||
```
|
||||
|
||||
### Pattern 2: Interactive Workflow
|
||||
|
||||
```markdown
|
||||
# /onboard - Onboard New Team Member
|
||||
|
||||
## Workflow
|
||||
|
||||
### Phase 1: Environment Setup
|
||||
1. **Ask for GitHub username**
|
||||
- Add to organization
|
||||
- Add to relevant teams
|
||||
|
||||
2. **Ask for preferred IDE**
|
||||
- Provide setup instructions
|
||||
- Share configuration files
|
||||
```
|
||||
|
||||
### Pattern 3: Conditional Workflow
|
||||
|
||||
```markdown
|
||||
# /optimize - Optimize Performance
|
||||
|
||||
## Workflow
|
||||
|
||||
### Phase 1: Analyze
|
||||
1. Run performance profiler
|
||||
2. Identify bottlenecks
|
||||
|
||||
**If database is bottleneck**:
|
||||
- Go to Phase 2: Database Optimization
|
||||
|
||||
**If API is bottleneck**:
|
||||
- Go to Phase 3: API Optimization
|
||||
```
|
||||
|
||||
## Testing Your Command
|
||||
|
||||
After creating a command, test it:
|
||||
|
||||
1. **Invoke it**: `/your-command test input`
|
||||
2. **Verify behavior**: Check that Claude follows the workflow
|
||||
3. **Test flags**: Try each flag combination
|
||||
4. **Check output**: Ensure output matches template
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [Create Custom Modes](/claudekit/customization/creating-modes/) — Define behavioral patterns
|
||||
- [Create Custom Skills](/claudekit/customization/creating-skills/) — Add knowledge modules
|
||||
- [Configure CLAUDE.md](/claudekit/customization/claude-md/) — Set project standards
|
||||
|
||||
## Examples to Study
|
||||
|
||||
Check these built-in commands for inspiration:
|
||||
|
||||
- `/feature` — Complex multi-phase workflow
|
||||
- `/fix` — Debugging workflow with error handling
|
||||
- `/ship` — Git workflow automation
|
||||
- `/tdd` — Methodology-driven development
|
||||
@@ -1,665 +0,0 @@
|
||||
---
|
||||
title: Creating Custom Modes
|
||||
description: Learn how to create custom behavioral modes for different work contexts.
|
||||
---
|
||||
|
||||
# Creating Custom Modes
|
||||
|
||||
Modes change how Claude behaves, thinks, and communicates. This guide shows you how to create custom modes for your specific work contexts.
|
||||
|
||||
## What Are Modes?
|
||||
|
||||
Modes are behavioral configurations that adjust:
|
||||
|
||||
- **Communication style** — Verbose vs. concise, formal vs. casual
|
||||
- **Problem-solving approach** — Exploratory vs. direct, sequential vs. parallel
|
||||
- **Output format** — Detailed explanations vs. code-only, structured vs. free-form
|
||||
|
||||
Think of modes as "personality presets" for different types of work.
|
||||
|
||||
## Mode File Structure
|
||||
|
||||
Modes are markdown files in `.claude/modes/`:
|
||||
|
||||
```
|
||||
.claude/modes/
|
||||
├── your-mode.md # /mode your-mode
|
||||
├── pair-programming.md # /mode pair-programming
|
||||
└── emergency-debug.md # /mode emergency-debug
|
||||
```
|
||||
|
||||
The filename (without `.md`) becomes the mode name.
|
||||
|
||||
## Mode Template
|
||||
|
||||
Here's the complete template for a mode file:
|
||||
|
||||
```markdown
|
||||
# Mode Name
|
||||
|
||||
## Description
|
||||
|
||||
Brief description of what this mode does and when to use it.
|
||||
|
||||
## When to Use
|
||||
|
||||
- Scenario 1
|
||||
- Scenario 2
|
||||
- Scenario 3
|
||||
|
||||
---
|
||||
|
||||
## Behavior
|
||||
|
||||
### Communication
|
||||
- How to communicate in this mode
|
||||
- What tone to use
|
||||
- Level of verbosity
|
||||
|
||||
### Problem Solving
|
||||
- How to approach problems
|
||||
- What to prioritize
|
||||
- What to avoid
|
||||
|
||||
### Output Format
|
||||
- What format to use for responses
|
||||
- How to structure information
|
||||
- What to include/exclude
|
||||
|
||||
---
|
||||
|
||||
## Activation
|
||||
|
||||
\`\`\`
|
||||
Use mode: mode-name
|
||||
\`\`\`
|
||||
|
||||
Or use command flag:
|
||||
\`\`\`
|
||||
/command --mode=mode-name [args]
|
||||
\`\`\`
|
||||
|
||||
---
|
||||
|
||||
## Example Behaviors
|
||||
|
||||
### Before [Action]
|
||||
\`\`\`
|
||||
Example of behavior in this mode
|
||||
\`\`\`
|
||||
|
||||
### [Another Scenario]
|
||||
\`\`\`
|
||||
Example of different behavior
|
||||
\`\`\`
|
||||
|
||||
---
|
||||
|
||||
## Combines Well With
|
||||
|
||||
- Related commands or modes
|
||||
- Complementary workflows
|
||||
```
|
||||
|
||||
## Mode Anatomy
|
||||
|
||||
### 1. Header and Description
|
||||
|
||||
```markdown
|
||||
# Pair Programming Mode
|
||||
|
||||
## Description
|
||||
|
||||
Interactive development mode that simulates pair programming with
|
||||
continuous feedback, explanations, and collaborative problem-solving.
|
||||
|
||||
## When to Use
|
||||
|
||||
- Learning new codebase or technology
|
||||
- Working through complex problems
|
||||
- When you want to understand the "why" behind decisions
|
||||
- Teaching or mentoring scenarios
|
||||
```
|
||||
|
||||
Define:
|
||||
|
||||
- Mode name (clear and descriptive)
|
||||
- What it does (2-3 sentences)
|
||||
- When to activate it
|
||||
|
||||
### 2. Behavior Section
|
||||
|
||||
```markdown
|
||||
## Behavior
|
||||
|
||||
### Communication
|
||||
- Explain reasoning behind every decision
|
||||
- Ask clarifying questions before implementing
|
||||
- Use "we" language (collaborative tone)
|
||||
- Provide alternatives when multiple approaches exist
|
||||
|
||||
### Problem Solving
|
||||
- Think out loud while working
|
||||
- Break down complex problems step-by-step
|
||||
- Suggest improvements to existing code
|
||||
- Point out potential issues before they become problems
|
||||
|
||||
### Output Format
|
||||
- Show code with inline explanations
|
||||
- Include "why" comments
|
||||
- Provide learning opportunities
|
||||
- Offer refactoring suggestions
|
||||
```
|
||||
|
||||
This is the core of the mode — it tells Claude HOW to behave.
|
||||
|
||||
### 3. Activation Instructions
|
||||
|
||||
```markdown
|
||||
## Activation
|
||||
|
||||
\`\`\`
|
||||
Use mode: pair-programming
|
||||
\`\`\`
|
||||
|
||||
Or use command flag:
|
||||
\`\`\`
|
||||
/feature --mode=pair-programming "add user auth"
|
||||
/fix --mode=pair-programming "bug in payment"
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
Show both ways to activate the mode.
|
||||
|
||||
### 4. Example Behaviors
|
||||
|
||||
```markdown
|
||||
## Example Behaviors
|
||||
|
||||
### Before Writing Code
|
||||
\`\`\`
|
||||
Let me explain my approach before we code:
|
||||
|
||||
1. We'll add authentication middleware to the router
|
||||
2. This will check for a valid JWT token
|
||||
3. We should also handle token expiration
|
||||
|
||||
Does this approach make sense? Any concerns?
|
||||
\`\`\`
|
||||
|
||||
### During Implementation
|
||||
\`\`\`typescript
|
||||
// Let's add the auth middleware
|
||||
// We're using JWT because it's stateless and scales well
|
||||
export const authMiddleware = async (req, res, next) => {
|
||||
// First, we extract the token from the Authorization header
|
||||
const token = req.headers.authorization?.split(' ')[1];
|
||||
|
||||
// We should validate it exists before proceeding
|
||||
if (!token) {
|
||||
return res.status(401).json({ error: 'No token provided' });
|
||||
}
|
||||
|
||||
// Now let's verify it...
|
||||
// What error handling do you prefer here?
|
||||
\`\`\`
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
Provide concrete examples of how the mode changes behavior.
|
||||
|
||||
### 5. Integration Suggestions
|
||||
|
||||
```markdown
|
||||
## Combines Well With
|
||||
|
||||
- `/feature` command — Collaborative feature development
|
||||
- `/refactor` command — Understanding refactoring decisions
|
||||
- `deep-research` mode — When learning requires research
|
||||
```
|
||||
|
||||
Suggest complementary commands and modes.
|
||||
|
||||
## Complete Example: Emergency Debug Mode
|
||||
|
||||
Here's a real-world example:
|
||||
|
||||
```markdown
|
||||
# Emergency Debug Mode
|
||||
|
||||
## Description
|
||||
|
||||
Fast, focused debugging mode for production issues. Prioritizes speed,
|
||||
minimal output, and getting systems operational over perfect solutions.
|
||||
|
||||
## When to Use
|
||||
|
||||
- Production is down
|
||||
- Critical bug affecting users
|
||||
- Time-sensitive issues
|
||||
- Emergency hotfixes
|
||||
- When you need to ship a fix NOW
|
||||
|
||||
---
|
||||
|
||||
## Behavior
|
||||
|
||||
### Communication
|
||||
- No pleasantries or explanations
|
||||
- Direct commands and code only
|
||||
- Skip "why" unless asked
|
||||
- Use short, imperative sentences
|
||||
|
||||
### Problem Solving
|
||||
- Jump straight to most likely cause
|
||||
- Apply quick fixes over perfect solutions
|
||||
- Defer refactoring to later
|
||||
- Focus on symptom relief first
|
||||
- Add TODO comments for proper fixes
|
||||
|
||||
### Output Format
|
||||
- Code blocks without surrounding prose
|
||||
- Bullet points over paragraphs
|
||||
- Commands to run, not explanations
|
||||
- Immediate actionable steps
|
||||
|
||||
### Speed Over Perfection
|
||||
- Quick fixes are acceptable
|
||||
- Technical debt is acceptable
|
||||
- Tests can be added later
|
||||
- Documentation can wait
|
||||
- Focus: Get it working NOW
|
||||
|
||||
---
|
||||
|
||||
## Activation
|
||||
|
||||
\`\`\`
|
||||
Use mode: emergency-debug
|
||||
\`\`\`
|
||||
|
||||
Or use command flag:
|
||||
\`\`\`
|
||||
/fix --mode=emergency-debug "production API down"
|
||||
/deploy --mode=emergency-debug "hotfix-123"
|
||||
\`\`\`
|
||||
|
||||
---
|
||||
|
||||
## Example Behaviors
|
||||
|
||||
### Problem Report
|
||||
**User**: "Production API returning 500 errors"
|
||||
|
||||
**Response**:
|
||||
\`\`\`bash
|
||||
# Check logs
|
||||
tail -f /var/log/api/error.log
|
||||
|
||||
# Common causes:
|
||||
1. Database connection
|
||||
2. Memory leak
|
||||
3. External API timeout
|
||||
|
||||
# Quick check:
|
||||
curl -v https://api.example.com/health
|
||||
\`\`\`
|
||||
|
||||
### Immediate Fix
|
||||
\`\`\`typescript
|
||||
// Quick fix: Add timeout to prevent hanging
|
||||
const response = await fetch(url, {
|
||||
signal: AbortSignal.timeout(5000) // 5s timeout
|
||||
});
|
||||
|
||||
// TODO: Investigate why external API is slow
|
||||
// TODO: Add proper retry logic
|
||||
// TODO: Add monitoring for this endpoint
|
||||
\`\`\`
|
||||
|
||||
### Deployment
|
||||
\`\`\`bash
|
||||
# Skip tests for emergency deploy
|
||||
git add .
|
||||
git commit -m "hotfix: add API timeout"
|
||||
git push origin hotfix/api-timeout
|
||||
|
||||
# Deploy immediately
|
||||
./deploy.sh production --skip-tests --force
|
||||
|
||||
# Monitor for errors
|
||||
watch -n 2 'curl -s https://api.example.com/health'
|
||||
\`\`\`
|
||||
|
||||
---
|
||||
|
||||
## Post-Emergency Checklist
|
||||
|
||||
After crisis is resolved, create follow-up tasks:
|
||||
|
||||
\`\`\`markdown
|
||||
## TODO: Clean up emergency fix
|
||||
|
||||
- [ ] Add tests for timeout handling
|
||||
- [ ] Investigate root cause of slow API
|
||||
- [ ] Implement proper retry logic
|
||||
- [ ] Add monitoring/alerts
|
||||
- [ ] Document incident
|
||||
- [ ] Schedule post-mortem
|
||||
\`\`\`
|
||||
|
||||
---
|
||||
|
||||
## Combines Well With
|
||||
|
||||
- `/fix` command — Emergency bug fixes
|
||||
- `/deploy` command — Rapid deployment
|
||||
- `token-efficient` mode — Fast, minimal output
|
||||
- `--format=ultra` flag — Code-only responses
|
||||
|
||||
---
|
||||
|
||||
## When NOT to Use
|
||||
|
||||
- Feature development
|
||||
- Refactoring work
|
||||
- Code review
|
||||
- Learning new patterns
|
||||
- Non-urgent bugs
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### 1. Define Clear Boundaries
|
||||
|
||||
```markdown
|
||||
## When to Use
|
||||
- Specific scenario A
|
||||
- Specific scenario B
|
||||
|
||||
## When NOT to Use
|
||||
- Different scenario X
|
||||
- Different scenario Y
|
||||
```
|
||||
|
||||
Help users know when to activate the mode.
|
||||
|
||||
### 2. Show Behavior Changes with Examples
|
||||
|
||||
```markdown
|
||||
## Example Behaviors
|
||||
|
||||
### Standard Mode
|
||||
\`\`\`
|
||||
Let me implement the user authentication feature. First, I'll
|
||||
explain the architecture I'm proposing...
|
||||
\`\`\`
|
||||
|
||||
### This Mode
|
||||
\`\`\`typescript
|
||||
// Auth middleware
|
||||
export const auth = (req, res, next) => {
|
||||
const token = req.headers.authorization?.split(' ')[1];
|
||||
if (!token) return res.status(401).send();
|
||||
// ...
|
||||
}
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
Contrast with default behavior to show the difference.
|
||||
|
||||
### 3. Be Specific About Communication Style
|
||||
|
||||
```markdown
|
||||
### Communication
|
||||
- Use active voice: "Run this command" not "You could run this command"
|
||||
- No hedging: "This fixes it" not "This should probably fix it"
|
||||
- Short sentences: Average 10 words
|
||||
- No adjectives unless critical
|
||||
```
|
||||
|
||||
Precise instructions produce consistent behavior.
|
||||
|
||||
### 4. Address Multiple Dimensions
|
||||
|
||||
Cover all three behavioral dimensions:
|
||||
|
||||
```markdown
|
||||
### Communication
|
||||
[How to talk]
|
||||
|
||||
### Problem Solving
|
||||
[How to think]
|
||||
|
||||
### Output Format
|
||||
[How to structure responses]
|
||||
```
|
||||
|
||||
### 5. Provide Output Format Examples
|
||||
|
||||
```markdown
|
||||
### Output Format
|
||||
|
||||
\`\`\`markdown
|
||||
## Problem: [Issue]
|
||||
|
||||
### Root Cause
|
||||
[One sentence]
|
||||
|
||||
### Fix
|
||||
\`\`\`[code]\`\`\`
|
||||
|
||||
### Test
|
||||
\`\`\`[command]\`\`\`
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
## Common Mode Patterns
|
||||
|
||||
### Pattern 1: Verbosity Spectrum
|
||||
|
||||
```markdown
|
||||
# Ultra-Verbose Mode
|
||||
|
||||
### Communication
|
||||
- Explain every decision in detail
|
||||
- Provide historical context
|
||||
- Include multiple examples
|
||||
- Add learning resources
|
||||
|
||||
# Ultra-Concise Mode
|
||||
|
||||
### Communication
|
||||
- Code only, no prose
|
||||
- One-line comments max
|
||||
- Assume expert knowledge
|
||||
- Skip obvious steps
|
||||
```
|
||||
|
||||
### Pattern 2: Interaction Style
|
||||
|
||||
```markdown
|
||||
# Interactive Mode
|
||||
|
||||
### Communication
|
||||
- Ask questions before proceeding
|
||||
- Validate each step
|
||||
- Present options for user choice
|
||||
- Collaborative decision-making
|
||||
|
||||
# Autonomous Mode
|
||||
|
||||
### Communication
|
||||
- Make decisions independently
|
||||
- Move through phases without stopping
|
||||
- Report results at end
|
||||
- Minimal back-and-forth
|
||||
```
|
||||
|
||||
### Pattern 3: Focus Area
|
||||
|
||||
```markdown
|
||||
# Security-First Mode
|
||||
|
||||
### Problem Solving
|
||||
- Security is top priority
|
||||
- Flag any potential vulnerability
|
||||
- Suggest secure alternatives
|
||||
- Reference OWASP guidelines
|
||||
|
||||
# Performance-First Mode
|
||||
|
||||
### Problem Solving
|
||||
- Optimize for speed
|
||||
- Minimize resource usage
|
||||
- Benchmark all changes
|
||||
- Profile before/after
|
||||
```
|
||||
|
||||
### Pattern 4: Workflow Style
|
||||
|
||||
```markdown
|
||||
# Exploratory Mode
|
||||
|
||||
### Problem Solving
|
||||
- Generate multiple alternatives
|
||||
- Discuss trade-offs
|
||||
- Delay final decisions
|
||||
- Map solution space
|
||||
|
||||
# Execution Mode
|
||||
|
||||
### Problem Solving
|
||||
- Follow established patterns
|
||||
- Use proven solutions
|
||||
- Move quickly to implementation
|
||||
- Avoid bikeshedding
|
||||
```
|
||||
|
||||
## Advanced Mode Features
|
||||
|
||||
### Combining Modes
|
||||
|
||||
Modes can reference other modes:
|
||||
|
||||
```markdown
|
||||
# Deep Security Audit Mode
|
||||
|
||||
Combines:
|
||||
- `security-first` mode — Security focus
|
||||
- `deep-research` mode — Thorough analysis
|
||||
- `review` mode — Critical perspective
|
||||
|
||||
With modifications:
|
||||
- Even more thorough than base modes
|
||||
- Document every finding
|
||||
- Include remediation steps
|
||||
```
|
||||
|
||||
### Conditional Behavior
|
||||
|
||||
```markdown
|
||||
### Problem Solving
|
||||
|
||||
**If problem is well-defined:**
|
||||
- Jump straight to solution
|
||||
- Implement immediately
|
||||
|
||||
**If problem is vague:**
|
||||
- Ask clarifying questions
|
||||
- Propose multiple approaches
|
||||
- Wait for direction
|
||||
```
|
||||
|
||||
### Time-Based Behavior
|
||||
|
||||
```markdown
|
||||
### Communication
|
||||
|
||||
**First message:**
|
||||
- Explain mode activation
|
||||
- Set expectations
|
||||
- Confirm approach
|
||||
|
||||
**Subsequent messages:**
|
||||
- Follow mode strictly
|
||||
- Minimal meta-commentary
|
||||
```
|
||||
|
||||
## Testing Your Mode
|
||||
|
||||
After creating a mode, test it:
|
||||
|
||||
1. **Activate it**: `/mode your-mode`
|
||||
2. **Try various commands**: `/feature`, `/fix`, `/review`
|
||||
3. **Verify behavior changes**: Check communication style, output format
|
||||
4. **Test edge cases**: Complex problems, simple problems
|
||||
5. **Compare to default**: Is the difference clear?
|
||||
|
||||
## Common Use Cases
|
||||
|
||||
### Documentation Mode
|
||||
|
||||
```markdown
|
||||
# Documentation Mode
|
||||
|
||||
## When to Use
|
||||
- Writing docs
|
||||
- Explaining code
|
||||
- Creating tutorials
|
||||
|
||||
### Communication
|
||||
- Clear, simple language
|
||||
- Define all terms
|
||||
- Assume beginner audience
|
||||
- Include examples for everything
|
||||
```
|
||||
|
||||
### Code Review Mode
|
||||
|
||||
```markdown
|
||||
# Code Review Mode
|
||||
|
||||
## When to Use
|
||||
- Reviewing PRs
|
||||
- Security audits
|
||||
- Quality checks
|
||||
|
||||
### Problem Solving
|
||||
- Critical analysis
|
||||
- Look for issues
|
||||
- Suggest improvements
|
||||
- Flag anti-patterns
|
||||
```
|
||||
|
||||
### Teaching Mode
|
||||
|
||||
```markdown
|
||||
# Teaching Mode
|
||||
|
||||
## When to Use
|
||||
- Learning new tech
|
||||
- Understanding patterns
|
||||
- Mentoring
|
||||
|
||||
### Communication
|
||||
- Explain "why" not just "how"
|
||||
- Provide context
|
||||
- Use analogies
|
||||
- Check understanding
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [Create Custom Commands](/claudekit/customization/creating-commands/) — Build workflow automation
|
||||
- [Create Custom Skills](/claudekit/customization/creating-skills/) — Add knowledge modules
|
||||
- [Configure CLAUDE.md](/claudekit/customization/claude-md/) — Set project standards
|
||||
|
||||
## Examples to Study
|
||||
|
||||
Check these built-in modes for inspiration:
|
||||
|
||||
- `brainstorm` — Exploratory, question-driven
|
||||
- `token-efficient` — Minimal output for cost savings
|
||||
- `deep-research` — Thorough analysis with citations
|
||||
- `implementation` — Code-focused execution
|
||||
@@ -1,760 +1,194 @@
|
||||
---
|
||||
title: Creating Custom Skills
|
||||
description: Learn how to create custom skill modules to extend Claude's knowledge for your tech stack.
|
||||
title: Creating Skills
|
||||
description: How to create custom skills for Claude Kit.
|
||||
---
|
||||
|
||||
# Creating Custom Skills
|
||||
# Creating Skills
|
||||
|
||||
Skills are knowledge modules that give Claude expertise in specific technologies, frameworks, methodologies, or your project-specific patterns. This guide shows you how to create custom skills.
|
||||
Skills are the core building block of Claude Kit. You can create custom skills for your project's specific patterns, frameworks, or workflows.
|
||||
|
||||
## What Are Skills?
|
||||
## Skill Structure
|
||||
|
||||
Skills are focused knowledge modules that provide:
|
||||
|
||||
- **Best practices** for languages, frameworks, tools
|
||||
- **Code patterns** and examples
|
||||
- **Common pitfalls** to avoid
|
||||
- **Project-specific conventions** and APIs
|
||||
|
||||
Skills are automatically loaded based on context and can be referenced explicitly in commands.
|
||||
|
||||
## Skill File Structure
|
||||
|
||||
Skills are `SKILL.md` files organized by category:
|
||||
Each skill is a directory in `.claude/skills/` containing a `SKILL.md` file:
|
||||
|
||||
```
|
||||
.claude/skills/
|
||||
├── languages/
|
||||
│ ├── python/SKILL.md
|
||||
│ └── rust/SKILL.md
|
||||
├── frameworks/
|
||||
│ ├── react/SKILL.md
|
||||
│ └── svelte/SKILL.md
|
||||
├── databases/
|
||||
│ └── mysql/SKILL.md
|
||||
├── testing/
|
||||
│ └── rspec/SKILL.md
|
||||
├── methodology/
|
||||
│ └── your-workflow/SKILL.md
|
||||
└── custom/
|
||||
├── your-api/SKILL.md
|
||||
└── internal-tools/SKILL.md
|
||||
└── my-skill/
|
||||
├── SKILL.md # Skill definition (required)
|
||||
└── resources/ # Optional bundled references
|
||||
├── patterns.md
|
||||
└── examples.md
|
||||
```
|
||||
|
||||
## Skill Categories
|
||||
|
||||
Organize skills into these standard categories:
|
||||
|
||||
| Category | What Goes Here | Examples |
|
||||
|----------|----------------|----------|
|
||||
| `languages/` | Programming language best practices | python, rust, go |
|
||||
| `frameworks/` | Web frameworks and libraries | svelte, rails, vue |
|
||||
| `databases/` | Database-specific patterns | mysql, cassandra |
|
||||
| `testing/` | Testing frameworks | rspec, mocha |
|
||||
| `devops/` | Infrastructure and deployment | kubernetes, terraform |
|
||||
| `frontend/` | Frontend tools and libraries | tailwind, alpine |
|
||||
| `security/` | Security frameworks | owasp, security-headers |
|
||||
| `api/` | API design and documentation | graphql, grpc |
|
||||
| `methodology/` | Development methodologies | your-tdd, your-review-process |
|
||||
| `custom/` | Project-specific knowledge | internal-api, company-standards |
|
||||
|
||||
## Skill Template
|
||||
|
||||
Here's the complete template for a skill file:
|
||||
## SKILL.md Format
|
||||
|
||||
```markdown
|
||||
# Skill Name
|
||||
---
|
||||
name: my-skill
|
||||
description: Use when [trigger conditions]. Activate for keywords like
|
||||
"keyword1", "keyword2". Also trigger when [specific scenarios].
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Brief description of what this skill covers and when it's relevant.
|
||||
# My Skill
|
||||
|
||||
## When to Use
|
||||
- [Scenario 1]
|
||||
- [Scenario 2]
|
||||
|
||||
- Context 1 where this skill applies
|
||||
- Context 2 where this skill applies
|
||||
- Context 3 where this skill applies
|
||||
## When NOT to Use
|
||||
- [Anti-scenario 1]
|
||||
|
||||
---
|
||||
|
||||
## Core Patterns
|
||||
|
||||
### Pattern 1 Name
|
||||
### Pattern 1: [Name]
|
||||
|
||||
Description of the pattern.
|
||||
[Explanation]
|
||||
|
||||
\`\`\`[language]
|
||||
// Code example showing the pattern
|
||||
\`\`\`typescript
|
||||
// Code example
|
||||
\`\`\`
|
||||
|
||||
**When to use:**
|
||||
- Scenario A
|
||||
- Scenario B
|
||||
### Pattern 2: [Name]
|
||||
|
||||
**Avoid:**
|
||||
- Anti-pattern A
|
||||
- Anti-pattern B
|
||||
|
||||
### Pattern 2 Name
|
||||
|
||||
Another pattern with examples.
|
||||
[Explanation]
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Practice Name**
|
||||
- What to do
|
||||
- Why it matters
|
||||
- Example
|
||||
|
||||
2. **Another Practice**
|
||||
- Details
|
||||
- Examples
|
||||
- [Practice 1]
|
||||
- [Practice 2]
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
- **Pitfall 1**: Description
|
||||
- **Why it's bad**: Explanation
|
||||
- **Solution**: How to avoid
|
||||
|
||||
- **Pitfall 2**: Description
|
||||
- **Why it's bad**: Explanation
|
||||
- **Solution**: How to avoid
|
||||
|
||||
---
|
||||
- [Pitfall 1]
|
||||
- [Pitfall 2]
|
||||
```
|
||||
|
||||
## Skill Anatomy
|
||||
## Frontmatter Fields
|
||||
|
||||
### 1. Header and Description
|
||||
| Field | Required | Description |
|
||||
|-------|----------|-------------|
|
||||
| `name` | Yes | Skill identifier (kebab-case) |
|
||||
| `description` | Yes | Trigger description — Claude reads this to decide when to activate |
|
||||
| `argument-hint` | No | Hint for user-invocable skills (e.g., `<topic>`) |
|
||||
| `user-invocable` | No | If `true`, users can invoke with `/skill-name` |
|
||||
| `disable-model-invocation` | No | If `true`, only manual invocation works |
|
||||
|
||||
## Writing Effective Descriptions
|
||||
|
||||
The `description` field is critical — it determines when Claude activates your skill. Include:
|
||||
|
||||
1. **Primary trigger**: "Use when [main scenario]"
|
||||
2. **Keywords**: "Activate for keywords like X, Y, Z"
|
||||
3. **Secondary triggers**: "Also trigger when [less obvious scenarios]"
|
||||
|
||||
### Good Description
|
||||
|
||||
```yaml
|
||||
description: Use when implementing JWT tokens, OAuth2 flows, session
|
||||
management, or role-based access control. Activate for keywords like
|
||||
"login", "signup", "token refresh", "protected routes". Also trigger
|
||||
when code handles password hashing or API key authentication.
|
||||
```
|
||||
|
||||
### Bad Description
|
||||
|
||||
```yaml
|
||||
description: Authentication skill for handling auth stuff.
|
||||
```
|
||||
|
||||
## Bundled Resources
|
||||
|
||||
For complex skills, include reference documents in a `resources/` subdirectory:
|
||||
|
||||
```
|
||||
.claude/skills/my-framework/
|
||||
├── SKILL.md
|
||||
└── resources/
|
||||
├── api-reference.md # Framework API docs
|
||||
├── migration-guide.md # Version migration patterns
|
||||
└── examples.md # Code examples
|
||||
```
|
||||
|
||||
Reference them from SKILL.md:
|
||||
|
||||
```markdown
|
||||
# Svelte
|
||||
See `resources/api-reference.md` for the full API surface.
|
||||
```
|
||||
|
||||
## Description
|
||||
## Skill Types
|
||||
|
||||
Modern reactive framework for building web applications. Focuses on
|
||||
compile-time optimization, minimal runtime, and reactive declarations.
|
||||
### Rigid Skills
|
||||
|
||||
Follow exactly — no adaptation. Used for methodologies where discipline matters:
|
||||
|
||||
- TDD (red-green-refactor cycle)
|
||||
- Systematic debugging (four-phase investigation)
|
||||
- Verification before completion
|
||||
|
||||
### Flexible Skills
|
||||
|
||||
Adapt principles to context. Used for patterns that vary by project:
|
||||
|
||||
- Language idioms
|
||||
- Framework patterns
|
||||
- Architecture guidelines
|
||||
|
||||
## Example: Custom Deployment Skill
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: deploy-to-fly
|
||||
description: Use when deploying to Fly.io or configuring Fly.io
|
||||
services. Activate for keywords like "fly deploy", "fly.toml",
|
||||
"Fly.io", "fly machines", or any Fly.io-specific configuration.
|
||||
---
|
||||
|
||||
# Deploy to Fly.io
|
||||
|
||||
## When to Use
|
||||
- Deploying applications to Fly.io
|
||||
- Configuring fly.toml
|
||||
- Setting up Fly.io machines or volumes
|
||||
|
||||
- Building modern web applications
|
||||
- Writing component-based UIs
|
||||
- When Svelte is in the project's tech stack
|
||||
```
|
||||
|
||||
Clear, concise overview of what the skill covers.
|
||||
|
||||
### 2. Core Patterns
|
||||
|
||||
```markdown
|
||||
## Core Patterns
|
||||
|
||||
### Reactive Declarations
|
||||
|
||||
Svelte automatically tracks dependencies and re-runs reactive statements.
|
||||
|
||||
\`\`\`svelte
|
||||
<script>
|
||||
let count = 0;
|
||||
|
||||
// Reactive declaration - runs when count changes
|
||||
$: doubled = count * 2;
|
||||
|
||||
// Reactive statement - runs when count changes
|
||||
$: {
|
||||
console.log(`Count is ${count}`);
|
||||
console.log(`Doubled is ${doubled}`);
|
||||
}
|
||||
</script>
|
||||
|
||||
<button on:click={() => count++}>
|
||||
Count: {count}, Doubled: {doubled}
|
||||
</button>
|
||||
\`\`\`
|
||||
|
||||
**When to use:**
|
||||
- Derived values that depend on reactive state
|
||||
- Side effects that should run on state changes
|
||||
- Complex computed values
|
||||
|
||||
**Avoid:**
|
||||
- Over-using reactive statements for simple transformations
|
||||
- Creating circular dependencies between reactive declarations
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
Show actual code patterns users will write.
|
||||
|
||||
### 3. Best Practices
|
||||
|
||||
```markdown
|
||||
## Best Practices
|
||||
|
||||
1. **Keep Components Small**
|
||||
- Aim for < 200 lines per component
|
||||
- Extract reusable logic into modules
|
||||
- Use composition over inheritance
|
||||
|
||||
\`\`\`svelte
|
||||
<!-- Good: Small, focused component -->
|
||||
<UserCard {user} />
|
||||
|
||||
<!-- Avoid: Massive component doing everything -->
|
||||
<UserDashboard {user} {posts} {comments} {settings} />
|
||||
\`\`\`
|
||||
|
||||
2. **Use Stores for Shared State**
|
||||
- Don't prop-drill through multiple levels
|
||||
- Use writable stores for app-wide state
|
||||
- Use derived stores for computed values
|
||||
|
||||
\`\`\`javascript
|
||||
// stores.js
|
||||
import { writable, derived } from 'svelte/store';
|
||||
|
||||
export const users = writable([]);
|
||||
export const activeUsers = derived(
|
||||
users,
|
||||
$users => $users.filter(u => u.active)
|
||||
);
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
Actionable advice with examples.
|
||||
|
||||
### 4. Common Pitfalls
|
||||
|
||||
```markdown
|
||||
## Common Pitfalls
|
||||
|
||||
- **Mutating Arrays/Objects Directly**
|
||||
- **Why it's bad**: Svelte can't detect mutations
|
||||
- **Solution**: Use assignment to trigger reactivity
|
||||
|
||||
\`\`\`javascript
|
||||
// ❌ Wrong - won't trigger reactivity
|
||||
items.push(newItem);
|
||||
|
||||
// ✅ Right - triggers reactivity
|
||||
items = [...items, newItem];
|
||||
\`\`\`
|
||||
|
||||
- **Memory Leaks with Subscriptions**
|
||||
- **Why it's bad**: Unsubscribed stores leak memory
|
||||
- **Solution**: Use $ auto-subscription or onDestroy
|
||||
|
||||
\`\`\`svelte
|
||||
<script>
|
||||
import { onDestroy } from 'svelte';
|
||||
import { myStore } from './stores';
|
||||
|
||||
// ✅ Auto-unsubscribes
|
||||
$: value = $myStore;
|
||||
|
||||
// ✅ Manual cleanup
|
||||
const unsubscribe = myStore.subscribe(value => {
|
||||
// ...
|
||||
});
|
||||
onDestroy(unsubscribe);
|
||||
</script>
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
Real issues developers face with solutions.
|
||||
|
||||
## Complete Example: Internal API Skill
|
||||
|
||||
Here's a project-specific skill example:
|
||||
|
||||
```markdown
|
||||
# Internal API Standards
|
||||
|
||||
## Description
|
||||
|
||||
Best practices and conventions for working with our internal REST API.
|
||||
Covers authentication, error handling, pagination, and response formats.
|
||||
|
||||
## When to Use
|
||||
|
||||
- Making API requests to internal services
|
||||
- Building new API endpoints
|
||||
- Reviewing API-related code
|
||||
## When NOT to Use
|
||||
- Deploying to other platforms (use devops skill instead)
|
||||
|
||||
---
|
||||
|
||||
## Core Patterns
|
||||
## Deployment Checklist
|
||||
|
||||
### Authentication
|
||||
1. Verify `fly.toml` exists and is configured
|
||||
2. Check environment secrets are set: `fly secrets list`
|
||||
3. Deploy: `fly deploy --strategy rolling`
|
||||
4. Verify: `fly status` and `fly logs`
|
||||
|
||||
All API requests require JWT authentication.
|
||||
## Common Patterns
|
||||
|
||||
\`\`\`typescript
|
||||
import { apiClient } from '@/lib/api';
|
||||
### Multi-region deployment
|
||||
|
||||
// Client automatically includes auth token
|
||||
const response = await apiClient.get('/users');
|
||||
\`\`\`toml
|
||||
[env]
|
||||
PRIMARY_REGION = "iad"
|
||||
|
||||
// Manual auth header (if needed)
|
||||
const response = await fetch('/api/users', {
|
||||
headers: {
|
||||
'Authorization': `Bearer ${getAuthToken()}`,
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
});
|
||||
\`\`\`
|
||||
|
||||
**Required headers:**
|
||||
- `Authorization: Bearer {token}`
|
||||
- `Content-Type: application/json`
|
||||
|
||||
### Error Handling
|
||||
|
||||
API returns structured errors following this format:
|
||||
|
||||
\`\`\`typescript
|
||||
interface APIError {
|
||||
error: {
|
||||
code: string; // Machine-readable error code
|
||||
message: string; // Human-readable message
|
||||
details?: object; // Additional context
|
||||
field?: string; // Field that caused error (validation)
|
||||
}
|
||||
}
|
||||
|
||||
// Example error response
|
||||
{
|
||||
"error": {
|
||||
"code": "VALIDATION_ERROR",
|
||||
"message": "Email is required",
|
||||
"field": "email"
|
||||
}
|
||||
}
|
||||
\`\`\`
|
||||
|
||||
**Handle errors consistently:**
|
||||
|
||||
\`\`\`typescript
|
||||
try {
|
||||
const user = await apiClient.post('/users', data);
|
||||
} catch (error) {
|
||||
if (error.code === 'VALIDATION_ERROR') {
|
||||
// Show field error
|
||||
setFieldError(error.field, error.message);
|
||||
} else {
|
||||
// Show generic error
|
||||
showNotification(error.message, 'error');
|
||||
}
|
||||
}
|
||||
\`\`\`
|
||||
|
||||
### Pagination
|
||||
|
||||
List endpoints support cursor-based pagination.
|
||||
|
||||
\`\`\`typescript
|
||||
interface PaginatedResponse<T> {
|
||||
data: T[];
|
||||
pagination: {
|
||||
next_cursor: string | null;
|
||||
has_more: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
// First page
|
||||
const response = await apiClient.get('/users?limit=20');
|
||||
|
||||
// Next page
|
||||
const response = await apiClient.get(
|
||||
`/users?limit=20&cursor=${response.pagination.next_cursor}`
|
||||
);
|
||||
\`\`\`
|
||||
|
||||
**Pagination parameters:**
|
||||
- `limit`: Number of items (max: 100, default: 20)
|
||||
- `cursor`: Cursor from previous response
|
||||
|
||||
### Filtering and Sorting
|
||||
|
||||
Use query parameters for filtering and sorting.
|
||||
|
||||
\`\`\`typescript
|
||||
// Filter by status
|
||||
GET /users?status=active
|
||||
|
||||
// Sort by field
|
||||
GET /users?sort=created_at&order=desc
|
||||
|
||||
// Multiple filters
|
||||
GET /users?status=active&role=admin&sort=name
|
||||
|
||||
// Search
|
||||
GET /users?q=search+term
|
||||
\`\`\`
|
||||
|
||||
**Standard query parameters:**
|
||||
- `status`: Filter by status field
|
||||
- `q`: Full-text search
|
||||
- `sort`: Field to sort by
|
||||
- `order`: Sort direction (`asc` or `desc`)
|
||||
|
||||
---
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use the API Client**
|
||||
- Don't make raw fetch calls
|
||||
- API client handles auth, retries, errors
|
||||
- Provides TypeScript types
|
||||
|
||||
\`\`\`typescript
|
||||
// ✅ Good
|
||||
import { apiClient } from '@/lib/api';
|
||||
const users = await apiClient.get('/users');
|
||||
|
||||
// ❌ Avoid
|
||||
const response = await fetch('/api/users');
|
||||
const users = await response.json();
|
||||
\`\`\`
|
||||
|
||||
2. **Handle Loading States**
|
||||
- Show loading indicators for async operations
|
||||
- Handle errors gracefully
|
||||
- Provide feedback on success
|
||||
|
||||
\`\`\`typescript
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState(null);
|
||||
|
||||
async function loadUsers() {
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
try {
|
||||
const users = await apiClient.get('/users');
|
||||
setUsers(users.data);
|
||||
} catch (err) {
|
||||
setError(err.message);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}
|
||||
\`\`\`
|
||||
|
||||
3. **Validate Before Sending**
|
||||
- Validate data client-side before API call
|
||||
- Reduces unnecessary API requests
|
||||
- Provides immediate feedback
|
||||
|
||||
\`\`\`typescript
|
||||
async function createUser(data) {
|
||||
// Client-side validation
|
||||
if (!data.email || !data.name) {
|
||||
throw new Error('Email and name are required');
|
||||
}
|
||||
|
||||
if (!isValidEmail(data.email)) {
|
||||
throw new Error('Invalid email format');
|
||||
}
|
||||
|
||||
// API call only if validation passes
|
||||
return apiClient.post('/users', data);
|
||||
}
|
||||
\`\`\`
|
||||
|
||||
4. **Use TypeScript Types**
|
||||
- Import types from `@/types/api`
|
||||
- Type your API responses
|
||||
- Catch type errors at compile time
|
||||
|
||||
\`\`\`typescript
|
||||
import type { User, PaginatedResponse } from '@/types/api';
|
||||
|
||||
const response = await apiClient.get<PaginatedResponse<User>>('/users');
|
||||
// response.data is typed as User[]
|
||||
\`\`\`
|
||||
|
||||
---
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
- **Not Handling 401 Responses**
|
||||
- **Why it's bad**: Users get stuck with expired tokens
|
||||
- **Solution**: API client auto-redirects to login on 401
|
||||
|
||||
\`\`\`typescript
|
||||
// API client handles this automatically
|
||||
// No manual 401 handling needed
|
||||
\`\`\`
|
||||
|
||||
- **Forgetting to Paginate**
|
||||
- **Why it's bad**: Large responses slow down the app
|
||||
- **Solution**: Always use pagination for list endpoints
|
||||
|
||||
\`\`\`typescript
|
||||
// ❌ Wrong - loads all users
|
||||
const users = await apiClient.get('/users');
|
||||
|
||||
// ✅ Right - loads 20 users with pagination
|
||||
const response = await apiClient.get('/users?limit=20');
|
||||
\`\`\`
|
||||
|
||||
- **Hardcoding API URLs**
|
||||
- **Why it's bad**: Breaks when environment changes
|
||||
- **Solution**: Use environment-specific config
|
||||
|
||||
\`\`\`typescript
|
||||
// ❌ Wrong
|
||||
fetch('https://api.example.com/users');
|
||||
|
||||
// ✅ Right - uses env-specific base URL
|
||||
apiClient.get('/users');
|
||||
\`\`\`
|
||||
|
||||
- **Not Handling Rate Limits**
|
||||
- **Why it's bad**: Can hit rate limits on bulk operations
|
||||
- **Solution**: API client includes retry with exponential backoff
|
||||
|
||||
\`\`\`typescript
|
||||
// API client handles 429 automatically
|
||||
// Retries with exponential backoff
|
||||
const users = await apiClient.get('/users');
|
||||
\`\`\`
|
||||
|
||||
---
|
||||
|
||||
## Error Codes Reference
|
||||
|
||||
| Code | Meaning | Action |
|
||||
|------|---------|--------|
|
||||
| `VALIDATION_ERROR` | Invalid input | Show field error |
|
||||
| `NOT_FOUND` | Resource doesn't exist | Show 404 message |
|
||||
| `UNAUTHORIZED` | Not authenticated | Redirect to login |
|
||||
| `FORBIDDEN` | Insufficient permissions | Show permission error |
|
||||
| `RATE_LIMITED` | Too many requests | Retry after delay |
|
||||
| `SERVER_ERROR` | Internal error | Show generic error |
|
||||
|
||||
---
|
||||
|
||||
## Quick Reference
|
||||
|
||||
### Making Requests
|
||||
|
||||
\`\`\`typescript
|
||||
// GET
|
||||
const users = await apiClient.get('/users');
|
||||
|
||||
// POST
|
||||
const user = await apiClient.post('/users', { name: 'John' });
|
||||
|
||||
// PUT
|
||||
const user = await apiClient.put('/users/123', { name: 'Jane' });
|
||||
|
||||
// PATCH
|
||||
const user = await apiClient.patch('/users/123', { status: 'active' });
|
||||
|
||||
// DELETE
|
||||
await apiClient.delete('/users/123');
|
||||
\`\`\`
|
||||
|
||||
### With Query Parameters
|
||||
|
||||
\`\`\`typescript
|
||||
const users = await apiClient.get('/users', {
|
||||
params: {
|
||||
status: 'active',
|
||||
limit: 20,
|
||||
sort: 'name'
|
||||
}
|
||||
});
|
||||
\`\`\`
|
||||
|
||||
### With Custom Headers
|
||||
|
||||
\`\`\`typescript
|
||||
const data = await apiClient.get('/export', {
|
||||
headers: {
|
||||
'Accept': 'text/csv'
|
||||
}
|
||||
});
|
||||
[[services]]
|
||||
internal_port = 8080
|
||||
protocol = "tcp"
|
||||
auto_stop_machines = true
|
||||
auto_start_machines = true
|
||||
min_machines_running = 1
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
## Best Practices for Writing Skills
|
||||
## Tips
|
||||
|
||||
### 1. Keep Skills Focused
|
||||
- **Start small**: Begin with the core patterns, add detail as you learn what Claude needs
|
||||
- **Be specific**: Vague skills produce vague results. Include exact code patterns.
|
||||
- **Test the trigger**: After creating a skill, test that it activates on the right keywords
|
||||
- **Update regularly**: Skills should evolve with your codebase
|
||||
|
||||
Each skill should cover ONE topic thoroughly:
|
||||
## Related Pages
|
||||
|
||||
```markdown
|
||||
# Good: Focused skills
|
||||
- languages/python/SKILL.md
|
||||
- testing/pytest/SKILL.md
|
||||
- security/owasp/SKILL.md
|
||||
|
||||
# Bad: Too broad
|
||||
- everything-python/SKILL.md
|
||||
```
|
||||
|
||||
### 2. Use Real Code Examples
|
||||
|
||||
```markdown
|
||||
# Good: Real, runnable code
|
||||
\`\`\`python
|
||||
@pytest.fixture
|
||||
def user():
|
||||
return User(id=1, name="Test")
|
||||
|
||||
def test_user_creation(user):
|
||||
assert user.id == 1
|
||||
\`\`\`
|
||||
|
||||
# Bad: Pseudo-code
|
||||
\`\`\`
|
||||
create a fixture
|
||||
use the fixture in a test
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
### 3. Show What NOT to Do
|
||||
|
||||
```markdown
|
||||
## Common Pitfalls
|
||||
|
||||
- **Using == for null checks**
|
||||
\`\`\`python
|
||||
# ❌ Wrong
|
||||
if value == None:
|
||||
|
||||
# ✅ Right
|
||||
if value is None:
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
### 4. Link to Official Documentation
|
||||
|
||||
```markdown
|
||||
## Further Reading
|
||||
|
||||
- [Official Svelte Tutorial](https://svelte.dev/tutorial)
|
||||
- [Svelte API Reference](https://svelte.dev/docs)
|
||||
- [Svelte Society Recipes](https://sveltesociety.dev/recipes)
|
||||
```
|
||||
|
||||
### 5. Keep It Scannable
|
||||
|
||||
Use clear headings, bullet points, and code blocks:
|
||||
|
||||
```markdown
|
||||
## Best Practices
|
||||
|
||||
1. **Clear Heading**
|
||||
- Bullet point
|
||||
- Another point
|
||||
|
||||
2. **Another Practice**
|
||||
\`\`\`code
|
||||
example
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
## Skill Size Guidelines
|
||||
|
||||
| Skill Complexity | Lines | Sections |
|
||||
|------------------|-------|----------|
|
||||
| Simple | 50-100 | 2-3 core patterns |
|
||||
| Standard | 100-200 | 3-5 patterns + pitfalls |
|
||||
| Comprehensive | 200-400 | 5+ patterns + examples |
|
||||
|
||||
Aim for **100-200 lines** for most skills.
|
||||
|
||||
## Testing Your Skill
|
||||
|
||||
After creating a skill, test it:
|
||||
|
||||
1. **Reference it**: Mention the technology in a command
|
||||
2. **Verify knowledge**: Check that Claude applies the patterns
|
||||
3. **Test edge cases**: See if pitfalls are avoided
|
||||
4. **Check examples**: Ensure code examples are used
|
||||
|
||||
## Common Skill Types
|
||||
|
||||
### Language Skills
|
||||
|
||||
Focus on syntax, idioms, and best practices:
|
||||
|
||||
```markdown
|
||||
# Go
|
||||
|
||||
## Core Patterns
|
||||
|
||||
### Error Handling
|
||||
### Goroutines and Channels
|
||||
### Interfaces
|
||||
### Defer, Panic, Recover
|
||||
|
||||
## Best Practices
|
||||
## Common Pitfalls
|
||||
```
|
||||
|
||||
### Framework Skills
|
||||
|
||||
Focus on framework-specific patterns:
|
||||
|
||||
```markdown
|
||||
# Rails
|
||||
|
||||
## Core Patterns
|
||||
|
||||
### Models and ActiveRecord
|
||||
### Controllers and RESTful Routes
|
||||
### Views and Partials
|
||||
### Background Jobs
|
||||
|
||||
## Best Practices
|
||||
## Common Pitfalls
|
||||
```
|
||||
|
||||
### Methodology Skills
|
||||
|
||||
Focus on processes and workflows:
|
||||
|
||||
```markdown
|
||||
# Code Review Process
|
||||
|
||||
## Description
|
||||
Our team's code review standards and checklist.
|
||||
|
||||
## Core Patterns
|
||||
|
||||
### Review Checklist
|
||||
### Giving Feedback
|
||||
### Receiving Feedback
|
||||
|
||||
## Best Practices
|
||||
```
|
||||
|
||||
## Organizing Custom Skills
|
||||
|
||||
For project-specific knowledge, use `custom/`:
|
||||
|
||||
```
|
||||
.claude/skills/custom/
|
||||
├── api-standards/SKILL.md # Your API conventions
|
||||
├── deployment/SKILL.md # Deployment procedures
|
||||
├── testing-standards/SKILL.md # Testing requirements
|
||||
└── security-checklist/SKILL.md # Security review items
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [Create Custom Commands](/claudekit/customization/creating-commands/) — Build workflow automation
|
||||
- [Create Custom Modes](/claudekit/customization/creating-modes/) — Define behavioral patterns
|
||||
- [Configure CLAUDE.md](/claudekit/customization/claude-md/) — Set project standards
|
||||
|
||||
## Examples to Study
|
||||
|
||||
Check these built-in skills for inspiration:
|
||||
|
||||
- `languages/python/SKILL.md` — Language best practices
|
||||
- `testing/pytest/SKILL.md` — Testing framework patterns
|
||||
- `methodology/test-driven-development/SKILL.md` — Development process
|
||||
- `security/owasp/SKILL.md` — Security guidelines
|
||||
- [Skills Reference](/claudekit/reference/skills/) — All 43 built-in skills
|
||||
- [Creating Agents & Modes](/claudekit/customization/creating-agents-and-modes/) — Custom agents and modes
|
||||
|
||||
@@ -1,236 +0,0 @@
|
||||
---
|
||||
title: Customization Overview
|
||||
description: Learn how to customize Claude Kit with your own commands, modes, skills, and project settings.
|
||||
---
|
||||
|
||||
# Customization Overview
|
||||
|
||||
Claude Kit is designed to be fully customizable. You can create your own commands, modes, and skills, and configure Claude's behavior for your specific project needs.
|
||||
|
||||
## What Can You Customize?
|
||||
|
||||
### 1. Commands
|
||||
|
||||
Create custom slash commands for your team's specific workflows:
|
||||
|
||||
```bash
|
||||
/deploy-staging # Your deployment workflow
|
||||
/audit-deps # Custom dependency audit
|
||||
/release-notes # Generate release notes your way
|
||||
```
|
||||
|
||||
[Learn how to create commands →](/claudekit/customization/creating-commands/)
|
||||
|
||||
### 2. Modes
|
||||
|
||||
Define behavioral modes for different work contexts:
|
||||
|
||||
```bash
|
||||
/mode pair-programming # Your pair programming style
|
||||
/mode documentation # Documentation-focused mode
|
||||
/mode production-debug # Emergency debugging mode
|
||||
```
|
||||
|
||||
[Learn how to create modes →](/claudekit/customization/creating-modes/)
|
||||
|
||||
### 3. Skills
|
||||
|
||||
Add knowledge modules for your tech stack:
|
||||
|
||||
```bash
|
||||
.claude/skills/
|
||||
├── languages/rust/ # Rust best practices
|
||||
├── frameworks/svelte/ # Svelte patterns
|
||||
└── custom/your-api/ # Your internal API docs
|
||||
```
|
||||
|
||||
[Learn how to create skills →](/claudekit/customization/creating-skills/)
|
||||
|
||||
### 4. CLAUDE.md Configuration
|
||||
|
||||
Configure project-specific behavior, conventions, and agent overrides:
|
||||
|
||||
- Tech stack and architecture
|
||||
- Code conventions
|
||||
- Testing standards
|
||||
- Security requirements
|
||||
- Agent behavior overrides
|
||||
|
||||
[CLAUDE.md reference →](/claudekit/customization/claude-md/)
|
||||
|
||||
## Customization Levels
|
||||
|
||||
Claude Kit supports three levels of customization:
|
||||
|
||||
| Level | What to Change | When to Use |
|
||||
|-------|----------------|-------------|
|
||||
| **Configuration** | Edit `CLAUDE.md` | Set project conventions, tech stack, standards |
|
||||
| **Composition** | Add modes and skills | Extend behavior without coding |
|
||||
| **Extension** | Create commands | Build custom workflows |
|
||||
|
||||
## Quick Start Examples
|
||||
|
||||
### Example 1: Add a Custom Command
|
||||
|
||||
Create `.claude/commands/deploy.md`:
|
||||
|
||||
```markdown
|
||||
# /deploy - Deploy Application
|
||||
|
||||
## Usage
|
||||
/deploy [environment]
|
||||
|
||||
---
|
||||
|
||||
Deploy to **$ARGUMENTS** environment:
|
||||
|
||||
1. Run tests
|
||||
2. Build production bundle
|
||||
3. Deploy to environment
|
||||
4. Verify deployment
|
||||
```
|
||||
|
||||
[Full command creation guide →](/claudekit/customization/creating-commands/)
|
||||
|
||||
### Example 2: Configure for Your Stack
|
||||
|
||||
Edit `.claude/CLAUDE.md`:
|
||||
|
||||
```markdown
|
||||
## Tech Stack
|
||||
|
||||
- **Backend**: Ruby on Rails
|
||||
- **Frontend**: Vue.js
|
||||
- **Database**: MySQL
|
||||
- **Testing**: RSpec, Cypress
|
||||
```
|
||||
|
||||
[Full CLAUDE.md guide →](/claudekit/customization/claude-md/)
|
||||
|
||||
### Example 3: Add a Custom Skill
|
||||
|
||||
Create `.claude/skills/custom/internal-api/SKILL.md`:
|
||||
|
||||
```markdown
|
||||
# Internal API Standards
|
||||
|
||||
## Authentication
|
||||
All endpoints require JWT bearer tokens...
|
||||
|
||||
## Error Handling
|
||||
Use standard error format...
|
||||
```
|
||||
|
||||
[Full skill creation guide →](/claudekit/customization/creating-skills/)
|
||||
|
||||
## File Structure
|
||||
|
||||
Claude Kit customizations live in your `.claude` folder:
|
||||
|
||||
```
|
||||
.claude/
|
||||
├── CLAUDE.md # Main configuration
|
||||
├── commands/ # Custom commands
|
||||
│ ├── deploy.md
|
||||
│ └── your-command.md
|
||||
├── modes/ # Custom modes
|
||||
│ ├── your-mode.md
|
||||
│ └── another-mode.md
|
||||
└── skills/ # Custom skills
|
||||
├── custom/
|
||||
│ └── your-skill/
|
||||
│ └── SKILL.md
|
||||
└── overrides/
|
||||
└── language/
|
||||
└── SKILL.md
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Start Small
|
||||
|
||||
Don't try to customize everything at once:
|
||||
|
||||
1. **First**: Configure `CLAUDE.md` for your project
|
||||
2. **Then**: Add a mode or two for your common workflows
|
||||
3. **Finally**: Create custom commands for repeated tasks
|
||||
|
||||
### Document Your Customizations
|
||||
|
||||
Add comments to your custom files explaining:
|
||||
|
||||
- Why the customization exists
|
||||
- When to use it
|
||||
- What it does differently
|
||||
|
||||
### Share Customizations
|
||||
|
||||
Custom commands and modes are project-specific, so they should be:
|
||||
|
||||
- Committed to version control
|
||||
- Documented in your project README
|
||||
- Shared with your team
|
||||
|
||||
### Keep Skills Focused
|
||||
|
||||
Each skill should:
|
||||
|
||||
- Cover one specific topic
|
||||
- Be 50-200 lines
|
||||
- Include practical examples
|
||||
- Reference official docs
|
||||
|
||||
## Common Customization Patterns
|
||||
|
||||
### Pattern 1: Strict TDD Workflow
|
||||
|
||||
Add to `CLAUDE.md`:
|
||||
|
||||
```markdown
|
||||
## Tester Agent
|
||||
- **TDD Required**: Always write tests first
|
||||
- **Coverage Minimum**: 90%
|
||||
- **Test Type**: Integration tests for all endpoints
|
||||
```
|
||||
|
||||
### Pattern 2: Security-First Reviews
|
||||
|
||||
Create `.claude/modes/security-audit.md`:
|
||||
|
||||
```markdown
|
||||
# Security Audit Mode
|
||||
|
||||
Focus exclusively on security issues:
|
||||
- Authentication/authorization
|
||||
- Input validation
|
||||
- XSS/CSRF protection
|
||||
- Secrets management
|
||||
```
|
||||
|
||||
### Pattern 3: Custom Git Workflow
|
||||
|
||||
Create `.claude/commands/finish-feature.md`:
|
||||
|
||||
```markdown
|
||||
# /finish-feature - Complete Feature
|
||||
|
||||
1. Squash commits
|
||||
2. Update changelog
|
||||
3. Create PR with template
|
||||
4. Assign reviewers
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
Choose what to customize:
|
||||
|
||||
- [Create Custom Commands](/claudekit/customization/creating-commands/) — Build workflow automation
|
||||
- [Create Custom Modes](/claudekit/customization/creating-modes/) — Define behavioral patterns
|
||||
- [Create Custom Skills](/claudekit/customization/creating-skills/) — Add knowledge modules
|
||||
- [Configure CLAUDE.md](/claudekit/customization/claude-md/) — Set project standards
|
||||
|
||||
## Getting Help
|
||||
|
||||
- Check the [example commands](https://github.com/yourusername/claudekit/tree/main/.claude/commands) in the repo
|
||||
- Look at [built-in modes](https://github.com/yourusername/claudekit/tree/main/.claude/modes) for patterns
|
||||
- Review [existing skills](https://github.com/yourusername/claudekit/tree/main/.claude/skills) for structure
|
||||
@@ -5,50 +5,18 @@ description: How to customize Claude Kit for your project.
|
||||
|
||||
# Configuration
|
||||
|
||||
Claude Kit is highly customizable. This guide covers all configuration options.
|
||||
Claude Kit works out of the box, but customizing it for your project makes it significantly more effective.
|
||||
|
||||
## CLAUDE.md
|
||||
|
||||
The main configuration file is `.claude/CLAUDE.md`. This file defines:
|
||||
|
||||
- Project context and architecture
|
||||
- Code conventions
|
||||
- Tech stack details
|
||||
- Custom instructions
|
||||
|
||||
### Basic Structure
|
||||
|
||||
```markdown
|
||||
# Project Name
|
||||
|
||||
## Overview
|
||||
Brief description of your project.
|
||||
|
||||
## Tech Stack
|
||||
- **Languages**: Python, TypeScript
|
||||
- **Backend**: FastAPI
|
||||
- **Frontend**: Next.js
|
||||
- **Database**: PostgreSQL
|
||||
|
||||
## Architecture
|
||||
Describe your project structure.
|
||||
|
||||
## Code Conventions
|
||||
Define naming conventions, style guides, etc.
|
||||
|
||||
## Custom Instructions
|
||||
Any project-specific rules for Claude.
|
||||
```
|
||||
The main configuration file is `.claude/CLAUDE.md`. This tells Claude about your project so skills can provide relevant guidance.
|
||||
|
||||
### Key Sections
|
||||
|
||||
#### Tech Stack
|
||||
|
||||
Tell Claude what technologies you're using:
|
||||
|
||||
```markdown
|
||||
## Tech Stack
|
||||
|
||||
- **Languages**: Python 3.11, TypeScript 5.0
|
||||
- **Backend Framework**: FastAPI with SQLAlchemy
|
||||
- **Frontend Framework**: Next.js 14 with App Router
|
||||
@@ -59,8 +27,6 @@ Tell Claude what technologies you're using:
|
||||
|
||||
#### Code Conventions
|
||||
|
||||
Define your project's coding standards:
|
||||
|
||||
```markdown
|
||||
## Code Conventions
|
||||
|
||||
@@ -71,16 +37,10 @@ Define your project's coding standards:
|
||||
| Functions | `snake_case` | `camelCase` |
|
||||
| Classes | `PascalCase` | `PascalCase` |
|
||||
| Constants | `UPPER_SNAKE` | `UPPER_SNAKE` |
|
||||
|
||||
### Style
|
||||
- Python: Follow PEP 8, use type hints
|
||||
- TypeScript: Strict mode, no `any` types
|
||||
```
|
||||
|
||||
#### Security Standards
|
||||
|
||||
Define security requirements:
|
||||
|
||||
```markdown
|
||||
## Security Standards
|
||||
|
||||
@@ -96,106 +56,7 @@ Define security requirements:
|
||||
- Secrets via environment variables only
|
||||
```
|
||||
|
||||
## Environment-Specific Config
|
||||
|
||||
### Development
|
||||
|
||||
```markdown
|
||||
## Development Environment
|
||||
|
||||
\`\`\`bash
|
||||
# Python
|
||||
python -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Node.js
|
||||
pnpm install
|
||||
pnpm dev
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
### Testing
|
||||
|
||||
```markdown
|
||||
## Testing
|
||||
|
||||
\`\`\`bash
|
||||
# Python
|
||||
pytest -v --cov=src
|
||||
|
||||
# Node.js
|
||||
pnpm test
|
||||
pnpm test:coverage
|
||||
\`\`\`
|
||||
|
||||
### Coverage Requirements
|
||||
- Minimum: 80%
|
||||
- Critical paths: 95%
|
||||
```
|
||||
|
||||
## Agent Behavior Overrides
|
||||
|
||||
Customize how specific agents behave:
|
||||
|
||||
```markdown
|
||||
## Agent Behavior Overrides
|
||||
|
||||
### Planner Agent
|
||||
- Break tasks into 15-60 minute chunks
|
||||
- Always identify testing requirements
|
||||
- Flag external dependencies
|
||||
|
||||
### Code-Reviewer Agent
|
||||
- Enforce strict typing
|
||||
- Security-first reviews
|
||||
- Check for test coverage
|
||||
|
||||
### Tester Agent
|
||||
- Use pytest for Python, vitest for TypeScript
|
||||
- Generate edge case tests
|
||||
- Include error scenario tests
|
||||
```
|
||||
|
||||
## Mode Configuration
|
||||
|
||||
Set default modes for different situations:
|
||||
|
||||
```markdown
|
||||
## Behavioral Modes
|
||||
|
||||
### Default Mode
|
||||
Use `implementation` mode for coding tasks.
|
||||
|
||||
### Review Mode Settings
|
||||
- Depth: 4 (thorough)
|
||||
- Personas: security, performance
|
||||
|
||||
### Planning Mode Settings
|
||||
- Task size: 15-60 minutes
|
||||
- Include testing requirements
|
||||
```
|
||||
|
||||
## Command Flags Defaults
|
||||
|
||||
Set default flags for commands:
|
||||
|
||||
```markdown
|
||||
## Command Defaults
|
||||
|
||||
### /feature
|
||||
- Default mode: implementation
|
||||
- Include tests: yes
|
||||
- Include review: yes
|
||||
|
||||
### /review
|
||||
- Default persona: security
|
||||
- Default depth: 3
|
||||
```
|
||||
|
||||
## Git Configuration
|
||||
|
||||
Configure Git-related behavior:
|
||||
#### Git Conventions
|
||||
|
||||
```markdown
|
||||
## Git Conventions
|
||||
@@ -207,18 +68,86 @@ Configure Git-related behavior:
|
||||
|
||||
### Commit Messages
|
||||
Format: `type(scope): subject`
|
||||
|
||||
Types: feat, fix, docs, style, refactor, test, chore
|
||||
|
||||
### PR Requirements
|
||||
- Descriptive title and description
|
||||
- Linked to issue
|
||||
- All tests passing
|
||||
```
|
||||
|
||||
## Example Complete Configuration
|
||||
## settings.json
|
||||
|
||||
Here's a complete CLAUDE.md example:
|
||||
The `.claude/settings.json` file controls Claude Code permissions and hooks:
|
||||
|
||||
```json
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"git status", "git diff", "git log",
|
||||
"npm test", "npm run lint",
|
||||
"pytest", "ruff check"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Auto-Linting Hooks
|
||||
|
||||
Claude Kit includes PostToolUse hooks that auto-lint files after edits:
|
||||
|
||||
```json
|
||||
{
|
||||
"hooks": {
|
||||
"PostToolUse": [
|
||||
{
|
||||
"matcher": "Edit|Write",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "ruff check --fix $FILE",
|
||||
"match_files": "*.py"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Agent Behavior Overrides
|
||||
|
||||
Customize how specialized agents behave in your CLAUDE.md:
|
||||
|
||||
```markdown
|
||||
## Agent Behavior Overrides
|
||||
|
||||
### Planner Agent
|
||||
- Break tasks into 15-60 minute chunks
|
||||
- Always identify testing requirements
|
||||
|
||||
### Code-Reviewer Agent
|
||||
- Enforce strict typing
|
||||
- Security-first reviews
|
||||
- Check for test coverage
|
||||
|
||||
### Tester Agent
|
||||
- Use pytest for Python, vitest for TypeScript
|
||||
- Generate edge case tests
|
||||
```
|
||||
|
||||
## Modes
|
||||
|
||||
Set default modes or customize their behavior. Mode files live in `.claude/modes/`:
|
||||
|
||||
| Mode | Best For |
|
||||
|------|----------|
|
||||
| `default` | General tasks |
|
||||
| `brainstorm` | Design, ideation |
|
||||
| `implementation` | Code-focused, minimal prose |
|
||||
| `review` | Critical analysis |
|
||||
| `token-efficient` | High-volume work, cost savings |
|
||||
| `deep-research` | Investigation, audits |
|
||||
| `orchestration` | Multi-agent coordination |
|
||||
|
||||
Switch modes naturally: "switch to brainstorm mode" or "use implementation mode".
|
||||
|
||||
## Example Complete Configuration
|
||||
|
||||
```markdown
|
||||
# My SaaS Project
|
||||
@@ -233,19 +162,16 @@ A B2B SaaS platform for project management.
|
||||
- **Payments**: Stripe
|
||||
|
||||
## Architecture
|
||||
\`\`\`
|
||||
src/
|
||||
├── api/ # FastAPI routes
|
||||
├── services/ # Business logic
|
||||
├── models/ # SQLAlchemy models
|
||||
├── frontend/ # Next.js app
|
||||
└── tests/ # Test files
|
||||
\`\`\`
|
||||
|
||||
## Code Conventions
|
||||
- Python: PEP 8, type hints required
|
||||
- TypeScript: Strict mode, Zod for validation
|
||||
- Files: snake_case for Python, kebab-case for TS
|
||||
|
||||
## Security
|
||||
- All inputs validated with Pydantic/Zod
|
||||
@@ -255,16 +181,14 @@ src/
|
||||
## Testing
|
||||
- Python: pytest with 80% coverage minimum
|
||||
- Frontend: vitest + Playwright
|
||||
- Run: `pnpm test` or `pytest`
|
||||
|
||||
## Git
|
||||
- Branches: feature/*, fix/*, hotfix/*
|
||||
- Commits: conventional commits format
|
||||
- PRs require review before merge
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [Commands Overview](/claudekit/commands/overview/) — Learn available commands
|
||||
- [Creating Commands](/claudekit/customization/creating-commands/) — Make your own commands
|
||||
- [Creating Modes](/claudekit/customization/creating-modes/) — Make custom modes
|
||||
- [Workflows](/claudekit/workflows/planning-and-building/) — See how skills work together
|
||||
- [Skills Reference](/claudekit/reference/skills/) — Browse all 43 skills
|
||||
- [Creating Skills](/claudekit/customization/creating-skills/) — Build your own
|
||||
|
||||
@@ -14,8 +14,6 @@ Claude Kit installs in under 2 minutes. Choose your preferred method below.
|
||||
|
||||
## Method 1: Clone and Copy (Recommended)
|
||||
|
||||
The simplest way to get started:
|
||||
|
||||
```bash
|
||||
# Clone Claude Kit
|
||||
git clone https://github.com/duthaho/claudekit.git
|
||||
@@ -32,16 +30,14 @@ claude
|
||||
|
||||
## Method 2: Download ZIP
|
||||
|
||||
If you prefer not to use Git:
|
||||
|
||||
1. Go to [github.com/duthaho/claudekit](https://github.com/duthaho/claudekit)
|
||||
2. Click **Code** → **Download ZIP**
|
||||
2. Click **Code** > **Download ZIP**
|
||||
3. Extract the ZIP file
|
||||
4. Copy the `.claude` folder to your project root
|
||||
|
||||
## Method 3: Git Submodule (For Version Control)
|
||||
## Method 3: Git Submodule
|
||||
|
||||
If you want to track Claude Kit updates:
|
||||
Track Claude Kit updates via Git:
|
||||
|
||||
```bash
|
||||
# Add as submodule
|
||||
@@ -63,18 +59,12 @@ git submodule update --remote .claudekit
|
||||
|
||||
## Verify Installation
|
||||
|
||||
After installation, verify everything is working:
|
||||
|
||||
```bash
|
||||
# Start Claude Code in your project
|
||||
cd your-project
|
||||
claude
|
||||
|
||||
# Try a simple command
|
||||
> /help
|
||||
```
|
||||
|
||||
You should see the Claude Kit help output listing available commands.
|
||||
Skills trigger automatically based on your conversation. Try asking Claude to brainstorm a feature or debug an error — the relevant skills will activate.
|
||||
|
||||
## Folder Structure
|
||||
|
||||
@@ -84,26 +74,27 @@ After installation, your project should have:
|
||||
your-project/
|
||||
├── .claude/
|
||||
│ ├── CLAUDE.md # Project instructions
|
||||
│ ├── commands/ # Slash commands
|
||||
│ │ ├── feature.md
|
||||
│ │ ├── fix.md
|
||||
│ ├── agents/ # 20 specialized subagents
|
||||
│ │ ├── code-reviewer.md
|
||||
│ │ ├── debugger.md
|
||||
│ │ └── ...
|
||||
│ ├── modes/ # Behavioral modes
|
||||
│ ├── modes/ # 7 behavioral modes
|
||||
│ │ ├── brainstorm.md
|
||||
│ │ ├── implementation.md
|
||||
│ │ └── ...
|
||||
│ ├── skills/ # Knowledge modules
|
||||
│ ├── skills/ # 43 knowledge modules
|
||||
│ │ ├── brainstorming/
|
||||
│ │ ├── testing/
|
||||
│ │ ├── languages/
|
||||
│ │ ├── frameworks/
|
||||
│ │ ├── methodology/
|
||||
│ │ └── ...
|
||||
│ ├── mcp/ # MCP server configs
|
||||
│ └── settings.json # Claude Code settings
|
||||
└── ... (your project files)
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Commands not recognized
|
||||
### Skills not triggering
|
||||
|
||||
Make sure the `.claude` folder is in your project root (same level as `package.json` or `pyproject.toml`).
|
||||
|
||||
@@ -127,7 +118,5 @@ claude
|
||||
|
||||
## Next Steps
|
||||
|
||||
Now that Claude Kit is installed:
|
||||
|
||||
1. [Quick Start](/claudekit/getting-started/quick-start/) — Run your first command
|
||||
2. [Configuration](/claudekit/getting-started/configuration/) — Customize for your project
|
||||
1. [Configuration](/claudekit/getting-started/configuration/) — Customize for your project
|
||||
2. [Workflows](/claudekit/workflows/planning-and-building/) — See how skills work together
|
||||
|
||||
@@ -1,94 +1,65 @@
|
||||
---
|
||||
title: Introduction
|
||||
description: Learn what Claude Kit is and how it can accelerate your development workflow.
|
||||
description: Learn what Claude Kit is and how it accelerates your development workflow.
|
||||
---
|
||||
|
||||
# Introduction to Claude Kit
|
||||
|
||||
Claude Kit is an open-source toolkit that transforms Claude Code into a production-ready AI development team. It provides pre-built commands, intelligent modes, and battle-tested skills that accelerate your development workflow.
|
||||
Claude Kit is an open-source toolkit that transforms Claude Code into a production-ready AI development team. It provides auto-triggered skills, specialized agents, and intelligent modes that accelerate your development workflow.
|
||||
|
||||
## What is Claude Kit?
|
||||
|
||||
Claude Kit is a collection of:
|
||||
Claude Kit is a `.claude` folder you add to your project containing:
|
||||
|
||||
- **27+ Commands** — Slash commands like `/feature`, `/fix`, `/review` that automate development workflows
|
||||
- **7 Modes** — Behavioral configurations that optimize Claude for specific tasks (brainstorming, implementation, review, etc.)
|
||||
- **34+ Skills** — Pre-built knowledge modules for languages, frameworks, testing, security, and development methodologies
|
||||
- **43 Skills** — Knowledge modules that auto-trigger based on what you're doing (debugging, planning, testing, etc.)
|
||||
- **20 Agents** — Specialized subagents for focused tasks (code review, security audit, database design, etc.)
|
||||
- **7 Modes** — Behavioral configurations that optimize Claude for specific task types
|
||||
|
||||
All of this lives in a `.claude` folder that you add to your project, giving Claude Code the context and structure it needs to be truly productive.
|
||||
Skills activate automatically based on keywords in your conversation. No commands to memorize — just describe what you want to do.
|
||||
|
||||
## Why Claude Kit?
|
||||
|
||||
### The Problem with Raw Claude Code
|
||||
|
||||
While Claude Code is powerful, using it without structure leads to common issues:
|
||||
|
||||
| Problem | Symptom |
|
||||
|---------|---------|
|
||||
| **Context Spirals** | Token budgets run out, Claude loses track of what it was doing |
|
||||
| **Inconsistent Output** | Quality varies wildly between sessions |
|
||||
| **Manual Workflows** | You copy the same prompts between projects |
|
||||
| **No Structure** | Every session starts from scratch |
|
||||
| **Missing Expertise** | Claude doesn't know your team's patterns and standards |
|
||||
|
||||
### How Claude Kit Helps
|
||||
|
||||
Claude Kit solves these problems with:
|
||||
1. **Auto-Triggered Skills** — Say "fix this bug" and systematic-debugging activates. Say "plan this" and brainstorming kicks in.
|
||||
2. **Specialized Agents** — Dispatch focused subagents for code review, testing, security audits, and more.
|
||||
3. **Consistent Quality** — Built-in TDD enforcement, verification before completion, and code review workflows.
|
||||
4. **Full Customization** — Add your own skills, agents, and modes.
|
||||
|
||||
1. **Structured Workflows** — Commands like `/feature` orchestrate multi-phase development automatically
|
||||
2. **Context Control** — Modes and skills give Claude exactly the context it needs
|
||||
3. **Consistent Quality** — Built-in code review, testing standards, and security checks
|
||||
4. **Full Customization** — Add your own commands, modes, and skills
|
||||
## How Skills Work
|
||||
|
||||
## Key Features
|
||||
Skills are the core of Claude Kit. They trigger automatically based on keywords:
|
||||
|
||||
### Commands
|
||||
```
|
||||
You: "I need to add user authentication to our app"
|
||||
↓ triggers: brainstorming, authentication, backend-frameworks
|
||||
|
||||
Commands automate common development tasks:
|
||||
You: "There's a TypeError in the UserService"
|
||||
↓ triggers: systematic-debugging, root-cause-tracing
|
||||
|
||||
```bash
|
||||
/feature "add user authentication" # Full feature workflow
|
||||
/fix "TypeError in UserService" # Smart debugging
|
||||
/review src/auth/ # Code review
|
||||
/ship "feat: add auth" # Git commit + PR
|
||||
You: "Let's write tests for the API endpoints"
|
||||
↓ triggers: testing, test-driven-development
|
||||
```
|
||||
|
||||
### Modes
|
||||
|
||||
Modes change Claude's behavior for different task types:
|
||||
|
||||
```bash
|
||||
/mode brainstorm # Creative exploration, more questions
|
||||
/mode implementation # Code-focused, minimal prose
|
||||
/mode review # Critical analysis, finds issues
|
||||
```
|
||||
|
||||
### Skills
|
||||
|
||||
Skills provide pre-built knowledge for:
|
||||
|
||||
- **Languages**: Python, TypeScript, JavaScript
|
||||
- **Frameworks**: React, Next.js, FastAPI, Django
|
||||
- **Testing**: pytest, vitest, Playwright
|
||||
- **Methodologies**: TDD, systematic debugging, code review
|
||||
No slash commands needed — Claude reads your intent and activates the right skills.
|
||||
|
||||
## Who is Claude Kit For?
|
||||
|
||||
Claude Kit is designed for:
|
||||
|
||||
- **Solo developers** who want to ship faster
|
||||
- **Small teams (1-3 developers)** working on multi-stack projects
|
||||
- **Anyone using Claude Code** who wants more structure and consistency
|
||||
|
||||
## Next Steps
|
||||
|
||||
Ready to get started?
|
||||
|
||||
1. [Install Claude Kit](/claudekit/getting-started/installation/) — Add it to your project
|
||||
2. [Quick Start](/claudekit/getting-started/quick-start/) — Your first command in 2 minutes
|
||||
3. [Configuration](/claudekit/getting-started/configuration/) — Customize for your project
|
||||
|
||||
Or dive into the features:
|
||||
|
||||
- [Commands Reference](/claudekit/commands/overview/) — All 27+ commands
|
||||
- [Modes Reference](/claudekit/modes/overview/) — All 7 behavioral modes
|
||||
- [Skills Reference](/claudekit/skills/overview/) — All 34+ skill modules
|
||||
2. [Configuration](/claudekit/getting-started/configuration/) — Customize for your project
|
||||
3. [Skills Reference](/claudekit/reference/skills/) — Browse all 43 skills
|
||||
|
||||
@@ -1,163 +0,0 @@
|
||||
---
|
||||
title: Quick Start
|
||||
description: Get up and running with Claude Kit in 2 minutes.
|
||||
---
|
||||
|
||||
# Quick Start
|
||||
|
||||
This guide will have you using Claude Kit in under 2 minutes.
|
||||
|
||||
## Step 1: Start Claude Code
|
||||
|
||||
Open your terminal in a project with Claude Kit installed:
|
||||
|
||||
```bash
|
||||
cd your-project
|
||||
claude
|
||||
```
|
||||
|
||||
## Step 2: Try Your First Command
|
||||
|
||||
Let's use the `/help` command to see what's available:
|
||||
|
||||
```bash
|
||||
> /help
|
||||
```
|
||||
|
||||
This shows all available commands organized by category.
|
||||
|
||||
## Step 3: Plan a Feature
|
||||
|
||||
Try the `/plan` command to break down a task:
|
||||
|
||||
```bash
|
||||
> /plan "add a user profile page"
|
||||
```
|
||||
|
||||
Claude will:
|
||||
1. Analyze the requirement
|
||||
2. Break it into actionable tasks
|
||||
3. Create a structured implementation plan
|
||||
|
||||
## Step 4: Implement with `/feature`
|
||||
|
||||
Ready to build something? Use the full feature workflow:
|
||||
|
||||
```bash
|
||||
> /feature "add password reset with email verification"
|
||||
```
|
||||
|
||||
This orchestrates:
|
||||
1. **Planning** — Requirements analysis and task breakdown
|
||||
2. **Implementation** — Code generation with best practices
|
||||
3. **Testing** — Unit and integration tests
|
||||
4. **Review** — Self-review checklist
|
||||
|
||||
## Step 5: Switch Modes
|
||||
|
||||
Change how Claude behaves with modes:
|
||||
|
||||
```bash
|
||||
> /mode brainstorm
|
||||
```
|
||||
|
||||
Now Claude will:
|
||||
- Ask more clarifying questions
|
||||
- Present multiple alternatives
|
||||
- Explore trade-offs before converging
|
||||
|
||||
Other useful modes:
|
||||
|
||||
```bash
|
||||
> /mode implementation # Code-focused, minimal prose
|
||||
> /mode token-efficient # Compressed output, saves tokens
|
||||
> /mode review # Critical analysis mode
|
||||
```
|
||||
|
||||
## Common Workflows
|
||||
|
||||
### Bug Fixing
|
||||
|
||||
```bash
|
||||
> /fix "TypeError: Cannot read property 'email' of undefined in UserService.ts:45"
|
||||
```
|
||||
|
||||
Claude will analyze the error, find the root cause, implement a fix, and add a regression test.
|
||||
|
||||
### Code Review
|
||||
|
||||
```bash
|
||||
> /review src/auth/
|
||||
```
|
||||
|
||||
Get a comprehensive review covering:
|
||||
- Code quality
|
||||
- Security vulnerabilities
|
||||
- Performance issues
|
||||
- Maintainability
|
||||
|
||||
### Ship Changes
|
||||
|
||||
```bash
|
||||
> /ship "feat: add user authentication"
|
||||
```
|
||||
|
||||
Creates a git commit with proper message formatting and optionally opens a PR.
|
||||
|
||||
### Research
|
||||
|
||||
```bash
|
||||
> /research "best practices for JWT authentication in Node.js"
|
||||
```
|
||||
|
||||
Claude researches the topic and provides a comprehensive summary with recommendations.
|
||||
|
||||
## Tips for Getting Started
|
||||
|
||||
### 1. Start with Planning
|
||||
|
||||
Before writing code, use `/plan` or `/brainstorm` to think through the approach:
|
||||
|
||||
```bash
|
||||
> /brainstorm "how should we handle file uploads?"
|
||||
```
|
||||
|
||||
### 2. Use the Right Mode
|
||||
|
||||
Match the mode to your task:
|
||||
|
||||
| Task | Mode |
|
||||
|------|------|
|
||||
| Exploring options | `brainstorm` |
|
||||
| Writing code | `implementation` |
|
||||
| Reviewing code | `review` |
|
||||
| Researching | `deep-research` |
|
||||
| High-volume work | `token-efficient` |
|
||||
|
||||
### 3. Leverage Flags
|
||||
|
||||
Commands support flags for customization:
|
||||
|
||||
```bash
|
||||
> /feature --skip-tests "add logging utility"
|
||||
> /review --persona=security src/auth/
|
||||
> /plan --depth=5 "implement payment flow"
|
||||
```
|
||||
|
||||
### 4. Check Command Help
|
||||
|
||||
Get details on any command:
|
||||
|
||||
```bash
|
||||
> /help feature
|
||||
> /help fix
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
You're ready to use Claude Kit! Here's where to go next:
|
||||
|
||||
- [Configuration](/claudekit/getting-started/configuration/) — Customize Claude Kit for your project
|
||||
- [Commands Overview](/claudekit/commands/overview/) — See all 27+ commands
|
||||
- [Modes Overview](/claudekit/modes/overview/) — Learn about all 7 modes
|
||||
- [Customization](/claudekit/customization/overview/) — Create your own commands
|
||||
@@ -1,9 +1,9 @@
|
||||
---
|
||||
title: Claude Kit
|
||||
description: The open-source AI dev toolkit for Claude Code. Ship faster with 27+ commands, 7 modes, and 34+ skills. Free forever.
|
||||
description: The open-source AI dev toolkit for Claude Code. 43 skills, 20 agents, 7 modes — structure that makes Claude Code production-ready. Free forever.
|
||||
template: splash
|
||||
hero:
|
||||
tagline: The open-source AI dev toolkit for Claude Code. Ship faster with 27+ commands, 7 modes, and 34+ skills. Free forever.
|
||||
tagline: The open-source AI dev toolkit for Claude Code. 43 skills, 20 agents, 7 modes — structure that makes Claude Code production-ready. Free forever.
|
||||
image:
|
||||
dark: ../../assets/hero-dark.svg
|
||||
light: ../../assets/hero-light.svg
|
||||
@@ -22,20 +22,20 @@ import { Card, CardGrid, LinkCard } from '@astrojs/starlight/components';
|
||||
|
||||
## Ship Faster. For Free.
|
||||
|
||||
Claude Kit transforms Claude Code into a production-ready AI development team. Pre-built commands, intelligent modes, and battle-tested skills — all open source.
|
||||
Claude Kit transforms Claude Code into a production-ready AI development team. Pre-built skills, specialized agents, and intelligent modes — all open source.
|
||||
|
||||
<CardGrid>
|
||||
<Card title="27+ Commands" icon="terminal">
|
||||
From `/feature` to `/ship`, automate your entire development workflow with battle-tested commands.
|
||||
<Card title="43 Skills" icon="puzzle">
|
||||
Auto-triggered knowledge for Python, TypeScript, React, FastAPI, TDD, debugging, security, and more. Claude knows your stack without being told.
|
||||
</Card>
|
||||
<Card title="20 Agents" icon="rocket">
|
||||
Specialized subagents for code review, testing, database design, security auditing, UI/UX, and more — each with focused expertise.
|
||||
</Card>
|
||||
<Card title="7 Modes" icon="setting">
|
||||
Switch between brainstorm, implementation, review, and more. Each mode optimizes Claude's behavior for your task.
|
||||
Switch between brainstorm, implementation, review, deep research, and more. Each mode optimizes Claude's behavior for your task.
|
||||
</Card>
|
||||
<Card title="34+ Skills" icon="puzzle">
|
||||
Pre-built knowledge for Python, TypeScript, React, FastAPI, testing, security, and more.
|
||||
</Card>
|
||||
<Card title="5 MCP Servers" icon="rocket">
|
||||
Real-time docs, persistent memory, browser testing, and more via Model Context Protocol.
|
||||
<Card title="MCP Servers" icon="external">
|
||||
Real-time docs via Context7, persistent memory, browser testing, and structured reasoning via Model Context Protocol.
|
||||
</Card>
|
||||
</CardGrid>
|
||||
|
||||
@@ -52,12 +52,13 @@ git clone https://github.com/duthaho/claudekit.git
|
||||
# Copy the kit to your project
|
||||
cp -r claudekit/.claude your-project/
|
||||
|
||||
# Start using commands
|
||||
# Start using it
|
||||
cd your-project
|
||||
claude
|
||||
> /feature "add user authentication"
|
||||
```
|
||||
|
||||
Skills trigger automatically based on what you're doing. Ask Claude to brainstorm a feature, write a plan, debug an error, or review code — the right skills activate without any commands needed.
|
||||
|
||||
---
|
||||
|
||||
## Why Claude Kit?
|
||||
@@ -68,71 +69,70 @@ Working with Claude Code is powerful, but raw Claude has limitations:
|
||||
|
||||
- **Context Spirals** — Token budgets run out, context gets lost mid-task
|
||||
- **Inconsistent Output** — Quality varies between sessions
|
||||
- **Manual Workflows** — Same prompts copied between projects
|
||||
- **No Structure** — Every session starts from scratch
|
||||
- **Missing Expertise** — Claude doesn't know your team's patterns and standards
|
||||
|
||||
### The Solution
|
||||
|
||||
Claude Kit provides the structure, patterns, and automation that makes Claude Code production-ready:
|
||||
|
||||
<CardGrid>
|
||||
<Card title="Structured Workflows" icon="rocket">
|
||||
Commands like `/feature` orchestrate multi-phase development: planning → implementation → testing → review → ship.
|
||||
<Card title="Auto-Triggered Skills" icon="puzzle">
|
||||
Say "fix this bug" and the systematic-debugging skill activates. Say "plan this feature" and brainstorming + writing-plans kick in. No commands to memorize.
|
||||
</Card>
|
||||
<Card title="Context Control" icon="document">
|
||||
Modes and skills give Claude the exact context it needs. No more explaining your stack every session.
|
||||
<Card title="Specialized Agents" icon="rocket">
|
||||
Delegate code review, security audits, testing, and documentation to focused subagents that work in parallel.
|
||||
</Card>
|
||||
<Card title="Consistent Quality" icon="approve-check">
|
||||
Built-in code review, testing standards, and security checks ensure every output meets your standards.
|
||||
Built-in TDD enforcement, verification before completion, and code review workflows ensure every output meets your standards.
|
||||
</Card>
|
||||
<Card title="Fully Customizable" icon="pencil">
|
||||
Add your own commands, modes, and skills. Claude Kit is a template, not a black box.
|
||||
Add your own skills, agents, and modes. Claude Kit is a template, not a black box.
|
||||
</Card>
|
||||
</CardGrid>
|
||||
|
||||
---
|
||||
|
||||
## Featured Commands
|
||||
## How It Works
|
||||
|
||||
Claude Kit uses three layers that work together:
|
||||
|
||||
<CardGrid>
|
||||
<LinkCard
|
||||
title="/feature"
|
||||
description="End-to-end feature development: plan, implement, test, review, ship."
|
||||
href="/claudekit/commands/feature/"
|
||||
title="Skills"
|
||||
description="43 knowledge modules that auto-trigger based on keywords. Cover languages, frameworks, testing, debugging, security, and development methodology."
|
||||
href="/claudekit/reference/skills/"
|
||||
/>
|
||||
<LinkCard
|
||||
title="/fix"
|
||||
description="Smart debugging: analyze errors, find root cause, implement fix, add regression test."
|
||||
href="/claudekit/commands/fix/"
|
||||
title="Agents"
|
||||
description="20 specialized subagents you can dispatch for focused tasks: code review, testing, database design, security audits, and more."
|
||||
href="/claudekit/reference/agents/"
|
||||
/>
|
||||
<LinkCard
|
||||
title="/review"
|
||||
description="Comprehensive code review: quality, security, performance, maintainability."
|
||||
href="/claudekit/commands/review/"
|
||||
title="Modes"
|
||||
description="7 behavioral configurations that change how Claude communicates and solves problems: brainstorm, implementation, review, and more."
|
||||
href="/claudekit/reference/modes/"
|
||||
/>
|
||||
<LinkCard
|
||||
title="/ship"
|
||||
description="Git automation: commit, create PR, ready for merge."
|
||||
href="/claudekit/commands/ship/"
|
||||
title="MCP Servers"
|
||||
description="Optional integrations for real-time library docs, persistent memory, browser automation, and structured reasoning."
|
||||
href="/claudekit/reference/mcp-servers/"
|
||||
/>
|
||||
</CardGrid>
|
||||
|
||||
[View all commands →](/claudekit/commands/overview/)
|
||||
|
||||
---
|
||||
|
||||
## Modes for Every Task
|
||||
## Development Workflows
|
||||
|
||||
| Mode | Best For | Description |
|
||||
|------|----------|-------------|
|
||||
| **Default** | General tasks | Balanced behavior |
|
||||
| **Brainstorm** | Design, ideation | Explores alternatives, asks questions |
|
||||
| **Token-Efficient** | High-volume work | Compressed output, 30-70% savings |
|
||||
| **Implementation** | Coding | Jump straight to code |
|
||||
| **Review** | Quality checks | Critical analysis, finds issues |
|
||||
| **Deep Research** | Investigation | Thorough analysis with citations |
|
||||
Claude Kit connects skills and agents into complete workflows:
|
||||
|
||||
[Learn about modes →](/claudekit/modes/overview/)
|
||||
| Workflow | What Happens |
|
||||
|----------|-------------|
|
||||
| **Planning & Building** | Brainstorm requirements, write implementation plans, execute with subagents |
|
||||
| **Testing & Debugging** | TDD enforcement, systematic debugging, root cause tracing, verification |
|
||||
| **Reviewing & Shipping** | Code review, git workflows, PR creation, changelog generation |
|
||||
|
||||
[Explore workflows →](/claudekit/workflows/planning-and-building/)
|
||||
|
||||
---
|
||||
|
||||
@@ -145,18 +145,18 @@ Claude Kit provides the structure, patterns, and automation that makes Claude Co
|
||||
href="/claudekit/getting-started/installation/"
|
||||
/>
|
||||
<LinkCard
|
||||
title="Command Reference"
|
||||
description="Complete documentation for all 27+ commands"
|
||||
href="/claudekit/commands/overview/"
|
||||
title="Skills Reference"
|
||||
description="All 43 skills organized by category"
|
||||
href="/claudekit/reference/skills/"
|
||||
/>
|
||||
<LinkCard
|
||||
title="MCP Integrations"
|
||||
description="Extend Claude Kit with real-time docs, memory, and browser testing"
|
||||
href="/claudekit/mcp/overview/"
|
||||
title="Agents Reference"
|
||||
description="All 20 specialized subagents"
|
||||
href="/claudekit/reference/agents/"
|
||||
/>
|
||||
<LinkCard
|
||||
title="Customization"
|
||||
description="Create your own commands, modes, and skills"
|
||||
href="/claudekit/customization/overview/"
|
||||
description="Create your own skills, agents, and modes"
|
||||
href="/claudekit/customization/creating-skills/"
|
||||
/>
|
||||
</CardGrid>
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
---
|
||||
title: Context7
|
||||
description: Real-time library documentation lookup with Context7 MCP server.
|
||||
---
|
||||
|
||||
# Context7
|
||||
|
||||
Context7 provides up-to-date documentation for libraries and frameworks, ensuring Claude has accurate API references instead of outdated training data.
|
||||
|
||||
## Configuration
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"context7": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@upstash/context7-mcp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Available Tools
|
||||
|
||||
### resolve-library-id
|
||||
|
||||
Finds the Context7-compatible library ID for documentation lookup.
|
||||
|
||||
**Parameters:**
|
||||
- `libraryName` — Library name to search for
|
||||
|
||||
**Example:**
|
||||
```
|
||||
resolve-library-id("react")
|
||||
→ Returns: "/facebook/react"
|
||||
```
|
||||
|
||||
### get-library-docs
|
||||
|
||||
Fetches documentation for a specific library.
|
||||
|
||||
**Parameters:**
|
||||
- `context7CompatibleLibraryID` — Library ID from resolve-library-id
|
||||
- `topic` (optional) — Focus area (e.g., "hooks", "routing")
|
||||
- `mode` — `code` for API references, `info` for concepts
|
||||
- `page` — Pagination (1-10)
|
||||
|
||||
**Example:**
|
||||
```
|
||||
get-library-docs("/facebook/react", topic="hooks", mode="code")
|
||||
→ Returns: Current React hooks documentation with examples
|
||||
```
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Research Libraries
|
||||
|
||||
```
|
||||
/research Next.js App Router
|
||||
```
|
||||
Context7 fetches current Next.js documentation for accurate analysis.
|
||||
|
||||
### Feature Development
|
||||
|
||||
```
|
||||
/feature Add authentication with NextAuth
|
||||
```
|
||||
Context7 provides current NextAuth API for correct implementation.
|
||||
|
||||
### Debugging Library Issues
|
||||
|
||||
```
|
||||
/fix "useEffect cleanup not working"
|
||||
```
|
||||
Context7 retrieves correct useEffect patterns from React docs.
|
||||
|
||||
## Command Integration
|
||||
|
||||
| Command | How Context7 Helps |
|
||||
|---------|-------------------|
|
||||
| `/feature` | Accurate library APIs for implementation |
|
||||
| `/research` | Current documentation for analysis |
|
||||
| `/fix` | Correct patterns for debugging library issues |
|
||||
| `/plan` | Accurate estimates based on real API complexity |
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Specify Topics
|
||||
|
||||
For focused results, use the `topic` parameter:
|
||||
```
|
||||
get-library-docs("/vercel/next.js", topic="app-router")
|
||||
```
|
||||
|
||||
### Use Correct Mode
|
||||
|
||||
- `mode="code"` — API references, code examples
|
||||
- `mode="info"` — Conceptual guides, architecture
|
||||
|
||||
### Handle Pagination
|
||||
|
||||
If context is insufficient, try additional pages:
|
||||
```
|
||||
get-library-docs(..., page=2)
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Library Not Found
|
||||
|
||||
If `resolve-library-id` returns no results:
|
||||
- Check spelling
|
||||
- Try alternative names (e.g., "nextjs" vs "next.js")
|
||||
- Some libraries may not be indexed
|
||||
|
||||
### Outdated Results
|
||||
|
||||
Context7 indexes popular libraries. Less common libraries may have delayed updates.
|
||||
|
||||
## Resources
|
||||
|
||||
- [Context7 Documentation](https://context7.com)
|
||||
- [Upstash Context7 MCP](https://github.com/upstash/context7-mcp)
|
||||
@@ -1,196 +0,0 @@
|
||||
---
|
||||
title: Filesystem
|
||||
description: Secure file operations with access controls.
|
||||
---
|
||||
|
||||
# Filesystem
|
||||
|
||||
Filesystem MCP enables secure file operations with configurable access boundaries. It complements Claude Code's built-in file handling with additional capabilities.
|
||||
|
||||
## Configuration
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"filesystem": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The last argument (`.`) specifies the allowed directory. Claude can only access files within this directory.
|
||||
|
||||
### Access Control Examples
|
||||
|
||||
```json
|
||||
// Allow entire project
|
||||
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
|
||||
|
||||
// Allow only src directory
|
||||
"args": ["-y", "@modelcontextprotocol/server-filesystem", "./src"]
|
||||
|
||||
// Allow multiple directories
|
||||
"args": ["-y", "@modelcontextprotocol/server-filesystem", "./src", "./tests"]
|
||||
```
|
||||
|
||||
## Available Tools
|
||||
|
||||
### Reading
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `read_file` | Read file contents |
|
||||
| `read_multiple_files` | Read multiple files at once |
|
||||
| `get_file_info` | Get file metadata (size, modified, etc.) |
|
||||
|
||||
### Writing
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `write_file` | Write content to file |
|
||||
| `edit_file` | Make targeted edits to file |
|
||||
|
||||
### Directory Operations
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `list_directory` | List directory contents |
|
||||
| `directory_tree` | Get full directory tree |
|
||||
| `create_directory` | Create new directory |
|
||||
|
||||
### File Management
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `move_file` | Move or rename files |
|
||||
| `search_files` | Search for files by pattern |
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Project Indexing
|
||||
|
||||
```
|
||||
/index
|
||||
```
|
||||
Filesystem:
|
||||
1. Uses `directory_tree` to scan project
|
||||
2. Uses `list_directory` for detailed info
|
||||
3. Uses `get_file_info` for file metadata
|
||||
|
||||
### Bulk Operations
|
||||
|
||||
```
|
||||
/refactor Move utilities to shared folder
|
||||
```
|
||||
Filesystem:
|
||||
1. Uses `search_files` to find utility files
|
||||
2. Uses `move_file` to relocate them
|
||||
3. Uses `read_file` to update imports
|
||||
|
||||
### Test File Management
|
||||
|
||||
```
|
||||
/test Generate tests for auth service
|
||||
```
|
||||
Filesystem:
|
||||
1. Uses `directory_tree` to find test directories
|
||||
2. Uses `search_files` to find existing tests
|
||||
3. Uses `write_file` to create new test files
|
||||
|
||||
## Command Integration
|
||||
|
||||
| Command | How Filesystem Helps |
|
||||
|---------|---------------------|
|
||||
| `/index` | Scans project structure |
|
||||
| `/feature` | Creates new files in correct locations |
|
||||
| `/test` | Manages test file creation |
|
||||
| `/refactor` | Moves and reorganizes files |
|
||||
|
||||
## Example Workflow
|
||||
|
||||
### Scanning Project
|
||||
|
||||
```javascript
|
||||
// Get project structure
|
||||
directory_tree(".")
|
||||
→ Returns hierarchical view of all files
|
||||
|
||||
// Get specific directory contents
|
||||
list_directory("./src/services")
|
||||
→ Returns files with metadata
|
||||
|
||||
// Search for patterns
|
||||
search_files("*.test.ts")
|
||||
→ Returns all test files
|
||||
```
|
||||
|
||||
### File Operations
|
||||
|
||||
```javascript
|
||||
// Read file
|
||||
read_file("./src/auth/service.ts")
|
||||
→ Returns file contents
|
||||
|
||||
// Write new file
|
||||
write_file("./src/auth/types.ts", "export interface User {...}")
|
||||
→ Creates new file
|
||||
|
||||
// Move file
|
||||
move_file("./src/utils/helper.ts", "./src/shared/helper.ts")
|
||||
→ Relocates file
|
||||
```
|
||||
|
||||
## Security
|
||||
|
||||
### Access Boundaries
|
||||
|
||||
Filesystem respects the configured directory boundaries:
|
||||
- Cannot read files outside allowed directories
|
||||
- Cannot write to system directories
|
||||
- Cannot access parent directories with `../`
|
||||
|
||||
### Best Practices
|
||||
|
||||
1. **Limit scope** — Only allow directories needed for the task
|
||||
2. **Use project root** — `.` is usually sufficient
|
||||
3. **Avoid sensitive paths** — Don't allow access to credentials or secrets
|
||||
|
||||
## Comparison with Built-in Tools
|
||||
|
||||
| Feature | Built-in | Filesystem MCP |
|
||||
|---------|----------|----------------|
|
||||
| Read files | ✓ | ✓ |
|
||||
| Write files | ✓ | ✓ |
|
||||
| Directory tree | Limited | Full tree view |
|
||||
| File search | Via Glob | Pattern search |
|
||||
| Bulk operations | Sequential | Batch capable |
|
||||
| Access control | Permission-based | Directory-based |
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Permission Denied
|
||||
|
||||
If operations fail:
|
||||
1. Check allowed directory in configuration
|
||||
2. Verify file permissions
|
||||
3. Ensure path is within allowed scope
|
||||
|
||||
### File Not Found
|
||||
|
||||
If search returns empty:
|
||||
1. Verify file exists
|
||||
2. Check file extension in pattern
|
||||
3. Confirm path is relative to allowed directory
|
||||
|
||||
### Path Issues
|
||||
|
||||
Always use forward slashes and relative paths:
|
||||
- "./src/file.ts" not ".\src\file.ts"
|
||||
- Avoid absolute paths
|
||||
|
||||
## Resources
|
||||
|
||||
- [MCP Filesystem Server](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem)
|
||||
- [File System Security Best Practices](https://owasp.org/www-community/vulnerabilities/Path_Traversal)
|
||||
@@ -1,220 +0,0 @@
|
||||
---
|
||||
title: Command Integration
|
||||
description: How MCP servers enhance Claude Kit commands and modes.
|
||||
---
|
||||
|
||||
# Command Integration
|
||||
|
||||
MCP servers are automatically used by Claude Kit commands and modes. This guide shows which servers enhance each command and how they work together.
|
||||
|
||||
## Commands + MCP Servers
|
||||
|
||||
### Development Commands
|
||||
|
||||
| Command | MCP Servers | Enhancement |
|
||||
|---------|-------------|-------------|
|
||||
| `/feature` | Context7, Sequential, Memory, Filesystem, Playwright | Full development workflow with docs, planning, persistence |
|
||||
| `/fix` | Sequential, Memory, Playwright, Context7, Filesystem | Systematic debugging with browser testing |
|
||||
| `/test` | Playwright, Filesystem, Context7, Memory | E2E tests, file management, testing patterns |
|
||||
| `/review` | Playwright, Memory, Sequential, Filesystem | Visual review, consistent standards |
|
||||
|
||||
### Planning Commands
|
||||
|
||||
| Command | MCP Servers | Enhancement |
|
||||
|---------|-------------|-------------|
|
||||
| `/plan` | Sequential, Memory, Context7, Filesystem | Structured breakdown, persistent decisions |
|
||||
| `/brainstorm` | Sequential, Memory, Context7 | Organized exploration, design persistence |
|
||||
| `/research` | Context7, Sequential, Memory | Real-time docs, thorough analysis |
|
||||
|
||||
### Utility Commands
|
||||
|
||||
| Command | MCP Servers | Enhancement |
|
||||
|---------|-------------|-------------|
|
||||
| `/index` | Filesystem, Memory | Project scanning, structure persistence |
|
||||
|
||||
## Modes + MCP Servers
|
||||
|
||||
| Mode | Primary MCP | Best For |
|
||||
|------|-------------|----------|
|
||||
| **brainstorm** | Sequential + Memory | Design sessions with persistent ideas |
|
||||
| **deep-research** | Sequential + Context7 | Thorough technical investigation |
|
||||
| **implementation** | Filesystem + Context7 | Focused coding with accurate docs |
|
||||
| **review** | Playwright + Memory | UI review with consistent standards |
|
||||
| **orchestration** | All 5 | Complex multi-step parallel work |
|
||||
|
||||
## Example Workflows
|
||||
|
||||
### Full Feature Development
|
||||
|
||||
```bash
|
||||
/feature Add user profile with avatar upload
|
||||
```
|
||||
|
||||
**MCP Flow:**
|
||||
1. **Context7** — Fetches React file upload documentation
|
||||
2. **Sequential** — Plans component structure step-by-step
|
||||
3. **Memory** — Recalls UI patterns from previous features
|
||||
4. **Filesystem** — Creates files in correct locations
|
||||
5. **Playwright** — Tests upload flow in browser
|
||||
|
||||
### Complex Debugging
|
||||
|
||||
```bash
|
||||
/fix Authentication fails intermittently on mobile
|
||||
```
|
||||
|
||||
**MCP Flow:**
|
||||
1. **Memory** — Recalls auth architecture from previous sessions
|
||||
2. **Sequential** — Analyzes race conditions systematically
|
||||
3. **Playwright** — Tests on mobile device emulation
|
||||
4. **Context7** — Checks session handling best practices
|
||||
|
||||
### Research & Planning
|
||||
|
||||
```bash
|
||||
/research --mode=deep-research JWT vs Session authentication
|
||||
```
|
||||
|
||||
**MCP Flow:**
|
||||
1. **Sequential** — Structures comparison step-by-step
|
||||
2. **Context7** — Fetches current JWT and session library docs
|
||||
3. **Memory** — Stores findings for future reference
|
||||
|
||||
### Project Indexing
|
||||
|
||||
```bash
|
||||
/index
|
||||
```
|
||||
|
||||
**MCP Flow:**
|
||||
1. **Filesystem** — Scans project with `directory_tree`
|
||||
2. **Memory** — Stores structure as knowledge graph
|
||||
|
||||
## Server Synergy
|
||||
|
||||
### Context7 + Memory
|
||||
|
||||
**Pattern:** Research → Store → Recall
|
||||
|
||||
```
|
||||
Session 1: /research React Server Components
|
||||
→ Context7 fetches RSC documentation
|
||||
→ Memory stores key patterns
|
||||
|
||||
Session 2: /feature Add data fetching
|
||||
→ Memory recalls RSC patterns
|
||||
→ Implementation uses correct approach
|
||||
```
|
||||
|
||||
### Sequential + Memory
|
||||
|
||||
**Pattern:** Analyze → Decide → Remember
|
||||
|
||||
```
|
||||
/brainstorm Database migration strategy
|
||||
→ Sequential explores options step-by-step
|
||||
→ Memory stores final decision
|
||||
→ Future sessions recall the decision
|
||||
```
|
||||
|
||||
### Playwright + Context7
|
||||
|
||||
**Pattern:** Test → Verify → Document
|
||||
|
||||
```
|
||||
/test E2E checkout flow
|
||||
→ Playwright automates browser testing
|
||||
→ Context7 provides testing library docs
|
||||
→ Tests use correct assertions
|
||||
```
|
||||
|
||||
### Filesystem + Memory
|
||||
|
||||
**Pattern:** Scan → Store → Navigate
|
||||
|
||||
```
|
||||
/index
|
||||
→ Filesystem scans project structure
|
||||
→ Memory creates project knowledge graph
|
||||
→ Future commands know where files are
|
||||
```
|
||||
|
||||
## Configuration Tips
|
||||
|
||||
### Platform Note
|
||||
|
||||
Configuration differs by platform:
|
||||
- **Linux/macOS**: Use `"command": "npx"` directly
|
||||
- **Windows**: Use `"command": "cmd"` with `"/c", "npx"` in args
|
||||
|
||||
Examples below show Linux/macOS syntax. For Windows, see [MCP Overview](/claudekit/mcp/overview/).
|
||||
|
||||
### Minimal Setup
|
||||
|
||||
For basic usage, Context7 and Sequential are most impactful:
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"context7": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@upstash/context7-mcp"]
|
||||
},
|
||||
"sequential": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Full Setup
|
||||
|
||||
For complete Claude Kit integration, use all 5 servers:
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"context7": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@upstash/context7-mcp"]
|
||||
},
|
||||
"sequential": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
||||
},
|
||||
"playwright": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@playwright/mcp"]
|
||||
},
|
||||
"memory": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-memory"]
|
||||
},
|
||||
"filesystem": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Performance Notes
|
||||
|
||||
### First Run
|
||||
|
||||
First run downloads npm packages (one-time). Subsequent starts are faster.
|
||||
|
||||
### Startup Order
|
||||
|
||||
Servers start in parallel. All should be ready within seconds.
|
||||
|
||||
### Resource Usage
|
||||
|
||||
Each server runs as a separate process. Total overhead is minimal but consider disabling unused servers for resource-constrained environments.
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [MCP Overview](/claudekit/mcp/overview/) — Setup and configuration
|
||||
- [Commands Overview](/claudekit/commands/overview/) — All available commands
|
||||
- [Modes Overview](/claudekit/modes/overview/) — Behavioral modes
|
||||
@@ -1,197 +0,0 @@
|
||||
---
|
||||
title: Memory
|
||||
description: Persistent knowledge graph for context across sessions.
|
||||
---
|
||||
|
||||
# Memory
|
||||
|
||||
Memory MCP maintains a persistent knowledge graph across sessions, enabling Claude to remember decisions, patterns, and preferences over time.
|
||||
|
||||
## Configuration
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"memory": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-memory"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Core Concepts
|
||||
|
||||
### Entities
|
||||
|
||||
Named items in the knowledge graph (e.g., "AuthService", "UserModel").
|
||||
|
||||
### Observations
|
||||
|
||||
Facts about entities (e.g., "uses JWT tokens", "requires database").
|
||||
|
||||
### Relations
|
||||
|
||||
Connections between entities (e.g., "AuthService" → "uses" → "UserRepository").
|
||||
|
||||
## Available Tools
|
||||
|
||||
### Entity Management
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `create_entities` | Create new entities |
|
||||
| `delete_entities` | Remove entities |
|
||||
| `open_nodes` | Open specific entities by name |
|
||||
| `search_nodes` | Search for entities |
|
||||
|
||||
### Observations
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `add_observations` | Add facts to entities |
|
||||
| `delete_observations` | Remove observations |
|
||||
|
||||
### Relations
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `create_relations` | Link entities together |
|
||||
| `delete_relations` | Remove links |
|
||||
|
||||
### Graph Operations
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `read_graph` | Read entire knowledge graph |
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Project Architecture
|
||||
|
||||
```
|
||||
/index
|
||||
```
|
||||
Memory stores:
|
||||
- Entity: "src/api" — "Contains REST endpoints"
|
||||
- Entity: "src/services" — "Business logic layer"
|
||||
- Relation: "api" → "depends on" → "services"
|
||||
|
||||
### Design Decisions
|
||||
|
||||
```
|
||||
/brainstorm Authentication strategy
|
||||
```
|
||||
Memory stores:
|
||||
- Entity: "AuthDecision"
|
||||
- Observation: "Chose JWT over sessions for scalability"
|
||||
- Observation: "User prefers stateless auth"
|
||||
|
||||
### Bug Patterns
|
||||
|
||||
```
|
||||
/fix Race condition in checkout
|
||||
```
|
||||
Memory stores:
|
||||
- Entity: "CheckoutBug"
|
||||
- Observation: "Caused by async state update"
|
||||
- Observation: "Fixed with mutex lock"
|
||||
|
||||
## Command Integration
|
||||
|
||||
| Command | How Memory Helps |
|
||||
|---------|-----------------|
|
||||
| `/brainstorm` | Remembers design decisions |
|
||||
| `/plan` | Recalls previous task patterns |
|
||||
| `/fix` | Stores bug patterns for future reference |
|
||||
| `/index` | Persists project structure |
|
||||
|
||||
## Example Workflow
|
||||
|
||||
### Storing Design Decisions
|
||||
|
||||
**Session 1:**
|
||||
```
|
||||
/brainstorm Authentication for mobile app
|
||||
→ Decision: Use OAuth with refresh tokens
|
||||
→ Memory stores this decision
|
||||
```
|
||||
|
||||
**Session 2:**
|
||||
```
|
||||
/feature Add logout functionality
|
||||
→ Memory recalls: "Uses OAuth with refresh tokens"
|
||||
→ Claude knows to invalidate refresh token
|
||||
```
|
||||
|
||||
### Building Project Knowledge
|
||||
|
||||
**Over time:**
|
||||
```
|
||||
create_entities(["AuthService", "UserRepository", "TokenManager"])
|
||||
|
||||
add_observations("AuthService", [
|
||||
"Handles OAuth flow",
|
||||
"Uses refresh tokens",
|
||||
"Integrates with Google/GitHub"
|
||||
])
|
||||
|
||||
create_relations([
|
||||
{"from": "AuthService", "to": "TokenManager", "type": "uses"},
|
||||
{"from": "AuthService", "to": "UserRepository", "type": "queries"}
|
||||
])
|
||||
```
|
||||
|
||||
**Later query:**
|
||||
```
|
||||
search_nodes("auth")
|
||||
→ Returns full context about authentication architecture
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Use Descriptive Names
|
||||
|
||||
Entity names should be clear and consistent:
|
||||
- "AuthService" not "AS"
|
||||
- "PaymentFlow" not "pmt"
|
||||
|
||||
### Add Context to Observations
|
||||
|
||||
Include why, not just what:
|
||||
- "Uses JWT because stateless scales better"
|
||||
- "Chose Postgres for ACID compliance"
|
||||
|
||||
### Create Meaningful Relations
|
||||
|
||||
Relations should express real dependencies:
|
||||
- "depends on", "uses", "calls", "creates"
|
||||
|
||||
### Review Regularly
|
||||
|
||||
Use `read_graph` periodically to review stored knowledge and prune outdated information.
|
||||
|
||||
## Data Persistence
|
||||
|
||||
Memory data is stored locally and persists between sessions. The knowledge graph grows over time as you work with Claude Kit.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Graph Getting Large
|
||||
|
||||
If the graph becomes unwieldy:
|
||||
1. Use `search_nodes` to find specific entities
|
||||
2. Delete outdated entities with `delete_entities`
|
||||
3. Remove stale observations
|
||||
|
||||
### Missing Context
|
||||
|
||||
If Claude doesn't recall something:
|
||||
- Check if entity exists with `search_nodes`
|
||||
- Observations may not have been stored
|
||||
- Entity names may differ
|
||||
|
||||
## Resources
|
||||
|
||||
- [MCP Memory Server](https://github.com/modelcontextprotocol/servers/tree/main/src/memory)
|
||||
- [Knowledge Graph Concepts](https://en.wikipedia.org/wiki/Knowledge_graph)
|
||||
@@ -1,136 +0,0 @@
|
||||
---
|
||||
title: MCP Integrations
|
||||
description: Extend Claude Kit with Model Context Protocol servers for enhanced capabilities.
|
||||
---
|
||||
|
||||
# MCP Integrations
|
||||
|
||||
Model Context Protocol (MCP) servers extend Claude Kit with powerful capabilities like real-time documentation, persistent memory, and browser automation.
|
||||
|
||||
## What is MCP?
|
||||
|
||||
MCP (Model Context Protocol) is an open standard that allows AI assistants to connect with external tools and data sources. Claude Kit includes pre-configured MCP servers that enhance your development workflow.
|
||||
|
||||
## Available Servers
|
||||
|
||||
| Server | Package | Purpose |
|
||||
|--------|---------|---------|
|
||||
| **Context7** | `@upstash/context7-mcp` | Real-time library documentation |
|
||||
| **Sequential** | `@modelcontextprotocol/server-sequential-thinking` | Structured problem-solving |
|
||||
| **Playwright** | `@playwright/mcp` | Browser automation |
|
||||
| **Memory** | `@modelcontextprotocol/server-memory` | Persistent knowledge graph |
|
||||
| **Filesystem** | `@modelcontextprotocol/server-filesystem` | Secure file operations |
|
||||
|
||||
## Quick Setup
|
||||
|
||||
### 1. Create Configuration
|
||||
|
||||
Create a `.mcp.json` file in your project root. Choose your platform:
|
||||
|
||||
#### Linux / macOS
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"context7": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@upstash/context7-mcp"]
|
||||
},
|
||||
"sequential": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
||||
},
|
||||
"playwright": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@playwright/mcp"]
|
||||
},
|
||||
"memory": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-memory"]
|
||||
},
|
||||
"filesystem": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Windows
|
||||
|
||||
Windows requires the `cmd /c` wrapper:
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"context7": {
|
||||
"command": "cmd",
|
||||
"args": ["/c", "npx", "-y", "@upstash/context7-mcp"]
|
||||
},
|
||||
"sequential": {
|
||||
"command": "cmd",
|
||||
"args": ["/c", "npx", "-y", "@modelcontextprotocol/server-sequential-thinking"]
|
||||
},
|
||||
"playwright": {
|
||||
"command": "cmd",
|
||||
"args": ["/c", "npx", "-y", "@playwright/mcp"]
|
||||
},
|
||||
"memory": {
|
||||
"command": "cmd",
|
||||
"args": ["/c", "npx", "-y", "@modelcontextprotocol/server-memory"]
|
||||
},
|
||||
"filesystem": {
|
||||
"command": "cmd",
|
||||
"args": ["/c", "npx", "-y", "@modelcontextprotocol/server-filesystem", "."]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Prerequisites
|
||||
|
||||
- Node.js 18+
|
||||
- npx available in PATH
|
||||
|
||||
### 3. Verify Installation
|
||||
|
||||
Start a new Claude Code session. MCP servers will load automatically. Test with:
|
||||
|
||||
```
|
||||
Ask Claude about React hooks using Context7
|
||||
```
|
||||
|
||||
## Benefits
|
||||
|
||||
### Real-Time Documentation
|
||||
Context7 fetches current library documentation, eliminating outdated API references from training data.
|
||||
|
||||
### Structured Reasoning
|
||||
Sequential Thinking enables step-by-step analysis with confidence tracking for complex debugging and planning.
|
||||
|
||||
### Browser Testing
|
||||
Playwright provides cross-browser automation for E2E testing without separate test infrastructure.
|
||||
|
||||
### Persistent Context
|
||||
Memory server maintains knowledge across sessions, remembering your patterns and preferences.
|
||||
|
||||
### Safe File Operations
|
||||
Filesystem server provides controlled file access with security boundaries.
|
||||
|
||||
## How It Works
|
||||
|
||||
MCP servers are **automatically used** when configured. Claude Kit commands and modes include explicit guidance for optimal MCP usage.
|
||||
|
||||
For example, when you run `/research react hooks`:
|
||||
1. Context7 fetches current React documentation
|
||||
2. Sequential Thinking structures the analysis
|
||||
3. Memory stores findings for future reference
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [Context7](/claudekit/mcp/context7/) — Library documentation lookup
|
||||
- [Sequential Thinking](/claudekit/mcp/sequential/) — Structured reasoning
|
||||
- [Playwright](/claudekit/mcp/playwright/) — Browser automation
|
||||
- [Memory](/claudekit/mcp/memory/) — Persistent knowledge
|
||||
- [Filesystem](/claudekit/mcp/filesystem/) — File operations
|
||||
- [Command Integration](/claudekit/mcp/integration/) — How MCP enhances commands
|
||||
@@ -1,198 +0,0 @@
|
||||
---
|
||||
title: Playwright
|
||||
description: Browser automation for testing and web interaction.
|
||||
---
|
||||
|
||||
# Playwright
|
||||
|
||||
Playwright MCP provides browser automation using accessibility tree for fast, LLM-friendly interaction. Built by Microsoft, it enables cross-browser testing without vision models.
|
||||
|
||||
## Configuration
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"playwright": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@playwright/mcp"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Command-Line Options
|
||||
|
||||
| Option | Description | Example |
|
||||
|--------|-------------|---------|
|
||||
| `--browser` | Browser to use | `chrome`, `firefox`, `webkit`, `msedge` |
|
||||
| `--headless` | Run without UI | Flag only |
|
||||
| `--viewport-size` | Window size | `1280x720` |
|
||||
| `--device` | Device emulation | `iPhone 15`, `Pixel 7` |
|
||||
|
||||
**Example with options:**
|
||||
```json
|
||||
{
|
||||
"playwright": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@playwright/mcp", "--browser", "chrome", "--headless"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Available Tools
|
||||
|
||||
### Navigation
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `browser_navigate` | Go to a URL |
|
||||
| `browser_go_back` | Navigate back |
|
||||
| `browser_go_forward` | Navigate forward |
|
||||
| `browser_wait` | Wait for page load |
|
||||
|
||||
### Interaction
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `browser_click` | Click element |
|
||||
| `browser_type` | Type text |
|
||||
| `browser_fill` | Fill input field |
|
||||
| `browser_select_option` | Select dropdown option |
|
||||
| `browser_press_key` | Press keyboard key |
|
||||
|
||||
### Content
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `browser_snapshot` | Get accessibility tree |
|
||||
| `browser_take_screenshot` | Capture screenshot |
|
||||
| `browser_get_text` | Get element text |
|
||||
|
||||
### Tabs
|
||||
|
||||
| Tool | Description |
|
||||
|------|-------------|
|
||||
| `browser_tab_list` | List open tabs |
|
||||
| `browser_tab_new` | Open new tab |
|
||||
| `browser_tab_select` | Switch to tab |
|
||||
| `browser_tab_close` | Close tab |
|
||||
|
||||
## Use Cases
|
||||
|
||||
### E2E Testing
|
||||
|
||||
```
|
||||
/test e2e Login flow should redirect to dashboard
|
||||
```
|
||||
Playwright:
|
||||
1. Navigates to login page
|
||||
2. Fills credentials
|
||||
3. Clicks submit
|
||||
4. Verifies dashboard redirect
|
||||
|
||||
### UI Review
|
||||
|
||||
```
|
||||
/review Visual regression on mobile
|
||||
```
|
||||
Playwright:
|
||||
1. Opens page with device emulation
|
||||
2. Takes screenshots
|
||||
3. Compares with expected layout
|
||||
|
||||
### Form Testing
|
||||
|
||||
```
|
||||
/test Form validation for user registration
|
||||
```
|
||||
Playwright:
|
||||
1. Fills form with various inputs
|
||||
2. Tests validation messages
|
||||
3. Verifies submission behavior
|
||||
|
||||
## Command Integration
|
||||
|
||||
| Command | How Playwright Helps |
|
||||
|---------|---------------------|
|
||||
| `/test` | E2E browser tests |
|
||||
| `/fix` | Reproduce UI bugs in browser |
|
||||
| `/review` | Visual verification of changes |
|
||||
| `/feature` | Test new UI features |
|
||||
|
||||
## Example Workflow
|
||||
|
||||
### Testing Login Flow
|
||||
|
||||
```javascript
|
||||
// Playwright MCP workflow
|
||||
browser_navigate("https://app.example.com/login")
|
||||
browser_fill("#email", "test@example.com")
|
||||
browser_fill("#password", "password123")
|
||||
browser_click("#login-button")
|
||||
browser_wait() // Wait for navigation
|
||||
browser_take_screenshot("after-login.png")
|
||||
```
|
||||
|
||||
### Mobile Testing
|
||||
|
||||
```javascript
|
||||
// With device emulation (--device "iPhone 15")
|
||||
browser_navigate("https://app.example.com")
|
||||
browser_snapshot() // Get accessibility tree
|
||||
browser_take_screenshot("mobile-view.png")
|
||||
```
|
||||
|
||||
## Key Features
|
||||
|
||||
### Accessibility Tree
|
||||
|
||||
Playwright uses the accessibility tree instead of pixels:
|
||||
- **Faster** — No image processing needed
|
||||
- **LLM-friendly** — Structured element data
|
||||
- **Cross-browser** — Works identically everywhere
|
||||
|
||||
### Device Emulation
|
||||
|
||||
Test on different devices without physical hardware:
|
||||
- iPhone, iPad, Pixel, Galaxy
|
||||
- Custom viewport sizes
|
||||
- Touch vs mouse input
|
||||
|
||||
### Profile Management
|
||||
|
||||
Playwright can maintain browser state across sessions for authenticated testing.
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Use Headless Mode
|
||||
|
||||
For automated testing, use `--headless` to run without UI overhead.
|
||||
|
||||
### Wait for Elements
|
||||
|
||||
Always use `browser_wait` or wait for specific elements before interaction.
|
||||
|
||||
### Accessibility First
|
||||
|
||||
Use accessibility tree (`browser_snapshot`) to understand page structure before clicking.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Element Not Found
|
||||
|
||||
If clicking fails:
|
||||
1. Use `browser_snapshot` to see available elements
|
||||
2. Check if element needs scrolling
|
||||
3. Wait for dynamic content to load
|
||||
|
||||
### Browser Not Starting
|
||||
|
||||
- Ensure browser is installed
|
||||
- Check Node.js version (18+)
|
||||
- Try different browser with `--browser`
|
||||
|
||||
## Resources
|
||||
|
||||
- [Playwright MCP](https://github.com/microsoft/playwright-mcp)
|
||||
- [Playwright Documentation](https://playwright.dev)
|
||||
- [Device Descriptors](https://playwright.dev/docs/emulation#devices)
|
||||
@@ -1,157 +0,0 @@
|
||||
---
|
||||
title: Sequential Thinking
|
||||
description: Structured problem-solving with step-by-step reasoning.
|
||||
---
|
||||
|
||||
# Sequential Thinking
|
||||
|
||||
Sequential Thinking provides structured reasoning tools for complex problem-solving, enabling step-by-step analysis with confidence tracking and revision capabilities.
|
||||
|
||||
## Configuration
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"sequential": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Available Tools
|
||||
|
||||
### sequentialthinking
|
||||
|
||||
Dynamic problem-solving through structured thought sequences.
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Description |
|
||||
|-----------|-------------|
|
||||
| `thought` | Current thinking step |
|
||||
| `thoughtNumber` | Current step number (1, 2, 3...) |
|
||||
| `totalThoughts` | Estimated total steps needed |
|
||||
| `nextThoughtNeeded` | Whether more steps are needed |
|
||||
| `isRevision` | If this revises previous thinking |
|
||||
| `revisesThought` | Which thought is being reconsidered |
|
||||
| `branchFromThought` | Branching point for alternative paths |
|
||||
| `needsMoreThoughts` | If more analysis is needed |
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Complex Debugging
|
||||
|
||||
```
|
||||
/fix Intermittent authentication failures
|
||||
```
|
||||
Sequential Thinking:
|
||||
1. Defines the question clearly
|
||||
2. Gathers evidence systematically
|
||||
3. Forms hypotheses with probabilities
|
||||
4. Tests most likely cause first
|
||||
5. Documents conclusion with confidence
|
||||
|
||||
### Architecture Decisions
|
||||
|
||||
```
|
||||
/brainstorm Database migration strategy
|
||||
```
|
||||
Sequential Thinking:
|
||||
1. Explores options step-by-step
|
||||
2. Tracks trade-offs for each approach
|
||||
3. Revises conclusions based on feedback
|
||||
4. Builds confidence incrementally
|
||||
|
||||
### Root Cause Analysis
|
||||
|
||||
```
|
||||
/research Why is the build slow?
|
||||
```
|
||||
Sequential Thinking:
|
||||
1. Breaks problem into investigation steps
|
||||
2. Documents evidence at each step
|
||||
3. Adjusts hypothesis as facts emerge
|
||||
4. Provides confidence-scored conclusion
|
||||
|
||||
## Command Integration
|
||||
|
||||
| Command | How Sequential Thinking Helps |
|
||||
|---------|------------------------------|
|
||||
| `/fix` | Systematic root cause analysis |
|
||||
| `/plan` | Structured task decomposition |
|
||||
| `/brainstorm` | Organized design exploration |
|
||||
| `/research` | Step-by-step investigation |
|
||||
|
||||
## Mode Integration
|
||||
|
||||
| Mode | Integration |
|
||||
|------|-------------|
|
||||
| `deep-research` | Primary tool for thorough analysis |
|
||||
| `brainstorm` | Structures creative exploration |
|
||||
| `review` | Systematic code examination |
|
||||
|
||||
## Example Workflow
|
||||
|
||||
### Debugging Session
|
||||
|
||||
**Thought 1:** Define the problem
|
||||
```
|
||||
"What is causing authentication to fail intermittently for some users?"
|
||||
→ Confidence: N/A (question definition)
|
||||
```
|
||||
|
||||
**Thought 2:** Gather evidence
|
||||
```
|
||||
"Checking logs shows failures occur during peak hours,
|
||||
primarily for users with special characters in passwords."
|
||||
→ Confidence: 7/10
|
||||
```
|
||||
|
||||
**Thought 3:** Form hypothesis
|
||||
```
|
||||
"Hypothesis A: URL encoding issue with special characters.
|
||||
Evidence: Failure pattern matches special char passwords.
|
||||
Probability: 80%"
|
||||
→ Confidence: 8/10
|
||||
```
|
||||
|
||||
**Thought 4:** Test hypothesis
|
||||
```
|
||||
"Tested with password 'test@123' - fails.
|
||||
Tested with 'test123' - works.
|
||||
Hypothesis confirmed."
|
||||
→ Confidence: 9/10
|
||||
```
|
||||
|
||||
**Thought 5:** Conclusion
|
||||
```
|
||||
"Root cause: URL encoding mangles special characters.
|
||||
Fix: Use base64 encoding instead.
|
||||
Confidence: 9/10"
|
||||
→ nextThoughtNeeded: false
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Start with Clear Questions
|
||||
|
||||
Define what you're investigating before gathering evidence.
|
||||
|
||||
### Track Confidence
|
||||
|
||||
Explicitly state confidence levels to identify when more investigation is needed.
|
||||
|
||||
### Allow Revisions
|
||||
|
||||
Use `isRevision` and `revisesThought` to refine understanding as new information emerges.
|
||||
|
||||
### Branch When Needed
|
||||
|
||||
Use `branchFromThought` to explore alternative hypotheses without losing the main thread.
|
||||
|
||||
## Resources
|
||||
|
||||
- [MCP Sequential Thinking](https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking)
|
||||
- [Sequential Thinking Skill](/claudekit/skills/methodology/sequential-thinking/)
|
||||
@@ -1,498 +0,0 @@
|
||||
---
|
||||
title: Brainstorm Mode
|
||||
description: Creative exploration mode for design and ideation
|
||||
---
|
||||
|
||||
# Brainstorm Mode
|
||||
|
||||
## Overview
|
||||
|
||||
Brainstorm mode optimizes for creative exploration, divergent thinking, and design discussions. It emphasizes asking questions, presenting alternatives, and thoroughly exploring possibilities before committing to solutions.
|
||||
|
||||
Use this mode when the path forward isn't clear and you need to explore the problem space.
|
||||
|
||||
## When to Use
|
||||
|
||||
Brainstorm mode is ideal for:
|
||||
|
||||
- **Initial feature exploration** - Understanding requirements and possibilities
|
||||
- **Architecture decisions** - Evaluating different structural approaches
|
||||
- **Problem definition** - Clarifying what you're actually trying to solve
|
||||
- **Design sessions** - Creating mockups, APIs, data models
|
||||
- **When stuck** - Getting unstuck by exploring new angles
|
||||
|
||||
## Behavior Changes
|
||||
|
||||
### Communication Style
|
||||
|
||||
**Question-first approach:**
|
||||
- Ask clarifying questions before concluding
|
||||
- Present multiple alternatives with trade-offs
|
||||
- Explore edge cases verbally
|
||||
- Use "what if" scenarios to probe possibilities
|
||||
|
||||
**Example:**
|
||||
```
|
||||
Before we implement authentication, I have some questions to help
|
||||
us choose the best approach:
|
||||
|
||||
1. User base: Are you expecting 100 users or 100,000?
|
||||
2. Auth methods: Just email/password, or OAuth (Google, GitHub)?
|
||||
3. Sessions: Stateful server sessions or stateless JWT?
|
||||
4. MFA: Is two-factor authentication needed now or later?
|
||||
5. Password reset: Email-based reset flow needed?
|
||||
|
||||
Based on your answers, I can recommend the most suitable approach.
|
||||
```
|
||||
|
||||
### Problem-Solving Approach
|
||||
|
||||
- **Divergent thinking first** - Generate many options before narrowing
|
||||
- **Delay convergence** - Don't jump to solutions immediately
|
||||
- **Question assumptions** - Challenge requirements to find better solutions
|
||||
- **Map trade-offs explicitly** - Show pros/cons of each option
|
||||
|
||||
### Output Format
|
||||
|
||||
- Structured comparisons and decision matrices
|
||||
- Pro/con lists for alternatives
|
||||
- Visual diagrams (ASCII art, Mermaid)
|
||||
- Open questions sections
|
||||
- Recommendation with reasoning
|
||||
|
||||
## Examples
|
||||
|
||||
### Feature Design
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/brainstorm "notification system"
|
||||
```
|
||||
|
||||
**Brainstorm Mode Response:**
|
||||
```markdown
|
||||
Let me explore different approaches for a notification system.
|
||||
|
||||
## Clarifying Questions
|
||||
|
||||
Before we design this, I need to understand:
|
||||
|
||||
1. **Delivery channels**: Email only, or also push/SMS/in-app?
|
||||
2. **Volume**: How many notifications per day/user?
|
||||
3. **Real-time needs**: Must they arrive instantly or is eventual delivery OK?
|
||||
4. **User preferences**: Can users customize what notifications they receive?
|
||||
5. **Priority levels**: Do some notifications need to override "do not disturb"?
|
||||
|
||||
## Architectural Options
|
||||
|
||||
### Option A: Simple Database Polling
|
||||
```
|
||||
User requests → API checks DB → Returns unread notifications
|
||||
```
|
||||
**Pros:**
|
||||
- Simple to implement
|
||||
- No infrastructure complexity
|
||||
- Easy to debug
|
||||
|
||||
**Cons:**
|
||||
- Not real-time
|
||||
- Doesn't scale to high volumes
|
||||
- Inefficient for many concurrent users
|
||||
|
||||
**Best for:** Low volume, non-real-time needs
|
||||
|
||||
---
|
||||
|
||||
### Option B: Queue-Based System
|
||||
```
|
||||
Event → Queue → Worker → Notification Service → User
|
||||
```
|
||||
**Pros:**
|
||||
- Handles high volume
|
||||
- Retries on failure
|
||||
- Decoupled components
|
||||
|
||||
**Cons:**
|
||||
- More infrastructure (queue system)
|
||||
- Higher complexity
|
||||
- Delayed delivery possible
|
||||
|
||||
**Best for:** High volume, reliability critical
|
||||
|
||||
---
|
||||
|
||||
### Option C: WebSocket Real-Time
|
||||
```
|
||||
Event → Notification Service → WebSocket → User
|
||||
```
|
||||
**Pros:**
|
||||
- Instant delivery
|
||||
- Great UX
|
||||
- Efficient for active users
|
||||
|
||||
**Cons:**
|
||||
- Complex client code
|
||||
- Requires persistent connections
|
||||
- More server resources
|
||||
|
||||
**Best for:** Real-time requirements, active users
|
||||
|
||||
---
|
||||
|
||||
## Hybrid Recommendation
|
||||
|
||||
For most applications, I'd suggest **combining approaches**:
|
||||
|
||||
1. **WebSocket** for users actively online (instant)
|
||||
2. **Queue-based** for background processing (reliable)
|
||||
3. **Database polling** as fallback (simple)
|
||||
|
||||
This gives you:
|
||||
- Real-time when possible
|
||||
- Reliability when needed
|
||||
- Simplicity as baseline
|
||||
|
||||
## Trade-off Matrix
|
||||
|
||||
| Requirement | Option A | Option B | Option C | Hybrid |
|
||||
|-------------|----------|----------|----------|--------|
|
||||
| Real-time | ❌ | ⚠️ | ✅ | ✅ |
|
||||
| High volume | ❌ | ✅ | ⚠️ | ✅ |
|
||||
| Simplicity | ✅ | ❌ | ❌ | ⚠️ |
|
||||
| Reliability | ⚠️ | ✅ | ⚠️ | ✅ |
|
||||
| Cost | $ | $$ | $$$ | $$ |
|
||||
|
||||
## Next Steps
|
||||
|
||||
Which approach resonates with your needs? Or should we explore:
|
||||
- Notification content templates?
|
||||
- User preference management?
|
||||
- Delivery failure handling?
|
||||
- Analytics and tracking?
|
||||
```
|
||||
|
||||
### API Design
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/brainstorm "REST API for blog posts"
|
||||
```
|
||||
|
||||
**Brainstorm Mode Response:**
|
||||
```markdown
|
||||
Let's design the blog post API. A few questions first:
|
||||
|
||||
**Access control:**
|
||||
- Public read access, or authentication required?
|
||||
- Who can create/edit/delete posts?
|
||||
|
||||
**Features:**
|
||||
- Just CRUD, or also drafts/publishing workflow?
|
||||
- Comments on posts?
|
||||
- Tags/categories?
|
||||
|
||||
## Design Options
|
||||
|
||||
### Option 1: Simple RESTful
|
||||
```
|
||||
GET /posts # List all posts
|
||||
GET /posts/:id # Get single post
|
||||
POST /posts # Create post
|
||||
PUT /posts/:id # Update post
|
||||
DELETE /posts/:id # Delete post
|
||||
```
|
||||
|
||||
**Pros:**
|
||||
- Standard REST conventions
|
||||
- Easy to understand
|
||||
- Widely supported
|
||||
|
||||
**Cons:**
|
||||
- No draft/publish workflow
|
||||
- Limited filtering
|
||||
|
||||
---
|
||||
|
||||
### Option 2: Rich Resource Model
|
||||
```
|
||||
GET /posts?status=published&tag=tech
|
||||
GET /posts/:id
|
||||
POST /posts
|
||||
PATCH /posts/:id
|
||||
DELETE /posts/:id
|
||||
POST /posts/:id/publish
|
||||
POST /posts/:id/unpublish
|
||||
GET /posts/:id/revisions
|
||||
```
|
||||
|
||||
**Pros:**
|
||||
- Supports workflow
|
||||
- Rich filtering
|
||||
- Version history
|
||||
|
||||
**Cons:**
|
||||
- More complex
|
||||
- More endpoints to maintain
|
||||
|
||||
---
|
||||
|
||||
### Option 3: GraphQL Alternative
|
||||
```
|
||||
query {
|
||||
posts(status: PUBLISHED, tag: "tech") {
|
||||
id, title, content, author { name }
|
||||
}
|
||||
}
|
||||
|
||||
mutation {
|
||||
createPost(input: {...}) { id }
|
||||
publishPost(id: "123") { publishedAt }
|
||||
}
|
||||
```
|
||||
|
||||
**Pros:**
|
||||
- Flexible querying
|
||||
- No over-fetching
|
||||
- Strong typing
|
||||
|
||||
**Cons:**
|
||||
- Different paradigm
|
||||
- More upfront setup
|
||||
- Caching more complex
|
||||
|
||||
## Recommendation
|
||||
|
||||
For a blog, I'd suggest **Option 2** (Rich REST) because:
|
||||
|
||||
1. **Workflow support** - Drafts vs published is common need
|
||||
2. **Filtering** - Users expect to filter by tag/category
|
||||
3. **Familiarity** - REST is well-understood
|
||||
4. **Incremental** - Can start simple and add endpoints
|
||||
|
||||
## Sample Implementation
|
||||
|
||||
Would you like me to:
|
||||
1. Implement Option 2?
|
||||
2. Explore the data model?
|
||||
3. Design the authentication layer?
|
||||
4. Something else?
|
||||
```
|
||||
|
||||
### Problem Definition
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/brainstorm "users complain app is slow"
|
||||
```
|
||||
|
||||
**Brainstorm Mode Response:**
|
||||
```markdown
|
||||
Let's break down this performance issue systematically.
|
||||
|
||||
## Clarifying Questions
|
||||
|
||||
To narrow down the problem:
|
||||
|
||||
**When:**
|
||||
- Slow all the time or at specific times?
|
||||
- Started recently or always been slow?
|
||||
- After a specific deployment?
|
||||
|
||||
**Where:**
|
||||
- Which pages/features feel slow?
|
||||
- Mobile app, web app, or both?
|
||||
- Specific user segments affected?
|
||||
|
||||
**What:**
|
||||
- What feels slow: page load, interactions, or data fetching?
|
||||
- Error messages shown?
|
||||
- How slow (seconds)?
|
||||
|
||||
## Potential Root Causes
|
||||
|
||||
### 1. Frontend Performance
|
||||
- Large JavaScript bundles
|
||||
- Unoptimized images
|
||||
- Too many network requests
|
||||
- No caching strategy
|
||||
|
||||
### 2. Backend Performance
|
||||
- Slow database queries (N+1 problems)
|
||||
- No pagination on large datasets
|
||||
- Blocking API calls
|
||||
- Memory leaks
|
||||
|
||||
### 3. Network Issues
|
||||
- Large payload sizes
|
||||
- No CDN usage
|
||||
- Poor geographical distribution
|
||||
- HTTP/1.1 instead of HTTP/2
|
||||
|
||||
### 4. Scaling Issues
|
||||
- Single server under load
|
||||
- Database connection pool exhausted
|
||||
- No caching layer
|
||||
- Synchronous processing
|
||||
|
||||
## Investigation Approaches
|
||||
|
||||
### Approach A: User-Centric
|
||||
1. Identify most common user flows
|
||||
2. Measure each step with timing
|
||||
3. Find slowest step
|
||||
4. Optimize that first
|
||||
|
||||
**Best for:** Clear user complaints about specific features
|
||||
|
||||
---
|
||||
|
||||
### Approach B: Data-Driven
|
||||
1. Add performance monitoring (New Relic, DataDog)
|
||||
2. Collect metrics for 24 hours
|
||||
3. Analyze slow transactions
|
||||
4. Prioritize by frequency × impact
|
||||
|
||||
**Best for:** Unclear where slowness occurs
|
||||
|
||||
---
|
||||
|
||||
### Approach C: Bottom-Up Audit
|
||||
1. Profile database queries
|
||||
2. Check API response times
|
||||
3. Analyze bundle sizes
|
||||
4. Review server metrics
|
||||
|
||||
**Best for:** Suspected technical debt
|
||||
|
||||
## Quick Wins to Try First
|
||||
|
||||
Before deep investigation:
|
||||
|
||||
1. **Enable caching**
|
||||
- Browser caching headers
|
||||
- CDN for static assets
|
||||
- Redis for API responses
|
||||
|
||||
2. **Optimize queries**
|
||||
- Add indexes for common queries
|
||||
- Implement pagination
|
||||
- Use query explain plans
|
||||
|
||||
3. **Reduce payload**
|
||||
- Compress responses (gzip)
|
||||
- Remove unused fields
|
||||
- Lazy load images
|
||||
|
||||
## My Recommendation
|
||||
|
||||
I'd suggest a **hybrid approach**:
|
||||
|
||||
1. Add basic performance monitoring (1 hour)
|
||||
2. Measure top 3 user flows (2 hours)
|
||||
3. Quick win optimizations (4 hours)
|
||||
4. Review data and decide next steps
|
||||
|
||||
This gives you:
|
||||
- Quick improvements for users
|
||||
- Data to make informed decisions
|
||||
- Foundation for ongoing monitoring
|
||||
|
||||
What additional context can you share to help narrow this down?
|
||||
```
|
||||
|
||||
## Tips for Using Brainstorm Mode
|
||||
|
||||
### Get the Most Value
|
||||
|
||||
1. **Start with brainstorm, end with implementation**
|
||||
```bash
|
||||
/mode brainstorm
|
||||
/brainstorm "authentication approach"
|
||||
# Make decisions based on exploration
|
||||
|
||||
/mode implementation
|
||||
/feature "implement OAuth2 with JWT"
|
||||
# Execute the chosen approach
|
||||
```
|
||||
|
||||
2. **Use for unfamiliar territory**
|
||||
- New technologies
|
||||
- Complex domains
|
||||
- Architecture decisions
|
||||
|
||||
3. **Share context progressively**
|
||||
- Answer questions one by one
|
||||
- Add constraints as you think of them
|
||||
- Claude will refine recommendations
|
||||
|
||||
### When to Switch Out
|
||||
|
||||
Switch from brainstorm mode when:
|
||||
- You've made your decision
|
||||
- Alternatives are clear
|
||||
- Ready to implement
|
||||
- Need faster responses
|
||||
|
||||
### Combining with Other Modes
|
||||
|
||||
```bash
|
||||
# Brainstorm architecture, then research deeply
|
||||
/brainstorm --mode=brainstorm "microservices vs monolith"
|
||||
/research --mode=deep-research "microservices implementation patterns"
|
||||
|
||||
# Brainstorm design, then implement efficiently
|
||||
/brainstorm --mode=brainstorm "database schema"
|
||||
/feature --mode=implementation "create schema from design"
|
||||
```
|
||||
|
||||
## Interactive Brainstorming
|
||||
|
||||
For interactive sessions with follow-up questions:
|
||||
|
||||
```bash
|
||||
/brainstorm "feature name"
|
||||
```
|
||||
|
||||
Claude will ask one question at a time, validate your response, and progressively refine the exploration.
|
||||
|
||||
## Mode Activation
|
||||
|
||||
```bash
|
||||
# Session-wide brainstorm mode
|
||||
/mode brainstorm
|
||||
|
||||
# Single command with brainstorm
|
||||
/plan --mode=brainstorm "complex feature"
|
||||
/feature --mode=brainstorm "new system"
|
||||
```
|
||||
|
||||
## Comparison with Other Modes
|
||||
|
||||
| Aspect | Brainstorm | Default | Deep Research |
|
||||
|--------|------------|---------|---------------|
|
||||
| Questions asked | Many | Some | Some |
|
||||
| Alternatives shown | Always | Sometimes | Multiple with evidence |
|
||||
| Decision timing | Delayed | Normal | After thorough analysis |
|
||||
| Code output | Minimal | Balanced | Minimal |
|
||||
| Best for | Design | Implementation | Investigation |
|
||||
|
||||
## Configuration
|
||||
|
||||
Brainstorm mode can be customized in `.claude/modes/brainstorm.md`:
|
||||
|
||||
- Number of alternatives to show
|
||||
- Question verbosity
|
||||
- When to converge on solution
|
||||
- Output format preferences
|
||||
|
||||
## Related Modes
|
||||
|
||||
- **Deep Research Mode**: For evidence-based exploration
|
||||
- **Default Mode**: For balanced exploration + implementation
|
||||
- **Review Mode**: For critical analysis of existing designs
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [Modes Overview](/claudekit/modes/overview)
|
||||
- [Planning Workflow](/claudekit/guides/planning)
|
||||
- [Decision Making](/claudekit/guides/decisions)
|
||||
@@ -1,921 +0,0 @@
|
||||
---
|
||||
title: Deep Research Mode
|
||||
description: Thorough investigation mode with evidence and citations
|
||||
---
|
||||
|
||||
# Deep Research Mode
|
||||
|
||||
## Overview
|
||||
|
||||
Deep research mode prioritizes comprehensive investigation over speed. It emphasizes evidence gathering, cross-referencing, citations, and acknowledging uncertainty. Use when accuracy and depth matter more than efficiency.
|
||||
|
||||
This mode produces structured reports with confidence levels, sources, and explicit acknowledgment of limitations.
|
||||
|
||||
## When to Use
|
||||
|
||||
Deep research mode is ideal for:
|
||||
|
||||
- **Technology evaluation** - Comparing frameworks, libraries, approaches
|
||||
- **Architecture research** - Investigating patterns and best practices
|
||||
- **Security audits** - Finding vulnerabilities and assessing risk
|
||||
- **Performance analysis** - Identifying bottlenecks and optimization opportunities
|
||||
- **Complex debugging** - Root cause analysis of difficult bugs
|
||||
- **Due diligence** - Thorough assessment before major decisions
|
||||
|
||||
## Behavior Changes
|
||||
|
||||
### Communication Style
|
||||
|
||||
**Evidence-based:**
|
||||
- Cite sources and evidence for claims
|
||||
- Acknowledge uncertainty explicitly
|
||||
- Present confidence levels for conclusions
|
||||
- Include caveats and limitations
|
||||
- Cross-reference multiple sources
|
||||
|
||||
**Example:**
|
||||
```markdown
|
||||
## Research: Authentication Approaches
|
||||
|
||||
### Finding 1: JWT vs Session Tokens (Confidence: 9/10)
|
||||
|
||||
**Evidence:**
|
||||
- Code analysis: src/auth/jwt.ts (line 45-78)
|
||||
- Documentation: docs/auth-spec.md
|
||||
- Industry practice: OWASP guidelines
|
||||
|
||||
**Analysis:**
|
||||
Current implementation uses JWTs stored in localStorage. This is
|
||||
vulnerable to XSS attacks (OWASP A7:2017).
|
||||
|
||||
Sessions with httpOnly cookies provide better XSS protection but
|
||||
require server state management.
|
||||
|
||||
**Recommendation:** Switch to httpOnly cookies unless you have
|
||||
specific stateless requirements.
|
||||
|
||||
### Gaps & Limitations
|
||||
- Couldn't determine actual XSS risk without security audit
|
||||
- No data on session volume to assess state management cost
|
||||
- Need to validate CORS configuration for cookie approach
|
||||
```
|
||||
|
||||
### Problem-Solving Approach
|
||||
|
||||
- **Exhaustive exploration** - Check all relevant sources
|
||||
- **Multiple verification passes** - Cross-check findings
|
||||
- **Document assumptions** - Make reasoning transparent
|
||||
- **Assess confidence** - How sure are we?
|
||||
|
||||
### Output Format
|
||||
|
||||
- Structured research reports
|
||||
- Evidence sections with sources
|
||||
- Confidence indicators (1-10 or High/Medium/Low)
|
||||
- Explicit gaps and limitations
|
||||
- Methodology explanation
|
||||
|
||||
## Research Process
|
||||
|
||||
### Phase 1: Scope Definition
|
||||
|
||||
Before diving in, clarify:
|
||||
- What specific questions need answering?
|
||||
- What would constitute a successful answer?
|
||||
- What constraints or context matter?
|
||||
|
||||
### Phase 2: Information Gathering
|
||||
|
||||
Systematically collect:
|
||||
- **Codebase search** - Grep for relevant patterns, functions, configs
|
||||
- **Documentation** - READMEs, comments, specifications
|
||||
- **Dependencies** - package.json, requirements.txt, imports
|
||||
- **Issue tracking** - Known bugs, feature requests
|
||||
- **Web research** - Official docs, best practices, security advisories
|
||||
|
||||
### Phase 3: Analysis
|
||||
|
||||
Process the findings:
|
||||
- Cross-reference findings across sources
|
||||
- Identify patterns and contradictions
|
||||
- Note reliability of each source
|
||||
- Assess confidence levels
|
||||
- Document uncertainties
|
||||
|
||||
### Phase 4: Synthesis
|
||||
|
||||
Draw conclusions:
|
||||
- Present findings with evidence
|
||||
- State confidence levels clearly
|
||||
- Acknowledge what's unknown
|
||||
- Provide actionable recommendations
|
||||
|
||||
## Examples
|
||||
|
||||
### Technology Evaluation
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/research --mode=deep-research "should we use GraphQL vs REST?"
|
||||
```
|
||||
|
||||
**Deep Research Response:**
|
||||
```markdown
|
||||
## Research: GraphQL vs REST for Our API
|
||||
|
||||
### Methodology
|
||||
- Analyzed current REST API: 12 endpoints, 4 resources
|
||||
- Reviewed client usage patterns in frontend code
|
||||
- Checked team experience with both technologies
|
||||
- Researched complexity and maintenance requirements
|
||||
|
||||
---
|
||||
|
||||
### Finding 1: Client Usage Patterns (Confidence: 8/10)
|
||||
|
||||
**Evidence:**
|
||||
- `src/frontend/api/users.ts`: 8 REST calls, 5 fetch full objects
|
||||
unnecessarily (lines 23, 45, 67, 89, 123)
|
||||
- Network tab analysis: 40% of data fetched is unused
|
||||
- Average payload: 2.3KB, estimated needed: 1.1KB
|
||||
|
||||
**Analysis:**
|
||||
Over-fetching is significant. GraphQL would allow clients to request
|
||||
only needed fields, reducing bandwidth by ~50%.
|
||||
|
||||
**Confidence note:** Based on static analysis. Real usage may vary.
|
||||
|
||||
---
|
||||
|
||||
### Finding 2: Team Expertise (Confidence: 10/10)
|
||||
|
||||
**Evidence:**
|
||||
- Team survey: 3/3 developers experienced with REST
|
||||
- Team survey: 0/3 developers experienced with GraphQL
|
||||
- package.json: No GraphQL dependencies
|
||||
|
||||
**Analysis:**
|
||||
Adopting GraphQL requires learning curve. Estimate:
|
||||
- Initial learning: 2-3 weeks per developer
|
||||
- Production-ready: 1-2 months
|
||||
- Expertise: 6+ months
|
||||
|
||||
---
|
||||
|
||||
### Finding 3: Maintenance Complexity (Confidence: 7/10)
|
||||
|
||||
**Evidence:**
|
||||
- REST: 12 endpoints, ~300 lines route code
|
||||
- GraphQL (estimated): 1 endpoint, ~400 lines schema + resolvers
|
||||
- Industry reports: GraphQL schemas grow faster than REST APIs
|
||||
|
||||
**Analysis:**
|
||||
GraphQL adds upfront complexity but may reduce long-term endpoint
|
||||
proliferation.
|
||||
|
||||
**Caveat:** Projection based on typical patterns, not our specific
|
||||
growth trajectory.
|
||||
|
||||
---
|
||||
|
||||
### Finding 4: Tooling & Ecosystem (Confidence: 9/10)
|
||||
|
||||
**Evidence:**
|
||||
- REST: Swagger UI, well-supported testing tools
|
||||
- GraphQL: GraphiQL, Apollo DevTools, strong TypeScript support
|
||||
- Current stack: Already using TypeScript
|
||||
|
||||
**Analysis:**
|
||||
Both have mature tooling. GraphQL TypeScript integration could improve
|
||||
type safety across frontend/backend boundary.
|
||||
|
||||
---
|
||||
|
||||
### Comparison Matrix
|
||||
|
||||
| Criterion | REST | GraphQL | Winner |
|
||||
|-----------|------|---------|--------|
|
||||
| Team familiarity | ✅ High | ❌ None | REST |
|
||||
| Over-fetching | ❌ Significant | ✅ Eliminated | GraphQL |
|
||||
| Type safety | ⚠️ Manual | ✅ Automatic | GraphQL |
|
||||
| Learning curve | ✅ Minimal | ❌ 2-3 months | REST |
|
||||
| Long-term maintenance | ⚠️ Endpoint sprawl | ✅ Schema evolution | GraphQL |
|
||||
| Caching | ✅ HTTP caching | ⚠️ Complex | REST |
|
||||
|
||||
---
|
||||
|
||||
### Conclusions
|
||||
|
||||
**Recommendation: Stick with REST for now** (Confidence: 7/10)
|
||||
|
||||
**Reasoning:**
|
||||
1. **Short-term constraints**: No GraphQL expertise, 2-3 month learning
|
||||
curve is significant for 3-person team
|
||||
2. **Over-fetching is solvable**: Can add field filtering to REST
|
||||
(e.g., `?fields=id,name`) for ~80% of benefit
|
||||
3. **Type safety gains**: Can achieve with TypeScript + OpenAPI codegen
|
||||
|
||||
**When to reconsider GraphQL:**
|
||||
- Team grows beyond 5 developers
|
||||
- API complexity exceeds 30+ endpoints
|
||||
- Mobile app launches (bandwidth critical)
|
||||
- Frontend team becomes GraphQL-experienced
|
||||
|
||||
---
|
||||
|
||||
### Gaps & Limitations
|
||||
|
||||
**What we don't know:**
|
||||
- Actual bandwidth costs (no production metrics)
|
||||
- Client device diversity (mobile vs desktop ratio)
|
||||
- Future feature requirements (may favor GraphQL)
|
||||
- Whether competitors use GraphQL (market expectation)
|
||||
|
||||
**What would change the recommendation:**
|
||||
- If 50%+ traffic is mobile (bandwidth matters more)
|
||||
- If hiring GraphQL experts (removes learning curve issue)
|
||||
- If building public API (GraphQL great for external developers)
|
||||
|
||||
---
|
||||
|
||||
### Sources
|
||||
|
||||
**Codebase:**
|
||||
- `src/frontend/api/users.ts` (client usage patterns)
|
||||
- `src/api/routes/` (current REST implementation)
|
||||
- `package.json` (current dependencies)
|
||||
|
||||
**Team:**
|
||||
- Developer survey (2024-01-15)
|
||||
|
||||
**External:**
|
||||
- OWASP API Security Project
|
||||
- GraphQL Best Practices (graphql.org)
|
||||
- "REST vs GraphQL" (2023, Thoughtworks)
|
||||
```
|
||||
|
||||
### Security Audit
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/research --depth=5 --persona=security src/auth/
|
||||
```
|
||||
|
||||
**Deep Research Response:**
|
||||
```markdown
|
||||
## Security Audit: Authentication Module
|
||||
|
||||
### Methodology
|
||||
- Code review: All files in src/auth/
|
||||
- Dependency analysis: Known vulnerabilities
|
||||
- Pattern matching: Common security anti-patterns
|
||||
- Standards check: OWASP Top 10 compliance
|
||||
|
||||
---
|
||||
|
||||
### Critical Findings 🔴
|
||||
|
||||
#### Finding 1: Hardcoded Secret (Confidence: 10/10)
|
||||
|
||||
**Location:** `src/auth/jwt.ts:12`
|
||||
|
||||
**Evidence:**
|
||||
```typescript
|
||||
const JWT_SECRET = "mysecretkey123"; // Line 12
|
||||
```
|
||||
|
||||
**Risk:** CRITICAL
|
||||
- Secret is in version control
|
||||
- Anyone with repo access can forge tokens
|
||||
- All tokens compromised if code leaks
|
||||
|
||||
**Exploitation:**
|
||||
```typescript
|
||||
// Attacker can create valid tokens
|
||||
const forgedToken = jwt.sign({ userId: 'admin' }, 'mysecretkey123');
|
||||
```
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
const JWT_SECRET = process.env.JWT_SECRET;
|
||||
if (!JWT_SECRET) throw new Error('JWT_SECRET required');
|
||||
```
|
||||
|
||||
**References:**
|
||||
- OWASP A2:2021 - Cryptographic Failures
|
||||
- CWE-798: Use of Hard-coded Credentials
|
||||
|
||||
---
|
||||
|
||||
#### Finding 2: No Rate Limiting (Confidence: 9/10)
|
||||
|
||||
**Location:** `src/api/auth.ts:45-67` (login endpoint)
|
||||
|
||||
**Evidence:**
|
||||
- No rate limiting middleware
|
||||
- No failed attempt tracking
|
||||
- Can attempt login indefinitely
|
||||
|
||||
**Risk:** HIGH
|
||||
- Brute force attacks viable
|
||||
- No account lockout
|
||||
- No monitoring of suspicious activity
|
||||
|
||||
**Test:**
|
||||
```bash
|
||||
# Can send unlimited login attempts
|
||||
for i in {1..10000}; do
|
||||
curl -X POST /auth/login -d '{"user":"admin","pass":"test'$i'"}'
|
||||
done
|
||||
```
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
import rateLimit from 'express-rate-limit';
|
||||
|
||||
const loginLimiter = rateLimit({
|
||||
windowMs: 15 * 60 * 1000, // 15 minutes
|
||||
max: 5, // 5 attempts
|
||||
message: 'Too many login attempts'
|
||||
});
|
||||
|
||||
router.post('/login', loginLimiter, loginHandler);
|
||||
```
|
||||
|
||||
**References:**
|
||||
- OWASP: Authentication Cheat Sheet
|
||||
- CWE-307: Improper Restriction of Excessive Authentication Attempts
|
||||
|
||||
---
|
||||
|
||||
### Important Findings 🟠
|
||||
|
||||
#### Finding 3: Weak Password Requirements (Confidence: 8/10)
|
||||
|
||||
**Location:** `src/auth/validation.ts:23`
|
||||
|
||||
**Evidence:**
|
||||
```typescript
|
||||
const passwordValid = password.length >= 6; // Too weak
|
||||
```
|
||||
|
||||
**Risk:** MEDIUM
|
||||
- 6 characters easily brute-forced
|
||||
- No complexity requirements
|
||||
- Common passwords allowed
|
||||
|
||||
**Current weakness:**
|
||||
- 6 chars, lowercase only = 26^6 = 308M combinations
|
||||
- Cracked in ~1 hour with modern GPU
|
||||
|
||||
**Recommendation:**
|
||||
- Minimum 12 characters
|
||||
- Require: uppercase, lowercase, number, symbol
|
||||
- Check against common password list
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
import { passwordStrength } from 'check-password-strength';
|
||||
|
||||
function validatePassword(password: string): boolean {
|
||||
const strength = passwordStrength(password);
|
||||
return strength.value === 'Strong' || strength.value === 'Medium';
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Minor Findings 🟡
|
||||
|
||||
#### Finding 4: No HTTPS Enforcement (Confidence: 6/10)
|
||||
|
||||
**Location:** `src/server.ts:15`
|
||||
|
||||
**Evidence:**
|
||||
```typescript
|
||||
app.listen(3000); // HTTP only, no HTTPS redirect
|
||||
```
|
||||
|
||||
**Risk:** LOW (if behind reverse proxy), MEDIUM (if exposed)
|
||||
- Credentials sent in cleartext if HTTP used
|
||||
- Session tokens interceptable
|
||||
|
||||
**Note:** Risk is LOW if Nginx/Cloudflare handles HTTPS termination.
|
||||
|
||||
**Verification needed:**
|
||||
- Check if reverse proxy handles HTTPS
|
||||
- Check production deployment config
|
||||
|
||||
---
|
||||
|
||||
### Positive Findings ✅
|
||||
|
||||
**Good practices observed:**
|
||||
- ✅ Passwords are hashed (bcrypt, src/auth/password.ts:34)
|
||||
- ✅ JWT tokens expire (1 hour, src/auth/jwt.ts:45)
|
||||
- ✅ CORS configured (src/middleware/cors.ts)
|
||||
- ✅ SQL injection protected (using parameterized queries)
|
||||
|
||||
---
|
||||
|
||||
### Risk Summary
|
||||
|
||||
| Severity | Count | Must Fix Before Production |
|
||||
|----------|-------|----------------------------|
|
||||
| 🔴 Critical | 2 | Yes - Immediate |
|
||||
| 🟠 Important | 1 | Yes - Within 1 week |
|
||||
| 🟡 Minor | 1 | Should fix |
|
||||
|
||||
**Overall Risk: HIGH** - Not production-ready in current state.
|
||||
|
||||
---
|
||||
|
||||
### Remediation Plan
|
||||
|
||||
**Phase 1: Critical (Today)**
|
||||
1. Move JWT_SECRET to environment variable
|
||||
2. Add rate limiting to login endpoint
|
||||
3. Deploy to staging and verify
|
||||
|
||||
**Phase 2: Important (This Week)**
|
||||
4. Strengthen password requirements
|
||||
5. Add password breach checking (haveibeenpwned API)
|
||||
6. Implement account lockout after failed attempts
|
||||
|
||||
**Phase 3: Minor (Next Sprint)**
|
||||
7. Enforce HTTPS or verify reverse proxy config
|
||||
8. Add security headers (helmet.js)
|
||||
9. Set up security monitoring
|
||||
|
||||
---
|
||||
|
||||
### Gaps & Limitations
|
||||
|
||||
**Not Assessed:**
|
||||
- Session storage security (needs Redis config review)
|
||||
- Frontend XSS vulnerabilities (outside src/auth/)
|
||||
- Infrastructure security (firewall, network segmentation)
|
||||
- Third-party auth (OAuth, if any)
|
||||
|
||||
**Assumptions:**
|
||||
- Assuming production uses HTTPS (needs verification)
|
||||
- Assuming rate limiting not at reverse proxy level
|
||||
- Assuming single-server deployment (clustering affects session handling)
|
||||
|
||||
**Recommended Follow-ups:**
|
||||
- Full application security audit (not just auth)
|
||||
- Penetration testing
|
||||
- Security logging and monitoring setup
|
||||
|
||||
---
|
||||
|
||||
### Sources
|
||||
|
||||
**Code Reviewed:**
|
||||
- All files in `src/auth/` (8 files, 450 lines)
|
||||
- `src/api/auth.ts` (API endpoints)
|
||||
- `src/middleware/` (security middleware)
|
||||
- `package.json` (dependencies)
|
||||
|
||||
**Standards:**
|
||||
- OWASP Top 10 (2021)
|
||||
- OWASP Authentication Cheat Sheet
|
||||
- CWE Top 25 Most Dangerous Weaknesses
|
||||
|
||||
**Tools:**
|
||||
- Manual code review
|
||||
- Pattern matching for common vulnerabilities
|
||||
- npm audit (dependency check)
|
||||
```
|
||||
|
||||
### Performance Investigation
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/research --mode=deep-research "why is /api/posts so slow?"
|
||||
```
|
||||
|
||||
**Deep Research Response:**
|
||||
```markdown
|
||||
## Performance Investigation: /api/posts Endpoint
|
||||
|
||||
### Methodology
|
||||
1. Code analysis: Trace request flow
|
||||
2. Database query analysis: Check execution plans
|
||||
3. Network analysis: Payload sizes
|
||||
4. Profiling: Identify bottlenecks
|
||||
|
||||
---
|
||||
|
||||
### Finding 1: N+1 Query Problem (Confidence: 10/10)
|
||||
|
||||
**Location:** `src/services/post-service.ts:45-67`
|
||||
|
||||
**Evidence:**
|
||||
```typescript
|
||||
// Line 45: Fetches all posts
|
||||
const posts = await db.posts.findAll();
|
||||
|
||||
// Lines 50-55: Loop fetches author for each post
|
||||
for (const post of posts) {
|
||||
post.author = await db.users.findById(post.authorId); // N queries!
|
||||
}
|
||||
```
|
||||
|
||||
**Database logs:**
|
||||
```sql
|
||||
SELECT * FROM posts; -- 1 query
|
||||
SELECT * FROM users WHERE id = 1; -- Query 1 of N
|
||||
SELECT * FROM users WHERE id = 2; -- Query 2 of N
|
||||
SELECT * FROM users WHERE id = 3; -- Query 3 of N
|
||||
-- ... 100 more queries for 100 posts
|
||||
```
|
||||
|
||||
**Impact:**
|
||||
- 100 posts = 101 database queries
|
||||
- Each query: ~10ms
|
||||
- Total time: ~1,010ms just for queries
|
||||
- **Actual measurement:** 1,247ms total (from logs)
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
// Single query with JOIN
|
||||
const posts = await db.posts.findAll({
|
||||
include: [{ model: db.users, as: 'author' }]
|
||||
});
|
||||
// Now: 1 query instead of 101
|
||||
// Expected time: ~50ms
|
||||
```
|
||||
|
||||
**Expected improvement: 95% faster** (1,247ms → 50ms)
|
||||
|
||||
**Confidence: 10/10** - Classic N+1 problem, well-documented fix
|
||||
|
||||
---
|
||||
|
||||
### Finding 2: Large Payload Size (Confidence: 9/10)
|
||||
|
||||
**Location:** `src/api/posts.ts:23`
|
||||
|
||||
**Evidence:**
|
||||
```typescript
|
||||
// Returns everything, no pagination
|
||||
res.json(posts); // All 100 posts at once
|
||||
```
|
||||
|
||||
**Measurements:**
|
||||
- Average post with author: 2.3KB
|
||||
- 100 posts: 230KB response
|
||||
- Network time: ~400ms on 3G connection
|
||||
|
||||
**Analysis:**
|
||||
Most clients only show 10 posts at a time. We're sending 10x needed data.
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
// Add pagination
|
||||
const limit = parseInt(req.query.limit) || 10;
|
||||
const offset = parseInt(req.query.offset) || 0;
|
||||
|
||||
const posts = await db.posts.findAll({
|
||||
limit,
|
||||
offset,
|
||||
include: [{ model: db.users, as: 'author' }]
|
||||
});
|
||||
|
||||
res.json({
|
||||
posts,
|
||||
total: await db.posts.count(),
|
||||
limit,
|
||||
offset
|
||||
});
|
||||
```
|
||||
|
||||
**Expected improvement:** 230KB → 23KB (90% reduction)
|
||||
|
||||
**Confidence: 9/10** - Measured in browser network tab
|
||||
|
||||
---
|
||||
|
||||
### Finding 3: No Caching (Confidence: 7/10)
|
||||
|
||||
**Location:** `src/api/posts.ts` (missing cache layer)
|
||||
|
||||
**Evidence:**
|
||||
- No Cache-Control headers
|
||||
- No Redis/Memcached integration
|
||||
- Every request hits database
|
||||
|
||||
**Analysis:**
|
||||
Posts don't change frequently (checked git history: 2-3 updates/hour).
|
||||
Could cache for 5 minutes.
|
||||
|
||||
**Potential improvement:**
|
||||
```typescript
|
||||
// Add Redis caching
|
||||
const cacheKey = `posts:${limit}:${offset}`;
|
||||
let posts = await redis.get(cacheKey);
|
||||
|
||||
if (!posts) {
|
||||
posts = await db.posts.findAll({...});
|
||||
await redis.setex(cacheKey, 300, JSON.stringify(posts)); // 5 min
|
||||
}
|
||||
```
|
||||
|
||||
**Expected improvement:**
|
||||
- Cache hit: ~5ms (vs 50ms from DB)
|
||||
- 90% cache hit rate (estimated) = 45ms average improvement
|
||||
|
||||
**Confidence: 7/10** - Based on typical cache hit rates, needs measurement
|
||||
|
||||
---
|
||||
|
||||
### Finding 4: Missing Database Indexes (Confidence: 8/10)
|
||||
|
||||
**Evidence:**
|
||||
```sql
|
||||
EXPLAIN SELECT * FROM posts WHERE authorId = 5;
|
||||
```
|
||||
|
||||
**Result:**
|
||||
```
|
||||
Seq Scan on posts (cost=0.00..180.00 rows=10 width=100)
|
||||
Filter: (authorId = 5)
|
||||
```
|
||||
|
||||
**Analysis:**
|
||||
Sequential scan of entire table. With index, would be index lookup.
|
||||
|
||||
**Fix:**
|
||||
```sql
|
||||
CREATE INDEX idx_posts_author_id ON posts(authorId);
|
||||
```
|
||||
|
||||
**Expected improvement:** Large dataset improvement
|
||||
- Current: O(n) - scans all rows
|
||||
- With index: O(log n) - fast lookup
|
||||
|
||||
**Confidence: 8/10** - EXPLAIN shows no index, but impact depends on
|
||||
table size (currently only 100 rows, so minimal impact now)
|
||||
|
||||
---
|
||||
|
||||
### Performance Summary
|
||||
|
||||
| Issue | Current Impact | Fix Impact | Priority |
|
||||
|-------|----------------|------------|----------|
|
||||
| N+1 queries | 1,200ms | -1,150ms (95%) | 🔴 Critical |
|
||||
| Large payload | 400ms | -360ms (90%) | 🟠 Important |
|
||||
| No caching | 50ms | -45ms (90%) | 🟡 Nice-to-have |
|
||||
| No index | Minimal (100 rows) | Future-proofing | 🟡 Nice-to-have |
|
||||
|
||||
**Total current time:** ~1,650ms
|
||||
**After fixes:** ~90ms
|
||||
**Expected improvement:** 94% faster
|
||||
|
||||
---
|
||||
|
||||
### Recommended Fix Order
|
||||
|
||||
**Phase 1: Quick Win (Today - 30 minutes)**
|
||||
```typescript
|
||||
// Fix N+1 problem
|
||||
const posts = await db.posts.findAll({
|
||||
include: [{ model: db.users, as: 'author' }],
|
||||
limit: 10,
|
||||
offset: 0
|
||||
});
|
||||
```
|
||||
**Impact:** 95% improvement immediately
|
||||
|
||||
**Phase 2: Pagination (This Week - 2 hours)**
|
||||
- Add limit/offset parameters
|
||||
- Add total count
|
||||
- Update frontend to paginate
|
||||
|
||||
**Impact:** Better UX + smaller payloads
|
||||
|
||||
**Phase 3: Caching (Next Sprint - 1 day)**
|
||||
- Set up Redis
|
||||
- Add caching layer
|
||||
- Add cache invalidation on updates
|
||||
|
||||
**Impact:** Further 90% improvement on repeated requests
|
||||
|
||||
**Phase 4: Indexes (Next Sprint - 30 minutes)**
|
||||
- Add database indexes
|
||||
- Monitor query performance
|
||||
|
||||
**Impact:** Future-proofing for scale
|
||||
|
||||
---
|
||||
|
||||
### Gaps & Limitations
|
||||
|
||||
**What we measured:**
|
||||
- ✅ Database query time (from logs)
|
||||
- ✅ Payload size (from network tab)
|
||||
- ✅ Query plans (EXPLAIN)
|
||||
|
||||
**What we didn't measure:**
|
||||
- ❌ Real user experience (RUM)
|
||||
- ❌ Server CPU/memory during load
|
||||
- ❌ Performance under concurrent requests
|
||||
- ❌ 95th/99th percentile response times
|
||||
|
||||
**Assumptions:**
|
||||
- Assuming single-server deployment
|
||||
- Assuming 3G network (400ms for 230KB)
|
||||
- Assuming 90% cache hit rate (typical, but unverified)
|
||||
|
||||
**Recommended follow-ups:**
|
||||
- Add APM tool (New Relic, DataDog)
|
||||
- Load testing (100+ concurrent users)
|
||||
- Real user monitoring
|
||||
- Database slow query log analysis
|
||||
|
||||
---
|
||||
|
||||
### Sources
|
||||
|
||||
**Code:**
|
||||
- `src/services/post-service.ts` (logic)
|
||||
- `src/api/posts.ts` (endpoint)
|
||||
- Database logs (query times)
|
||||
|
||||
**Measurements:**
|
||||
- Browser DevTools Network tab (payload sizes)
|
||||
- PostgreSQL EXPLAIN (query plans)
|
||||
- Application logs (request timing)
|
||||
|
||||
**References:**
|
||||
- "N+1 Query Problem" (guides.rubyonrails.org)
|
||||
- "Database Indexing Best Practices" (use-the-index-luke.com)
|
||||
```
|
||||
|
||||
## Depth Levels
|
||||
|
||||
Control thoroughness with the `--depth` flag:
|
||||
|
||||
| Level | Behavior | Use Case |
|
||||
|-------|----------|----------|
|
||||
| 1 | Quick scan, surface findings | Initial triage |
|
||||
| 2 | Standard analysis | Regular research |
|
||||
| 3 | Thorough investigation | Most deep research |
|
||||
| 4 | Comprehensive with cross-references | Important decisions |
|
||||
| 5 | Exhaustive, leave no stone unturned | Critical audits |
|
||||
|
||||
**Example:**
|
||||
```bash
|
||||
/research --depth=5 "authentication approach"
|
||||
```
|
||||
|
||||
## Tips for Using Deep Research Mode
|
||||
|
||||
### When It Provides Most Value
|
||||
|
||||
1. **Before major decisions**
|
||||
- Framework selection
|
||||
- Architecture changes
|
||||
- Security implementations
|
||||
|
||||
2. **When bugs are mysterious**
|
||||
- Intermittent issues
|
||||
- Complex interactions
|
||||
- Performance problems
|
||||
|
||||
3. **For audits and reviews**
|
||||
- Security audits
|
||||
- Performance reviews
|
||||
- Code quality assessments
|
||||
|
||||
### Maximize Research Quality
|
||||
|
||||
**Provide context:**
|
||||
```bash
|
||||
# Less effective
|
||||
/research "GraphQL"
|
||||
|
||||
# More effective
|
||||
/research "GraphQL vs REST for our 12-endpoint API serving mobile apps"
|
||||
```
|
||||
|
||||
**Ask specific questions:**
|
||||
```bash
|
||||
# Vague
|
||||
/research "improve performance"
|
||||
|
||||
# Specific
|
||||
/research "why is /api/posts taking 1.5s? Database logs show 101 queries."
|
||||
```
|
||||
|
||||
**Share constraints:**
|
||||
```bash
|
||||
/research --mode=deep-research "authentication approach for 3-person team
|
||||
with no GraphQL experience, expecting 10K users"
|
||||
```
|
||||
|
||||
### Combine with Sequential Thinking
|
||||
|
||||
For complex problems:
|
||||
|
||||
```bash
|
||||
/research --mode=deep-research --sequential "migrate from MongoDB to
|
||||
PostgreSQL while maintaining zero downtime"
|
||||
```
|
||||
|
||||
This activates both deep research AND step-by-step reasoning.
|
||||
|
||||
## Mode Activation
|
||||
|
||||
```bash
|
||||
# Session-wide deep research
|
||||
/mode deep-research
|
||||
|
||||
# Single command
|
||||
/research --mode=deep-research [topic]
|
||||
/fix --mode=deep-research --depth=5 [error]
|
||||
|
||||
# With persona for focused research
|
||||
/review --mode=deep-research --persona=security src/auth/
|
||||
```
|
||||
|
||||
## Output Structure Template
|
||||
|
||||
Deep research outputs typically follow this structure:
|
||||
|
||||
```markdown
|
||||
## Research: [Topic]
|
||||
|
||||
### Methodology
|
||||
[How we researched this]
|
||||
|
||||
---
|
||||
|
||||
### Finding 1: [Title] (Confidence: X/10)
|
||||
**Evidence:** [Sources, locations, measurements]
|
||||
**Analysis:** [What this means]
|
||||
**Impact:** [How significant]
|
||||
|
||||
### Finding 2: [Title] (Confidence: X/10)
|
||||
[Same structure]
|
||||
|
||||
---
|
||||
|
||||
### Conclusions
|
||||
- [Conclusion 1] (Confidence: X/10)
|
||||
- [Recommendation with reasoning]
|
||||
|
||||
---
|
||||
|
||||
### Gaps & Limitations
|
||||
- [What we don't know]
|
||||
- [What would change the recommendation]
|
||||
|
||||
---
|
||||
|
||||
### Sources
|
||||
- [Source 1]
|
||||
- [Source 2]
|
||||
```
|
||||
|
||||
## When NOT to Use
|
||||
|
||||
Avoid deep research mode for:
|
||||
|
||||
- **Simple, well-understood tasks** - Overkill
|
||||
- **Time-sensitive fixes** - Too slow
|
||||
- **Repetitive operations** - Use token-efficient instead
|
||||
- **Clear, obvious solutions** - Use implementation mode
|
||||
|
||||
## Comparison with Other Modes
|
||||
|
||||
| Aspect | Deep Research | Brainstorm | Default |
|
||||
|--------|---------------|------------|---------|
|
||||
| Thoroughness | Exhaustive | Exploratory | Standard |
|
||||
| Evidence | Required | Optional | Sometimes |
|
||||
| Confidence levels | Always | No | No |
|
||||
| Sources cited | Yes | No | No |
|
||||
| Speed | Slow | Medium | Fast |
|
||||
| Token usage | High | High | Medium |
|
||||
|
||||
## Configuration
|
||||
|
||||
Deep research mode is customizable in `.claude/modes/deep-research.md`:
|
||||
|
||||
- Default depth level
|
||||
- Confidence threshold
|
||||
- Required evidence types
|
||||
- Report structure
|
||||
|
||||
## Related Modes
|
||||
|
||||
- **Review Mode**: For critical analysis (less evidence-focused)
|
||||
- **Brainstorm Mode**: For exploration (less evidence-focused)
|
||||
- **Default Mode**: For balanced research without deep investigation
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [Research Command](/claudekit/commands/research)
|
||||
- [Sequential Thinking Skill](/claudekit/skills/sequential-thinking)
|
||||
- [Security Audits](/claudekit/guides/security)
|
||||
@@ -1,242 +0,0 @@
|
||||
---
|
||||
title: Default Mode
|
||||
description: Standard balanced mode for general development tasks
|
||||
---
|
||||
|
||||
# Default Mode
|
||||
|
||||
## Overview
|
||||
|
||||
Default mode provides balanced behavior that works well for most development tasks. It offers a good mix of thoroughness and efficiency without optimizing for any specific use case.
|
||||
|
||||
This is the baseline mode that Claude uses unless you explicitly specify another mode. All other modes modify this standard behavior in specific ways.
|
||||
|
||||
## When to Use
|
||||
|
||||
Default mode is suitable for:
|
||||
|
||||
- General development tasks
|
||||
- When you're unsure which mode to use
|
||||
- Mixed-complexity work
|
||||
- Learning the system
|
||||
- Balanced code + explanation needs
|
||||
|
||||
## Behavior Changes
|
||||
|
||||
### Communication Style
|
||||
|
||||
**Standard responses:**
|
||||
- Clear and concise without being terse
|
||||
- Explanations where helpful, not excessive
|
||||
- Balanced between action and discussion
|
||||
- Standard code comments
|
||||
|
||||
**Example:**
|
||||
```
|
||||
I'll help you implement user authentication. This will involve creating
|
||||
a service for handling login/logout and integrating with your existing
|
||||
user model.
|
||||
|
||||
Here's the authentication service:
|
||||
|
||||
[code with standard comments]
|
||||
|
||||
This implementation uses JWT tokens for stateless authentication.
|
||||
The tokens expire after 24 hours and include the user ID in the payload.
|
||||
```
|
||||
|
||||
### Problem-Solving Approach
|
||||
|
||||
- Balanced analysis depth
|
||||
- Standard verification steps
|
||||
- Normal iteration cycles
|
||||
- Ask clarifying questions when needed
|
||||
- Make reasonable defaults for minor decisions
|
||||
|
||||
### Output Format
|
||||
|
||||
- Full code blocks with context
|
||||
- Helpful explanations (not exhaustive)
|
||||
- Standard documentation level
|
||||
- File paths clearly marked
|
||||
- Test output when relevant
|
||||
|
||||
## Examples
|
||||
|
||||
### Feature Implementation
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/feature "add password reset functionality"
|
||||
```
|
||||
|
||||
**Default Mode Response:**
|
||||
```markdown
|
||||
I'll implement password reset functionality with email verification.
|
||||
|
||||
## Implementation Plan
|
||||
1. Create password reset token model
|
||||
2. Add reset request endpoint
|
||||
3. Send reset email
|
||||
4. Create password update endpoint
|
||||
5. Add tests
|
||||
|
||||
## Files to Create/Modify
|
||||
- `src/models/password-reset-token.ts` (new)
|
||||
- `src/services/auth-service.ts` (modify)
|
||||
- `src/api/auth.ts` (modify)
|
||||
- `src/services/email-service.ts` (modify)
|
||||
- Tests for each component
|
||||
|
||||
Let me start with the token model:
|
||||
|
||||
[code]
|
||||
|
||||
This model stores password reset tokens with a 1-hour expiration.
|
||||
The token is hashed for security.
|
||||
|
||||
Next, the auth service methods:
|
||||
|
||||
[code]
|
||||
```
|
||||
|
||||
### Bug Fix
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/fix "users can't upload images > 5MB"
|
||||
```
|
||||
|
||||
**Default Mode Response:**
|
||||
```markdown
|
||||
The issue is in the file upload middleware. The default limit is set
|
||||
to 5MB. I'll increase it to 50MB and add proper error handling.
|
||||
|
||||
Here's the fix:
|
||||
|
||||
[code]
|
||||
|
||||
This change:
|
||||
1. Increases the limit to 50MB
|
||||
2. Adds validation for file type
|
||||
3. Returns a clear error message if limit exceeded
|
||||
|
||||
Test with: `curl -F "file=@large-image.jpg" http://localhost:3000/upload`
|
||||
```
|
||||
|
||||
### Code Review
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/review src/services/payment-service.ts
|
||||
```
|
||||
|
||||
**Default Mode Response:**
|
||||
```markdown
|
||||
## Code Review: payment-service.ts
|
||||
|
||||
### Issues Found
|
||||
|
||||
**Critical:**
|
||||
1. Line 45: API key is logged in error handler
|
||||
- Risk: Exposes sensitive data in logs
|
||||
- Fix: Remove API key from error message
|
||||
|
||||
**Important:**
|
||||
2. Line 78: No timeout on payment API call
|
||||
- Risk: Can hang indefinitely
|
||||
- Fix: Add 30-second timeout
|
||||
|
||||
**Minor:**
|
||||
3. Line 12: Magic number for retry attempts
|
||||
- Fix: Extract to constant `MAX_RETRIES = 3`
|
||||
|
||||
### Positive Notes
|
||||
- Good error handling overall
|
||||
- Tests cover main flows
|
||||
- Clear function names
|
||||
|
||||
### Recommendation
|
||||
Fix critical issue before merge. Consider addressing important issue.
|
||||
```
|
||||
|
||||
## Tips for Using Default Mode
|
||||
|
||||
### When It Works Best
|
||||
|
||||
Default mode shines when:
|
||||
- You want a single mode for everything
|
||||
- Task complexity is medium
|
||||
- You prefer consistency over optimization
|
||||
- You're collaborating with others who expect standard responses
|
||||
|
||||
### When to Switch
|
||||
|
||||
Consider switching from default mode when:
|
||||
- **To Brainstorm**: You need to explore alternatives
|
||||
- **To Token-Efficient**: You're doing repetitive tasks
|
||||
- **To Implementation**: You have a clear plan to execute
|
||||
- **To Deep Research**: You need thorough investigation
|
||||
- **To Review**: You're doing code review specifically
|
||||
|
||||
### Combining with Flags
|
||||
|
||||
Even in default mode, you can use flags for specific behaviors:
|
||||
|
||||
```bash
|
||||
# Default mode but with security focus
|
||||
/review --persona=security src/auth/
|
||||
|
||||
# Default mode but save output
|
||||
/plan --save=plans/feature.md "new feature"
|
||||
|
||||
# Default mode but more thorough
|
||||
/fix --depth=4 "complex error"
|
||||
```
|
||||
|
||||
## Mode Activation
|
||||
|
||||
Default mode is active automatically. You don't need to activate it.
|
||||
|
||||
To explicitly return to default mode after using another:
|
||||
|
||||
```bash
|
||||
/mode default
|
||||
```
|
||||
|
||||
Or use it for a single command:
|
||||
|
||||
```bash
|
||||
/feature --mode=default "description"
|
||||
```
|
||||
|
||||
## Comparison with Other Modes
|
||||
|
||||
| Aspect | Default | vs Brainstorm | vs Token-Efficient | vs Implementation |
|
||||
|--------|---------|---------------|-------------------|-------------------|
|
||||
| Explanation level | Moderate | High | Minimal | Low |
|
||||
| Code output | Balanced | Less code, more discussion | Mostly code | Mostly code |
|
||||
| Questions asked | When needed | Frequently | Rarely | Rarely |
|
||||
| Decision making | Balanced | Presents options | Makes defaults | Makes defaults |
|
||||
| Best for | General use | Exploration | High volume | Execution |
|
||||
|
||||
## Configuration
|
||||
|
||||
Default mode behavior is defined in `.claude/modes/default.md`. You can customize:
|
||||
|
||||
- Response verbosity
|
||||
- Comment density
|
||||
- When to ask questions
|
||||
- Output formatting
|
||||
|
||||
## Related Modes
|
||||
|
||||
- **Brainstorm Mode**: Use when you need more exploration
|
||||
- **Implementation Mode**: Use when you need less discussion
|
||||
- **Token-Efficient Mode**: Use when you need faster responses
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [Modes Overview](/claudekit/modes/overview)
|
||||
- [Commands Reference](/claudekit/commands/overview)
|
||||
- [Switching Modes](/claudekit/guides/workflow)
|
||||
@@ -1,512 +0,0 @@
|
||||
---
|
||||
title: Implementation Mode
|
||||
description: Code-focused execution mode for clear, well-defined tasks
|
||||
---
|
||||
|
||||
# Implementation Mode
|
||||
|
||||
## Overview
|
||||
|
||||
Implementation mode is optimized for executing clear plans with minimal discussion. It focuses on code generation, progress updates, and rapid iteration when the design is already decided.
|
||||
|
||||
This mode produces mostly code with brief status updates, making it ideal for translating plans into working software efficiently.
|
||||
|
||||
## When to Use
|
||||
|
||||
Implementation mode is ideal for:
|
||||
|
||||
- **Executing approved plans** - When design is complete and it's time to build
|
||||
- **Clear, well-defined tasks** - Requirements are unambiguous
|
||||
- **Repetitive code generation** - Similar files/components
|
||||
- **Following established patterns** - Using existing code style
|
||||
- **Batch file operations** - Creating many similar files
|
||||
|
||||
## Behavior Changes
|
||||
|
||||
### Communication Style
|
||||
|
||||
**Action-oriented:**
|
||||
- Minimal prose and explanations
|
||||
- Progress indicators and status updates
|
||||
- Skip discussion unless blocked
|
||||
- Flag issues immediately and continue
|
||||
|
||||
**Standard Mode Example:**
|
||||
```markdown
|
||||
I'll implement the user profile feature. This will involve creating
|
||||
a new ProfileService, adding API endpoints, and creating the frontend
|
||||
component. Let me walk you through each part:
|
||||
|
||||
First, I'll create the service layer that handles profile data...
|
||||
|
||||
[code with detailed explanations]
|
||||
|
||||
This service encapsulates all profile-related business logic and
|
||||
provides a clean interface for the API layer to consume...
|
||||
```
|
||||
|
||||
**Implementation Mode Example:**
|
||||
```markdown
|
||||
Creating user profile feature:
|
||||
|
||||
[1/4] ProfileService
|
||||
[2/4] API endpoints
|
||||
[3/4] Frontend component
|
||||
[4/4] Tests
|
||||
|
||||
Files created:
|
||||
- src/services/profile-service.ts
|
||||
- src/api/profile.ts
|
||||
- src/components/Profile.tsx
|
||||
- src/services/profile-service.test.ts
|
||||
|
||||
✓ All tests passing
|
||||
```
|
||||
|
||||
### Problem-Solving Approach
|
||||
|
||||
- **Execute, don't deliberate** - Make it work, don't discuss it
|
||||
- **Follow established patterns** - Use existing code style
|
||||
- **Make reasonable defaults** - Don't ask about minor decisions
|
||||
- **Flag blockers immediately** - Stop for critical issues only
|
||||
|
||||
### Output Format
|
||||
|
||||
- Code blocks with minimal wrapping text
|
||||
- File paths clearly marked
|
||||
- Progress indicators (`[1/5]`, `[2/5]`, etc.)
|
||||
- Checkmarks for completion (`✓`)
|
||||
- Minimal inline comments (code should be self-documenting)
|
||||
|
||||
## Examples
|
||||
|
||||
### Feature Implementation
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/feature --mode=implementation "add user avatar upload"
|
||||
```
|
||||
|
||||
**Implementation Mode Response:**
|
||||
```markdown
|
||||
[1/5] Creating upload service
|
||||
|
||||
`src/services/upload-service.ts`:
|
||||
```typescript
|
||||
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
|
||||
import { randomUUID } from 'crypto';
|
||||
|
||||
export class UploadService {
|
||||
private s3: S3Client;
|
||||
|
||||
constructor() {
|
||||
this.s3 = new S3Client({ region: process.env.AWS_REGION });
|
||||
}
|
||||
|
||||
async uploadAvatar(file: Express.Multer.File, userId: string): Promise<string> {
|
||||
const key = `avatars/${userId}/${randomUUID()}.${file.mimetype.split('/')[1]}`;
|
||||
|
||||
await this.s3.send(new PutObjectCommand({
|
||||
Bucket: process.env.S3_BUCKET,
|
||||
Key: key,
|
||||
Body: file.buffer,
|
||||
ContentType: file.mimetype,
|
||||
}));
|
||||
|
||||
return `https://${process.env.S3_BUCKET}.s3.amazonaws.com/${key}`;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[2/5] Adding upload middleware
|
||||
|
||||
`src/middleware/upload.ts`:
|
||||
```typescript
|
||||
import multer from 'multer';
|
||||
|
||||
export const avatarUpload = multer({
|
||||
storage: multer.memoryStorage(),
|
||||
limits: { fileSize: 5 * 1024 * 1024 },
|
||||
fileFilter: (req, file, cb) => {
|
||||
if (file.mimetype.startsWith('image/')) {
|
||||
cb(null, true);
|
||||
} else {
|
||||
cb(new Error('Images only'));
|
||||
}
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
[3/5] Creating API endpoint
|
||||
|
||||
`src/api/users.ts` (added):
|
||||
```typescript
|
||||
router.post(
|
||||
'/avatar',
|
||||
authenticate,
|
||||
avatarUpload.single('avatar'),
|
||||
async (req, res) => {
|
||||
const url = await uploadService.uploadAvatar(req.file!, req.user.id);
|
||||
await userService.updateAvatar(req.user.id, url);
|
||||
res.json({ avatarUrl: url });
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
[4/5] Updating user service
|
||||
|
||||
`src/services/user-service.ts` (added method):
|
||||
```typescript
|
||||
async updateAvatar(userId: string, avatarUrl: string): Promise<void> {
|
||||
await db.users.update({ id: userId }, { avatarUrl });
|
||||
}
|
||||
```
|
||||
|
||||
[5/5] Adding tests
|
||||
|
||||
`src/services/upload-service.test.ts`:
|
||||
```typescript
|
||||
describe('UploadService', () => {
|
||||
it('uploads avatar to S3', async () => {
|
||||
const file = createMockFile('test.jpg');
|
||||
const url = await uploadService.uploadAvatar(file, 'user-123');
|
||||
expect(url).toMatch(/avatars\/user-123\/.*\.jpg/);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
Running tests... ✓ 5 passing
|
||||
|
||||
Done. Test with:
|
||||
```bash
|
||||
curl -F "avatar=@profile.jpg" http://localhost:3000/api/users/avatar
|
||||
```
|
||||
```
|
||||
|
||||
### Plan Execution
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/execute-plan --mode=implementation plans/auth-refactor.md
|
||||
```
|
||||
|
||||
**Implementation Mode Response:**
|
||||
```markdown
|
||||
Executing auth refactor plan...
|
||||
|
||||
[1/8] Extract JWT config → src/config/jwt.ts ✓
|
||||
[2/8] Create TokenService → src/services/token-service.ts ✓
|
||||
[3/8] Update AuthService to use TokenService ✓
|
||||
[4/8] Add refresh token support ✓
|
||||
[5/8] Update login endpoint ✓
|
||||
[6/8] Add token refresh endpoint ✓
|
||||
[7/8] Update tests ✓
|
||||
[8/8] Update documentation ✓
|
||||
|
||||
Changed files:
|
||||
- src/config/jwt.ts (new)
|
||||
- src/services/token-service.ts (new)
|
||||
- src/services/auth-service.ts (modified)
|
||||
- src/api/auth.ts (modified)
|
||||
- docs/auth.md (updated)
|
||||
|
||||
Tests: 24 passing
|
||||
Lint: Clean
|
||||
|
||||
Ready to commit:
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "refactor(auth): extract token handling to service"
|
||||
```
|
||||
```
|
||||
|
||||
### Batch File Generation
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/test --mode=implementation src/services/*.ts
|
||||
```
|
||||
|
||||
**Implementation Mode Response:**
|
||||
```markdown
|
||||
Generating tests for 12 services...
|
||||
|
||||
[1/12] user-service.test.ts ✓
|
||||
[2/12] auth-service.test.ts ✓
|
||||
[3/12] payment-service.test.ts ✓
|
||||
[4/12] email-service.test.ts ✓
|
||||
[5/12] notification-service.test.ts ✓
|
||||
[6/12] profile-service.test.ts ✓
|
||||
[7/12] upload-service.test.ts ✓
|
||||
[8/12] analytics-service.test.ts ✓
|
||||
[9/12] webhook-service.test.ts ✓
|
||||
[10/12] cache-service.test.ts ✓
|
||||
[11/12] queue-service.test.ts ✓
|
||||
[12/12] search-service.test.ts ✓
|
||||
|
||||
Created 12 test files, 87 tests total.
|
||||
|
||||
Run: `npm test`
|
||||
```
|
||||
|
||||
## Decision Making in Implementation Mode
|
||||
|
||||
When encountering choices during implementation:
|
||||
|
||||
| Situation | Behavior | Example |
|
||||
|-----------|----------|---------|
|
||||
| **Style choice** | Follow existing patterns | Use same naming as other files |
|
||||
| **Missing detail** | Use reasonable default | Default to camelCase if unclear |
|
||||
| **Ambiguity** | Flag and continue with assumption | ⚠️ Assumed JSON format, confirm if needed |
|
||||
| **Blocker** | Stop and report immediately | 🛑 Missing API credentials required |
|
||||
|
||||
### Flagging Format
|
||||
|
||||
When making assumptions:
|
||||
|
||||
```markdown
|
||||
⚠️ Assumed: User avatars stored in S3 bucket 'app-avatars'
|
||||
Continuing with this assumption. Update S3_BUCKET env var if different.
|
||||
```
|
||||
|
||||
When blocked:
|
||||
|
||||
```markdown
|
||||
🛑 Blocked: Missing Stripe API key
|
||||
Required for payment integration. Add STRIPE_SECRET_KEY to .env
|
||||
Cannot proceed with payment service without this.
|
||||
```
|
||||
|
||||
## Progress Tracking Patterns
|
||||
|
||||
### Simple Task
|
||||
```markdown
|
||||
Creating auth middleware...
|
||||
✓ Done
|
||||
|
||||
Test: curl -H "Authorization: Bearer token" /api/protected
|
||||
```
|
||||
|
||||
### Multi-Step Task
|
||||
```markdown
|
||||
[1/3] Database migration
|
||||
[2/3] Service layer
|
||||
[3/3] API endpoints
|
||||
|
||||
✓ Complete
|
||||
```
|
||||
|
||||
### Complex Feature
|
||||
```markdown
|
||||
User dashboard feature:
|
||||
|
||||
Backend:
|
||||
[1/4] Database schema ✓
|
||||
[2/4] Services ✓
|
||||
[3/4] API endpoints ✓
|
||||
[4/4] Tests ✓
|
||||
|
||||
Frontend:
|
||||
[1/3] Components ✓
|
||||
[2/3] State management ✓
|
||||
[3/3] Integration ✓
|
||||
|
||||
✓ All done. Run: npm run dev
|
||||
```
|
||||
|
||||
## Tips for Using Implementation Mode
|
||||
|
||||
### When It Works Best
|
||||
|
||||
1. **After planning/brainstorming**
|
||||
```bash
|
||||
/mode brainstorm
|
||||
/brainstorm "dashboard layout"
|
||||
# Make decisions
|
||||
|
||||
/mode implementation
|
||||
/feature "implement dashboard with sidebar and cards"
|
||||
# Execute quickly
|
||||
```
|
||||
|
||||
2. **With clear specifications**
|
||||
- Detailed requirements
|
||||
- Approved designs
|
||||
- Existing patterns to follow
|
||||
|
||||
3. **For experienced developers**
|
||||
- You know the codebase
|
||||
- Understand the tech stack
|
||||
- Don't need explanations
|
||||
|
||||
### When to Switch Out
|
||||
|
||||
Switch from implementation mode when:
|
||||
- **Blocked or confused** → Switch to Default or Brainstorm
|
||||
- **Need explanation** → Switch to Default
|
||||
- **Complex decision needed** → Switch to Brainstorm
|
||||
- **Review needed** → Switch to Review mode
|
||||
|
||||
### Combining with Other Modes
|
||||
|
||||
```bash
|
||||
# Brainstorm → Implement → Review
|
||||
/mode brainstorm
|
||||
/brainstorm "feature design"
|
||||
|
||||
/mode implementation
|
||||
/feature "implement design"
|
||||
|
||||
/mode review
|
||||
/review src/new-feature/
|
||||
```
|
||||
|
||||
### Maximum Efficiency
|
||||
|
||||
Combine with token-efficient format:
|
||||
|
||||
```bash
|
||||
/execute-plan --mode=implementation --format=ultra plan.md
|
||||
```
|
||||
|
||||
This gives you:
|
||||
- Fast execution (implementation mode)
|
||||
- Minimal tokens (ultra format)
|
||||
- Maximum speed for clear plans
|
||||
|
||||
## Typical Workflows
|
||||
|
||||
### TDD Workflow
|
||||
|
||||
```bash
|
||||
/mode implementation
|
||||
|
||||
/test "user login endpoint"
|
||||
# Generates failing tests
|
||||
|
||||
# Implement until tests pass
|
||||
/fix "make login tests pass"
|
||||
|
||||
✓ Tests passing
|
||||
```
|
||||
|
||||
### Migration/Refactor
|
||||
|
||||
```bash
|
||||
/mode implementation
|
||||
|
||||
# Execute refactor plan step by step
|
||||
[1/10] Extract function ✓
|
||||
[2/10] Update imports ✓
|
||||
[3/10] Rename variables ✓
|
||||
...
|
||||
[10/10] Update tests ✓
|
||||
|
||||
✓ Refactor complete
|
||||
```
|
||||
|
||||
### Feature Branch
|
||||
|
||||
```bash
|
||||
/mode implementation
|
||||
|
||||
/feature "user settings page"
|
||||
# Implement feature
|
||||
|
||||
/test "user settings"
|
||||
# Add tests
|
||||
|
||||
/review "src/settings/"
|
||||
# Quick review
|
||||
|
||||
/ship "feat: add user settings page"
|
||||
# Commit and push
|
||||
```
|
||||
|
||||
## Mode Activation
|
||||
|
||||
```bash
|
||||
# Session-wide implementation mode
|
||||
/mode implementation
|
||||
|
||||
# All commands now execute without discussion
|
||||
/feature "feature 1"
|
||||
/feature "feature 2"
|
||||
/fix "bug 1"
|
||||
|
||||
# Single command override
|
||||
/feature --mode=implementation "specific feature"
|
||||
```
|
||||
|
||||
## Output Examples
|
||||
|
||||
### Minimal (Standard)
|
||||
```markdown
|
||||
Created UserService
|
||||
Created UserController
|
||||
Created tests
|
||||
|
||||
✓ Done
|
||||
```
|
||||
|
||||
### With Progress (Multi-step)
|
||||
```markdown
|
||||
[1/5] Model
|
||||
[2/5] Service
|
||||
[3/5] Controller
|
||||
[4/5] Routes
|
||||
[5/5] Tests
|
||||
|
||||
✓ Complete - 5 files created
|
||||
```
|
||||
|
||||
### With Assumptions (Ambiguous case)
|
||||
```markdown
|
||||
[1/3] Database schema
|
||||
⚠️ Assumed: PostgreSQL (saw pg in package.json)
|
||||
|
||||
[2/3] Repository
|
||||
[3/3] Tests
|
||||
|
||||
✓ Done
|
||||
```
|
||||
|
||||
### With Blocker (Stopped)
|
||||
```markdown
|
||||
[1/4] Config
|
||||
[2/4] Service
|
||||
|
||||
🛑 Blocked: Missing API_KEY environment variable
|
||||
Add to .env file and rerun.
|
||||
```
|
||||
|
||||
## Comparison with Other Modes
|
||||
|
||||
| Aspect | Implementation | Token-Efficient | Default |
|
||||
|--------|---------------|-----------------|---------|
|
||||
| Explanation | Minimal | None | Moderate |
|
||||
| Progress updates | Yes | No | Sometimes |
|
||||
| Code output | High | Highest | Balanced |
|
||||
| Decision making | Auto (reasonable defaults) | Auto (fastest path) | Asks when unclear |
|
||||
| Best for | Executing plans | High volume | General use |
|
||||
|
||||
## Configuration
|
||||
|
||||
Implementation mode behavior is defined in `.claude/modes/implementation.md`:
|
||||
|
||||
- Progress indicator format
|
||||
- Comment verbosity
|
||||
- When to flag assumptions
|
||||
- Default choices for common decisions
|
||||
|
||||
## Related Modes
|
||||
|
||||
- **Token-Efficient Mode**: Even more concise output
|
||||
- **Default Mode**: More explanation and discussion
|
||||
- **Review Mode**: Switch to this after implementation
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [Execute Plan Command](/claudekit/commands/execute-plan)
|
||||
- [TDD Workflow](/claudekit/guides/tdd)
|
||||
- [Batch Operations](/claudekit/guides/batch)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,202 +0,0 @@
|
||||
---
|
||||
title: Modes Overview
|
||||
description: Understanding Claude Kit behavioral modes
|
||||
---
|
||||
|
||||
# Behavioral Modes
|
||||
|
||||
Modes adjust Claude's communication style, output format, and problem-solving approach. Choose the right mode for your task to optimize efficiency and results.
|
||||
|
||||
## Quick Reference
|
||||
|
||||
| Mode | Best For | Token Usage | Output Style |
|
||||
|------|----------|-------------|--------------|
|
||||
| [Default](/claudekit/modes/default) | General development tasks | Standard | Balanced explanation + code |
|
||||
| [Brainstorm](/claudekit/modes/brainstorm) | Design, ideation, exploration | Higher | Questions, alternatives, comparisons |
|
||||
| [Token-Efficient](/claudekit/modes/token-efficient) | High-volume, simple tasks | 30-70% less | Minimal prose, code-focused |
|
||||
| [Deep Research](/claudekit/modes/deep-research) | Investigation, audits | Higher | Structured reports, citations |
|
||||
| [Implementation](/claudekit/modes/implementation) | Executing clear plans | Lower | Code blocks, minimal explanation |
|
||||
| [Review](/claudekit/modes/review) | Code review, QA | Standard | Categorized findings, actionable feedback |
|
||||
| [Orchestration](/claudekit/modes/orchestration) | Complex multi-task coordination | Variable | Task delegation, progress tracking |
|
||||
|
||||
## Mode Selection Guide
|
||||
|
||||
### By Development Phase
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[New Feature] --> B[Brainstorm Mode]
|
||||
B --> C[Plan Created]
|
||||
C --> D[Implementation Mode]
|
||||
D --> E[Code Complete]
|
||||
E --> F[Review Mode]
|
||||
F --> G[Ship]
|
||||
```
|
||||
|
||||
### By Task Type
|
||||
|
||||
| Task | Recommended Mode | Alternative |
|
||||
|------|------------------|-------------|
|
||||
| "How should I structure this?" | Brainstorm | Default |
|
||||
| "Implement this feature" | Implementation | Default |
|
||||
| "Fix this bug" | Default | Deep Research (if complex) |
|
||||
| "Review this PR" | Review | Default + --persona=security |
|
||||
| "Research this approach" | Deep Research | Brainstorm |
|
||||
| "Generate 10 similar files" | Token-Efficient | Implementation |
|
||||
| "Coordinate multi-file refactor" | Orchestration | Default |
|
||||
|
||||
### By Team Experience
|
||||
|
||||
| Experience Level | Recommended Modes |
|
||||
|------------------|-------------------|
|
||||
| Junior developers | Default, Brainstorm (for learning) |
|
||||
| Senior developers | Token-Efficient, Implementation (for speed) |
|
||||
| Mixed teams | Default, Review (for knowledge sharing) |
|
||||
|
||||
## Switching Modes
|
||||
|
||||
### Session-Wide Mode Change
|
||||
|
||||
```bash
|
||||
/mode brainstorm # All subsequent commands use brainstorm mode
|
||||
/mode token-efficient # Switch to token-efficient for the session
|
||||
/mode default # Return to standard behavior
|
||||
```
|
||||
|
||||
### Single Command Override
|
||||
|
||||
```bash
|
||||
/plan --mode=brainstorm "new feature"
|
||||
/fix --format=concise "error message"
|
||||
/review --mode=review --persona=security src/auth/
|
||||
```
|
||||
|
||||
### Mode Combinations
|
||||
|
||||
Some modes work well together via flags:
|
||||
|
||||
```bash
|
||||
# Deep research with concise output
|
||||
/research --mode=deep-research --format=concise [topic]
|
||||
|
||||
# Implementation with checkpoints
|
||||
/execute-plan --mode=implementation --checkpoint [file]
|
||||
|
||||
# Brainstorm with saved output
|
||||
/brainstorm --mode=brainstorm --save=plans/design.md [topic]
|
||||
```
|
||||
|
||||
## Understanding Mode Behavior
|
||||
|
||||
Each mode modifies three key aspects:
|
||||
|
||||
### 1. Communication Style
|
||||
- **Verbose modes** (Brainstorm, Deep Research): More questions, explanations, alternatives
|
||||
- **Concise modes** (Token-Efficient, Implementation): Direct answers, minimal prose
|
||||
- **Balanced modes** (Default, Review): Clear but not excessive
|
||||
|
||||
### 2. Problem-Solving Approach
|
||||
- **Exploratory** (Brainstorm, Deep Research): Consider many options, delay decisions
|
||||
- **Decisive** (Implementation, Token-Efficient): Make reasonable defaults, execute
|
||||
- **Critical** (Review): Question assumptions, find issues
|
||||
|
||||
### 3. Output Format
|
||||
- **Structured reports** (Deep Research, Review): Categorized, formatted findings
|
||||
- **Code-focused** (Implementation, Token-Efficient): Minimal text, maximum code
|
||||
- **Discussion-oriented** (Brainstorm, Default): Balanced code and explanation
|
||||
|
||||
## Mode Feature Matrix
|
||||
|
||||
| Feature | Default | Brainstorm | Token-Efficient | Deep Research | Implementation | Review | Orchestration |
|
||||
|---------|---------|------------|-----------------|---------------|----------------|--------|---------------|
|
||||
| Ask clarifying questions | Sometimes | Frequently | Rarely | Sometimes | Rarely | Sometimes | Sometimes |
|
||||
| Present alternatives | Sometimes | Always | No | Sometimes | No | Sometimes | No |
|
||||
| Detailed explanations | Yes | Yes | No | Yes | No | Yes | Moderate |
|
||||
| Code comments | Standard | Verbose | Minimal | Standard | Minimal | Standard | Standard |
|
||||
| Progress updates | No | No | No | Yes | Yes | No | Yes |
|
||||
| Confidence levels | No | No | No | Yes | No | No | No |
|
||||
| File citations | No | No | No | Yes | No | Yes | No |
|
||||
| Task parallelization | No | No | No | No | No | No | Yes |
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Start Broad, Then Focus
|
||||
```bash
|
||||
# 1. Explore options
|
||||
/brainstorm "authentication approach"
|
||||
|
||||
# 2. Plan implementation
|
||||
/plan --mode=default "implement OAuth2"
|
||||
|
||||
# 3. Execute efficiently
|
||||
/execute-plan --mode=implementation plan.md
|
||||
|
||||
# 4. Review thoroughly
|
||||
/review --mode=review src/auth/
|
||||
```
|
||||
|
||||
### Match Mode to Iteration
|
||||
- **First iteration**: Use Brainstorm or Default to explore
|
||||
- **Subsequent iterations**: Use Implementation or Token-Efficient for speed
|
||||
- **Final iteration**: Use Review to catch issues
|
||||
|
||||
### Know When to Switch
|
||||
- Stuck on implementation? → Switch to Brainstorm
|
||||
- Plan is clear? → Switch to Implementation
|
||||
- Need to save costs? → Switch to Token-Efficient
|
||||
- Complex bug? → Switch to Deep Research
|
||||
|
||||
## Common Patterns
|
||||
|
||||
### Feature Development
|
||||
```bash
|
||||
/mode brainstorm
|
||||
/brainstorm "user profile feature"
|
||||
# Explore options, make decisions
|
||||
|
||||
/mode implementation
|
||||
/feature "user profile with avatar upload"
|
||||
# Execute the plan
|
||||
|
||||
/mode review
|
||||
/review src/features/profile/
|
||||
# Quality check before merge
|
||||
```
|
||||
|
||||
### Bug Investigation
|
||||
```bash
|
||||
/mode deep-research
|
||||
/fix --depth=5 "memory leak in worker process"
|
||||
# Thorough investigation
|
||||
|
||||
/mode implementation
|
||||
# Apply the fix
|
||||
|
||||
/mode review
|
||||
/review --persona=performance src/workers/
|
||||
# Verify fix and performance
|
||||
```
|
||||
|
||||
### Batch Operations
|
||||
```bash
|
||||
/mode token-efficient
|
||||
/test --format=ultra src/services/*.ts
|
||||
# Generate tests for all services efficiently
|
||||
```
|
||||
|
||||
## Custom Mode Configuration
|
||||
|
||||
Advanced users can customize mode behavior in `.claude/modes/`. Each mode is defined in a markdown file that specifies:
|
||||
|
||||
- Communication patterns
|
||||
- Output formats
|
||||
- Problem-solving approaches
|
||||
- Activation conditions
|
||||
|
||||
See individual mode pages for detailed behavior specifications.
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [Commands Reference](/claudekit/commands/overview) - Using modes with commands
|
||||
- [Flags & Options](/claudekit/advanced/flags) - Mode-related flags
|
||||
- [Token Optimization](/claudekit/optimization/token-efficient) - Cost-saving strategies
|
||||
@@ -1,984 +0,0 @@
|
||||
---
|
||||
title: Review Mode
|
||||
description: Critical analysis mode for code review and quality assessment
|
||||
---
|
||||
|
||||
# Review Mode
|
||||
|
||||
## Overview
|
||||
|
||||
Review mode optimizes for critical analysis, finding issues, and providing actionable feedback. It emphasizes thorough examination, categorized findings, and constructive suggestions for improvement.
|
||||
|
||||
This mode produces structured reviews with severity levels, specific line references, and clear recommendations.
|
||||
|
||||
## When to Use
|
||||
|
||||
Review mode is ideal for:
|
||||
|
||||
- **Code reviews** - Pull request reviews, pre-merge checks
|
||||
- **Security audits** - Finding vulnerabilities and security issues
|
||||
- **Performance reviews** - Identifying optimization opportunities
|
||||
- **Pre-merge checks** - Final quality gate before merging
|
||||
- **Quality assessments** - Evaluating code quality and maintainability
|
||||
- **Architecture reviews** - Assessing structural decisions
|
||||
|
||||
## Behavior Changes
|
||||
|
||||
### Communication Style
|
||||
|
||||
**Direct and constructive:**
|
||||
- Direct feedback without sugar-coating
|
||||
- Prioritized findings (critical first)
|
||||
- Constructive criticism with solutions
|
||||
- Specific, actionable suggestions
|
||||
- Line-specific comments
|
||||
|
||||
**Example:**
|
||||
```markdown
|
||||
## Code Review: user-service.ts
|
||||
|
||||
### Critical Issues 🔴
|
||||
|
||||
**Issue 1: SQL Injection Vulnerability (Line 45)**
|
||||
- **Problem:** User input concatenated directly into SQL query
|
||||
- **Risk:** Attackers can execute arbitrary SQL commands
|
||||
- **Fix:**
|
||||
```typescript
|
||||
// Before (UNSAFE)
|
||||
const query = `SELECT * FROM users WHERE email = '${email}'`;
|
||||
|
||||
// After (SAFE)
|
||||
const query = 'SELECT * FROM users WHERE email = $1';
|
||||
const result = await db.query(query, [email]);
|
||||
```
|
||||
|
||||
### Verdict
|
||||
❌ Block merge - 1 critical issue must be fixed
|
||||
```
|
||||
|
||||
### Problem-Solving Approach
|
||||
|
||||
- **Look for issues first** - Critical eye, not just validation
|
||||
- **Question assumptions** - Challenge design decisions
|
||||
- **Check edge cases** - What could go wrong?
|
||||
- **Verify against standards** - Compliance with best practices
|
||||
|
||||
### Output Format
|
||||
|
||||
- Categorized findings by severity
|
||||
- Severity levels (Critical, Important, Minor, Nitpick)
|
||||
- Line-specific comments
|
||||
- Code examples for fixes
|
||||
- Merge decision at end
|
||||
|
||||
## Severity Levels
|
||||
|
||||
| Level | Icon | Description | Action Required |
|
||||
|-------|------|-------------|-----------------|
|
||||
| **Critical** | 🔴 | Bugs, security issues, data loss risks | Must fix before merge |
|
||||
| **Important** | 🟠 | Code smells, performance issues, bad practices | Should fix before merge |
|
||||
| **Minor** | 🟡 | Style issues, naming, minor improvements | Consider fixing |
|
||||
| **Nitpick** | ⚪ | Personal preferences, minor style | Optional |
|
||||
|
||||
## Review Categories
|
||||
|
||||
Review mode examines code across multiple dimensions:
|
||||
|
||||
| Category | Focus Areas |
|
||||
|----------|-------------|
|
||||
| **Correctness** | Does it work? Handle edge cases? Proper error handling? |
|
||||
| **Security** | Vulnerabilities? Input validation? Auth/authz? Data exposure? |
|
||||
| **Performance** | Efficiency? Scalability? N+1 queries? Resource usage? |
|
||||
| **Maintainability** | Readability? Complexity? Documentation? Testability? |
|
||||
| **Testing** | Test coverage? Test quality? Edge cases tested? |
|
||||
| **Standards** | Style guide compliance? Best practices? Conventions? |
|
||||
|
||||
## Examples
|
||||
|
||||
### Code Review
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/review --mode=review src/services/payment-service.ts
|
||||
```
|
||||
|
||||
**Review Mode Response:**
|
||||
```markdown
|
||||
## Code Review: payment-service.ts
|
||||
|
||||
### Summary
|
||||
Payment service with Stripe integration. Found 2 critical, 3 important,
|
||||
and 4 minor issues. Not ready for production.
|
||||
|
||||
---
|
||||
|
||||
### Critical Issues 🔴
|
||||
|
||||
**1. API Key in Logs (Line 45)**
|
||||
```typescript
|
||||
// Line 45 - UNSAFE
|
||||
logger.error(`Payment failed for key ${stripeKey}`, error);
|
||||
```
|
||||
|
||||
**Problem:** Stripe API key exposed in application logs
|
||||
|
||||
**Risk:**
|
||||
- Anyone with log access gets full payment system access
|
||||
- Key could leak via log aggregation services
|
||||
- Violates PCI compliance
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
logger.error('Payment failed', {
|
||||
error: error.message,
|
||||
customerId: payment.customerId,
|
||||
// Never log the API key
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**2. No Timeout on API Calls (Line 78)**
|
||||
```typescript
|
||||
// Line 78 - PROBLEMATIC
|
||||
const result = await stripe.charges.create(chargeData);
|
||||
```
|
||||
|
||||
**Problem:** External API call with no timeout
|
||||
|
||||
**Risk:**
|
||||
- Can hang indefinitely if Stripe is down
|
||||
- Blocks server resources
|
||||
- Poor user experience
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
const result = await Promise.race([
|
||||
stripe.charges.create(chargeData),
|
||||
new Promise((_, reject) =>
|
||||
setTimeout(() => reject(new Error('Timeout')), 30000)
|
||||
)
|
||||
]);
|
||||
```
|
||||
|
||||
Or use axios with timeout config.
|
||||
|
||||
---
|
||||
|
||||
### Important Issues 🟠
|
||||
|
||||
**3. No Retry Logic (Line 78)**
|
||||
|
||||
**Problem:** Single attempt at payment, no retries on transient failures
|
||||
|
||||
**Impact:**
|
||||
- Network blips cause failed payments
|
||||
- Stripe rate limits not handled
|
||||
- Lost revenue
|
||||
|
||||
**Suggestion:**
|
||||
```typescript
|
||||
import retry from 'async-retry';
|
||||
|
||||
const result = await retry(
|
||||
async () => stripe.charges.create(chargeData),
|
||||
{
|
||||
retries: 3,
|
||||
minTimeout: 1000,
|
||||
onRetry: (err, attempt) => {
|
||||
logger.warn(`Payment retry ${attempt}`, { error: err.message });
|
||||
}
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**4. Magic Numbers (Line 12, 34, 67)**
|
||||
```typescript
|
||||
if (amount < 50) throw new Error('Minimum $0.50'); // Line 12
|
||||
await delay(1000); // Line 34
|
||||
const fee = amount * 0.029 + 30; // Line 67
|
||||
```
|
||||
|
||||
**Problem:** Hardcoded values with no explanation
|
||||
|
||||
**Fix:** Extract to named constants
|
||||
```typescript
|
||||
const MIN_CHARGE_CENTS = 50;
|
||||
const RETRY_DELAY_MS = 1000;
|
||||
const STRIPE_FEE_PERCENT = 0.029;
|
||||
const STRIPE_FEE_FIXED_CENTS = 30;
|
||||
|
||||
if (amount < MIN_CHARGE_CENTS) {
|
||||
throw new Error(`Minimum charge: $${MIN_CHARGE_CENTS / 100}`);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**5. Insufficient Error Handling (Line 89)**
|
||||
```typescript
|
||||
} catch (error) {
|
||||
throw new Error('Payment failed');
|
||||
}
|
||||
```
|
||||
|
||||
**Problem:** Generic error loses valuable context
|
||||
|
||||
**Impact:**
|
||||
- Can't distinguish card decline vs network error vs server error
|
||||
- Makes debugging difficult
|
||||
- Poor user experience (unhelpful error message)
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
} catch (error) {
|
||||
if (error.type === 'StripeCardError') {
|
||||
throw new PaymentError('Card declined', {
|
||||
code: error.code,
|
||||
message: error.message
|
||||
});
|
||||
} else if (error.type === 'StripeRateLimitError') {
|
||||
throw new PaymentError('Too many requests', { retry: true });
|
||||
} else {
|
||||
logger.error('Payment processing error', error);
|
||||
throw new PaymentError('Payment system unavailable');
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Minor Issues 🟡
|
||||
|
||||
**6. Missing JSDoc (All public methods)**
|
||||
- Public API should be documented
|
||||
- Add JSDoc with param descriptions, return types, examples
|
||||
|
||||
**7. Inconsistent Naming (Line 23 vs 56)**
|
||||
```typescript
|
||||
const chargeData = {...}; // Line 23
|
||||
const paymentData = {...}; // Line 56 (same thing)
|
||||
```
|
||||
Pick one convention and stick to it.
|
||||
|
||||
**8. Console.log Still Present (Line 101)**
|
||||
```typescript
|
||||
console.log('Debug payment:', payment);
|
||||
```
|
||||
Remove debug logging or use proper logger.
|
||||
|
||||
**9. No Input Validation (Line 15)**
|
||||
```typescript
|
||||
async createCharge(amount: number, customerId: string) {
|
||||
// No validation that amount is positive, customerId is valid format
|
||||
}
|
||||
```
|
||||
|
||||
Add validation:
|
||||
```typescript
|
||||
if (amount <= 0) throw new Error('Amount must be positive');
|
||||
if (!customerId.startsWith('cus_')) throw new Error('Invalid customer ID');
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Positive Notes ✅
|
||||
|
||||
**Good practices observed:**
|
||||
- ✅ Using async/await consistently
|
||||
- ✅ TypeScript types defined
|
||||
- ✅ Error handling structure present (just needs improvement)
|
||||
- ✅ Modular function design
|
||||
- ✅ Test file exists
|
||||
|
||||
---
|
||||
|
||||
### Test Coverage Review
|
||||
|
||||
Checked `payment-service.test.ts`:
|
||||
|
||||
**Coverage:**
|
||||
- ✅ Successful payment flow tested
|
||||
- ✅ Card decline tested
|
||||
- ❌ Network errors not tested
|
||||
- ❌ Timeout scenarios not tested
|
||||
- ❌ Retry logic not tested (doesn't exist yet)
|
||||
|
||||
**Recommendation:** Add tests for error scenarios once retry/timeout logic added.
|
||||
|
||||
---
|
||||
|
||||
### Security Checklist
|
||||
|
||||
- [x] Input validation - Mostly missing
|
||||
- [x] API key handling - ⚠️ Logged in errors (critical issue #1)
|
||||
- [x] Error messages - ⚠️ Too generic (important issue #5)
|
||||
- [x] Rate limiting - ❌ Not implemented
|
||||
- [x] PCI compliance - ⚠️ Key logging violates this
|
||||
|
||||
---
|
||||
|
||||
### Performance Checklist
|
||||
|
||||
- [x] Async/await used - ✅ Yes
|
||||
- [x] N+1 queries - ✅ N/A (external API)
|
||||
- [x] Caching - ❌ Could cache customer data
|
||||
- [x] Timeout handling - ❌ Missing (critical issue #2)
|
||||
|
||||
---
|
||||
|
||||
### Verdict
|
||||
|
||||
**❌ Block Merge**
|
||||
|
||||
**Issues requiring fixes:**
|
||||
- 🔴 2 Critical issues (API key logging, no timeout)
|
||||
- 🟠 3 Important issues (no retry, magic numbers, poor error handling)
|
||||
|
||||
**Estimated fix time:** 3-4 hours
|
||||
|
||||
**Recommended next steps:**
|
||||
1. Fix critical issues immediately (1 hour)
|
||||
2. Add timeout and retry logic (2 hours)
|
||||
3. Extract constants and improve errors (1 hour)
|
||||
4. Add missing tests (2 hours)
|
||||
5. Re-review after fixes
|
||||
|
||||
---
|
||||
|
||||
### Comparison to Standards
|
||||
|
||||
Checked against:
|
||||
- ✅ TypeScript style guide - Mostly compliant
|
||||
- ⚠️ Error handling patterns - Needs improvement
|
||||
- ❌ Security best practices - Violates (key logging)
|
||||
- ⚠️ PCI DSS requirements - Non-compliant (key logging)
|
||||
```
|
||||
|
||||
### Security-Focused Review
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/review --mode=review --persona=security src/api/auth.ts
|
||||
```
|
||||
|
||||
**Review Mode Response:**
|
||||
```markdown
|
||||
## Security Review: auth.ts
|
||||
|
||||
Persona: Security Auditor
|
||||
Standards: OWASP Top 10 (2021), CWE Top 25
|
||||
|
||||
---
|
||||
|
||||
### Critical Security Issues 🔴
|
||||
|
||||
**1. Hardcoded JWT Secret (Line 8)**
|
||||
```typescript
|
||||
const JWT_SECRET = 'my-secret-key-123';
|
||||
```
|
||||
|
||||
**Vulnerability:** CWE-798 (Hardcoded Credentials)
|
||||
**OWASP:** A07:2021 – Identification and Authentication Failures
|
||||
|
||||
**Risk:**
|
||||
- Secret in source control = everyone has it
|
||||
- Can forge any JWT token
|
||||
- Complete authentication bypass
|
||||
|
||||
**Exploitation:**
|
||||
```bash
|
||||
# Attacker can create admin token
|
||||
jwt.sign({ userId: 1, role: 'admin' }, 'my-secret-key-123')
|
||||
```
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
const JWT_SECRET = process.env.JWT_SECRET;
|
||||
if (!JWT_SECRET) {
|
||||
throw new Error('JWT_SECRET environment variable required');
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**2. No Rate Limiting on Login (Line 45)**
|
||||
|
||||
**Vulnerability:** CWE-307 (Improper Authentication Attempts)
|
||||
**OWASP:** A07:2021 – Identification and Authentication Failures
|
||||
|
||||
**Risk:**
|
||||
- Brute force attacks viable
|
||||
- Credential stuffing attacks
|
||||
- No account lockout
|
||||
|
||||
**Exploitation:**
|
||||
```bash
|
||||
# Attacker can try unlimited passwords
|
||||
for pwd in $(cat passwords.txt); do
|
||||
curl -X POST /login -d "{\"password\":\"$pwd\"}"
|
||||
done
|
||||
```
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
import rateLimit from 'express-rate-limit';
|
||||
|
||||
const loginLimiter = rateLimit({
|
||||
windowMs: 15 * 60 * 1000,
|
||||
max: 5,
|
||||
message: 'Too many login attempts'
|
||||
});
|
||||
|
||||
router.post('/login', loginLimiter, loginHandler);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**3. Password in Error Message (Line 67)**
|
||||
```typescript
|
||||
logger.error(`Login failed for ${email} with password ${password}`);
|
||||
```
|
||||
|
||||
**Vulnerability:** CWE-209 (Information Exposure Through Error Message)
|
||||
**OWASP:** A04:2021 – Insecure Design
|
||||
|
||||
**Risk:** Passwords logged and visible to anyone with log access
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
logger.error(`Login failed for ${email}`);
|
||||
// Never log passwords
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Important Security Issues 🟠
|
||||
|
||||
**4. Weak Password Requirements (Line 23)**
|
||||
```typescript
|
||||
if (password.length < 6) {
|
||||
return res.status(400).json({ error: 'Password too short' });
|
||||
}
|
||||
```
|
||||
|
||||
**Vulnerability:** CWE-521 (Weak Password Requirements)
|
||||
|
||||
**Risk:**
|
||||
- 6 characters easily cracked
|
||||
- No complexity requirements
|
||||
- Common passwords allowed
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
import { passwordStrength } from 'check-password-strength';
|
||||
|
||||
const strength = passwordStrength(password);
|
||||
if (strength.value === 'Weak' || strength.value === 'Too weak') {
|
||||
return res.status(400).json({
|
||||
error: 'Password must be at least 12 characters with uppercase, lowercase, number, and symbol'
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**5. JWT Never Expires (Line 34)**
|
||||
```typescript
|
||||
const token = jwt.sign({ userId: user.id }, JWT_SECRET);
|
||||
```
|
||||
|
||||
**Vulnerability:** CWE-613 (Insufficient Session Expiration)
|
||||
|
||||
**Risk:**
|
||||
- Stolen token valid forever
|
||||
- Can't revoke access
|
||||
- Compromised token = permanent access
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
const token = jwt.sign(
|
||||
{ userId: user.id },
|
||||
JWT_SECRET,
|
||||
{ expiresIn: '1h' }
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Minor Security Issues 🟡
|
||||
|
||||
**6. No HTTPS Enforcement**
|
||||
- Check if reverse proxy handles HTTPS
|
||||
- Add HTTP → HTTPS redirect if not
|
||||
|
||||
**7. No CORS Configuration**
|
||||
- Wide-open CORS is security risk
|
||||
- Restrict to known origins
|
||||
|
||||
**8. Timing Attack on Password Compare**
|
||||
- Use constant-time comparison
|
||||
- bcrypt.compare() is already safe (good!)
|
||||
|
||||
---
|
||||
|
||||
### Security Checklist (OWASP Top 10)
|
||||
|
||||
- [x] A01:2021 – Broken Access Control
|
||||
- ✅ Auth middleware checks tokens
|
||||
- ⚠️ Token never expires (issue #5)
|
||||
|
||||
- [x] A02:2021 – Cryptographic Failures
|
||||
- ✅ Passwords hashed with bcrypt
|
||||
- 🔴 Hardcoded secret (issue #1)
|
||||
|
||||
- [x] A03:2021 – Injection
|
||||
- ✅ Using parameterized queries
|
||||
- ✅ No SQL injection found
|
||||
|
||||
- [x] A04:2021 – Insecure Design
|
||||
- 🔴 Password in logs (issue #3)
|
||||
- 🟠 Weak password policy (issue #4)
|
||||
|
||||
- [x] A05:2021 – Security Misconfiguration
|
||||
- ⚠️ No HTTPS enforcement (issue #6)
|
||||
- ⚠️ No CORS policy (issue #7)
|
||||
|
||||
- [x] A07:2021 – Identification and Authentication Failures
|
||||
- 🔴 No rate limiting (issue #2)
|
||||
- 🟠 Tokens never expire (issue #5)
|
||||
|
||||
---
|
||||
|
||||
### Verdict
|
||||
|
||||
**❌ NOT PRODUCTION-READY**
|
||||
|
||||
**Critical vulnerabilities:** 3
|
||||
**Estimated risk level:** HIGH
|
||||
|
||||
**Must fix before any deployment:**
|
||||
1. Remove hardcoded secret
|
||||
2. Add rate limiting
|
||||
3. Remove password from logs
|
||||
|
||||
**Recommended timeline:**
|
||||
- Critical fixes: Today (2-3 hours)
|
||||
- Important fixes: This week (4-5 hours)
|
||||
- Full security audit: Next sprint
|
||||
|
||||
---
|
||||
|
||||
### Recommended Security Additions
|
||||
|
||||
Beyond fixing issues:
|
||||
|
||||
1. **Add 2FA support**
|
||||
- Time-based OTP (TOTP)
|
||||
- Backup codes
|
||||
|
||||
2. **Implement password reset**
|
||||
- Secure token generation
|
||||
- Time-limited reset links
|
||||
- Email verification
|
||||
|
||||
3. **Add security headers**
|
||||
```typescript
|
||||
import helmet from 'helmet';
|
||||
app.use(helmet());
|
||||
```
|
||||
|
||||
4. **Set up security monitoring**
|
||||
- Log failed login attempts
|
||||
- Alert on suspicious patterns
|
||||
- Track token usage
|
||||
|
||||
5. **Regular security audits**
|
||||
- Automated: npm audit, Snyk
|
||||
- Manual: Code review
|
||||
- Professional: Penetration testing
|
||||
```
|
||||
|
||||
### Performance-Focused Review
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/review --persona=performance src/api/posts.ts
|
||||
```
|
||||
|
||||
**Review Mode Response:**
|
||||
```markdown
|
||||
## Performance Review: posts.ts
|
||||
|
||||
Persona: Performance Engineer
|
||||
Focus: Response time, resource usage, scalability
|
||||
|
||||
---
|
||||
|
||||
### Critical Performance Issues 🔴
|
||||
|
||||
**1. N+1 Query Problem (Line 45-55)**
|
||||
|
||||
**Current code:**
|
||||
```typescript
|
||||
const posts = await db.posts.findAll();
|
||||
for (const post of posts) {
|
||||
post.author = await db.users.findById(post.authorId);
|
||||
post.comments = await db.comments.findByPostId(post.id);
|
||||
}
|
||||
```
|
||||
|
||||
**Problem:**
|
||||
- 100 posts = 1 + 100 + 100 = 201 database queries
|
||||
- Each query: ~10ms
|
||||
- Total: ~2,000ms just for queries
|
||||
|
||||
**Impact:** Page load takes 2+ seconds
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
const posts = await db.posts.findAll({
|
||||
include: [
|
||||
{ model: db.users, as: 'author' },
|
||||
{ model: db.comments, as: 'comments' }
|
||||
]
|
||||
});
|
||||
// Now: 1 query with JOINs, ~50ms
|
||||
```
|
||||
|
||||
**Expected improvement:** 95% faster (2,000ms → 100ms)
|
||||
|
||||
---
|
||||
|
||||
### Important Performance Issues 🟠
|
||||
|
||||
**2. No Pagination (Line 23)**
|
||||
```typescript
|
||||
router.get('/posts', async (req, res) => {
|
||||
const posts = await db.posts.findAll();
|
||||
res.json(posts);
|
||||
});
|
||||
```
|
||||
|
||||
**Problem:**
|
||||
- Returns ALL posts (currently 1,000)
|
||||
- 2.3KB per post = 2.3MB response
|
||||
- Mobile users download entire dataset
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
const limit = Math.min(parseInt(req.query.limit) || 10, 100);
|
||||
const offset = parseInt(req.query.offset) || 0;
|
||||
|
||||
const posts = await db.posts.findAll({ limit, offset });
|
||||
const total = await db.posts.count();
|
||||
|
||||
res.json({ posts, total, limit, offset });
|
||||
```
|
||||
|
||||
**Expected improvement:** 99% smaller response (2.3MB → 23KB)
|
||||
|
||||
---
|
||||
|
||||
**3. No Caching (Line 23)**
|
||||
|
||||
**Problem:**
|
||||
- Every request hits database
|
||||
- Posts don't change frequently
|
||||
- Redundant computation
|
||||
|
||||
**Analysis:**
|
||||
- Checked git history: Posts updated 2-3 times/hour
|
||||
- Could cache for 5-10 minutes
|
||||
- 95% of requests could be cache hits
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
const cacheKey = `posts:${limit}:${offset}`;
|
||||
let posts = await redis.get(cacheKey);
|
||||
|
||||
if (!posts) {
|
||||
posts = await db.posts.findAll({...});
|
||||
await redis.setex(cacheKey, 300, JSON.stringify(posts));
|
||||
}
|
||||
```
|
||||
|
||||
**Expected improvement:** 90% faster for cache hits
|
||||
|
||||
---
|
||||
|
||||
### Minor Performance Issues 🟡
|
||||
|
||||
**4. Inefficient Filtering (Line 78)**
|
||||
```typescript
|
||||
const filtered = posts.filter(p => p.published);
|
||||
```
|
||||
|
||||
**Problem:** Filtering in application, not database
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
const posts = await db.posts.findAll({
|
||||
where: { published: true }
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**5. No Compression (Response Headers)**
|
||||
|
||||
**Problem:** Large JSON responses not compressed
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
import compression from 'compression';
|
||||
app.use(compression());
|
||||
```
|
||||
|
||||
**Expected improvement:** 60-80% smaller responses
|
||||
|
||||
---
|
||||
|
||||
**6. Synchronous Processing (Line 89)**
|
||||
```typescript
|
||||
for (const post of posts) {
|
||||
await analytics.track(post.id); // Blocks response
|
||||
}
|
||||
```
|
||||
|
||||
**Problem:** Analytics tracking blocks response
|
||||
|
||||
**Fix:**
|
||||
```typescript
|
||||
// Fire and forget
|
||||
Promise.all(posts.map(p => analytics.track(p.id))).catch(err =>
|
||||
logger.error('Analytics error', err)
|
||||
);
|
||||
// or better: queue for background processing
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Performance Metrics
|
||||
|
||||
**Current Performance:**
|
||||
- Response time: 2,347ms (p95)
|
||||
- Payload size: 2.3MB uncompressed
|
||||
- Database queries: 201 per request
|
||||
- Cache hit rate: 0% (no cache)
|
||||
|
||||
**After Fixes:**
|
||||
- Response time: ~120ms (p95)
|
||||
- Payload size: ~23KB compressed
|
||||
- Database queries: 1 per request
|
||||
- Cache hit rate: ~90% (estimated)
|
||||
|
||||
**Total improvement: 95% faster, 99% less bandwidth**
|
||||
|
||||
---
|
||||
|
||||
### Scalability Analysis
|
||||
|
||||
**Current capacity:**
|
||||
- Server: 8 concurrent requests max
|
||||
- Database: 100 connections, saturates quickly
|
||||
- Bottleneck: N+1 queries
|
||||
|
||||
**After fixes:**
|
||||
- Server: 100+ concurrent requests
|
||||
- Database: Minimal load with caching
|
||||
- Bottleneck: Cache size (manageable)
|
||||
|
||||
---
|
||||
|
||||
### Load Test Recommendations
|
||||
|
||||
```bash
|
||||
# Before fixes
|
||||
ab -n 1000 -c 10 http://localhost:3000/api/posts
|
||||
# Expect: Many failures, high latency
|
||||
|
||||
# After fixes
|
||||
ab -n 1000 -c 50 http://localhost:3000/api/posts
|
||||
# Should handle gracefully
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Verdict
|
||||
|
||||
**🟠 Needs Performance Work**
|
||||
|
||||
Not currently scalable beyond 10-20 concurrent users.
|
||||
|
||||
**Priority fixes:**
|
||||
1. Fix N+1 queries (critical for any load)
|
||||
2. Add pagination (critical for mobile)
|
||||
3. Implement caching (high impact)
|
||||
|
||||
**Estimated fix time:** 1 day
|
||||
|
||||
---
|
||||
|
||||
### Performance Checklist
|
||||
|
||||
- [ ] Database queries optimized
|
||||
- [ ] Pagination implemented
|
||||
- [ ] Caching layer added
|
||||
- [ ] Response compression enabled
|
||||
- [ ] No blocking operations in request path
|
||||
- [ ] Load tested
|
||||
|
||||
**Recommendation:** Fix N+1 and pagination before launch.
|
||||
```
|
||||
|
||||
## Review Personas
|
||||
|
||||
Use `--persona` flag to focus the review:
|
||||
|
||||
| Persona | Focus | Best For |
|
||||
|---------|-------|----------|
|
||||
| `security` | OWASP Top 10, vulnerabilities, auth | Security-critical code |
|
||||
| `performance` | Efficiency, queries, caching | High-traffic endpoints |
|
||||
| `architecture` | Patterns, coupling, design | Structural decisions |
|
||||
| `testing` | Coverage, quality, edge cases | Test review |
|
||||
|
||||
**Example:**
|
||||
```bash
|
||||
/review --persona=security src/auth/
|
||||
/review --persona=performance src/api/
|
||||
```
|
||||
|
||||
## Mode Activation
|
||||
|
||||
```bash
|
||||
# Session-wide review mode
|
||||
/mode review
|
||||
|
||||
# All reviews now use critical analysis
|
||||
/review src/services/
|
||||
/review src/api/
|
||||
|
||||
# Single command with review mode
|
||||
/review --mode=review src/payment/
|
||||
|
||||
# With specific persona
|
||||
/review --mode=review --persona=security src/auth/
|
||||
```
|
||||
|
||||
## Tips for Effective Reviews
|
||||
|
||||
### Prepare the Code
|
||||
|
||||
Before reviewing:
|
||||
1. Ensure tests pass
|
||||
2. Run linter
|
||||
3. Check for obvious issues
|
||||
4. Have context ready
|
||||
|
||||
### Focus Reviews
|
||||
|
||||
```bash
|
||||
# Too broad - hard to review thoroughly
|
||||
/review src/
|
||||
|
||||
# Better - focused review
|
||||
/review src/services/payment-service.ts
|
||||
/review src/api/auth.ts --persona=security
|
||||
```
|
||||
|
||||
### Progressive Review
|
||||
|
||||
```bash
|
||||
# Quick first pass
|
||||
/review --depth=2 src/new-feature/
|
||||
|
||||
# Deep dive on concerning areas
|
||||
/review --depth=5 --persona=security src/new-feature/auth.ts
|
||||
```
|
||||
|
||||
### Combine with Other Modes
|
||||
|
||||
```bash
|
||||
# Review, then fix
|
||||
/mode review
|
||||
/review src/feature/
|
||||
# Identify issues
|
||||
|
||||
/mode implementation
|
||||
/fix "issue 1"
|
||||
/fix "issue 2"
|
||||
|
||||
/mode review
|
||||
/review src/feature/
|
||||
# Verify fixes
|
||||
```
|
||||
|
||||
## Checklist Template
|
||||
|
||||
Standard checklist used in reviews:
|
||||
|
||||
```markdown
|
||||
### Pre-Review
|
||||
- [ ] Tests pass
|
||||
- [ ] Lint clean
|
||||
- [ ] No console.logs
|
||||
- [ ] Dependencies updated
|
||||
|
||||
### Code Quality
|
||||
- [ ] Readable and maintainable
|
||||
- [ ] No code smells
|
||||
- [ ] Proper error handling
|
||||
- [ ] Edge cases considered
|
||||
|
||||
### Security
|
||||
- [ ] Input validation
|
||||
- [ ] No hardcoded secrets
|
||||
- [ ] Auth/authz correct
|
||||
- [ ] No security warnings
|
||||
|
||||
### Performance
|
||||
- [ ] No N+1 queries
|
||||
- [ ] Efficient algorithms
|
||||
- [ ] Proper indexing
|
||||
- [ ] No memory leaks
|
||||
|
||||
### Testing
|
||||
- [ ] Tests cover new code
|
||||
- [ ] Edge cases tested
|
||||
- [ ] Error scenarios tested
|
||||
- [ ] Coverage maintained
|
||||
```
|
||||
|
||||
## Comparison with Other Modes
|
||||
|
||||
| Aspect | Review | Deep Research | Default |
|
||||
|--------|--------|---------------|---------|
|
||||
| Critical analysis | High | Medium | Low |
|
||||
| Finding issues | Primary goal | Secondary | Incidental |
|
||||
| Evidence required | Yes | Always | Sometimes |
|
||||
| Actionable feedback | Always | Sometimes | Sometimes |
|
||||
| Best for | Code review | Investigation | General use |
|
||||
|
||||
## Configuration
|
||||
|
||||
Review mode is customizable in `.claude/modes/review.md`:
|
||||
|
||||
- Severity thresholds
|
||||
- Checklist items
|
||||
- Required categories
|
||||
- Verdict criteria
|
||||
|
||||
## Related Modes
|
||||
|
||||
- **Deep Research Mode**: For evidence-based investigation
|
||||
- **Default Mode**: For less critical review
|
||||
- **Security Auditor Agent**: Specialized security reviews
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [Code Review Guide](/claudekit/guides/code-review)
|
||||
- [Security Best Practices](/claudekit/guides/security)
|
||||
- [Review Command](/claudekit/commands/review)
|
||||
@@ -1,544 +0,0 @@
|
||||
---
|
||||
title: Token-Efficient Mode
|
||||
description: Cost optimization mode with minimal prose and maximum code
|
||||
---
|
||||
|
||||
# Token-Efficient Mode
|
||||
|
||||
## Overview
|
||||
|
||||
Token-efficient mode optimizes for cost savings by reducing output verbosity while maintaining accuracy. It can reduce token usage by 30-70% depending on the task type.
|
||||
|
||||
This mode produces compressed, concise outputs with minimal explanation - perfect for high-volume sessions, simple tasks, or when cost is a primary concern.
|
||||
|
||||
## When to Use
|
||||
|
||||
Token-efficient mode is ideal for:
|
||||
|
||||
- **High-volume sessions** - Many similar tasks in one session
|
||||
- **Simple, clear tasks** - Well-defined work that doesn't need explanation
|
||||
- **Cost-sensitive projects** - When minimizing API costs matters
|
||||
- **Repeated operations** - Batch file generation, similar edits
|
||||
- **Quick iterations** - Fast back-and-forth during development
|
||||
|
||||
## Behavior Changes
|
||||
|
||||
### Communication Style
|
||||
|
||||
**Minimal explanations:**
|
||||
- No conversational filler or preambles
|
||||
- Direct answers only
|
||||
- Skip obvious context
|
||||
- Assume developer competence
|
||||
|
||||
**Standard Mode Example:**
|
||||
```
|
||||
I'll help you fix this bug. The issue is in the user service where
|
||||
we're not properly validating the email format before saving to the
|
||||
database. Here's the fix:
|
||||
|
||||
[code block with detailed comments]
|
||||
|
||||
This change adds email validation using a regex pattern that checks
|
||||
for a valid email format before proceeding with the save operation.
|
||||
```
|
||||
|
||||
**Token-Efficient Mode Example:**
|
||||
```
|
||||
Fix: Add email validation
|
||||
|
||||
[code block with minimal comments]
|
||||
```
|
||||
|
||||
### Problem-Solving Approach
|
||||
|
||||
- Jump directly to solutions
|
||||
- Assume competence - no hand-holding
|
||||
- Skip basic explanations
|
||||
- Reference documentation instead of explaining
|
||||
- Make reasonable defaults without discussion
|
||||
|
||||
### Output Format
|
||||
|
||||
- Code blocks without surrounding prose
|
||||
- Abbreviated inline comments
|
||||
- Terse commit messages
|
||||
- Bullet points instead of paragraphs
|
||||
- No "I'll help you" preambles
|
||||
|
||||
## Token Savings Breakdown
|
||||
|
||||
| Technique | Token Savings | Trade-off |
|
||||
|-----------|---------------|-----------|
|
||||
| Skip preambles | 20-30% | Less context setting |
|
||||
| Code-only responses | 40-50% | No explanation |
|
||||
| Abbreviated comments | 10-15% | Less documentation |
|
||||
| Reference over explain | 30-40% | Requires looking up docs |
|
||||
| Combined (Ultra mode) | 60-70% | Minimal guidance |
|
||||
|
||||
## Examples
|
||||
|
||||
### Bug Fix
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/fix --format=concise "null pointer in user.ts line 42"
|
||||
```
|
||||
|
||||
**Token-Efficient Response:**
|
||||
```typescript
|
||||
// user.ts:42
|
||||
if (!user) return null;
|
||||
// Before: user.name (crashes when null)
|
||||
// After: user?.name ?? 'Unknown'
|
||||
```
|
||||
|
||||
Test: `npm test -- --grep "null user"`
|
||||
|
||||
---
|
||||
|
||||
**Compare to Standard Mode:**
|
||||
```markdown
|
||||
I found the null pointer issue. When user is null, we're trying to
|
||||
access the name property which causes a crash. Here's the fix:
|
||||
|
||||
```typescript
|
||||
// user.ts:42
|
||||
if (!user) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Use optional chaining to safely access name
|
||||
const userName = user?.name ?? 'Unknown';
|
||||
```
|
||||
|
||||
This uses TypeScript's optional chaining operator (?.) which safely
|
||||
accesses properties on potentially null objects. If user is null,
|
||||
it returns undefined instead of crashing. The nullish coalescing
|
||||
operator (??) provides a fallback value of 'Unknown'.
|
||||
|
||||
To test this fix, run:
|
||||
```bash
|
||||
npm test -- --grep "null user"
|
||||
```
|
||||
```
|
||||
|
||||
Token savings: ~65%
|
||||
|
||||
### Feature Implementation
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/feature --format=ultra "add user avatar upload"
|
||||
```
|
||||
|
||||
**Token-Efficient Response:**
|
||||
```typescript
|
||||
// src/api/user.ts
|
||||
router.post('/avatar', upload.single('avatar'), async (req, res) => {
|
||||
const file = req.file;
|
||||
if (!file) return res.status(400).json({ error: 'No file' });
|
||||
|
||||
const url = await s3.upload(file);
|
||||
await db.users.update(req.user.id, { avatarUrl: url });
|
||||
|
||||
res.json({ avatarUrl: url });
|
||||
});
|
||||
|
||||
// src/middleware/upload.ts
|
||||
import multer from 'multer';
|
||||
export const upload = multer({
|
||||
limits: { fileSize: 5 * 1024 * 1024 }, // 5MB
|
||||
fileFilter: (req, file, cb) => {
|
||||
if (!file.mimetype.startsWith('image/')) {
|
||||
return cb(new Error('Images only'));
|
||||
}
|
||||
cb(null, true);
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
Test: `curl -F "avatar=@test.jpg" http://localhost:3000/api/avatar`
|
||||
|
||||
---
|
||||
|
||||
**Compare to Standard Mode:**
|
||||
```markdown
|
||||
I'll implement avatar upload functionality with file size limits and
|
||||
type validation.
|
||||
|
||||
## Implementation Plan
|
||||
1. Add multer middleware for file uploads
|
||||
2. Create upload endpoint
|
||||
3. Validate file type and size
|
||||
4. Upload to S3
|
||||
5. Update user record
|
||||
|
||||
Let me create the necessary files:
|
||||
|
||||
**src/api/user.ts**
|
||||
```typescript
|
||||
import { Router } from 'express';
|
||||
import { upload } from '../middleware/upload';
|
||||
import { s3Service } from '../services/s3';
|
||||
import { db } from '../db';
|
||||
|
||||
const router = Router();
|
||||
|
||||
// Avatar upload endpoint
|
||||
// Accepts: multipart/form-data with 'avatar' field
|
||||
// Returns: { avatarUrl: string }
|
||||
router.post('/avatar', upload.single('avatar'), async (req, res) => {
|
||||
const file = req.file;
|
||||
|
||||
// Validate file exists
|
||||
if (!file) {
|
||||
return res.status(400).json({ error: 'No file provided' });
|
||||
}
|
||||
|
||||
// Upload to S3 and get URL
|
||||
const url = await s3Service.upload(file);
|
||||
|
||||
// Update user's avatar URL in database
|
||||
await db.users.update(req.user.id, { avatarUrl: url });
|
||||
|
||||
res.json({ avatarUrl: url });
|
||||
});
|
||||
|
||||
export default router;
|
||||
```
|
||||
|
||||
**src/middleware/upload.ts**
|
||||
```typescript
|
||||
import multer from 'multer';
|
||||
|
||||
// Configure multer with size and type restrictions
|
||||
export const upload = multer({
|
||||
// Limit file size to 5MB
|
||||
limits: {
|
||||
fileSize: 5 * 1024 * 1024
|
||||
},
|
||||
|
||||
// Only allow image files
|
||||
fileFilter: (req, file, cb) => {
|
||||
if (!file.mimetype.startsWith('image/')) {
|
||||
return cb(new Error('Only image files allowed'));
|
||||
}
|
||||
cb(null, true);
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
This implementation:
|
||||
- Uses multer for handling multipart form data
|
||||
- Restricts uploads to images only (JPEG, PNG, etc.)
|
||||
- Enforces a 5MB file size limit
|
||||
- Uploads to S3 for persistent storage
|
||||
- Updates the user's database record with the new avatar URL
|
||||
|
||||
To test the endpoint:
|
||||
```bash
|
||||
curl -F "avatar=@test.jpg" http://localhost:3000/api/avatar
|
||||
```
|
||||
```
|
||||
|
||||
Token savings: ~70%
|
||||
|
||||
### Code Review
|
||||
|
||||
**Request:**
|
||||
```bash
|
||||
/review --format=concise src/services/payment.ts
|
||||
```
|
||||
|
||||
**Token-Efficient Response:**
|
||||
```markdown
|
||||
## payment.ts
|
||||
|
||||
**Critical:**
|
||||
- Line 45: API key in logs → Remove from error message
|
||||
- Line 78: No timeout → Add 30s timeout
|
||||
|
||||
**Important:**
|
||||
- Line 12: Magic number 3 → Extract constant `MAX_RETRIES`
|
||||
- Line 56: No retry backoff → Add exponential backoff
|
||||
|
||||
**Minor:**
|
||||
- Inconsistent error handling
|
||||
- Missing JSDoc on public methods
|
||||
|
||||
Tests pass. Fix critical before merge.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Compare to Standard Mode:**
|
||||
```markdown
|
||||
## Code Review: payment-service.ts
|
||||
|
||||
I've reviewed the payment service code. Here's what I found:
|
||||
|
||||
### Critical Issues 🔴
|
||||
|
||||
**Issue 1: API Key Exposure in Logs (Line 45)**
|
||||
- **Problem**: The error handler logs the full API key when payment
|
||||
fails, which exposes sensitive credentials in application logs.
|
||||
- **Risk**: Anyone with log access can see the API key
|
||||
- **Fix**: Remove the API key from the error message:
|
||||
```typescript
|
||||
// Before
|
||||
logger.error(`Payment failed with key ${apiKey}`, error);
|
||||
|
||||
// After
|
||||
logger.error('Payment failed', { error: error.message });
|
||||
```
|
||||
|
||||
**Issue 2: No Timeout on API Calls (Line 78)**
|
||||
- **Problem**: The payment API call has no timeout, which means it
|
||||
could hang indefinitely if the payment provider is down.
|
||||
- **Risk**: Could cause your entire application to hang
|
||||
- **Fix**: Add a 30-second timeout:
|
||||
```typescript
|
||||
const response = await axios.post(url, data, {
|
||||
timeout: 30000 // 30 seconds
|
||||
});
|
||||
```
|
||||
|
||||
### Important Issues 🟠
|
||||
|
||||
**Issue 3: Magic Number for Retries (Line 12)**
|
||||
- **Problem**: The number 3 is hardcoded for retry attempts
|
||||
- **Fix**: Extract to a named constant for clarity:
|
||||
```typescript
|
||||
const MAX_RETRIES = 3;
|
||||
```
|
||||
|
||||
... [more detailed explanations]
|
||||
|
||||
### Positive Notes ✅
|
||||
- Good error handling structure overall
|
||||
- Tests cover the main payment flows
|
||||
- Clear function names and organization
|
||||
|
||||
### Recommendation
|
||||
This code needs changes before merging. The critical issues must be
|
||||
fixed, and I recommend addressing the important issues as well for
|
||||
better reliability.
|
||||
```
|
||||
|
||||
Token savings: ~75%
|
||||
|
||||
## Format Levels
|
||||
|
||||
Token-efficient mode has two levels:
|
||||
|
||||
### Concise (`--format=concise`)
|
||||
|
||||
**Token savings: 30-40%**
|
||||
|
||||
- Reduced explanations but still present
|
||||
- Standard code with fewer comments
|
||||
- Brief context setting
|
||||
- Short examples
|
||||
|
||||
**Use when:**
|
||||
- You still want some explanation
|
||||
- Working on moderately complex tasks
|
||||
- Collaborating with others who need context
|
||||
|
||||
### Ultra (`--format=ultra`)
|
||||
|
||||
**Token savings: 60-70%**
|
||||
|
||||
- Code-only responses
|
||||
- Minimal to no explanations
|
||||
- Terse comments only
|
||||
- No examples unless critical
|
||||
|
||||
**Use when:**
|
||||
- Task is very clear
|
||||
- You're experienced with the codebase
|
||||
- Doing repetitive operations
|
||||
- Maximum cost savings needed
|
||||
|
||||
## Mode Activation
|
||||
|
||||
### Session-Wide
|
||||
|
||||
```bash
|
||||
# Enable for entire session
|
||||
/mode token-efficient
|
||||
|
||||
# All commands now use token-efficient mode
|
||||
/fix "error message"
|
||||
/feature "new feature"
|
||||
/review "file.ts"
|
||||
```
|
||||
|
||||
### Single Command
|
||||
|
||||
```bash
|
||||
# Concise format for one command
|
||||
/fix --format=concise "error message"
|
||||
|
||||
# Ultra format for maximum savings
|
||||
/feature --format=ultra "simple feature"
|
||||
```
|
||||
|
||||
### Combining with Other Modes
|
||||
|
||||
```bash
|
||||
# Token-efficient implementation (very fast)
|
||||
/execute-plan --mode=implementation --format=ultra plan.md
|
||||
|
||||
# Concise deep research (save tokens on output)
|
||||
/research --mode=deep-research --format=concise "topic"
|
||||
```
|
||||
|
||||
## When NOT to Use
|
||||
|
||||
Avoid token-efficient mode for:
|
||||
|
||||
- **Complex architectural decisions** - Need thorough discussion
|
||||
- **Code reviews** - Need detailed analysis and explanations
|
||||
- **Documentation tasks** - Literally requires verbose output
|
||||
- **Teaching/explanation requests** - Defeats the purpose
|
||||
- **Debugging complex issues** - Need thorough investigation
|
||||
- **First time with unfamiliar tech** - Need learning context
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Progressive Refinement
|
||||
|
||||
Start verbose, then compress:
|
||||
|
||||
```bash
|
||||
# First iteration - understand the problem
|
||||
/fix "complex error"
|
||||
|
||||
# Subsequent iterations - just make it work
|
||||
/mode token-efficient
|
||||
/fix "similar error"
|
||||
/fix "another similar error"
|
||||
```
|
||||
|
||||
### Batch Operations
|
||||
|
||||
Perfect for repetitive tasks:
|
||||
|
||||
```bash
|
||||
/mode token-efficient
|
||||
|
||||
# Generate tests for multiple files
|
||||
/test src/services/user-service.ts
|
||||
/test src/services/auth-service.ts
|
||||
/test src/services/payment-service.ts
|
||||
# ...repeat for all services
|
||||
|
||||
/mode default # Switch back when done
|
||||
```
|
||||
|
||||
### Know Your Codebase
|
||||
|
||||
Token-efficient mode assumes you:
|
||||
- Know the file structure
|
||||
- Understand the tech stack
|
||||
- Can read code without extensive comments
|
||||
- Know where to find documentation
|
||||
|
||||
If any of these are false, use default mode instead.
|
||||
|
||||
## Token Usage Comparison
|
||||
|
||||
Real example from a feature implementation:
|
||||
|
||||
| Mode | Input Tokens | Output Tokens | Total | Cost (Sonnet) |
|
||||
|------|--------------|---------------|-------|---------------|
|
||||
| Default | 1,200 | 3,500 | 4,700 | $0.014 |
|
||||
| Concise | 1,200 | 2,100 | 3,300 | $0.010 |
|
||||
| Ultra | 1,200 | 1,200 | 2,400 | $0.007 |
|
||||
|
||||
**Savings over 100 similar tasks:**
|
||||
- Concise: $0.40 saved (~30%)
|
||||
- Ultra: $0.70 saved (~50%)
|
||||
|
||||
## Tips for Maximum Efficiency
|
||||
|
||||
### 1. Be Specific in Requests
|
||||
|
||||
**Less efficient:**
|
||||
```bash
|
||||
/fix "there's a bug in the user service"
|
||||
```
|
||||
|
||||
**More efficient:**
|
||||
```bash
|
||||
/fix "null pointer at user-service.ts:42"
|
||||
```
|
||||
|
||||
Saves tokens on both input and output.
|
||||
|
||||
### 2. Use File Paths
|
||||
|
||||
**Less efficient:**
|
||||
```bash
|
||||
/feature "add login endpoint"
|
||||
```
|
||||
|
||||
**More efficient:**
|
||||
```bash
|
||||
/feature "add POST /auth/login to src/api/auth.ts"
|
||||
```
|
||||
|
||||
Claude spends fewer tokens figuring out where code goes.
|
||||
|
||||
### 3. Batch Similar Tasks
|
||||
|
||||
**Less efficient:**
|
||||
```bash
|
||||
/test "user service"
|
||||
[wait for response]
|
||||
/test "auth service"
|
||||
[wait for response]
|
||||
```
|
||||
|
||||
**More efficient:**
|
||||
```bash
|
||||
/mode token-efficient
|
||||
/test src/services/*.ts --format=ultra
|
||||
```
|
||||
|
||||
### 4. Reference Previous Work
|
||||
|
||||
**Less efficient:**
|
||||
```bash
|
||||
/feature "add logout endpoint similar to login"
|
||||
```
|
||||
|
||||
**More efficient:**
|
||||
```bash
|
||||
/feature "add logout to auth.ts, same pattern as login"
|
||||
```
|
||||
|
||||
Claude reuses context instead of regenerating it.
|
||||
|
||||
## Configuration
|
||||
|
||||
Customize token-efficient behavior in `.claude/modes/token-efficient.md`:
|
||||
|
||||
- Default compression level
|
||||
- When to skip explanations
|
||||
- Comment verbosity
|
||||
- Auto-activation conditions
|
||||
|
||||
## Related Modes
|
||||
|
||||
- **Implementation Mode**: Similar code-focus, for execution
|
||||
- **Default Mode**: When you need more explanation
|
||||
- **Brainstorm Mode**: Complete opposite - verbose exploration
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [Token Optimization Guide](/claudekit/optimization/token-efficient)
|
||||
- [Cost Management](/claudekit/advanced/cost)
|
||||
- [Batch Operations](/claudekit/guides/batch)
|
||||
@@ -0,0 +1,118 @@
|
||||
---
|
||||
title: Agents Reference
|
||||
description: All 20 specialized subagents in Claude Kit.
|
||||
---
|
||||
|
||||
# Agents Reference
|
||||
|
||||
Agents are specialized subagents that Claude can dispatch for focused tasks. Each agent has access to specific tools and expertise, making it more effective than a general-purpose prompt for its domain.
|
||||
|
||||
## How Agents Work
|
||||
|
||||
Agents are defined as markdown files in `.claude/agents/`. When Claude dispatches a subagent, it starts a fresh context focused entirely on the task at hand:
|
||||
|
||||
```
|
||||
You: "Review this code for security issues"
|
||||
|
||||
Claude dispatches → security-auditor agent
|
||||
→ Focused security review
|
||||
→ Returns findings with severity ratings
|
||||
```
|
||||
|
||||
Agents run independently and return results to the main conversation. They can be dispatched in parallel for independent tasks.
|
||||
|
||||
---
|
||||
|
||||
## Planning & Research
|
||||
|
||||
| Agent | Description | Use When |
|
||||
|-------|-------------|----------|
|
||||
| **planner** | Designs implementation plans, identifies critical files, considers trade-offs | Planning complex features or migrations |
|
||||
| **brainstormer** | Explores solutions, evaluates architectures, debates technical decisions | Evaluating options before implementation |
|
||||
| **researcher** | Comprehensive research on technologies, libraries, and best practices | Need in-depth comparison or analysis |
|
||||
|
||||
## Code Quality
|
||||
|
||||
| Agent | Description | Use When |
|
||||
|-------|-------------|----------|
|
||||
| **code-reviewer** | Reviews code for quality, security, performance, and maintainability | After implementing features, before PRs |
|
||||
| **tester** | Runs test suites, analyzes coverage, validates error handling, verifies builds | After code changes, checking coverage |
|
||||
| **debugger** | Investigates issues, analyzes system behavior, traces root causes | Debugging test failures or production bugs |
|
||||
|
||||
## Security
|
||||
|
||||
| Agent | Description | Use When |
|
||||
|-------|-------------|----------|
|
||||
| **security-auditor** | Security audits, OWASP compliance, code vulnerability review | Before production release, security review |
|
||||
| **vulnerability-scanner** | Automated dependency scanning for known CVEs | Checking for dependency vulnerabilities |
|
||||
|
||||
## Infrastructure & Data
|
||||
|
||||
| Agent | Description | Use When |
|
||||
|-------|-------------|----------|
|
||||
| **database-admin** | Schema design, migrations, query optimization, data modeling | Database work for PostgreSQL or MongoDB |
|
||||
| **cicd-manager** | CI/CD pipeline management, deployment automation | Setting up or fixing CI pipelines |
|
||||
| **pipeline-architect** | Pipeline architecture design and build optimization | Redesigning slow CI/CD pipelines |
|
||||
|
||||
## Content & Documentation
|
||||
|
||||
| Agent | Description | Use When |
|
||||
|-------|-------------|----------|
|
||||
| **docs-manager** | API docs, READMEs, code comments, technical specifications | Documentation needs updating |
|
||||
| **copywriter** | Marketing copy, release notes, changelogs, product descriptions | User-facing content creation |
|
||||
| **journal-writer** | Development journals, decision logs, incident documentation | Recording failures or key decisions |
|
||||
|
||||
## Design & UI
|
||||
|
||||
| Agent | Description | Use When |
|
||||
|-------|-------------|----------|
|
||||
| **ui-ux-designer** | Design mockups to code, UI components, responsive/accessible layouts | Building or fixing UI components |
|
||||
| **api-designer** | RESTful/GraphQL API design, OpenAPI specifications | Designing new APIs |
|
||||
|
||||
## Project Management
|
||||
|
||||
| Agent | Description | Use When |
|
||||
|-------|-------------|----------|
|
||||
| **project-manager** | Progress tracking, roadmaps, task monitoring, status reports | Checking project progress |
|
||||
| **git-manager** | Stage, commit, push with conventional commits | Git operations |
|
||||
|
||||
## Exploration
|
||||
|
||||
| Agent | Description | Use When |
|
||||
|-------|-------------|----------|
|
||||
| **scout** | Rapidly maps internal codebase — files, patterns, dependencies | Finding code locations, understanding structure |
|
||||
| **scout-external** | Explores external resources, APIs, open-source projects | Researching external APIs or libraries |
|
||||
|
||||
---
|
||||
|
||||
## Dispatching Agents
|
||||
|
||||
Claude dispatches agents automatically when appropriate. You can also request it explicitly:
|
||||
|
||||
```
|
||||
"Have the security-auditor review the auth module"
|
||||
"Ask the database-admin to optimize this query"
|
||||
"Get the code-reviewer to check my changes"
|
||||
```
|
||||
|
||||
### Parallel Dispatch
|
||||
|
||||
For independent tasks, agents run in parallel:
|
||||
|
||||
```
|
||||
You: "Review security, check test coverage, and audit the database schema"
|
||||
|
||||
Claude dispatches simultaneously:
|
||||
→ security-auditor (auth module)
|
||||
→ tester (coverage analysis)
|
||||
→ database-admin (schema review)
|
||||
```
|
||||
|
||||
### Agent vs. Skill
|
||||
|
||||
| | Skills | Agents |
|
||||
|---|--------|--------|
|
||||
| **How** | Auto-trigger by keywords | Dispatched for focused tasks |
|
||||
| **Context** | Same conversation | Fresh, isolated context |
|
||||
| **Best for** | Patterns and methodology | Focused independent work |
|
||||
| **Parallelism** | Sequential | Can run in parallel |
|
||||
@@ -0,0 +1,145 @@
|
||||
---
|
||||
title: MCP Servers
|
||||
description: Optional MCP server integrations for enhanced capabilities.
|
||||
---
|
||||
|
||||
# MCP Servers
|
||||
|
||||
Claude Kit includes optional [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server configurations that extend Claude's capabilities with external tools.
|
||||
|
||||
## How MCP Works
|
||||
|
||||
MCP servers give Claude access to tools it doesn't have natively — browser automation, persistent memory, real-time documentation, and structured reasoning. They run as local processes that Claude communicates with during your session.
|
||||
|
||||
Server configurations live in `.claude/mcp/`.
|
||||
|
||||
---
|
||||
|
||||
## Available Servers
|
||||
|
||||
### Context7
|
||||
|
||||
**Purpose**: Real-time library documentation lookup
|
||||
|
||||
Fetches current documentation for any library, framework, or API. Use instead of relying on Claude's training data, which may be outdated.
|
||||
|
||||
```
|
||||
You: "How do I set up middleware in Next.js 15?"
|
||||
|
||||
Claude fetches current Next.js 15 docs via Context7
|
||||
→ Answers with up-to-date API syntax
|
||||
```
|
||||
|
||||
**Best for**: API syntax, configuration, version migration, library-specific debugging.
|
||||
|
||||
**Config**: `.claude/mcp/context7.json`
|
||||
|
||||
---
|
||||
|
||||
### Sequential Thinking
|
||||
|
||||
**Purpose**: Structured step-by-step reasoning
|
||||
|
||||
Provides a tool for multi-step analysis with explicit thought chains. Used automatically by the sequential-thinking skill for complex problems.
|
||||
|
||||
```
|
||||
Complex debugging scenario:
|
||||
Step 1: Observe the error → confidence: 0.9
|
||||
Step 2: Form hypothesis → confidence: 0.7
|
||||
Step 3: Test hypothesis → confidence: 0.85
|
||||
Step 4: Verify fix → confidence: 0.95
|
||||
```
|
||||
|
||||
**Best for**: Complex debugging, architecture decisions, security analysis.
|
||||
|
||||
**Config**: `.claude/mcp/sequential.json`
|
||||
|
||||
---
|
||||
|
||||
### Memory
|
||||
|
||||
**Purpose**: Persistent knowledge graph across sessions
|
||||
|
||||
Stores entities, relationships, and observations that persist across conversations. Claude can recall project decisions, user preferences, and architectural context.
|
||||
|
||||
```
|
||||
Session 1: "We decided to use PostgreSQL RLS for multi-tenancy"
|
||||
→ Stored as entity + decision observation
|
||||
|
||||
Session 2: "What did we decide about multi-tenancy?"
|
||||
→ Retrieved from memory graph
|
||||
```
|
||||
|
||||
**Best for**: Long-running projects, team knowledge persistence, decision tracking.
|
||||
|
||||
---
|
||||
|
||||
### Filesystem
|
||||
|
||||
**Purpose**: Secure file operations with access controls
|
||||
|
||||
Provides sandboxed file operations with configurable allowed directories. Useful for projects that need restricted file access.
|
||||
|
||||
**Best for**: Projects with strict file access requirements.
|
||||
|
||||
---
|
||||
|
||||
### Playwright
|
||||
|
||||
**Purpose**: Browser automation for testing
|
||||
|
||||
Enables Claude to control a browser for E2E testing, visual verification, and web scraping. Works with the playwright skill for end-to-end test workflows.
|
||||
|
||||
```
|
||||
You: "Test the login flow in the browser"
|
||||
|
||||
Claude launches browser via Playwright MCP:
|
||||
→ Navigate to /login
|
||||
→ Fill email and password
|
||||
→ Click submit
|
||||
→ Verify redirect to /dashboard
|
||||
→ Take screenshot for evidence
|
||||
```
|
||||
|
||||
**Best for**: E2E testing, visual regression, browser-based verification.
|
||||
|
||||
---
|
||||
|
||||
## Setup
|
||||
|
||||
### Prerequisites
|
||||
|
||||
MCP servers require Node.js installed on your system.
|
||||
|
||||
### Enabling a Server
|
||||
|
||||
1. Check the config file in `.claude/mcp/` for the server you want
|
||||
2. Install any required dependencies (noted in the config)
|
||||
3. Restart Claude Code
|
||||
|
||||
### Configuration Format
|
||||
|
||||
Each server has a JSON config file:
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"server-name": {
|
||||
"command": "npx",
|
||||
"args": ["-y", "@package/server-name"],
|
||||
"env": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
See `.claude/mcp/README.md` for detailed setup instructions.
|
||||
|
||||
## Skills That Use MCP
|
||||
|
||||
| MCP Server | Skills That Benefit |
|
||||
|------------|-------------------|
|
||||
| Context7 | All framework/library skills (frontend, backend-frameworks, databases) |
|
||||
| Sequential | sequential-thinking, systematic-debugging, brainstorming |
|
||||
| Memory | session-management, brainstorming (persisting design decisions) |
|
||||
| Playwright | playwright, verification-before-completion |
|
||||
@@ -0,0 +1,177 @@
|
||||
---
|
||||
title: Modes Reference
|
||||
description: All 7 behavioral modes in Claude Kit.
|
||||
---
|
||||
|
||||
# Modes Reference
|
||||
|
||||
Modes change how Claude communicates and solves problems. Each mode optimizes behavior for a specific type of task.
|
||||
|
||||
## How Modes Work
|
||||
|
||||
Switch modes naturally in conversation:
|
||||
|
||||
```
|
||||
"switch to brainstorm mode"
|
||||
"use implementation mode"
|
||||
"go into review mode"
|
||||
```
|
||||
|
||||
Mode files live in `.claude/modes/`. Each defines communication style, output format, and problem-solving approach.
|
||||
|
||||
---
|
||||
|
||||
## Available Modes
|
||||
|
||||
### Default
|
||||
|
||||
The standard balanced mode for general tasks.
|
||||
|
||||
- **Communication**: Clear, helpful, balanced detail
|
||||
- **Output**: Mix of explanation and code
|
||||
- **Best for**: General development tasks, questions, exploration
|
||||
|
||||
---
|
||||
|
||||
### Brainstorm
|
||||
|
||||
Creative exploration for design and ideation.
|
||||
|
||||
- **Communication**: Asks lots of questions, explores alternatives
|
||||
- **Output**: Options with trade-offs, diagrams, decision matrices
|
||||
- **Best for**: Feature design, architecture decisions, requirement exploration
|
||||
|
||||
**Example**:
|
||||
```
|
||||
You: "switch to brainstorm mode"
|
||||
You: "I need to add search to our product catalog"
|
||||
|
||||
Claude asks one question at a time:
|
||||
"What search complexity do you need?
|
||||
a) Simple text matching (LIKE queries)
|
||||
b) Full-text search (PostgreSQL tsvector)
|
||||
c) Dedicated search engine (Elasticsearch/Meilisearch)"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Implementation
|
||||
|
||||
Code-focused execution with minimal prose.
|
||||
|
||||
- **Communication**: Terse, action-oriented
|
||||
- **Output**: Mostly code, minimal explanation
|
||||
- **Best for**: Executing known tasks, coding from clear specs
|
||||
|
||||
**Example**:
|
||||
```
|
||||
You: "switch to implementation mode"
|
||||
You: "add a PATCH /api/users/:id endpoint"
|
||||
|
||||
Claude writes code immediately with minimal commentary.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Review
|
||||
|
||||
Critical analysis for code review and quality assurance.
|
||||
|
||||
- **Communication**: Critical, thorough, finds issues
|
||||
- **Output**: Issue lists with severity, suggestions, security flags
|
||||
- **Best for**: Code review, QA, pre-merge checks
|
||||
|
||||
**Example**:
|
||||
```
|
||||
You: "switch to review mode"
|
||||
You: "review the auth middleware"
|
||||
|
||||
Claude examines code critically:
|
||||
"CRITICAL: Token expiry not checked after decode (line 42)
|
||||
IMPORTANT: Missing rate limiting on login endpoint
|
||||
MINOR: Inconsistent error response format"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Token-Efficient
|
||||
|
||||
Compressed output for high-volume work and cost optimization.
|
||||
|
||||
- **Communication**: Minimal prose, maximum density
|
||||
- **Output**: Code-only when possible, compressed explanations
|
||||
- **Best for**: Long sessions, repetitive tasks, cost-conscious work
|
||||
- **Savings**: 30-70% token reduction
|
||||
|
||||
**Levels**:
|
||||
|
||||
| Level | How to Activate | Savings |
|
||||
|-------|----------------|---------|
|
||||
| Concise | "be concise" | 30-40% |
|
||||
| Ultra | "code only" | 60-70% |
|
||||
| Session | "switch to token-efficient mode" | 30-70% |
|
||||
|
||||
---
|
||||
|
||||
### Deep Research
|
||||
|
||||
Thorough investigation with evidence and citations.
|
||||
|
||||
- **Communication**: Detailed analysis, cites sources
|
||||
- **Output**: Structured reports, evidence-backed conclusions
|
||||
- **Best for**: Technology evaluation, incident investigation, audits
|
||||
|
||||
**Example**:
|
||||
```
|
||||
You: "switch to deep research mode"
|
||||
You: "analyze our authentication flow for security issues"
|
||||
|
||||
Claude produces a structured report:
|
||||
"## Findings
|
||||
### 1. Session Token Storage (High Risk)
|
||||
Current: localStorage (vulnerable to XSS)
|
||||
Recommended: httpOnly cookie
|
||||
Evidence: OWASP Session Management Cheat Sheet..."
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Orchestration
|
||||
|
||||
Multi-agent coordination for complex parallel work.
|
||||
|
||||
- **Communication**: Status-oriented, progress tracking
|
||||
- **Output**: Agent dispatch summaries, consolidated results
|
||||
- **Best for**: Large tasks requiring multiple agents working in parallel
|
||||
|
||||
**Example**:
|
||||
```
|
||||
You: "switch to orchestration mode"
|
||||
You: "audit the entire API layer"
|
||||
|
||||
Claude coordinates multiple agents:
|
||||
"Dispatching 3 agents in parallel:
|
||||
→ security-auditor: reviewing auth endpoints
|
||||
→ code-reviewer: reviewing business logic
|
||||
→ tester: checking coverage gaps
|
||||
|
||||
Results consolidated in ~2 minutes..."
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Mode Comparison
|
||||
|
||||
| Mode | Verbosity | Focus | Output Style |
|
||||
|------|-----------|-------|-------------|
|
||||
| Default | Medium | Balanced | Explanation + code |
|
||||
| Brainstorm | High | Exploration | Questions + options |
|
||||
| Implementation | Low | Execution | Code-first |
|
||||
| Review | Medium | Quality | Issue lists |
|
||||
| Token-Efficient | Minimal | Density | Compressed |
|
||||
| Deep Research | High | Analysis | Reports |
|
||||
| Orchestration | Medium | Coordination | Status + results |
|
||||
|
||||
## Customizing Modes
|
||||
|
||||
Mode files are markdown in `.claude/modes/`. You can edit existing modes or create new ones. See [Creating Agents & Modes](/claudekit/customization/creating-agents-and-modes/) for details.
|
||||
@@ -0,0 +1,108 @@
|
||||
---
|
||||
title: Skills Reference
|
||||
description: All 43 skills in Claude Kit, organized by category.
|
||||
---
|
||||
|
||||
# Skills Reference
|
||||
|
||||
Skills are knowledge modules that auto-trigger based on keywords in your conversation. No commands needed — Claude activates the right skills based on what you're doing.
|
||||
|
||||
## How Skills Work
|
||||
|
||||
Each skill has a trigger description with keywords. When you say something that matches, the skill loads automatically:
|
||||
|
||||
```
|
||||
"fix this bug" → systematic-debugging, root-cause-tracing
|
||||
"plan the feature" → brainstorming, writing-plans
|
||||
"review the code" → requesting-code-review
|
||||
"switch to brainstorm" → mode-switching, brainstorming
|
||||
```
|
||||
|
||||
Skills live in `.claude/skills/` and can be customized or extended.
|
||||
|
||||
---
|
||||
|
||||
## Development
|
||||
|
||||
Skills for languages, frameworks, and application patterns.
|
||||
|
||||
| Skill | Description | Triggers On |
|
||||
|-------|-------------|-------------|
|
||||
| **languages** | Python, TypeScript, JavaScript idioms — type hints, generics, async/await, Pydantic, Zod | Language-specific code patterns |
|
||||
| **frontend** | React components, Next.js App Router, SSR/SSG, shadcn/ui, hooks | React, Next.js, component work |
|
||||
| **frontend-styling** | Tailwind CSS, WCAG accessibility, ARIA, dark mode, responsive | Styling, accessibility |
|
||||
| **backend-frameworks** | FastAPI, Django, NestJS, Express — routing, middleware, DI | API endpoints, server code |
|
||||
| **databases** | PostgreSQL, MongoDB, Redis — schema, queries, indexing, migrations | Database operations |
|
||||
| **state-management** | useState, Zustand, Jotai, TanStack Query, server/form/URL state | State architecture |
|
||||
| **api-client** | axios, fetch, httpx — interceptors, retry logic, type-safe clients | HTTP requests, API integration |
|
||||
| **openapi** | OpenAPI 3.1 design, error contracts, pagination, code-gen | API specification |
|
||||
|
||||
## Infrastructure
|
||||
|
||||
Skills for deployment, caching, logging, and operational concerns.
|
||||
|
||||
| Skill | Description | Triggers On |
|
||||
|-------|-------------|-------------|
|
||||
| **devops** | Docker, GitHub Actions, Cloudflare Workers, multi-stage builds | Containers, CI/CD, deployment |
|
||||
| **caching** | Redis, memoization, HTTP cache headers, CDN, TTL policies | Cache strategy |
|
||||
| **logging** | Logger setup, log levels, correlation IDs, sensitive data redaction | Logging, observability |
|
||||
| **error-handling** | Try/catch, custom errors, retry logic, React error boundaries | Exception handling |
|
||||
| **background-jobs** | Celery, BullMQ, task queues, cron jobs, async processing | Background tasks, workers |
|
||||
| **authentication** | JWT, OAuth2, sessions, RBAC, password hashing, MFA | Login, auth, permissions |
|
||||
| **performance-optimization** | Profiling, N+1 queries, bundle size, memory leaks, benchmarks | "slow", "optimize", "profiling" |
|
||||
|
||||
## Quality
|
||||
|
||||
Skills for testing, security, and code verification.
|
||||
|
||||
| Skill | Description | Triggers On |
|
||||
|-------|-------------|-------------|
|
||||
| **testing** | pytest, Vitest, Jest — fixtures, mocking, coverage, config | Writing/debugging tests |
|
||||
| **test-driven-development** | Strict red-green-refactor — no production code without failing test | "implement", "add feature", "build" |
|
||||
| **testing-anti-patterns** | Detecting unreliable tests, heavy mocking, false positives | "flaky test", "mock", test review |
|
||||
| **playwright** | E2E tests, page objects, visual regression, cross-browser | End-to-end testing |
|
||||
| **owasp** | OWASP Top 10, XSS, SQL injection, CSRF, dependency scanning | Security review, user input |
|
||||
| **defense-in-depth** | Multi-layer validation, preventing single-point bypass | Data integrity bugs |
|
||||
| **verification-before-completion** | Mandatory evidence before completion claims | "done", "fixed", "tests pass" |
|
||||
|
||||
## Debugging
|
||||
|
||||
Skills for investigating and resolving issues.
|
||||
|
||||
| Skill | Description | Triggers On |
|
||||
|-------|-------------|-------------|
|
||||
| **systematic-debugging** | Four-phase investigation: observe, hypothesize, test, fix | "bug", "error", "broken", stack traces |
|
||||
| **root-cause-tracing** | Tracing bugs that manifest far from their origin | Deep bugs, data corruption |
|
||||
| **sequential-thinking** | Step-by-step reasoning with confidence tracking | Complex decisions, analysis |
|
||||
| **condition-based-waiting** | Polling CI pipelines, deployments, long-running processes | "wait for", "check status" |
|
||||
|
||||
## Workflow
|
||||
|
||||
Skills for development process and session management.
|
||||
|
||||
| Skill | Description | Triggers On |
|
||||
|-------|-------------|-------------|
|
||||
| **feature-workflow** | End-to-end: requirements → planning → implementation → review | "feature", "implement end-to-end" |
|
||||
| **brainstorming** | Interactive design with one question at a time | "brainstorm", "design", "explore" |
|
||||
| **writing-plans** | Detailed task breakdown with exact code and file paths | "plan", "break down", "task list" |
|
||||
| **executing-plans** | Subagent-driven execution with review gates | "execute the plan", "run the plan" |
|
||||
| **git-workflows** | Conventional commits, PRs, changelogs, release notes | "commit", "PR", "ship", "changelog" |
|
||||
| **documentation** | Docstrings, JSDoc, README, API docs, tech specs | "document", "docstring", "README" |
|
||||
| **refactoring** | Improving code structure without behavior change | "refactor", "clean up", "simplify" |
|
||||
| **mode-switching** | Switching behavioral modes for the session | "mode", "switch to brainstorm" |
|
||||
| **session-management** | Checkpoints, project indexing, context loading | "checkpoint", "index", "status" |
|
||||
| **writing-concisely** | Token optimization, compressed output, 30-70% savings | "be concise", "code only" |
|
||||
|
||||
## Collaboration
|
||||
|
||||
Skills for multi-agent workflows and team processes.
|
||||
|
||||
| Skill | Description | Triggers On |
|
||||
|-------|-------------|-------------|
|
||||
| **dispatching-parallel-agents** | Launching parallel agents for independent tasks | 3+ independent failures/tasks |
|
||||
| **subagent-driven-development** | Parallel task execution via Agent tool | "use subagents", "dispatch agents" |
|
||||
| **using-git-worktrees** | Isolated branch work, parallel development | "worktree", "isolated branch" |
|
||||
| **requesting-code-review** | Preparing code for review with clear context | Before PRs, before merging |
|
||||
| **receiving-code-review** | Processing review feedback systematically | Review comments, PR feedback |
|
||||
| **finishing-a-development-branch** | Branch completion: verify, review, merge/PR options | "ship it", "ready to merge" |
|
||||
| **writing-skills** | Creating and editing skills for this kit | "create a skill", "new skill" |
|
||||
@@ -1,245 +0,0 @@
|
||||
---
|
||||
title: Django
|
||||
description: Django ORM, views, and REST framework patterns
|
||||
---
|
||||
|
||||
The Django skill provides expertise in Django web framework including ORM, class-based views, and Django REST Framework.
|
||||
|
||||
## When Activated
|
||||
|
||||
- Python web applications
|
||||
- Admin interfaces
|
||||
- Django REST Framework APIs
|
||||
- Working with Django projects
|
||||
|
||||
## Core Patterns
|
||||
|
||||
### Models
|
||||
|
||||
```python
|
||||
from django.db import models
|
||||
|
||||
class User(models.Model):
|
||||
email = models.EmailField(unique=True)
|
||||
name = models.CharField(max_length=100)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ['-created_at']
|
||||
indexes = [
|
||||
models.Index(fields=['email']),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return self.email
|
||||
```
|
||||
|
||||
### Views (Class-based)
|
||||
|
||||
```python
|
||||
from django.views.generic import ListView, DetailView, CreateView
|
||||
|
||||
class UserListView(ListView):
|
||||
model = User
|
||||
template_name = 'users/list.html'
|
||||
context_object_name = 'users'
|
||||
paginate_by = 20
|
||||
|
||||
class UserDetailView(DetailView):
|
||||
model = User
|
||||
template_name = 'users/detail.html'
|
||||
context_object_name = 'user'
|
||||
|
||||
class UserCreateView(CreateView):
|
||||
model = User
|
||||
fields = ['email', 'name']
|
||||
template_name = 'users/create.html'
|
||||
success_url = '/users/'
|
||||
```
|
||||
|
||||
### Django REST Framework
|
||||
|
||||
```python
|
||||
from rest_framework import serializers, viewsets
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['id', 'email', 'name', 'created_at']
|
||||
read_only_fields = ['created_at']
|
||||
|
||||
class UserViewSet(viewsets.ModelViewSet):
|
||||
queryset = User.objects.all()
|
||||
serializer_class = UserSerializer
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
def activate(self, request, pk=None):
|
||||
user = self.get_object()
|
||||
user.is_active = True
|
||||
user.save()
|
||||
return Response({'status': 'activated'})
|
||||
```
|
||||
|
||||
### URLs
|
||||
|
||||
```python
|
||||
from django.urls import path, include
|
||||
from rest_framework.routers import DefaultRouter
|
||||
|
||||
router = DefaultRouter()
|
||||
router.register('users', UserViewSet)
|
||||
|
||||
urlpatterns = [
|
||||
path('api/', include(router.urls)),
|
||||
path('users/', UserListView.as_view(), name='user-list'),
|
||||
path('users/<int:pk>/', UserDetailView.as_view(), name='user-detail'),
|
||||
]
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use class-based views for standard CRUD**
|
||||
2. **Define model methods for business logic**
|
||||
3. **Use serializers for validation**
|
||||
4. **Add proper permissions**
|
||||
5. **Use select_related/prefetch_related for queries**
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
### N+1 Queries
|
||||
|
||||
```python
|
||||
# ❌ BAD: N+1 query problem
|
||||
users = User.objects.all()
|
||||
for user in users:
|
||||
print(user.profile.bio) # Separate query for each user
|
||||
|
||||
# ✅ GOOD: Use select_related
|
||||
users = User.objects.select_related('profile').all()
|
||||
for user in users:
|
||||
print(user.profile.bio) # Single query
|
||||
```
|
||||
|
||||
### Missing Migrations
|
||||
|
||||
```python
|
||||
# ❌ BAD: Forgetting migrations
|
||||
# After changing models, forgetting to:
|
||||
python manage.py makemigrations
|
||||
python manage.py migrate
|
||||
|
||||
# ✅ GOOD: Always create and run migrations
|
||||
python manage.py makemigrations
|
||||
python manage.py migrate
|
||||
```
|
||||
|
||||
### No Validation
|
||||
|
||||
```python
|
||||
# ❌ BAD: Direct model creation
|
||||
user = User.objects.create(email=request.POST['email'])
|
||||
|
||||
# ✅ GOOD: Use serializer for validation
|
||||
serializer = UserSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
user = serializer.save()
|
||||
else:
|
||||
return Response(serializer.errors, status=400)
|
||||
```
|
||||
|
||||
## Advanced Patterns
|
||||
|
||||
### Custom Managers
|
||||
|
||||
```python
|
||||
class ActiveUserManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(is_active=True)
|
||||
|
||||
class User(models.Model):
|
||||
# ...
|
||||
objects = models.Manager()
|
||||
active = ActiveUserManager()
|
||||
|
||||
# Usage
|
||||
all_users = User.objects.all()
|
||||
active_users = User.active.all()
|
||||
```
|
||||
|
||||
### Signals
|
||||
|
||||
```python
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def create_user_profile(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
Profile.objects.create(user=instance)
|
||||
```
|
||||
|
||||
### Permissions
|
||||
|
||||
```python
|
||||
from rest_framework import permissions
|
||||
|
||||
class IsOwnerOrReadOnly(permissions.BasePermission):
|
||||
def has_object_permission(self, request, view, obj):
|
||||
if request.method in permissions.SAFE_METHODS:
|
||||
return True
|
||||
return obj.owner == request.user
|
||||
|
||||
class UserViewSet(viewsets.ModelViewSet):
|
||||
permission_classes = [IsOwnerOrReadOnly]
|
||||
# ...
|
||||
```
|
||||
|
||||
### Pagination
|
||||
|
||||
```python
|
||||
from rest_framework.pagination import PageNumberPagination
|
||||
|
||||
class StandardResultsSetPagination(PageNumberPagination):
|
||||
page_size = 20
|
||||
page_size_query_param = 'page_size'
|
||||
max_page_size = 100
|
||||
|
||||
class UserViewSet(viewsets.ModelViewSet):
|
||||
pagination_class = StandardResultsSetPagination
|
||||
# ...
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
```python
|
||||
from django.test import TestCase
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
class UserModelTest(TestCase):
|
||||
def test_create_user(self):
|
||||
user = User.objects.create(
|
||||
email='test@example.com',
|
||||
name='Test User'
|
||||
)
|
||||
self.assertEqual(user.email, 'test@example.com')
|
||||
|
||||
class UserAPITest(APITestCase):
|
||||
def test_list_users(self):
|
||||
response = self.client.get('/api/users/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_create_user(self):
|
||||
data = {'email': 'new@example.com', 'name': 'New User'}
|
||||
response = self.client.post('/api/users/', data)
|
||||
self.assertEqual(response.status_code, 201)
|
||||
```
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [Python](/claudekit/skills/languages/python) - Python language
|
||||
- [PostgreSQL](/claudekit/skills/databases/postgresql) - Database
|
||||
- [pytest](/claudekit/skills/testing/pytest) - Testing
|
||||
- [OpenAPI](/claudekit/skills/api/openapi) - API documentation
|
||||
@@ -1,283 +0,0 @@
|
||||
---
|
||||
title: FastAPI
|
||||
description: FastAPI async patterns, Pydantic validation, and OpenAPI documentation
|
||||
---
|
||||
|
||||
The FastAPI skill provides expertise in building REST APIs with Python, async patterns, Pydantic validation, and automatic OpenAPI documentation.
|
||||
|
||||
## When Activated
|
||||
|
||||
- Building REST APIs with Python
|
||||
- Async web applications
|
||||
- OpenAPI/Swagger documentation needed
|
||||
- Working with FastAPI framework
|
||||
|
||||
## Core Patterns
|
||||
|
||||
### Route Definition
|
||||
|
||||
```python
|
||||
from fastapi import FastAPI, HTTPException, Depends
|
||||
from pydantic import BaseModel
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
class UserCreate(BaseModel):
|
||||
email: str
|
||||
name: str
|
||||
|
||||
class UserResponse(BaseModel):
|
||||
id: int
|
||||
email: str
|
||||
name: str
|
||||
|
||||
@app.post("/users", response_model=UserResponse, status_code=201)
|
||||
async def create_user(user: UserCreate):
|
||||
# Create user logic
|
||||
return UserResponse(id=1, **user.model_dump())
|
||||
|
||||
@app.get("/users/{user_id}", response_model=UserResponse)
|
||||
async def get_user(user_id: int):
|
||||
user = await get_user_by_id(user_id)
|
||||
if not user:
|
||||
raise HTTPException(status_code=404, detail="User not found")
|
||||
return user
|
||||
```
|
||||
|
||||
### Dependency Injection
|
||||
|
||||
```python
|
||||
from fastapi import Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
async def get_db() -> AsyncGenerator[AsyncSession, None]:
|
||||
async with async_session_maker() as session:
|
||||
yield session
|
||||
|
||||
@app.get("/users")
|
||||
async def list_users(db: AsyncSession = Depends(get_db)):
|
||||
result = await db.execute(select(User))
|
||||
return result.scalars().all()
|
||||
```
|
||||
|
||||
### Router Organization
|
||||
|
||||
```python
|
||||
from fastapi import APIRouter
|
||||
|
||||
router = APIRouter(prefix="/users", tags=["users"])
|
||||
|
||||
@router.get("/")
|
||||
async def list_users():
|
||||
pass
|
||||
|
||||
@router.post("/")
|
||||
async def create_user(user: UserCreate):
|
||||
pass
|
||||
|
||||
# In main.py
|
||||
app.include_router(router)
|
||||
```
|
||||
|
||||
### Request Validation
|
||||
|
||||
```python
|
||||
from pydantic import BaseModel, EmailStr, Field
|
||||
|
||||
class UserCreate(BaseModel):
|
||||
email: EmailStr
|
||||
name: str = Field(min_length=1, max_length=100)
|
||||
age: int = Field(ge=0, le=150)
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"email": "user@example.com",
|
||||
"name": "John Doe",
|
||||
"age": 30
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Error Handling
|
||||
|
||||
```python
|
||||
from fastapi import HTTPException, status
|
||||
from fastapi.responses import JSONResponse
|
||||
|
||||
class UserNotFoundError(Exception):
|
||||
pass
|
||||
|
||||
@app.exception_handler(UserNotFoundError)
|
||||
async def user_not_found_handler(request, exc):
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
content={"detail": "User not found"}
|
||||
)
|
||||
|
||||
@app.get("/users/{user_id}")
|
||||
async def get_user(user_id: int):
|
||||
user = await find_user(user_id)
|
||||
if not user:
|
||||
raise UserNotFoundError()
|
||||
return user
|
||||
```
|
||||
|
||||
### Background Tasks
|
||||
|
||||
```python
|
||||
from fastapi import BackgroundTasks
|
||||
|
||||
def send_email(email: str, message: str):
|
||||
# Send email logic
|
||||
pass
|
||||
|
||||
@app.post("/users")
|
||||
async def create_user(
|
||||
user: UserCreate,
|
||||
background_tasks: BackgroundTasks
|
||||
):
|
||||
new_user = await create_user_in_db(user)
|
||||
background_tasks.add_task(send_email, user.email, "Welcome!")
|
||||
return new_user
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use Pydantic models for request/response validation**
|
||||
2. **Organize routes with APIRouter**
|
||||
3. **Use dependency injection for services**
|
||||
4. **Return proper HTTP status codes**
|
||||
5. **Add OpenAPI descriptions and examples**
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
### Blocking I/O in Async
|
||||
|
||||
```python
|
||||
# ❌ BAD: Blocking call in async function
|
||||
@app.get("/users")
|
||||
async def list_users():
|
||||
users = blocking_db_call() # Blocks event loop
|
||||
return users
|
||||
|
||||
# ✅ GOOD: Use async libraries
|
||||
@app.get("/users")
|
||||
async def list_users(db: AsyncSession = Depends(get_db)):
|
||||
result = await db.execute(select(User))
|
||||
return result.scalars().all()
|
||||
```
|
||||
|
||||
### Missing Response Models
|
||||
|
||||
```python
|
||||
# ❌ BAD: No response model
|
||||
@app.get("/users/{user_id}")
|
||||
async def get_user(user_id: int):
|
||||
return await get_user_by_id(user_id)
|
||||
|
||||
# ✅ GOOD: Define response model
|
||||
@app.get("/users/{user_id}", response_model=UserResponse)
|
||||
async def get_user(user_id: int):
|
||||
return await get_user_by_id(user_id)
|
||||
```
|
||||
|
||||
### Not Using HTTPException
|
||||
|
||||
```python
|
||||
# ❌ BAD: Returning error dict
|
||||
@app.get("/users/{user_id}")
|
||||
async def get_user(user_id: int):
|
||||
user = await find_user(user_id)
|
||||
if not user:
|
||||
return {"error": "Not found"} # Returns 200!
|
||||
return user
|
||||
|
||||
# ✅ GOOD: Raise HTTPException
|
||||
@app.get("/users/{user_id}")
|
||||
async def get_user(user_id: int):
|
||||
user = await find_user(user_id)
|
||||
if not user:
|
||||
raise HTTPException(status_code=404, detail="User not found")
|
||||
return user
|
||||
```
|
||||
|
||||
## Advanced Patterns
|
||||
|
||||
### Middleware
|
||||
|
||||
```python
|
||||
from fastapi import Request
|
||||
import time
|
||||
|
||||
@app.middleware("http")
|
||||
async def add_process_time_header(request: Request, call_next):
|
||||
start_time = time.time()
|
||||
response = await call_next(request)
|
||||
process_time = time.time() - start_time
|
||||
response.headers["X-Process-Time"] = str(process_time)
|
||||
return response
|
||||
```
|
||||
|
||||
### Authentication
|
||||
|
||||
```python
|
||||
from fastapi import Security, HTTPException
|
||||
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
|
||||
|
||||
security = HTTPBearer()
|
||||
|
||||
async def get_current_user(
|
||||
credentials: HTTPAuthorizationCredentials = Security(security)
|
||||
) -> User:
|
||||
token = credentials.credentials
|
||||
user = await verify_token(token)
|
||||
if not user:
|
||||
raise HTTPException(status_code=401, detail="Invalid token")
|
||||
return user
|
||||
|
||||
@app.get("/profile")
|
||||
async def get_profile(current_user: User = Depends(get_current_user)):
|
||||
return current_user
|
||||
```
|
||||
|
||||
### CORS
|
||||
|
||||
```python
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["https://example.com"],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
```python
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
def test_create_user():
|
||||
response = client.post(
|
||||
"/users",
|
||||
json={"email": "test@example.com", "name": "Test"}
|
||||
)
|
||||
assert response.status_code == 201
|
||||
assert response.json()["email"] == "test@example.com"
|
||||
|
||||
def test_get_nonexistent_user():
|
||||
response = client.get("/users/999")
|
||||
assert response.status_code == 404
|
||||
```
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [Python](/claudekit/skills/languages/python) - Python language
|
||||
- [Pydantic](/claudekit/skills/languages/python) - Data validation
|
||||
- [PostgreSQL](/claudekit/skills/databases/postgresql) - Database
|
||||
- [pytest](/claudekit/skills/testing/pytest) - Testing
|
||||
@@ -1,404 +0,0 @@
|
||||
---
|
||||
title: Next.js
|
||||
description: Next.js App Router, Server Components, and full-stack patterns
|
||||
---
|
||||
|
||||
The Next.js skill provides expertise in Next.js with App Router, Server Components, Server Actions, and full-stack development patterns.
|
||||
|
||||
## When Activated
|
||||
|
||||
- React applications with SSR/SSG
|
||||
- Full-stack applications
|
||||
- App Router patterns
|
||||
- Working in `app/` directory
|
||||
|
||||
## Core Patterns
|
||||
|
||||
### App Router Structure
|
||||
|
||||
```
|
||||
app/
|
||||
├── layout.tsx # Root layout
|
||||
├── page.tsx # Home page
|
||||
├── loading.tsx # Loading UI
|
||||
├── error.tsx # Error UI
|
||||
├── api/
|
||||
│ └── users/
|
||||
│ └── route.ts # API route
|
||||
└── users/
|
||||
├── page.tsx # Users page
|
||||
└── [id]/
|
||||
└── page.tsx # User detail
|
||||
```
|
||||
|
||||
### Server Components
|
||||
|
||||
```tsx
|
||||
// app/users/page.tsx - Server Component (default)
|
||||
async function UsersPage() {
|
||||
const users = await db.users.findMany();
|
||||
|
||||
return (
|
||||
<ul>
|
||||
{users.map(user => (
|
||||
<li key={user.id}>{user.name}</li>
|
||||
))}
|
||||
</ul>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### Client Components
|
||||
|
||||
```tsx
|
||||
'use client';
|
||||
|
||||
import { useState } from 'react';
|
||||
|
||||
export function Counter() {
|
||||
const [count, setCount] = useState(0);
|
||||
|
||||
return (
|
||||
<button onClick={() => setCount(c => c + 1)}>
|
||||
Count: {count}
|
||||
</button>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### API Routes
|
||||
|
||||
```typescript
|
||||
// app/api/users/route.ts
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
|
||||
export async function GET() {
|
||||
const users = await db.users.findMany();
|
||||
return NextResponse.json(users);
|
||||
}
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
const data = await request.json();
|
||||
const user = await db.users.create({ data });
|
||||
return NextResponse.json(user, { status: 201 });
|
||||
}
|
||||
```
|
||||
|
||||
### Server Actions
|
||||
|
||||
```tsx
|
||||
// app/actions.ts
|
||||
'use server';
|
||||
|
||||
export async function createUser(formData: FormData) {
|
||||
const name = formData.get('name') as string;
|
||||
await db.users.create({ data: { name } });
|
||||
revalidatePath('/users');
|
||||
}
|
||||
|
||||
// app/users/new/page.tsx
|
||||
import { createUser } from '@/app/actions';
|
||||
|
||||
export default function NewUserPage() {
|
||||
return (
|
||||
<form action={createUser}>
|
||||
<input name="name" required />
|
||||
<button type="submit">Create</button>
|
||||
</form>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### Dynamic Routes
|
||||
|
||||
```tsx
|
||||
// app/users/[id]/page.tsx
|
||||
interface PageProps {
|
||||
params: { id: string };
|
||||
}
|
||||
|
||||
export default async function UserPage({ params }: PageProps) {
|
||||
const user = await db.users.findUnique({
|
||||
where: { id: params.id }
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
notFound();
|
||||
}
|
||||
|
||||
return <div>{user.name}</div>;
|
||||
}
|
||||
```
|
||||
|
||||
### Layouts
|
||||
|
||||
```tsx
|
||||
// app/layout.tsx
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<html lang="en">
|
||||
<body>
|
||||
<nav>{/* Navigation */}</nav>
|
||||
<main>{children}</main>
|
||||
<footer>{/* Footer */}</footer>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use Server Components by default**
|
||||
2. **Add 'use client' only when needed**
|
||||
3. **Colocate data fetching with components**
|
||||
4. **Use loading.tsx for suspense boundaries**
|
||||
5. **Implement proper error boundaries**
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
### Using Hooks in Server Components
|
||||
|
||||
```tsx
|
||||
// ❌ BAD: Hooks in Server Component
|
||||
export default async function Page() {
|
||||
const [state, setState] = useState(0); // Error!
|
||||
return <div>{state}</div>;
|
||||
}
|
||||
|
||||
// ✅ GOOD: Mark as Client Component
|
||||
'use client';
|
||||
|
||||
export default function Page() {
|
||||
const [state, setState] = useState(0);
|
||||
return <div>{state}</div>;
|
||||
}
|
||||
```
|
||||
|
||||
### Large Client Bundles
|
||||
|
||||
```tsx
|
||||
// ❌ BAD: Entire page as Client Component
|
||||
'use client';
|
||||
|
||||
export default function Page() {
|
||||
const [count, setCount] = useState(0);
|
||||
const data = await fetchData(); // Can't use await in Client Component
|
||||
|
||||
return (
|
||||
<div>
|
||||
<HeavyComponent />
|
||||
<button onClick={() => setCount(c => c + 1)}>{count}</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// ✅ GOOD: Extract interactive parts only
|
||||
export default async function Page() {
|
||||
const data = await fetchData(); // Server Component can await
|
||||
|
||||
return (
|
||||
<div>
|
||||
<HeavyComponent data={data} /> {/* Server Component */}
|
||||
<Counter /> {/* Small Client Component */}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// Counter.tsx
|
||||
'use client';
|
||||
export function Counter() {
|
||||
const [count, setCount] = useState(0);
|
||||
return <button onClick={() => setCount(c => c + 1)}>{count}</button>;
|
||||
}
|
||||
```
|
||||
|
||||
### Missing Loading States
|
||||
|
||||
```tsx
|
||||
// ❌ BAD: No loading state
|
||||
export default async function Page() {
|
||||
const data = await slowFetch();
|
||||
return <div>{data}</div>;
|
||||
}
|
||||
|
||||
// ✅ GOOD: Add loading.tsx
|
||||
// app/page.tsx
|
||||
export default async function Page() {
|
||||
const data = await slowFetch();
|
||||
return <div>{data}</div>;
|
||||
}
|
||||
|
||||
// app/loading.tsx
|
||||
export default function Loading() {
|
||||
return <div>Loading...</div>;
|
||||
}
|
||||
```
|
||||
|
||||
### Not Revalidating After Mutations
|
||||
|
||||
```tsx
|
||||
// ❌ BAD: No revalidation
|
||||
'use server';
|
||||
export async function createUser(data: FormData) {
|
||||
await db.users.create({ data: getData(data) });
|
||||
// Page still shows old data
|
||||
}
|
||||
|
||||
// ✅ GOOD: Revalidate path
|
||||
'use server';
|
||||
export async function createUser(data: FormData) {
|
||||
await db.users.create({ data: getData(data) });
|
||||
revalidatePath('/users');
|
||||
redirect('/users');
|
||||
}
|
||||
```
|
||||
|
||||
## Data Fetching Patterns
|
||||
|
||||
### Parallel Data Fetching
|
||||
|
||||
```tsx
|
||||
export default async function Page() {
|
||||
// Fetch in parallel
|
||||
const [users, posts] = await Promise.all([
|
||||
fetchUsers(),
|
||||
fetchPosts(),
|
||||
]);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<UserList users={users} />
|
||||
<PostList posts={posts} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### Sequential Data Fetching
|
||||
|
||||
```tsx
|
||||
export default async function UserPage({ params }: { params: { id: string } }) {
|
||||
const user = await fetchUser(params.id);
|
||||
const posts = await fetchUserPosts(user.id); // Depends on user
|
||||
|
||||
return (
|
||||
<div>
|
||||
<h1>{user.name}</h1>
|
||||
<PostList posts={posts} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### Streaming with Suspense
|
||||
|
||||
```tsx
|
||||
import { Suspense } from 'react';
|
||||
|
||||
export default function Page() {
|
||||
return (
|
||||
<div>
|
||||
<h1>Dashboard</h1>
|
||||
<Suspense fallback={<Skeleton />}>
|
||||
<SlowComponent />
|
||||
</Suspense>
|
||||
<FastComponent />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
async function SlowComponent() {
|
||||
const data = await slowFetch();
|
||||
return <div>{data}</div>;
|
||||
}
|
||||
```
|
||||
|
||||
## Caching and Revalidation
|
||||
|
||||
### Time-Based Revalidation
|
||||
|
||||
```tsx
|
||||
// Revalidate every hour
|
||||
export const revalidate = 3600;
|
||||
|
||||
export default async function Page() {
|
||||
const data = await fetch('https://api.example.com/data', {
|
||||
next: { revalidate: 3600 }
|
||||
});
|
||||
return <div>{JSON.stringify(data)}</div>;
|
||||
}
|
||||
```
|
||||
|
||||
### On-Demand Revalidation
|
||||
|
||||
```tsx
|
||||
// app/actions.ts
|
||||
'use server';
|
||||
|
||||
import { revalidatePath, revalidateTag } from 'next/cache';
|
||||
|
||||
export async function createPost(data: FormData) {
|
||||
await db.posts.create({ data: getData(data) });
|
||||
revalidatePath('/posts');
|
||||
// or
|
||||
revalidateTag('posts');
|
||||
}
|
||||
```
|
||||
|
||||
## Metadata
|
||||
|
||||
```tsx
|
||||
import { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'User Profile',
|
||||
description: 'View user profile information',
|
||||
};
|
||||
|
||||
export default function Page() {
|
||||
return <div>Profile</div>;
|
||||
}
|
||||
|
||||
// Dynamic metadata
|
||||
export async function generateMetadata({ params }: PageProps): Promise<Metadata> {
|
||||
const user = await fetchUser(params.id);
|
||||
|
||||
return {
|
||||
title: `${user.name}'s Profile`,
|
||||
description: `Profile page for ${user.name}`,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
### With React
|
||||
|
||||
See [React skill](/claudekit/skills/frameworks/react) for component patterns and hooks.
|
||||
|
||||
### With TypeScript
|
||||
|
||||
Full TypeScript integration:
|
||||
```tsx
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
|
||||
export async function GET(
|
||||
request: NextRequest,
|
||||
{ params }: { params: { id: string } }
|
||||
): Promise<NextResponse> {
|
||||
const user = await fetchUser(params.id);
|
||||
return NextResponse.json(user);
|
||||
}
|
||||
```
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [React](/claudekit/skills/frameworks/react) - Component patterns
|
||||
- [TypeScript](/claudekit/skills/languages/typescript) - Type safety
|
||||
- [Tailwind CSS](/claudekit/skills/frontend/tailwind) - Styling
|
||||
- [PostgreSQL](/claudekit/skills/databases/postgresql) - Database
|
||||
@@ -1,287 +0,0 @@
|
||||
---
|
||||
title: React
|
||||
description: React component patterns, hooks, and state management
|
||||
---
|
||||
|
||||
The React skill provides expertise in React component patterns, hooks, context, and modern React best practices.
|
||||
|
||||
## When Activated
|
||||
|
||||
- Building React components
|
||||
- Using React hooks
|
||||
- Component state management
|
||||
- Working with `.jsx` or `.tsx` files containing React
|
||||
|
||||
## Core Patterns
|
||||
|
||||
### Functional Components
|
||||
|
||||
```tsx
|
||||
interface UserCardProps {
|
||||
user: User;
|
||||
onSelect?: (user: User) => void;
|
||||
}
|
||||
|
||||
export function UserCard({ user, onSelect }: UserCardProps) {
|
||||
return (
|
||||
<div className="card" onClick={() => onSelect?.(user)}>
|
||||
<h3>{user.name}</h3>
|
||||
<p>{user.email}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### Hooks
|
||||
|
||||
```tsx
|
||||
// useState
|
||||
const [count, setCount] = useState(0);
|
||||
|
||||
// useEffect
|
||||
useEffect(() => {
|
||||
const subscription = subscribe();
|
||||
return () => subscription.unsubscribe();
|
||||
}, [dependency]);
|
||||
|
||||
// useMemo
|
||||
const expensive = useMemo(() => compute(data), [data]);
|
||||
|
||||
// useCallback
|
||||
const handleClick = useCallback(() => {
|
||||
doSomething(id);
|
||||
}, [id]);
|
||||
```
|
||||
|
||||
### Custom Hooks
|
||||
|
||||
```tsx
|
||||
function useUser(id: string) {
|
||||
const [user, setUser] = useState<User | null>(null);
|
||||
const [loading, setLoading] = useState(true);
|
||||
|
||||
useEffect(() => {
|
||||
setLoading(true);
|
||||
fetchUser(id)
|
||||
.then(setUser)
|
||||
.finally(() => setLoading(false));
|
||||
}, [id]);
|
||||
|
||||
return { user, loading };
|
||||
}
|
||||
|
||||
// Usage
|
||||
function UserProfile({ userId }: { userId: string }) {
|
||||
const { user, loading } = useUser(userId);
|
||||
|
||||
if (loading) return <div>Loading...</div>;
|
||||
if (!user) return <div>User not found</div>;
|
||||
|
||||
return <div>{user.name}</div>;
|
||||
}
|
||||
```
|
||||
|
||||
### Context Pattern
|
||||
|
||||
```tsx
|
||||
const UserContext = createContext<User | null>(null);
|
||||
|
||||
export function UserProvider({ children }: { children: ReactNode }) {
|
||||
const [user, setUser] = useState<User | null>(null);
|
||||
|
||||
return (
|
||||
<UserContext.Provider value={user}>
|
||||
{children}
|
||||
</UserContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
export function useUser() {
|
||||
const context = useContext(UserContext);
|
||||
if (!context) throw new Error('useUser must be within UserProvider');
|
||||
return context;
|
||||
}
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Keep components small and focused**
|
||||
2. **Use TypeScript for props**
|
||||
3. **Memoize expensive computations**
|
||||
4. **Clean up effects properly**
|
||||
5. **Lift state up when needed**
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
### Missing Dependencies in Hooks
|
||||
|
||||
```tsx
|
||||
// ❌ BAD: Missing dependency
|
||||
useEffect(() => {
|
||||
fetchData(userId);
|
||||
}, []); // userId not in dependencies
|
||||
|
||||
// ✅ GOOD: All dependencies included
|
||||
useEffect(() => {
|
||||
fetchData(userId);
|
||||
}, [userId]);
|
||||
```
|
||||
|
||||
### State Updates on Unmounted Components
|
||||
|
||||
```tsx
|
||||
// ❌ BAD: No cleanup
|
||||
useEffect(() => {
|
||||
fetchUser(id).then(setUser);
|
||||
}, [id]);
|
||||
|
||||
// ✅ GOOD: Cleanup function
|
||||
useEffect(() => {
|
||||
let cancelled = false;
|
||||
|
||||
fetchUser(id).then(user => {
|
||||
if (!cancelled) setUser(user);
|
||||
});
|
||||
|
||||
return () => {
|
||||
cancelled = true;
|
||||
};
|
||||
}, [id]);
|
||||
```
|
||||
|
||||
### Prop Drilling
|
||||
|
||||
```tsx
|
||||
// ❌ BAD: Passing props through many levels
|
||||
<App>
|
||||
<Layout user={user}>
|
||||
<Header user={user}>
|
||||
<UserMenu user={user} />
|
||||
</Header>
|
||||
</Layout>
|
||||
</App>
|
||||
|
||||
// ✅ GOOD: Use context
|
||||
<UserProvider value={user}>
|
||||
<App>
|
||||
<Layout>
|
||||
<Header>
|
||||
<UserMenu /> {/* Gets user from context */}
|
||||
</Header>
|
||||
</Layout>
|
||||
</App>
|
||||
</UserProvider>
|
||||
```
|
||||
|
||||
### Not Memoizing Callbacks
|
||||
|
||||
```tsx
|
||||
// ❌ BAD: New function every render
|
||||
<Child onUpdate={(data) => handleUpdate(id, data)} />
|
||||
|
||||
// ✅ GOOD: Memoized callback
|
||||
const handleUpdate = useCallback((data) => {
|
||||
updateData(id, data);
|
||||
}, [id]);
|
||||
|
||||
<Child onUpdate={handleUpdate} />
|
||||
```
|
||||
|
||||
## Component Patterns
|
||||
|
||||
### Compound Components
|
||||
|
||||
```tsx
|
||||
function Tabs({ children }: { children: ReactNode }) {
|
||||
const [activeTab, setActiveTab] = useState(0);
|
||||
|
||||
return (
|
||||
<TabsContext.Provider value={{ activeTab, setActiveTab }}>
|
||||
{children}
|
||||
</TabsContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
Tabs.List = function TabsList({ children }: { children: ReactNode }) {
|
||||
return <div className="tabs-list">{children}</div>;
|
||||
};
|
||||
|
||||
Tabs.Tab = function Tab({ index, children }: { index: number; children: ReactNode }) {
|
||||
const { activeTab, setActiveTab } = useTabsContext();
|
||||
return (
|
||||
<button
|
||||
className={activeTab === index ? 'active' : ''}
|
||||
onClick={() => setActiveTab(index)}
|
||||
>
|
||||
{children}
|
||||
</button>
|
||||
);
|
||||
};
|
||||
|
||||
// Usage
|
||||
<Tabs>
|
||||
<Tabs.List>
|
||||
<Tabs.Tab index={0}>Tab 1</Tabs.Tab>
|
||||
<Tabs.Tab index={1}>Tab 2</Tabs.Tab>
|
||||
</Tabs.List>
|
||||
</Tabs>
|
||||
```
|
||||
|
||||
### Render Props
|
||||
|
||||
```tsx
|
||||
interface DataLoaderProps<T> {
|
||||
url: string;
|
||||
children: (data: T | null, loading: boolean) => ReactNode;
|
||||
}
|
||||
|
||||
function DataLoader<T>({ url, children }: DataLoaderProps<T>) {
|
||||
const [data, setData] = useState<T | null>(null);
|
||||
const [loading, setLoading] = useState(true);
|
||||
|
||||
useEffect(() => {
|
||||
fetch(url)
|
||||
.then(res => res.json())
|
||||
.then(setData)
|
||||
.finally(() => setLoading(false));
|
||||
}, [url]);
|
||||
|
||||
return <>{children(data, loading)}</>;
|
||||
}
|
||||
|
||||
// Usage
|
||||
<DataLoader<User> url="/api/user">
|
||||
{(user, loading) => (
|
||||
loading ? <Spinner /> : <UserProfile user={user} />
|
||||
)}
|
||||
</DataLoader>
|
||||
```
|
||||
|
||||
## Integration with Frameworks
|
||||
|
||||
### With Next.js
|
||||
|
||||
See [Next.js skill](/claudekit/skills/frameworks/nextjs) for server components and App Router patterns.
|
||||
|
||||
### With Testing
|
||||
|
||||
```tsx
|
||||
import { render, screen } from '@testing-library/react';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
|
||||
it('should increment count on click', async () => {
|
||||
render(<Counter />);
|
||||
|
||||
const button = screen.getByRole('button', { name: /increment/i });
|
||||
await userEvent.click(button);
|
||||
|
||||
expect(screen.getByText('Count: 1')).toBeInTheDocument();
|
||||
});
|
||||
```
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [TypeScript](/claudekit/skills/languages/typescript) - Type safety
|
||||
- [Next.js](/claudekit/skills/frameworks/nextjs) - Full-stack React
|
||||
- [Tailwind CSS](/claudekit/skills/frontend/tailwind) - Styling
|
||||
- [vitest](/claudekit/skills/testing/vitest) - Testing
|
||||
@@ -1,170 +0,0 @@
|
||||
---
|
||||
title: JavaScript
|
||||
description: Modern JavaScript (ES6+) patterns and best practices
|
||||
---
|
||||
|
||||
The JavaScript skill provides expertise in modern JavaScript (ES6+) for Node.js and browser environments.
|
||||
|
||||
## When Activated
|
||||
|
||||
- Working with JavaScript files (`.js`, `.mjs`)
|
||||
- Browser scripting
|
||||
- Node.js applications without TypeScript
|
||||
|
||||
## Core Patterns
|
||||
|
||||
### Modern Syntax
|
||||
|
||||
```javascript
|
||||
// Destructuring
|
||||
const { name, email } = user;
|
||||
const [first, ...rest] = items;
|
||||
|
||||
// Spread operator
|
||||
const merged = { ...defaults, ...options };
|
||||
const combined = [...array1, ...array2];
|
||||
|
||||
// Template literals
|
||||
const message = `Hello, ${name}!`;
|
||||
|
||||
// Optional chaining and nullish coalescing
|
||||
const city = user?.address?.city ?? 'Unknown';
|
||||
```
|
||||
|
||||
### Async Patterns
|
||||
|
||||
```javascript
|
||||
// Async/await
|
||||
async function fetchData(url) {
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) throw new Error('Fetch failed');
|
||||
return response.json();
|
||||
}
|
||||
|
||||
// Promise.all for parallel
|
||||
const results = await Promise.all([
|
||||
fetchData(url1),
|
||||
fetchData(url2),
|
||||
]);
|
||||
|
||||
// Error handling
|
||||
try {
|
||||
const data = await fetchData(url);
|
||||
} catch (error) {
|
||||
console.error('Failed:', error.message);
|
||||
}
|
||||
```
|
||||
|
||||
### Array Methods
|
||||
|
||||
```javascript
|
||||
// Map, filter, reduce
|
||||
const names = users.map(u => u.name);
|
||||
const active = users.filter(u => u.active);
|
||||
const total = items.reduce((sum, i) => sum + i.price, 0);
|
||||
|
||||
// Find and includes
|
||||
const user = users.find(u => u.id === id);
|
||||
const hasAdmin = users.some(u => u.role === 'admin');
|
||||
```
|
||||
|
||||
### Classes
|
||||
|
||||
```javascript
|
||||
class UserService {
|
||||
#db; // Private field
|
||||
|
||||
constructor(database) {
|
||||
this.#db = database;
|
||||
}
|
||||
|
||||
async findById(id) {
|
||||
return this.#db.users.find(u => u.id === id);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use `const` by default, `let` when needed**
|
||||
2. **Avoid `var` - use block-scoped declarations**
|
||||
3. **Use arrow functions for callbacks**
|
||||
4. **Handle all promise rejections**
|
||||
5. **Use ESLint for consistent style**
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
### Implicit Type Coercion
|
||||
|
||||
```javascript
|
||||
// ❌ BAD: Uses ==
|
||||
if (value == null) { }
|
||||
|
||||
// ✅ GOOD: Uses ===
|
||||
if (value === null || value === undefined) { }
|
||||
// Or better:
|
||||
if (value == null) { } // Only for null/undefined check
|
||||
```
|
||||
|
||||
### Callback Hell
|
||||
|
||||
```javascript
|
||||
// ❌ BAD: Nested callbacks
|
||||
getData(function(a) {
|
||||
getMoreData(a, function(b) {
|
||||
getMoreData(b, function(c) {
|
||||
// ...
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// ✅ GOOD: Async/await
|
||||
const a = await getData();
|
||||
const b = await getMoreData(a);
|
||||
const c = await getMoreData(b);
|
||||
```
|
||||
|
||||
### Mutating Objects
|
||||
|
||||
```javascript
|
||||
// ❌ BAD: Mutates original
|
||||
function addProperty(obj) {
|
||||
obj.newProp = 'value';
|
||||
return obj;
|
||||
}
|
||||
|
||||
// ✅ GOOD: Creates new object
|
||||
function addProperty(obj) {
|
||||
return { ...obj, newProp: 'value' };
|
||||
}
|
||||
```
|
||||
|
||||
### Not Handling Errors
|
||||
|
||||
```javascript
|
||||
// ❌ BAD: Unhandled rejection
|
||||
async function loadData() {
|
||||
const data = await fetch(url);
|
||||
return data.json();
|
||||
}
|
||||
|
||||
// ✅ GOOD: Handle errors
|
||||
async function loadData() {
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP ${response.status}`);
|
||||
}
|
||||
return response.json();
|
||||
} catch (error) {
|
||||
console.error('Load failed:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [TypeScript](/claudekit/skills/languages/typescript) - Typed JavaScript
|
||||
- [React](/claudekit/skills/frameworks/react) - UI components
|
||||
- [Next.js](/claudekit/skills/frameworks/nextjs) - Full-stack framework
|
||||
@@ -1,185 +0,0 @@
|
||||
---
|
||||
title: Python
|
||||
description: Modern Python development with type hints, async, and best practices
|
||||
---
|
||||
|
||||
The Python skill provides expertise in modern Python development including type hints, async patterns, dataclasses, and Pythonic idioms.
|
||||
|
||||
## When Activated
|
||||
|
||||
- Working with Python files (`.py`)
|
||||
- Writing Python scripts or applications
|
||||
- Using Python frameworks (Django, FastAPI, Flask)
|
||||
- Data processing and automation
|
||||
|
||||
## Core Patterns
|
||||
|
||||
### Type Hints
|
||||
|
||||
```python
|
||||
from typing import Optional, List, Dict, Union
|
||||
from collections.abc import Callable
|
||||
|
||||
def process_items(
|
||||
items: List[str],
|
||||
callback: Callable[[str], None],
|
||||
config: Optional[Dict[str, Any]] = None
|
||||
) -> List[str]:
|
||||
"""Process items with optional callback."""
|
||||
return [callback(item) for item in items]
|
||||
```
|
||||
|
||||
### Async/Await
|
||||
|
||||
```python
|
||||
import asyncio
|
||||
from typing import List
|
||||
|
||||
async def fetch_data(url: str) -> dict:
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(url) as response:
|
||||
return await response.json()
|
||||
|
||||
async def fetch_all(urls: List[str]) -> List[dict]:
|
||||
return await asyncio.gather(*[fetch_data(url) for url in urls])
|
||||
```
|
||||
|
||||
### Context Managers
|
||||
|
||||
```python
|
||||
from contextlib import contextmanager
|
||||
|
||||
@contextmanager
|
||||
def managed_resource():
|
||||
resource = acquire_resource()
|
||||
try:
|
||||
yield resource
|
||||
finally:
|
||||
release_resource(resource)
|
||||
|
||||
# Usage
|
||||
with managed_resource() as r:
|
||||
r.do_something()
|
||||
```
|
||||
|
||||
### Dataclasses
|
||||
|
||||
```python
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime
|
||||
|
||||
@dataclass
|
||||
class User:
|
||||
id: int
|
||||
email: str
|
||||
name: str
|
||||
created_at: datetime = field(default_factory=datetime.now)
|
||||
|
||||
def __post_init__(self):
|
||||
self.email = self.email.lower()
|
||||
```
|
||||
|
||||
### Pydantic Models
|
||||
|
||||
```python
|
||||
from pydantic import BaseModel, EmailStr, Field
|
||||
|
||||
class UserCreate(BaseModel):
|
||||
email: EmailStr
|
||||
name: str = Field(min_length=1, max_length=100)
|
||||
password: str = Field(min_length=8)
|
||||
|
||||
class Config:
|
||||
str_strip_whitespace = True
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Use type hints for all public functions**
|
||||
2. **Use dataclasses or Pydantic for data models**
|
||||
3. **Prefer context managers for resource management**
|
||||
4. **Use async for I/O-bound operations**
|
||||
5. **Follow PEP 8 style guidelines**
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
### Mutable Default Arguments
|
||||
|
||||
```python
|
||||
# ❌ BAD: Mutable default
|
||||
def add_item(item, items=[]):
|
||||
items.append(item)
|
||||
return items
|
||||
|
||||
# ✅ GOOD: Use None and initialize
|
||||
def add_item(item, items=None):
|
||||
if items is None:
|
||||
items = []
|
||||
items.append(item)
|
||||
return items
|
||||
```
|
||||
|
||||
### Not Closing Resources
|
||||
|
||||
```python
|
||||
# ❌ BAD: Manual resource management
|
||||
file = open('data.txt')
|
||||
data = file.read()
|
||||
file.close()
|
||||
|
||||
# ✅ GOOD: Use with statement
|
||||
with open('data.txt') as file:
|
||||
data = file.read()
|
||||
```
|
||||
|
||||
### Blocking in Async
|
||||
|
||||
```python
|
||||
# ❌ BAD: Blocking call in async function
|
||||
async def process():
|
||||
result = expensive_cpu_work() # Blocks event loop
|
||||
return result
|
||||
|
||||
# ✅ GOOD: Run in thread pool
|
||||
async def process():
|
||||
loop = asyncio.get_event_loop()
|
||||
result = await loop.run_in_executor(None, expensive_cpu_work)
|
||||
return result
|
||||
```
|
||||
|
||||
### Catching Bare Exceptions
|
||||
|
||||
```python
|
||||
# ❌ BAD: Catching everything
|
||||
try:
|
||||
risky_operation()
|
||||
except:
|
||||
handle_error()
|
||||
|
||||
# ✅ GOOD: Specific exceptions
|
||||
try:
|
||||
risky_operation()
|
||||
except (ValueError, TypeError) as e:
|
||||
handle_error(e)
|
||||
```
|
||||
|
||||
## Integration with Frameworks
|
||||
|
||||
### With FastAPI
|
||||
|
||||
See [FastAPI skill](/claudekit/skills/frameworks/fastapi) for API development patterns.
|
||||
|
||||
### With Django
|
||||
|
||||
See [Django skill](/claudekit/skills/frameworks/django) for web application patterns.
|
||||
|
||||
### With pytest
|
||||
|
||||
See pytest skill for testing patterns.
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [FastAPI](/claudekit/skills/frameworks/fastapi) - REST API development
|
||||
- [Django](/claudekit/skills/frameworks/django) - Web applications
|
||||
- [pytest](/claudekit/skills/testing/pytest) - Testing framework
|
||||
- [PostgreSQL](/claudekit/skills/databases/postgresql) - Database integration
|
||||
@@ -1,214 +0,0 @@
|
||||
---
|
||||
title: TypeScript
|
||||
description: TypeScript development with strict typing and modern patterns
|
||||
---
|
||||
|
||||
The TypeScript skill provides expertise in strict typing, advanced type utilities, and modern TypeScript patterns.
|
||||
|
||||
## When Activated
|
||||
|
||||
- Working with TypeScript files (`.ts`, `.tsx`)
|
||||
- Building typed JavaScript applications
|
||||
- React/Next.js development
|
||||
- Node.js backend development
|
||||
|
||||
## Core Patterns
|
||||
|
||||
### Type Definitions
|
||||
|
||||
```typescript
|
||||
// Interfaces for objects
|
||||
interface User {
|
||||
id: string;
|
||||
email: string;
|
||||
name: string;
|
||||
createdAt: Date;
|
||||
}
|
||||
|
||||
// Types for unions and utilities
|
||||
type Status = 'pending' | 'active' | 'inactive';
|
||||
type UserWithStatus = User & { status: Status };
|
||||
|
||||
// Generic types
|
||||
type ApiResponse<T> = {
|
||||
data: T;
|
||||
error?: string;
|
||||
status: number;
|
||||
};
|
||||
```
|
||||
|
||||
### Utility Types
|
||||
|
||||
```typescript
|
||||
// Partial - all properties optional
|
||||
type UserUpdate = Partial<User>;
|
||||
|
||||
// Pick - select properties
|
||||
type UserPreview = Pick<User, 'id' | 'name'>;
|
||||
|
||||
// Omit - exclude properties
|
||||
type UserWithoutId = Omit<User, 'id'>;
|
||||
|
||||
// Record - dictionary type
|
||||
type UserMap = Record<string, User>;
|
||||
```
|
||||
|
||||
### Async Patterns
|
||||
|
||||
```typescript
|
||||
async function fetchUser(id: string): Promise<User> {
|
||||
const response = await fetch(`/api/users/${id}`);
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to fetch user: ${response.status}`);
|
||||
}
|
||||
return response.json();
|
||||
}
|
||||
|
||||
// Error handling
|
||||
async function safeOperation<T>(
|
||||
operation: () => Promise<T>
|
||||
): Promise<[T, null] | [null, Error]> {
|
||||
try {
|
||||
const result = await operation();
|
||||
return [result, null];
|
||||
} catch (error) {
|
||||
return [null, error as Error];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Class Patterns
|
||||
|
||||
```typescript
|
||||
class UserService {
|
||||
constructor(private readonly db: Database) {}
|
||||
|
||||
async findById(id: string): Promise<User | null> {
|
||||
return this.db.users.findUnique({ where: { id } });
|
||||
}
|
||||
|
||||
async create(data: UserCreate): Promise<User> {
|
||||
return this.db.users.create({ data });
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Zod Validation
|
||||
|
||||
```typescript
|
||||
import { z } from 'zod';
|
||||
|
||||
const UserSchema = z.object({
|
||||
email: z.string().email(),
|
||||
name: z.string().min(1).max(100),
|
||||
password: z.string().min(8),
|
||||
});
|
||||
|
||||
type UserInput = z.infer<typeof UserSchema>;
|
||||
|
||||
function validateUser(data: unknown): UserInput {
|
||||
return UserSchema.parse(data);
|
||||
}
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Enable strict mode in tsconfig.json**
|
||||
2. **Avoid `any` - use `unknown` and type guards**
|
||||
3. **Use interfaces for object shapes, types for unions**
|
||||
4. **Prefer `const` assertions for literal types**
|
||||
5. **Use discriminated unions for state**
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
### Using `any`
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Defeats type safety
|
||||
function process(data: any) {
|
||||
return data.value;
|
||||
}
|
||||
|
||||
// ✅ GOOD: Use unknown and type guards
|
||||
function process(data: unknown) {
|
||||
if (typeof data === 'object' && data !== null && 'value' in data) {
|
||||
return (data as { value: string }).value;
|
||||
}
|
||||
throw new Error('Invalid data');
|
||||
}
|
||||
```
|
||||
|
||||
### Not Handling Null/Undefined
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Assumes user exists
|
||||
function getUserName(id: string): string {
|
||||
const user = findUser(id);
|
||||
return user.name; // Might crash
|
||||
}
|
||||
|
||||
// ✅ GOOD: Handle null case
|
||||
function getUserName(id: string): string | null {
|
||||
const user = findUser(id);
|
||||
return user?.name ?? null;
|
||||
}
|
||||
```
|
||||
|
||||
### Type Assertions Over Guards
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Unsafe type assertion
|
||||
const user = data as User;
|
||||
|
||||
// ✅ GOOD: Type guard
|
||||
function isUser(data: unknown): data is User {
|
||||
return (
|
||||
typeof data === 'object' &&
|
||||
data !== null &&
|
||||
'id' in data &&
|
||||
'email' in data
|
||||
);
|
||||
}
|
||||
|
||||
if (isUser(data)) {
|
||||
// data is safely typed as User here
|
||||
}
|
||||
```
|
||||
|
||||
### Ignoring Errors
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Unhandled rejection
|
||||
async function loadData() {
|
||||
const data = await fetchData();
|
||||
return data;
|
||||
}
|
||||
|
||||
// ✅ GOOD: Handle errors
|
||||
async function loadData() {
|
||||
try {
|
||||
const data = await fetchData();
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error('Failed to load data:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Integration with Frameworks
|
||||
|
||||
### With React
|
||||
|
||||
See [React skill](/claudekit/skills/frameworks/react) for component patterns.
|
||||
|
||||
### With Next.js
|
||||
|
||||
See [Next.js skill](/claudekit/skills/frameworks/nextjs) for full-stack patterns.
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [JavaScript](/claudekit/skills/languages/javascript) - Parent language
|
||||
- [React](/claudekit/skills/frameworks/react) - UI components
|
||||
- [Next.js](/claudekit/skills/frameworks/nextjs) - Full-stack framework
|
||||
- [vitest](/claudekit/skills/testing/vitest) - Testing framework
|
||||
@@ -1,378 +0,0 @@
|
||||
---
|
||||
title: Brainstorming
|
||||
description: Interactive design refinement through collaborative dialogue
|
||||
---
|
||||
|
||||
The Brainstorming skill transforms rough ideas into fully-formed designs through structured questioning and incremental validation.
|
||||
|
||||
## Overview
|
||||
|
||||
Brainstorming is an interactive design methodology that uses sequential questioning to clarify requirements, explore alternatives, and validate design decisions before implementation begins.
|
||||
|
||||
**Core Principle**: One question at a time produces better designs than dumping everything at once.
|
||||
|
||||
## When to Use
|
||||
|
||||
Use brainstorming for:
|
||||
|
||||
- Designing new features with unclear requirements
|
||||
- Exploring architecture decisions
|
||||
- Refining user requirements
|
||||
- Breaking down complex problems
|
||||
- When multiple valid approaches exist
|
||||
|
||||
## When NOT to Use
|
||||
|
||||
Skip brainstorming for:
|
||||
|
||||
- Clear "mechanical" processes with known implementation
|
||||
- Simple bug fixes with obvious solutions
|
||||
- Tasks with explicit requirements already defined
|
||||
|
||||
## The Three-Phase Process
|
||||
|
||||
### Phase 1: Understanding
|
||||
|
||||
**Goal**: Clarify requirements through sequential questioning.
|
||||
|
||||
**Rules**:
|
||||
- Ask only ONE question per message
|
||||
- Break complex topics into multiple questions
|
||||
- Prefer multiple-choice over open-ended questions
|
||||
- Wait for user response before next question
|
||||
|
||||
**Example**:
|
||||
|
||||
```
|
||||
❌ BAD: "What authentication method do you want, and should we support SSO,
|
||||
and what about password requirements?"
|
||||
|
||||
✅ GOOD: "Which authentication method should we use?
|
||||
a) Username/password only
|
||||
b) OAuth (Google, GitHub)
|
||||
c) Both options"
|
||||
```
|
||||
|
||||
### Phase 2: Exploration
|
||||
|
||||
**Goal**: Present alternatives with clear trade-offs.
|
||||
|
||||
**Process**:
|
||||
1. Present 2-3 different approaches
|
||||
2. Lead with the recommended option
|
||||
3. Explain trade-offs for each
|
||||
4. Let user choose direction
|
||||
|
||||
**Format**:
|
||||
|
||||
```markdown
|
||||
## Approach 1: JWT-Based Auth (Recommended)
|
||||
Stateless tokens stored in HTTP-only cookies.
|
||||
|
||||
- **Pros**: Scalable, no server-side session storage, works across services
|
||||
- **Cons**: Cannot revoke tokens before expiry, larger cookie size
|
||||
|
||||
## Approach 2: Session-Based Auth
|
||||
Server-side sessions with session IDs.
|
||||
|
||||
- **Pros**: Easy revocation, smaller cookie size, familiar pattern
|
||||
- **Cons**: Requires session store (Redis), harder to scale horizontally
|
||||
|
||||
Which approach aligns better with your goals?
|
||||
```
|
||||
|
||||
### Phase 3: Design Presentation
|
||||
|
||||
**Goal**: Present validated design in digestible chunks.
|
||||
|
||||
**Rules**:
|
||||
- Break design into 200-300 word sections
|
||||
- Validate incrementally after each section
|
||||
- Be flexible - allow clarification or changes
|
||||
|
||||
**Sections to Cover**:
|
||||
1. Architecture overview
|
||||
2. Component breakdown
|
||||
3. Data flow
|
||||
4. Error handling
|
||||
5. Testing considerations
|
||||
|
||||
## Core Principles
|
||||
|
||||
### YAGNI Ruthlessly
|
||||
|
||||
Remove unnecessary features aggressively:
|
||||
|
||||
- Question every "nice to have"
|
||||
- Start with minimal viable design
|
||||
- Add complexity only when justified
|
||||
- "We might need this later" = remove it
|
||||
|
||||
**Example**:
|
||||
|
||||
```
|
||||
User: "Let's add user roles, permissions, and audit logging"
|
||||
|
||||
Brainstorming: "Do you need all of those now, or can we start with
|
||||
basic roles and add permissions/audit later when
|
||||
you have real requirements?"
|
||||
```
|
||||
|
||||
### One Question at a Time
|
||||
|
||||
Sequential questioning produces better results:
|
||||
|
||||
- Gives user time to think deeply
|
||||
- Prevents overwhelming with choices
|
||||
- Creates natural conversation flow
|
||||
- Allows follow-up on unclear points
|
||||
|
||||
### Multiple-Choice Preference
|
||||
|
||||
When possible, provide structured options:
|
||||
|
||||
```
|
||||
Instead of: "How should we handle errors?"
|
||||
|
||||
Ask: "How should we handle validation errors?
|
||||
a) Return 400 with error details in JSON
|
||||
b) Return 422 with field-specific errors
|
||||
c) Return 400 with generic error message"
|
||||
```
|
||||
|
||||
Benefits:
|
||||
- Reduces cognitive load
|
||||
- Surfaces your understanding
|
||||
- Makes decisions concrete
|
||||
- Still allow "Other" option
|
||||
|
||||
## Output Format
|
||||
|
||||
After design validation, document to timestamped markdown:
|
||||
|
||||
```markdown
|
||||
# Design: User Email Verification
|
||||
Date: 2025-01-29
|
||||
|
||||
## Summary
|
||||
Add email verification to registration flow. Users receive verification
|
||||
email on signup, click link to verify, and are marked as verified in database.
|
||||
|
||||
## Architecture
|
||||
- Verification token: JWT with 24-hour expiry
|
||||
- Storage: Add `verified` boolean to User table
|
||||
- Email: SendGrid API for delivery
|
||||
|
||||
## Components
|
||||
### UserService
|
||||
- `createUser()`: Create user, send verification email
|
||||
- `verifyEmail()`: Validate token, mark user verified
|
||||
|
||||
### EmailService
|
||||
- `sendVerificationEmail()`: Generate token, send email
|
||||
|
||||
## Data Flow
|
||||
1. User registers → User created with verified=false
|
||||
2. System generates JWT token with user email
|
||||
3. Email sent with verification link
|
||||
4. User clicks link → Token validated
|
||||
5. User marked verified=true
|
||||
|
||||
## Error Handling
|
||||
- Expired token: Return error, offer resend
|
||||
- Invalid token: Return 400 error
|
||||
- Already verified: Return success (idempotent)
|
||||
|
||||
## Testing Strategy
|
||||
- Unit: Token generation, validation logic
|
||||
- Integration: Full registration → verification flow
|
||||
- Manual: Test email delivery in staging
|
||||
|
||||
## Open Questions
|
||||
- Should unverified users have limited access? (Deferred to v2)
|
||||
```
|
||||
|
||||
## Activation
|
||||
|
||||
### Via Command
|
||||
|
||||
```bash
|
||||
/brainstorm "user authentication system"
|
||||
/brainstorm --interactive "payment processing"
|
||||
```
|
||||
|
||||
### Via Mode
|
||||
|
||||
```bash
|
||||
/mode brainstorm
|
||||
# Now in brainstorming mode for the session
|
||||
```
|
||||
|
||||
### Implicit Activation
|
||||
|
||||
Brainstorming activates automatically when:
|
||||
- `/feature` command encounters unclear requirements
|
||||
- Design discussion is needed before planning
|
||||
- Multiple approaches are possible
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
### Flows to Writing Plans
|
||||
|
||||
After brainstorming completes:
|
||||
|
||||
```bash
|
||||
# 1. Brainstorm the design
|
||||
/brainstorm "email verification"
|
||||
|
||||
# 2. Convert design to implementation plan
|
||||
/plan designs/email-verification.md
|
||||
```
|
||||
|
||||
### Combines with Sequential Thinking
|
||||
|
||||
For complex decisions:
|
||||
|
||||
```bash
|
||||
# Use sequential thinking during brainstorming
|
||||
/brainstorm --use-skill=sequential-thinking "database architecture"
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
### Example 1: Authentication Design
|
||||
|
||||
```
|
||||
User: I need authentication
|
||||
|
||||
Claude: What type of users will authenticate?
|
||||
a) End users (customers)
|
||||
b) Administrators only
|
||||
c) Both end users and admins
|
||||
|
||||
User: Both
|
||||
|
||||
Claude: Should end users and admins use the same auth system?
|
||||
a) Yes, same system with role differentiation
|
||||
b) No, separate systems (admin has higher security)
|
||||
|
||||
User: Same system
|
||||
|
||||
Claude: Which authentication method?
|
||||
a) Email/password
|
||||
b) OAuth (Google, GitHub, etc.)
|
||||
c) Both options
|
||||
|
||||
User: Both
|
||||
|
||||
Claude: [Presents 2-3 architecture approaches with trade-offs]
|
||||
```
|
||||
|
||||
### Example 2: API Design
|
||||
|
||||
```
|
||||
User: Design a REST API for products
|
||||
|
||||
Claude: What operations do you need?
|
||||
a) Read-only (GET products, search)
|
||||
b) Full CRUD (create, read, update, delete)
|
||||
c) Read + Create only
|
||||
|
||||
User: Full CRUD
|
||||
|
||||
Claude: Who can create/update/delete products?
|
||||
a) Anyone (public API)
|
||||
b) Authenticated users
|
||||
c) Admins only
|
||||
|
||||
User: Admins only
|
||||
|
||||
Claude: [Presents API design with endpoints and auth requirements]
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Ask Better Questions
|
||||
|
||||
```
|
||||
❌ "What do you want?"
|
||||
✅ "Should new users start with limited access or full access?"
|
||||
|
||||
❌ "How should this work?"
|
||||
✅ "When a user clicks 'delete', should we:
|
||||
a) Delete immediately
|
||||
b) Soft delete (mark as deleted)
|
||||
c) Require confirmation first"
|
||||
```
|
||||
|
||||
### Validate Incrementally
|
||||
|
||||
```
|
||||
After presenting architecture:
|
||||
"Does this architecture make sense so far, or should I clarify anything?"
|
||||
|
||||
After data flow:
|
||||
"Is this the flow you envisioned, or should we adjust?"
|
||||
```
|
||||
|
||||
### Push Back on Complexity
|
||||
|
||||
```
|
||||
User: "Let's add caching, rate limiting, and API versioning"
|
||||
|
||||
Claude: "Those are all valuable features. Which one solves your
|
||||
immediate problem? We can add the others later when needed."
|
||||
```
|
||||
|
||||
## Common Patterns
|
||||
|
||||
### The "Why" Question
|
||||
|
||||
Always understand motivation:
|
||||
|
||||
```
|
||||
User: "Add pagination to the API"
|
||||
Claude: "What problem does pagination solve for you?
|
||||
a) Performance (large datasets)
|
||||
b) UX (easier navigation)
|
||||
c) Both"
|
||||
```
|
||||
|
||||
### The Scope Question
|
||||
|
||||
Define boundaries early:
|
||||
|
||||
```
|
||||
User: "Build a notification system"
|
||||
Claude: "What types of notifications?
|
||||
a) Email only
|
||||
b) Email + SMS
|
||||
c) Email + SMS + Push"
|
||||
```
|
||||
|
||||
### The Constraint Question
|
||||
|
||||
Identify limitations:
|
||||
|
||||
```
|
||||
User: "Design file upload"
|
||||
Claude: "What's the maximum file size you need to support?
|
||||
a) < 10 MB (standard)
|
||||
b) 10-100 MB (medium)
|
||||
c) > 100 MB (large, needs chunking)"
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
After brainstorming:
|
||||
|
||||
1. **Save the design**: Commit design doc to version control
|
||||
2. **Create plan**: Use [Writing Plans](/claudekit/skills/methodology/writing-plans) skill
|
||||
3. **Implement**: Use [Executing Plans](/claudekit/skills/methodology/executing-plans) skill
|
||||
4. **Review**: Use [Code Review](/claudekit/skills/methodology/code-review) skill
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [Writing Plans](/claudekit/skills/methodology/writing-plans) - Convert designs to tasks
|
||||
- [Sequential Thinking](/claudekit/skills/methodology/sequential-thinking) - Deep analysis
|
||||
- [Executing Plans](/claudekit/skills/methodology/executing-plans) - Implement designs
|
||||
@@ -1,455 +0,0 @@
|
||||
---
|
||||
title: Code Review
|
||||
description: Request and receive code reviews effectively
|
||||
---
|
||||
|
||||
The Code Review skill covers both requesting reviews with clear context and processing feedback systematically.
|
||||
|
||||
## Overview
|
||||
|
||||
Effective code review involves clear communication when requesting reviews and systematic processing of feedback. This skill combines both requesting and receiving reviews into a cohesive workflow.
|
||||
|
||||
## Requesting Code Reviews
|
||||
|
||||
### When to Request
|
||||
|
||||
- After completing a task (before proceeding to next)
|
||||
- After implementing a feature
|
||||
- Before merging to main branch
|
||||
- When unsure about implementation approach
|
||||
- After fixing critical bugs
|
||||
|
||||
### Review Request Components
|
||||
|
||||
#### 1. Scope Definition
|
||||
|
||||
Clearly state what should be reviewed:
|
||||
|
||||
```markdown
|
||||
## Review Scope
|
||||
|
||||
**Files changed**:
|
||||
- src/services/user-service.ts (modified)
|
||||
- src/services/user-service.test.ts (added)
|
||||
- src/types/user.ts (modified)
|
||||
|
||||
**Lines changed**: ~150 additions, ~20 deletions
|
||||
|
||||
**Not in scope** (don't review):
|
||||
- package.json changes (unrelated dependency update)
|
||||
- Generated files in dist/
|
||||
```
|
||||
|
||||
#### 2. Context
|
||||
|
||||
Explain why these changes were made:
|
||||
|
||||
```markdown
|
||||
## Context
|
||||
|
||||
**Task**: Implement user email verification
|
||||
|
||||
**Requirements**:
|
||||
- Users must verify email before accessing features
|
||||
- Verification link expires after 24 hours
|
||||
- Users can request new verification email
|
||||
|
||||
**Design decisions**:
|
||||
- Used JWT for verification token (stateless)
|
||||
- Stored verification status in existing User table
|
||||
```
|
||||
|
||||
#### 3. Areas of Concern
|
||||
|
||||
Highlight where you want focused attention:
|
||||
|
||||
```markdown
|
||||
## Areas of Concern
|
||||
|
||||
1. **Security**: Is the token generation secure enough?
|
||||
2. **Error handling**: Are all edge cases covered?
|
||||
3. **Performance**: Will the verification lookup be efficient?
|
||||
```
|
||||
|
||||
#### 4. Test Coverage
|
||||
|
||||
Show what's tested:
|
||||
|
||||
```markdown
|
||||
## Test Coverage
|
||||
|
||||
- Unit tests: 8 new tests in user-service.test.ts
|
||||
- Integration: Manual testing of full flow
|
||||
- Edge cases: Expired token, invalid token, already verified
|
||||
|
||||
**Not tested** (known gaps):
|
||||
- Load testing with many concurrent verifications
|
||||
```
|
||||
|
||||
### Review Request Template
|
||||
|
||||
```markdown
|
||||
## Code Review Request
|
||||
|
||||
### Summary
|
||||
Implemented email verification for new user registrations.
|
||||
|
||||
### Files Changed
|
||||
- `src/services/user-service.ts` - Added verification methods
|
||||
- `src/services/user-service.test.ts` - Added 8 unit tests
|
||||
- `src/types/user.ts` - Added verified field
|
||||
|
||||
### Context
|
||||
Users now receive a verification email on signup. They must click
|
||||
the link within 24 hours to verify their account.
|
||||
|
||||
### Implementation Notes
|
||||
- JWT tokens for stateless verification
|
||||
- Tokens expire after 24 hours
|
||||
- Idempotent verification (safe to verify twice)
|
||||
|
||||
### Areas for Focus
|
||||
1. Token security (generation and validation)
|
||||
2. Edge case handling
|
||||
3. Test coverage completeness
|
||||
|
||||
### Testing
|
||||
- [x] Unit tests added/updated
|
||||
- [x] Integration tests pass
|
||||
- [ ] E2E tests (not applicable)
|
||||
|
||||
### Checklist
|
||||
- [x] Code follows project conventions
|
||||
- [x] No security vulnerabilities introduced
|
||||
- [x] Documentation updated if needed
|
||||
```
|
||||
|
||||
## Receiving Code Reviews
|
||||
|
||||
### Feedback Categories
|
||||
|
||||
#### Critical Issues
|
||||
|
||||
**Definition**: Must fix before proceeding.
|
||||
|
||||
Examples:
|
||||
- SQL injection vulnerability
|
||||
- Unhandled null pointer
|
||||
- Data corruption possibility
|
||||
- Authentication bypass
|
||||
|
||||
**Response**: Fix immediately. Do not proceed until resolved.
|
||||
|
||||
#### Important Issues
|
||||
|
||||
**Definition**: Should fix before proceeding.
|
||||
|
||||
Examples:
|
||||
- Missing error handling
|
||||
- Inefficient algorithm
|
||||
- Poor naming
|
||||
- Missing tests for edge cases
|
||||
|
||||
**Response**: Fix before merging. May defer to follow-up if blocking.
|
||||
|
||||
#### Minor Issues
|
||||
|
||||
**Definition**: Can fix later.
|
||||
|
||||
Examples:
|
||||
- Variable naming suggestions
|
||||
- Comment improvements
|
||||
- Minor refactoring opportunities
|
||||
- Documentation polish
|
||||
|
||||
**Response**: Note for later. Can merge without addressing.
|
||||
|
||||
### Processing Workflow
|
||||
|
||||
#### Step 1: Categorize All Feedback
|
||||
|
||||
```markdown
|
||||
## Review Feedback
|
||||
|
||||
### Critical (Must Fix)
|
||||
1. Line 45: SQL query vulnerable to injection
|
||||
2. Line 89: User data exposed in logs
|
||||
|
||||
### Important (Should Fix)
|
||||
1. Line 23: Missing null check
|
||||
2. Line 67: Test doesn't cover error path
|
||||
|
||||
### Minor (Can Defer)
|
||||
1. Line 12: Consider renaming 'x' to 'count'
|
||||
2. Line 34: Could extract to helper function
|
||||
```
|
||||
|
||||
#### Step 2: Fix Critical Issues First
|
||||
|
||||
```markdown
|
||||
Addressing critical issue 1:
|
||||
- File: src/db/queries.ts:45
|
||||
- Issue: SQL injection vulnerability
|
||||
- Fix: Use parameterized query
|
||||
- Verification: Tested with malicious input
|
||||
```
|
||||
|
||||
#### Step 3: Fix Important Issues
|
||||
|
||||
```markdown
|
||||
Addressing important issue 1:
|
||||
- File: src/services/user.ts:23
|
||||
- Issue: Missing null check
|
||||
- Fix: Added guard clause
|
||||
- Verification: Test added for null case
|
||||
```
|
||||
|
||||
#### Step 4: Note Minor Issues
|
||||
|
||||
```markdown
|
||||
Deferred for follow-up:
|
||||
- Line 12: Variable rename (tracked in TODO)
|
||||
- Line 34: Extract helper (low priority)
|
||||
```
|
||||
|
||||
#### Step 5: Request Re-Review
|
||||
|
||||
After fixes applied:
|
||||
|
||||
```markdown
|
||||
## Re-Review Request
|
||||
|
||||
### Fixed Issues
|
||||
- [x] SQL injection (line 45) - Now uses parameterized query
|
||||
- [x] Data exposure (line 89) - Removed user data from logs
|
||||
- [x] Null check (line 23) - Added guard clause
|
||||
- [x] Test coverage (line 67) - Added error path test
|
||||
|
||||
### Deferred (Minor)
|
||||
- Variable rename (line 12) - Will address in cleanup PR
|
||||
|
||||
### Changes Since Last Review
|
||||
- 4 files modified
|
||||
- 2 tests added
|
||||
- All previous feedback addressed
|
||||
```
|
||||
|
||||
## Review Types
|
||||
|
||||
### Quick Review
|
||||
|
||||
For small, low-risk changes:
|
||||
|
||||
```markdown
|
||||
## Quick Review: Fix typo in error message
|
||||
|
||||
**File**: src/errors.ts
|
||||
**Change**: Fixed "recieved" → "received" in error message
|
||||
**Risk**: None
|
||||
```
|
||||
|
||||
### Standard Review
|
||||
|
||||
For typical feature work:
|
||||
|
||||
```markdown
|
||||
## Review: Add user preferences
|
||||
|
||||
**Files**: 3 files, ~200 lines
|
||||
**Context**: Users can now save display preferences
|
||||
**Focus**: Data validation, storage approach
|
||||
```
|
||||
|
||||
### Critical Review
|
||||
|
||||
For high-risk changes:
|
||||
|
||||
```markdown
|
||||
## CRITICAL REVIEW: Authentication refactor
|
||||
|
||||
**Files**: 12 files, ~800 lines
|
||||
**Risk**: HIGH - Authentication system changes
|
||||
**Required reviewers**: Security team
|
||||
**Focus**: Token handling, session management, encryption
|
||||
```
|
||||
|
||||
## Handling Disagreements
|
||||
|
||||
### When You Disagree
|
||||
|
||||
1. Don't dismiss immediately
|
||||
2. Consider the reviewer's perspective
|
||||
3. Explain your reasoning
|
||||
4. Provide evidence (code, tests, docs)
|
||||
5. Be open to being wrong
|
||||
6. Escalate if needed (tech lead, team discussion)
|
||||
|
||||
### Disagreement Response Template
|
||||
|
||||
```markdown
|
||||
## Re: Token expiration approach
|
||||
|
||||
I considered this feedback carefully. Here's my perspective:
|
||||
|
||||
**Reviewer's concern**: Token should expire after 1 hour
|
||||
**My reasoning**: 24 hours allows users to verify later
|
||||
**Evidence**: User research shows 40% verify after 6+ hours
|
||||
**Proposed resolution**: Keep 24 hours, add configurable option
|
||||
```
|
||||
|
||||
## Common Feedback Types
|
||||
|
||||
### Security Issues
|
||||
|
||||
Always fix immediately:
|
||||
|
||||
```typescript
|
||||
// Before (vulnerable)
|
||||
const query = `SELECT * FROM users WHERE id = '${userId}'`;
|
||||
|
||||
// After (secure)
|
||||
const query = 'SELECT * FROM users WHERE id = $1';
|
||||
const result = await db.query(query, [userId]);
|
||||
```
|
||||
|
||||
### Error Handling
|
||||
|
||||
Add comprehensive handling:
|
||||
|
||||
```typescript
|
||||
// Before
|
||||
const user = await getUser(id);
|
||||
return user.name;
|
||||
|
||||
// After
|
||||
const user = await getUser(id);
|
||||
if (!user) {
|
||||
throw new NotFoundError(`User ${id} not found`);
|
||||
}
|
||||
return user.name;
|
||||
```
|
||||
|
||||
### Test Coverage
|
||||
|
||||
Add missing tests:
|
||||
|
||||
```typescript
|
||||
// Before: Only happy path tested
|
||||
it('should return user', async () => {
|
||||
const user = await getUser('valid-id');
|
||||
expect(user).toBeDefined();
|
||||
});
|
||||
|
||||
// After: Edge cases covered
|
||||
it('should return user', async () => { /* ... */ });
|
||||
it('should throw NotFoundError for missing user', async () => { /* ... */ });
|
||||
it('should throw ValidationError for invalid id', async () => { /* ... */ });
|
||||
```
|
||||
|
||||
## Re-Review Checklist
|
||||
|
||||
Before requesting re-review:
|
||||
|
||||
- [ ] All Critical issues fixed
|
||||
- [ ] All Important issues fixed (or explicitly deferred with reason)
|
||||
- [ ] Minor issues noted for follow-up
|
||||
- [ ] Tests added/updated for fixes
|
||||
- [ ] Full test suite passes
|
||||
- [ ] Changes summarized for reviewer
|
||||
|
||||
## Iteration Limits
|
||||
|
||||
If review requires 3+ cycles:
|
||||
|
||||
1. STOP
|
||||
2. Schedule discussion with reviewer
|
||||
3. Identify root cause of misalignment
|
||||
4. May need design discussion
|
||||
5. Don't keep iterating endlessly
|
||||
|
||||
## Activation
|
||||
|
||||
### Requesting Reviews
|
||||
|
||||
```bash
|
||||
/review src/services/user-service.ts
|
||||
/review --persona=security src/auth/
|
||||
/ship --review "implement email verification"
|
||||
```
|
||||
|
||||
### After Executing Plans
|
||||
|
||||
Automatic code review between tasks when using [Executing Plans](/claudekit/skills/methodology/executing-plans).
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
### With Executing Plans
|
||||
|
||||
[Executing Plans](/claudekit/skills/methodology/executing-plans) includes automatic code review:
|
||||
- Review after each task
|
||||
- Categorize issues (Critical/Important/Minor)
|
||||
- Fix before proceeding
|
||||
|
||||
### With TDD
|
||||
|
||||
Code reviews check:
|
||||
- Tests exist for new code
|
||||
- Tests follow TDD pattern (written first)
|
||||
- Tests cover edge cases
|
||||
|
||||
### With Verification
|
||||
|
||||
Reviews verify:
|
||||
- Claims are backed by evidence
|
||||
- Tests actually pass
|
||||
- No unverified assertions
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Keep Reviews Focused
|
||||
|
||||
```
|
||||
✅ "Review the user verification feature (3 files)"
|
||||
❌ "Review my last week of work"
|
||||
```
|
||||
|
||||
### Provide Runnable Context
|
||||
|
||||
```markdown
|
||||
## To test locally
|
||||
1. git checkout feature/email-verification
|
||||
2. npm install
|
||||
3. npm test -- --grep "email verification"
|
||||
```
|
||||
|
||||
### Be Specific About Concerns
|
||||
|
||||
```
|
||||
✅ "I'm unsure about the error handling in lines 45-60"
|
||||
❌ "Let me know if anything looks wrong"
|
||||
```
|
||||
|
||||
### Respond to All Feedback
|
||||
|
||||
```markdown
|
||||
✅ Issue 1: Fixed
|
||||
✅ Issue 2: Fixed
|
||||
✅ Issue 3: Disagree, here's why (with evidence)
|
||||
✅ Issue 4: Deferred to follow-up PR #123
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
After review approval:
|
||||
|
||||
1. **Merge code**: If all issues resolved
|
||||
2. **Follow-up tasks**: Create tickets for deferred issues
|
||||
3. **Documentation**: Update if needed
|
||||
4. **Deployment**: Use [deploy command](/claudekit/commands/deploy)
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [Executing Plans](/claudekit/skills/methodology/executing-plans) - Automated reviews
|
||||
- [TDD](/claudekit/skills/methodology/tdd) - Test coverage checks
|
||||
- [Verification](/claudekit/skills/methodology/verification) - Evidence-based claims
|
||||
- [Security (OWASP)](/claudekit/skills/security/owasp) - Security review focus
|
||||
@@ -1,472 +0,0 @@
|
||||
---
|
||||
title: Executing Plans
|
||||
description: Subagent-driven plan execution with quality gates
|
||||
---
|
||||
|
||||
The Executing Plans skill automates implementation of detailed plans using fresh agents per task and mandatory code review between tasks.
|
||||
|
||||
## Overview
|
||||
|
||||
Executing Plans bridges planning and delivery through systematic, quality-gated execution. Each task runs in isolation with independent review, preventing context pollution and ensuring consistent quality.
|
||||
|
||||
**Core Pattern**: Fresh subagent per task + review between tasks = high quality, fast iteration
|
||||
|
||||
## When to Use
|
||||
|
||||
- Executing plans created with [Writing Plans](/claudekit/skills/methodology/writing-plans) skill
|
||||
- Staying in current session with independent tasks
|
||||
- Wanting quality gates without human delays
|
||||
- Systematic implementation with verification
|
||||
|
||||
## When NOT to Use
|
||||
|
||||
- Plan needs review first (use brainstorming)
|
||||
- Tasks are tightly coupled and need shared context
|
||||
- Plan requires revision during execution
|
||||
|
||||
## The Workflow
|
||||
|
||||
### Step 1: Load Plan
|
||||
|
||||
```markdown
|
||||
1. Read the plan file
|
||||
2. Verify plan is complete and approved
|
||||
3. Create task tracking with all tasks
|
||||
4. Set first task to in_progress
|
||||
```
|
||||
|
||||
### Step 2: Execute Task
|
||||
|
||||
For each task:
|
||||
|
||||
```markdown
|
||||
1. Dispatch fresh subagent with task details
|
||||
2. Subagent implements following TDD cycle:
|
||||
- Write failing test
|
||||
- Verify test fails
|
||||
- Implement minimally
|
||||
- Verify test passes
|
||||
- Commit
|
||||
3. Subagent returns completion summary
|
||||
```
|
||||
|
||||
### Step 3: Code Review
|
||||
|
||||
After each task:
|
||||
|
||||
```markdown
|
||||
1. Dispatch code-reviewer subagent
|
||||
2. Review scope: only changes from current task
|
||||
3. Reviewer returns findings:
|
||||
- Critical: Must fix before proceeding
|
||||
- Important: Should fix before proceeding
|
||||
- Minor: Can fix later
|
||||
```
|
||||
|
||||
### Step 4: Handle Review Findings
|
||||
|
||||
```markdown
|
||||
IF Critical or Important issues found:
|
||||
1. Dispatch fix subagent for each issue
|
||||
2. Re-request code review
|
||||
3. Repeat until no Critical/Important issues
|
||||
|
||||
IF only Minor issues:
|
||||
1. Note for later cleanup
|
||||
2. Proceed to next task
|
||||
```
|
||||
|
||||
### Step 5: Mark Complete
|
||||
|
||||
```markdown
|
||||
1. Update task tracking - mark task completed
|
||||
2. Move to next task
|
||||
3. Repeat from Step 2
|
||||
```
|
||||
|
||||
### Step 6: Final Review
|
||||
|
||||
After all tasks complete:
|
||||
|
||||
```markdown
|
||||
1. Dispatch comprehensive code review
|
||||
2. Review entire implementation against plan
|
||||
3. Verify all success criteria met
|
||||
4. Run full test suite
|
||||
5. Use finishing-development-branch skill
|
||||
```
|
||||
|
||||
## Critical Rules
|
||||
|
||||
### Never Skip Code Reviews
|
||||
|
||||
Every task must be reviewed before proceeding. No exceptions.
|
||||
|
||||
**Why**: Catches issues when they're easiest to fix.
|
||||
|
||||
### Never Proceed with Critical Issues
|
||||
|
||||
Critical issues must be fixed immediately:
|
||||
|
||||
```
|
||||
implement → review → fix critical → re-review → proceed
|
||||
```
|
||||
|
||||
**Not**:
|
||||
```
|
||||
implement → review → note issue → proceed anyway
|
||||
```
|
||||
|
||||
### Never Run Parallel Implementation
|
||||
|
||||
Tasks run sequentially:
|
||||
|
||||
```
|
||||
❌ WRONG: Run Task 1, 2, 3 simultaneously
|
||||
✅ RIGHT: Run Task 1 → Review → Task 2 → Review → Task 3 → Review
|
||||
```
|
||||
|
||||
**Why**: Each task may depend on previous tasks being correct.
|
||||
|
||||
### Always Read Plan Before Implementing
|
||||
|
||||
```
|
||||
❌ WRONG: Start coding based on memory of plan
|
||||
✅ RIGHT: Read plan file, extract task details, then implement
|
||||
```
|
||||
|
||||
## Subagent Communication
|
||||
|
||||
### Implementation Subagent Prompt
|
||||
|
||||
```markdown
|
||||
## Task: Add verified flag to User model
|
||||
|
||||
**Context**: Executing plan for Email Verification feature
|
||||
|
||||
**Files to modify**:
|
||||
- Modify: src/models/user.ts
|
||||
- Test: src/models/user.test.ts
|
||||
|
||||
**Steps**:
|
||||
1. Write failing test for verified flag
|
||||
2. Verify test fails (run npm test)
|
||||
3. Add verified field to User model
|
||||
4. Verify test passes
|
||||
5. Commit changes
|
||||
|
||||
**Requirements**:
|
||||
- Follow TDD: test first, then implement
|
||||
- Commit after completion
|
||||
- Return summary of what was done
|
||||
|
||||
**Output expected**:
|
||||
- Files modified: [list]
|
||||
- Tests added: [count]
|
||||
- Commit hash: [hash]
|
||||
- Any issues encountered: [none or details]
|
||||
```
|
||||
|
||||
### Code Review Subagent Prompt
|
||||
|
||||
```markdown
|
||||
## Code Review Request
|
||||
|
||||
**Scope**: Changes from Task 3: Add login endpoint
|
||||
|
||||
**Files changed**:
|
||||
- src/routes/auth.ts
|
||||
- src/routes/auth.test.ts
|
||||
- src/middleware/auth.ts
|
||||
|
||||
**Review against**:
|
||||
- Plan requirements for this task
|
||||
- Code quality standards
|
||||
- Security best practices
|
||||
- Test coverage requirements
|
||||
|
||||
**Return**:
|
||||
- Critical issues (must fix before continuing)
|
||||
- Important issues (should fix before continuing)
|
||||
- Minor issues (can defer)
|
||||
- Approval status (approved / needs fixes)
|
||||
```
|
||||
|
||||
## Task Tracking
|
||||
|
||||
Track status throughout execution:
|
||||
|
||||
```markdown
|
||||
| Task | Status | Reviewed |
|
||||
|------|--------|----------|
|
||||
| Task 1: Create model | completed | ✓ |
|
||||
| Task 2: Add validation | completed | ✓ |
|
||||
| Task 3: Create endpoint | in_progress | - |
|
||||
| Task 4: Add tests | pending | - |
|
||||
| Task 5: Documentation | pending | - |
|
||||
```
|
||||
|
||||
Status values:
|
||||
- `pending` - Not started
|
||||
- `in_progress` - Currently being implemented
|
||||
- `completed` - Done and reviewed
|
||||
|
||||
## Error Handling
|
||||
|
||||
### Task Fails
|
||||
|
||||
```markdown
|
||||
1. Capture error details
|
||||
2. Attempt fix (max 2 retries)
|
||||
3. If still failing, pause execution
|
||||
4. Report to user with:
|
||||
- Which task failed
|
||||
- Error details
|
||||
- Suggested resolution
|
||||
5. Wait for user decision
|
||||
```
|
||||
|
||||
### Review Finds Major Issues
|
||||
|
||||
```markdown
|
||||
1. List all Critical/Important issues
|
||||
2. Dispatch fix subagent for each
|
||||
3. Re-run code review
|
||||
4. If issues persist after 2 cycles:
|
||||
- Pause execution
|
||||
- Report to user
|
||||
- May need plan revision
|
||||
```
|
||||
|
||||
## Activation
|
||||
|
||||
### Via Command
|
||||
|
||||
```bash
|
||||
/execute-plan plans/feature-x.md
|
||||
/execute-plan plans/feature-x.md --parallel-reviews # Review multiple tasks
|
||||
```
|
||||
|
||||
### From Writing Plans
|
||||
|
||||
```bash
|
||||
/plan "add email verification"
|
||||
# Plan created at plans/email-verification.md
|
||||
|
||||
"Would you like to execute this plan now?"
|
||||
> Yes
|
||||
|
||||
# Begins execution automatically
|
||||
```
|
||||
|
||||
## Example Execution
|
||||
|
||||
```markdown
|
||||
## Plan Execution: Email Verification
|
||||
|
||||
### Status: In Progress (Task 3 of 8)
|
||||
|
||||
---
|
||||
|
||||
### Task 1: Add verified flag ✓
|
||||
**Implementation**: Completed in 3 minutes
|
||||
- Added `verified: boolean` field to User model
|
||||
- Test: user.test.ts (1 new test)
|
||||
- Commit: a1b2c3d
|
||||
|
||||
**Code Review**: Approved
|
||||
- No issues found
|
||||
- Test coverage: 100%
|
||||
|
||||
---
|
||||
|
||||
### Task 2: Create verification token ✓
|
||||
**Implementation**: Completed in 4 minutes
|
||||
- Added token generation utility
|
||||
- Test: token.test.ts (3 new tests)
|
||||
- Commit: e4f5g6h
|
||||
|
||||
**Code Review**: 1 Important issue found
|
||||
- Issue: Token expiry not validated
|
||||
- Fix: Added expiry check
|
||||
- Re-review: Approved
|
||||
|
||||
---
|
||||
|
||||
### Task 3: Send verification email ⏳
|
||||
**Status**: Implementation in progress...
|
||||
```
|
||||
|
||||
## Completion Checklist
|
||||
|
||||
Before declaring plan execution complete:
|
||||
|
||||
- [ ] All tasks marked completed
|
||||
- [ ] All code reviews passed
|
||||
- [ ] Full test suite passes
|
||||
- [ ] No Critical issues outstanding
|
||||
- [ ] No Important issues outstanding
|
||||
- [ ] Final comprehensive review done
|
||||
- [ ] Ready for branch cleanup/merge
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
### From Writing Plans
|
||||
|
||||
```bash
|
||||
# 1. Create plan
|
||||
/plan "feature X"
|
||||
|
||||
# 2. Execute plan
|
||||
/execute-plan plans/feature-x.md
|
||||
```
|
||||
|
||||
### With TDD
|
||||
|
||||
Every task implementation follows [TDD](/claudekit/skills/methodology/tdd):
|
||||
1. Write failing test
|
||||
2. Verify it fails
|
||||
3. Implement minimally
|
||||
4. Verify it passes
|
||||
|
||||
### With Code Review
|
||||
|
||||
Automatic [code review](/claudekit/skills/methodology/code-review) after each task:
|
||||
- Categorizes issues (Critical/Important/Minor)
|
||||
- Enforces fixes before proceeding
|
||||
- Maintains code quality
|
||||
|
||||
### With Verification
|
||||
|
||||
Uses [verification before completion](/claudekit/skills/methodology/verification):
|
||||
- Never claims completion without proof
|
||||
- Runs tests to verify
|
||||
- Checks actual output
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Review Scope
|
||||
|
||||
Keep review focused on current task:
|
||||
|
||||
```
|
||||
✅ "Review changes in src/auth.ts from Task 5"
|
||||
❌ "Review the entire codebase"
|
||||
```
|
||||
|
||||
### Fresh Agents
|
||||
|
||||
Each task gets a clean slate:
|
||||
|
||||
```
|
||||
Task 1 Agent: Focuses only on Task 1
|
||||
Task 2 Agent: No memory of Task 1 details
|
||||
Task 3 Agent: No memory of Task 1 or 2
|
||||
```
|
||||
|
||||
**Benefit**: No context pollution, clearer focus.
|
||||
|
||||
### Incremental Quality
|
||||
|
||||
Fix issues immediately:
|
||||
|
||||
```
|
||||
Task → Review → Issues Found → Fix → Re-review → Pass → Next Task
|
||||
```
|
||||
|
||||
**Not**:
|
||||
```
|
||||
Task 1 → Issues noted
|
||||
Task 2 → More issues noted
|
||||
Task 3 → Try to fix all issues (context lost)
|
||||
```
|
||||
|
||||
## Common Patterns
|
||||
|
||||
### Standard Task
|
||||
|
||||
```markdown
|
||||
1. Load task from plan
|
||||
2. Dispatch implementation agent
|
||||
3. Agent implements with TDD
|
||||
4. Agent commits
|
||||
5. Dispatch review agent
|
||||
6. If approved → next task
|
||||
7. If issues → fix → re-review
|
||||
```
|
||||
|
||||
### Error Recovery
|
||||
|
||||
```markdown
|
||||
1. Task fails
|
||||
2. Capture error
|
||||
3. Attempt automatic fix
|
||||
4. If fix works → review → proceed
|
||||
5. If fix fails → pause → report to user
|
||||
```
|
||||
|
||||
### Quality Gate
|
||||
|
||||
```markdown
|
||||
After each task:
|
||||
1. Code review categorizes issues
|
||||
2. Critical → Must fix (block)
|
||||
3. Important → Should fix (block)
|
||||
4. Minor → Note for later (allow)
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Task Keeps Failing
|
||||
|
||||
```markdown
|
||||
Problem: Task 5 fails 3 times
|
||||
|
||||
Actions:
|
||||
1. STOP execution
|
||||
2. Review task requirements
|
||||
3. Check if plan needs adjustment
|
||||
4. May need to revise approach
|
||||
5. Consult user before continuing
|
||||
```
|
||||
|
||||
### Review Never Passes
|
||||
|
||||
```markdown
|
||||
Problem: Task 2 reviewed 3 times, still has issues
|
||||
|
||||
Actions:
|
||||
1. PAUSE execution
|
||||
2. Review the review feedback
|
||||
3. May indicate plan gap
|
||||
4. May need design discussion
|
||||
5. Don't iterate endlessly
|
||||
```
|
||||
|
||||
### Tests Pass Individually, Fail Together
|
||||
|
||||
```markdown
|
||||
Problem: Each task's tests pass, but full suite fails
|
||||
|
||||
Actions:
|
||||
1. Identify test interdependencies
|
||||
2. Fix test isolation
|
||||
3. May need test setup/teardown improvements
|
||||
4. Run full suite after each task (not just new tests)
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
After plan execution completes:
|
||||
|
||||
1. **Final verification**: Run full test suite
|
||||
2. **Cleanup**: Address Minor issues noted during reviews
|
||||
3. **Documentation**: Update docs if needed
|
||||
4. **Branch finishing**: Use finishing-development-branch skill
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [Writing Plans](/claudekit/skills/methodology/writing-plans) - Create plans to execute
|
||||
- [TDD](/claudekit/skills/methodology/tdd) - Test-first implementation
|
||||
- [Code Review](/claudekit/skills/methodology/code-review) - Quality gates
|
||||
- [Verification](/claudekit/skills/methodology/verification) - Prove completion
|
||||
@@ -1,391 +0,0 @@
|
||||
---
|
||||
title: Sequential Thinking
|
||||
description: Step-by-step reasoning with evidence and confidence tracking
|
||||
---
|
||||
|
||||
The Sequential Thinking skill provides a structured methodology for complex problem analysis using explicit evidence collection and confidence tracking.
|
||||
|
||||
## Overview
|
||||
|
||||
Sequential Thinking breaks down complex problems into systematic steps with documented evidence, hypotheses, and confidence scores. This approach creates an audit trail of decision-making and prevents jumping to conclusions.
|
||||
|
||||
**Use for**: Complex debugging, architecture decisions, security analysis, performance investigation
|
||||
|
||||
## When to Use
|
||||
|
||||
- Complex debugging
|
||||
- Architecture decisions
|
||||
- Security analysis
|
||||
- Performance investigation
|
||||
- Any problem with multiple possible causes
|
||||
- When decisions need documentation
|
||||
|
||||
## The Sequential Process
|
||||
|
||||
### Step 1: Define the Question
|
||||
|
||||
Clearly state what you're investigating:
|
||||
|
||||
```markdown
|
||||
## Question
|
||||
What is causing the authentication timeout for users with special characters in passwords?
|
||||
```
|
||||
|
||||
### Step 2: Gather Evidence
|
||||
|
||||
Collect all relevant information systematically:
|
||||
|
||||
```markdown
|
||||
## Evidence Collection
|
||||
|
||||
### Evidence 1: Error Logs
|
||||
- Source: `logs/auth-service.log`
|
||||
- Finding: Timeout occurs at password encoding step
|
||||
- Confidence: High (direct observation)
|
||||
|
||||
### Evidence 2: Code Review
|
||||
- Source: `src/auth/password.ts:42`
|
||||
- Finding: URL encoding applied to password
|
||||
- Confidence: High (code inspection)
|
||||
|
||||
### Evidence 3: Test Results
|
||||
- Source: Manual testing
|
||||
- Finding: Works with alphanumeric, fails with `@#$`
|
||||
- Confidence: High (reproducible)
|
||||
```
|
||||
|
||||
### Step 3: Form Hypotheses
|
||||
|
||||
Generate possible explanations:
|
||||
|
||||
```markdown
|
||||
## Hypotheses
|
||||
|
||||
### Hypothesis A: URL Encoding Issue
|
||||
- Evidence supporting: E1, E2, E3
|
||||
- Evidence against: None
|
||||
- Probability: 80%
|
||||
|
||||
### Hypothesis B: Character Set Mismatch
|
||||
- Evidence supporting: E3
|
||||
- Evidence against: E2 (UTF-8 used)
|
||||
- Probability: 15%
|
||||
|
||||
### Hypothesis C: Database Encoding
|
||||
- Evidence supporting: None directly
|
||||
- Evidence against: E1 (fails before DB)
|
||||
- Probability: 5%
|
||||
```
|
||||
|
||||
### Step 4: Test Hypotheses
|
||||
|
||||
Verify the most likely explanation:
|
||||
|
||||
```markdown
|
||||
## Testing
|
||||
|
||||
### Test for Hypothesis A
|
||||
Action: Remove URL encoding, use base64 instead
|
||||
Result: Password `test@123` now works
|
||||
Conclusion: Hypothesis A confirmed
|
||||
```
|
||||
|
||||
### Step 5: Document Conclusion
|
||||
|
||||
State the final answer with confidence:
|
||||
|
||||
```markdown
|
||||
## Conclusion
|
||||
|
||||
**Root Cause**: URL encoding in password.ts:42 mangles special characters
|
||||
|
||||
**Confidence**: 9/10
|
||||
|
||||
**Evidence Chain**:
|
||||
1. Timeout at encoding step (logs)
|
||||
2. URL encoding in code (review)
|
||||
3. Special char passwords fail (testing)
|
||||
4. Removing encoding fixes issue (verification)
|
||||
|
||||
**Fix**: Replace URL encoding with base64 at line 42
|
||||
```
|
||||
|
||||
## Output Template
|
||||
|
||||
```markdown
|
||||
# Sequential Analysis: [Problem Description]
|
||||
|
||||
## Question
|
||||
[Clear statement of what we're investigating]
|
||||
|
||||
## Evidence
|
||||
|
||||
### Evidence 1: [Title]
|
||||
- Source: [where found]
|
||||
- Finding: [what it shows]
|
||||
- Confidence: [High/Medium/Low]
|
||||
|
||||
### Evidence 2: [Title]
|
||||
...
|
||||
|
||||
## Hypotheses
|
||||
|
||||
### Hypothesis A: [Name]
|
||||
- Supporting evidence: [list]
|
||||
- Contradicting evidence: [list]
|
||||
- Probability: [X%]
|
||||
|
||||
### Hypothesis B: [Name]
|
||||
...
|
||||
|
||||
## Testing
|
||||
|
||||
### Test 1: [What tested]
|
||||
- Action: [what was done]
|
||||
- Expected: [what should happen if hypothesis true]
|
||||
- Actual: [what happened]
|
||||
- Result: [confirms/refutes hypothesis]
|
||||
|
||||
## Conclusion
|
||||
|
||||
**Answer**: [clear statement]
|
||||
**Confidence**: [X/10]
|
||||
**Key Evidence**: [most important findings]
|
||||
**Recommended Action**: [what to do next]
|
||||
```
|
||||
|
||||
## Confidence Scoring
|
||||
|
||||
| Score | Meaning | Evidence Required |
|
||||
|-------|---------|-------------------|
|
||||
| 9-10 | Certain | Multiple independent confirmations |
|
||||
| 7-8 | High | Strong evidence, tested hypothesis |
|
||||
| 5-6 | Medium | Good evidence, some uncertainty |
|
||||
| 3-4 | Low | Limited evidence, multiple possibilities |
|
||||
| 1-2 | Guess | Insufficient evidence |
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
### Jumping to Conclusions
|
||||
|
||||
```
|
||||
❌ "The bug is probably in the database"
|
||||
✅ "Let me gather evidence before hypothesizing"
|
||||
```
|
||||
|
||||
### Confirmation Bias
|
||||
|
||||
```
|
||||
❌ Only looking for evidence supporting first guess
|
||||
✅ Actively seeking contradicting evidence
|
||||
```
|
||||
|
||||
### Skipping Documentation
|
||||
|
||||
```
|
||||
❌ Fixing without recording reasoning
|
||||
✅ Document even simple analysis for future reference
|
||||
```
|
||||
|
||||
## Activation
|
||||
|
||||
### Via Mode
|
||||
|
||||
```bash
|
||||
/mode deep-research
|
||||
# Enables sequential thinking for session
|
||||
```
|
||||
|
||||
### Via Command
|
||||
|
||||
```bash
|
||||
/research --sequential "authentication timeout"
|
||||
/debug --sequential "performance degradation"
|
||||
```
|
||||
|
||||
### Explicit Request
|
||||
|
||||
```
|
||||
"Use sequential thinking to analyze why the cache is returning stale data"
|
||||
```
|
||||
|
||||
## Example Analysis
|
||||
|
||||
```markdown
|
||||
# Sequential Analysis: API Response Time Degradation
|
||||
|
||||
## Question
|
||||
Why did API response times increase from 100ms to 3000ms after deployment?
|
||||
|
||||
## Evidence
|
||||
|
||||
### Evidence 1: Deployment Timing
|
||||
- Source: Deployment logs
|
||||
- Finding: Degradation started 5 minutes after deploy at 2:34 PM
|
||||
- Confidence: High (exact timing match)
|
||||
|
||||
### Evidence 2: Database Query Logs
|
||||
- Source: PostgreSQL slow query log
|
||||
- Finding: No new slow queries, same query times as before
|
||||
- Confidence: High (database not the cause)
|
||||
|
||||
### Evidence 3: Code Changes
|
||||
- Source: git diff deploy-123
|
||||
- Finding: Added Redis caching to user lookup
|
||||
- Confidence: High (code inspection)
|
||||
|
||||
### Evidence 4: Redis Metrics
|
||||
- Source: Redis monitoring
|
||||
- Finding: Redis responding in < 1ms per request
|
||||
- Confidence: High (Redis not slow)
|
||||
|
||||
### Evidence 5: Network Latency
|
||||
- Source: Application metrics
|
||||
- Finding: 2900ms spent waiting for external API
|
||||
- Confidence: High (measured directly)
|
||||
|
||||
### Evidence 6: Code Review of Caching Logic
|
||||
- Source: src/services/user.ts:45-60
|
||||
- Finding: Cache miss triggers external API call
|
||||
- Confidence: High (code inspection)
|
||||
|
||||
### Evidence 7: Cache Hit Rate
|
||||
- Source: Application metrics
|
||||
- Finding: Cache hit rate: 5% (95% miss rate)
|
||||
- Confidence: High (measured)
|
||||
|
||||
## Hypotheses
|
||||
|
||||
### Hypothesis A: Cache Not Working Properly
|
||||
- Supporting: E3 (caching added), E7 (low hit rate)
|
||||
- Contradicting: E4 (Redis is fast)
|
||||
- Probability: 60%
|
||||
- Details: Cache might not be storing data correctly
|
||||
|
||||
### Hypothesis B: External API Became Slow
|
||||
- Supporting: E5 (external API latency)
|
||||
- Contradicting: E1 (timing matches deploy, not external change)
|
||||
- Probability: 20%
|
||||
|
||||
### Hypothesis C: Cache Key Mismatch
|
||||
- Supporting: E3 (new code), E7 (low hit rate), E6 (cache logic)
|
||||
- Contradicting: None
|
||||
- Probability: 90% (after code review)
|
||||
- Details: New code might generate different cache keys than lookup
|
||||
|
||||
## Testing
|
||||
|
||||
### Test 1: Verify Cache Storage
|
||||
- Action: Log cache keys on write and read
|
||||
- Expected: Keys should match
|
||||
- Actual: Write key: `user:123`, Read key: `user:{"id":"123"}`
|
||||
- Result: CONFIRMED - Key mismatch found
|
||||
|
||||
### Test 2: Fix Cache Key Format
|
||||
- Action: Standardize cache key format in both write and read
|
||||
- Expected: Hit rate should increase dramatically
|
||||
- Actual: Hit rate increased to 95%, response time back to 100ms
|
||||
- Result: CONFIRMED - This was the root cause
|
||||
|
||||
## Conclusion
|
||||
|
||||
**Root Cause**: Cache key format mismatch between write and read operations
|
||||
|
||||
**Confidence**: 10/10 (tested and verified)
|
||||
|
||||
**Evidence Chain**:
|
||||
1. Timing matches deployment (E1)
|
||||
2. Caching logic was added (E3)
|
||||
3. Cache hit rate extremely low (E7)
|
||||
4. Cache keys don't match between read/write (Test 1)
|
||||
5. Fixing keys resolves issue (Test 2)
|
||||
|
||||
**Fix Applied**: Standardized cache key format in user.ts:45-60
|
||||
|
||||
**Recommended Follow-up**:
|
||||
1. Add unit tests for cache key generation
|
||||
2. Add monitoring for cache hit rate
|
||||
3. Review other services for similar issues
|
||||
```
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
### With Systematic Debugging
|
||||
|
||||
Sequential Thinking provides the framework, [Systematic Debugging](/claudekit/skills/methodology/systematic-debugging) provides the debugging-specific workflow.
|
||||
|
||||
### With TDD
|
||||
|
||||
After identifying root cause:
|
||||
1. Write test that reproduces issue (TDD red)
|
||||
2. Fix based on conclusion (TDD green)
|
||||
3. Verify test passes (TDD verify)
|
||||
|
||||
### With Verification
|
||||
|
||||
All conclusions must be verified with [evidence-based completion](/claudekit/skills/methodology/verification).
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Number Your Evidence
|
||||
|
||||
Makes it easy to reference: "E1 and E3 support Hypothesis A"
|
||||
|
||||
### Update Probabilities
|
||||
|
||||
As you gather evidence, adjust hypothesis probabilities
|
||||
|
||||
### Document Contradictions
|
||||
|
||||
Evidence against a hypothesis is as valuable as evidence for it
|
||||
|
||||
### Test Highest Probability First
|
||||
|
||||
Focus effort on most likely causes
|
||||
|
||||
## Common Use Cases
|
||||
|
||||
### Security Analysis
|
||||
|
||||
```markdown
|
||||
Question: Is this authentication bypass a real vulnerability?
|
||||
Evidence: Code review, test results, security logs
|
||||
Hypotheses: Multiple attack vectors
|
||||
Testing: Actual exploit attempts
|
||||
Conclusion: Confirmed vulnerability with 9/10 confidence
|
||||
```
|
||||
|
||||
### Performance Investigation
|
||||
|
||||
```markdown
|
||||
Question: What's causing 95th percentile latency spike?
|
||||
Evidence: Metrics, logs, profiling data
|
||||
Hypotheses: Database, network, algorithm
|
||||
Testing: Controlled experiments
|
||||
Conclusion: Database connection pool exhaustion
|
||||
```
|
||||
|
||||
### Architecture Decision
|
||||
|
||||
```markdown
|
||||
Question: Should we use microservices or monolith?
|
||||
Evidence: Team size, requirements, constraints
|
||||
Hypotheses: Different architectural patterns
|
||||
Testing: Prototype both approaches
|
||||
Conclusion: Monolith recommended with 8/10 confidence
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
After completing sequential analysis:
|
||||
|
||||
1. **Implement fix** based on conclusion
|
||||
2. **Add regression test** to prevent recurrence
|
||||
3. **Document learning** for future reference
|
||||
4. **Review similar code** for related issues
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [Systematic Debugging](/claudekit/skills/methodology/systematic-debugging) - Debugging methodology
|
||||
- [Verification](/claudekit/skills/methodology/verification) - Evidence-based completion
|
||||
- [Root Cause Tracing](/claudekit/skills/methodology/root-cause-tracing) - Deep investigation
|
||||
@@ -1,336 +0,0 @@
|
||||
---
|
||||
title: Systematic Debugging
|
||||
description: Four-phase debugging methodology for finding root causes
|
||||
---
|
||||
|
||||
The Systematic Debugging skill uses a structured four-phase process centered on finding root causes before implementing fixes.
|
||||
|
||||
**Foundational Principle**: NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
|
||||
|
||||
## Overview
|
||||
|
||||
Systematic debugging prevents "whack-a-mole" bug fixing by requiring thorough investigation before any code changes. This approach saves time by fixing the actual problem, not symptoms.
|
||||
|
||||
## When to Use
|
||||
|
||||
- Bug reports with unclear cause
|
||||
- Errors appearing in production
|
||||
- Tests failing unexpectedly
|
||||
- Intermittent/flaky issues
|
||||
- Complex multi-component failures
|
||||
|
||||
## The Four Phases
|
||||
|
||||
### Phase 1: Root Cause Investigation
|
||||
|
||||
**Goal**: Understand what's happening before attempting to fix.
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. **Read error messages carefully**
|
||||
- What is the exact error message?
|
||||
- What is the stack trace?
|
||||
- What line numbers are mentioned?
|
||||
- What values are shown?
|
||||
|
||||
2. **Reproduce consistently**
|
||||
- Can you trigger the bug reliably?
|
||||
- What exact steps reproduce it?
|
||||
- What environment is required?
|
||||
- Document the reproduction steps
|
||||
|
||||
3. **Track recent changes**
|
||||
- What changed recently?
|
||||
- `git log --oneline -20`
|
||||
- When did it last work?
|
||||
- What was deployed?
|
||||
|
||||
4. **Gather evidence**
|
||||
- Collect logs
|
||||
- Check monitoring/metrics
|
||||
- Review related code
|
||||
- Note any patterns
|
||||
|
||||
5. **Add instrumentation** (for multi-component systems)
|
||||
```typescript
|
||||
// Add diagnostic logging at each boundary
|
||||
console.error('[DEBUG] Input received:', JSON.stringify(input));
|
||||
console.error('[DEBUG] After validation:', JSON.stringify(validated));
|
||||
console.error('[DEBUG] Before database call:', JSON.stringify(query));
|
||||
console.error('[DEBUG] Database result:', JSON.stringify(result));
|
||||
```
|
||||
|
||||
### Phase 2: Pattern Analysis
|
||||
|
||||
**Goal**: Find comparable working code to identify differences.
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. **Find working code**
|
||||
- Is there similar functionality that works?
|
||||
- What did this code look like before?
|
||||
- Are there reference implementations?
|
||||
|
||||
2. **Study reference thoroughly**
|
||||
- How does the working version handle this case?
|
||||
- What dependencies does it use?
|
||||
- What assumptions does it make?
|
||||
|
||||
3. **Identify differences**
|
||||
- What's different between working and broken?
|
||||
- Configuration differences?
|
||||
- Data differences?
|
||||
- Environment differences?
|
||||
|
||||
4. **Understand dependencies**
|
||||
- What does this code depend on?
|
||||
- What depends on this code?
|
||||
- Are dependencies behaving correctly?
|
||||
|
||||
### Phase 3: Hypothesis and Testing
|
||||
|
||||
**Goal**: Form and test a specific theory about the cause.
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. **Form specific hypothesis**
|
||||
```markdown
|
||||
Write it down explicitly:
|
||||
"The bug occurs because [X] causes [Y] when [Z]"
|
||||
|
||||
Example:
|
||||
"The bug occurs because the cache returns stale data
|
||||
when the user's session expires during an active request"
|
||||
```
|
||||
|
||||
2. **Test with minimal changes**
|
||||
- Change ONE variable at a time
|
||||
- Don't combine multiple fixes
|
||||
- Verify results after each change
|
||||
|
||||
3. **Validate hypothesis**
|
||||
- Does the fix address the hypothesis?
|
||||
- Can you explain WHY it works?
|
||||
- Does it make the bug impossible, not just unlikely?
|
||||
|
||||
### Phase 4: Implementation
|
||||
|
||||
**Goal**: Fix properly with verification.
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. **Write failing test first**
|
||||
```typescript
|
||||
it('should handle expired session during request', () => {
|
||||
// Reproduce the bug scenario
|
||||
const session = createExpiredSession();
|
||||
const result = processRequest(session);
|
||||
|
||||
// This should fail before the fix
|
||||
expect(result.error).toBe('SESSION_EXPIRED');
|
||||
});
|
||||
```
|
||||
|
||||
2. **Implement single targeted fix**
|
||||
```typescript
|
||||
// Fix addresses root cause, not symptom
|
||||
function processRequest(session: Session) {
|
||||
if (session.isExpired()) {
|
||||
return { error: 'SESSION_EXPIRED' };
|
||||
}
|
||||
// ... rest of logic
|
||||
}
|
||||
```
|
||||
|
||||
3. **Verify fix works**
|
||||
```bash
|
||||
npm test -- --grep "expired session"
|
||||
# Should pass
|
||||
```
|
||||
|
||||
4. **Verify no regressions**
|
||||
```bash
|
||||
npm test
|
||||
# All tests should pass
|
||||
```
|
||||
|
||||
## The Three-Fix Rule
|
||||
|
||||
**If three or more fixes fail consecutively, STOP.**
|
||||
|
||||
This signals an architectural problem, not a simple bug:
|
||||
|
||||
```markdown
|
||||
Fix attempt 1: Failed
|
||||
Fix attempt 2: Failed
|
||||
Fix attempt 3: Failed
|
||||
|
||||
STOP: This is not a bug - this is a design problem.
|
||||
|
||||
Action: Discuss with user/team before proceeding
|
||||
- Explain what's been tried
|
||||
- Explain why it's not working
|
||||
- Propose architectural changes
|
||||
```
|
||||
|
||||
## Key Principles
|
||||
|
||||
### Never Skip Error Details
|
||||
|
||||
```
|
||||
❌ BAD: "There's an error somewhere"
|
||||
✅ GOOD: "TypeError: Cannot read property 'id' of undefined
|
||||
at UserService.getUser (user-service.ts:42)"
|
||||
```
|
||||
|
||||
### Reproduce Before Investigating
|
||||
|
||||
```
|
||||
❌ BAD: "I think I know what's wrong" (starts coding)
|
||||
✅ GOOD: "Let me reproduce this first" (writes repro steps)
|
||||
```
|
||||
|
||||
### Trace Backward to Origin
|
||||
|
||||
```
|
||||
❌ BAD: Fix where error appears
|
||||
✅ GOOD: Trace data backward to find where it became invalid
|
||||
```
|
||||
|
||||
### One Change Per Test
|
||||
|
||||
```
|
||||
❌ BAD: "I changed A, B, and C - now it works!"
|
||||
(Which one fixed it? Are the others safe?)
|
||||
|
||||
✅ GOOD: "I changed A - still broken.
|
||||
I reverted A and changed B - now it works.
|
||||
B was the fix."
|
||||
```
|
||||
|
||||
## Debugging Checklist
|
||||
|
||||
Before attempting any fix:
|
||||
|
||||
- [ ] Error message fully read and understood
|
||||
- [ ] Bug reproduced consistently
|
||||
- [ ] Recent changes reviewed
|
||||
- [ ] Evidence gathered (logs, traces)
|
||||
- [ ] Hypothesis written down
|
||||
- [ ] Similar working code identified
|
||||
- [ ] Root cause identified (not just symptom)
|
||||
|
||||
Before declaring fixed:
|
||||
|
||||
- [ ] Failing test written
|
||||
- [ ] Fix implemented
|
||||
- [ ] Test passes
|
||||
- [ ] No regressions (full test suite passes)
|
||||
- [ ] Fix explained (can articulate why it works)
|
||||
|
||||
## Activation
|
||||
|
||||
```bash
|
||||
/fix "timeout error in auth service"
|
||||
/debug --systematic "flaky test"
|
||||
/feature --debug-mode "fix login bug"
|
||||
```
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
### With TDD
|
||||
|
||||
1. Reproduce bug with failing test (TDD red)
|
||||
2. Investigate root cause (Debugging)
|
||||
3. Fix root cause (TDD green)
|
||||
4. Verify test passes (TDD verify)
|
||||
|
||||
### With Sequential Thinking
|
||||
|
||||
For complex bugs, combine with [sequential thinking](/claudekit/skills/methodology/sequential-thinking):
|
||||
- Document evidence systematically
|
||||
- Form hypotheses with confidence scores
|
||||
- Test hypotheses methodically
|
||||
|
||||
### With Verification
|
||||
|
||||
Always verify fix with [verification before completion](/claudekit/skills/methodology/verification):
|
||||
- Run test before fix (must fail)
|
||||
- Run test after fix (must pass)
|
||||
- Run full suite (must pass)
|
||||
|
||||
## Example Debugging Session
|
||||
|
||||
```markdown
|
||||
## Bug: Users logged out randomly
|
||||
|
||||
### Phase 1: Investigation
|
||||
- Error: "Session not found" in production logs
|
||||
- Reproduces: Yes, after 30-45 minutes of inactivity
|
||||
- Recent changes: Session timeout increased to 1 hour (commit abc123)
|
||||
- Evidence: Session exists in Redis, but app can't find it
|
||||
|
||||
### Phase 2: Pattern Analysis
|
||||
- Working code: Login endpoint creates sessions correctly
|
||||
- Difference: Session keys use different format after timeout change
|
||||
- Key format before: `sess:user-id`
|
||||
- Key format after: `session:user-id`
|
||||
|
||||
### Phase 3: Hypothesis
|
||||
"The timeout change introduced a key format mismatch. Old sessions use
|
||||
'sess:' prefix, new code looks for 'session:' prefix."
|
||||
|
||||
Test: Check Redis for both key formats
|
||||
Result: Confirmed - old keys exist with 'sess:' prefix
|
||||
|
||||
### Phase 4: Implementation
|
||||
1. Test: Verify session lookup handles both formats
|
||||
2. Fix: Update lookup to check both prefixes
|
||||
3. Verify: Test passes, no more random logouts
|
||||
4. Full suite: All tests pass
|
||||
|
||||
## Root Cause
|
||||
Key prefix changed in commit abc123 without migration of existing sessions.
|
||||
|
||||
## Fix
|
||||
Check both 'sess:' and 'session:' prefixes during lookup until old sessions expire.
|
||||
```
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
### Fixing Symptoms
|
||||
|
||||
```
|
||||
❌ "Error happens at line 42, I'll add a try-catch"
|
||||
✅ "Why does line 42 error? What's the invalid data?"
|
||||
```
|
||||
|
||||
### Shotgun Debugging
|
||||
|
||||
```
|
||||
❌ "Let me try changing A, B, C, D and see what happens"
|
||||
✅ "I hypothesize A is the cause. Let me test only A."
|
||||
```
|
||||
|
||||
### Assuming vs. Verifying
|
||||
|
||||
```
|
||||
❌ "The cache is probably stale"
|
||||
✅ "Let me check the cache: console.log(cache.get(key))"
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
After successful debugging:
|
||||
|
||||
1. **Add regression test**: Ensure bug can't return
|
||||
2. **Document root cause**: Help future debugging
|
||||
3. **Review related code**: Are there similar issues?
|
||||
4. **Update monitoring**: Catch this class of bug earlier
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [TDD](/claudekit/skills/methodology/tdd) - Write failing test first
|
||||
- [Sequential Thinking](/claudekit/skills/methodology/sequential-thinking) - Evidence-based analysis
|
||||
- [Verification](/claudekit/skills/methodology/verification) - Prove the fix works
|
||||
- [Root Cause Tracing](/claudekit/skills/methodology/root-cause-tracing) - Deep investigation
|
||||
@@ -1,436 +0,0 @@
|
||||
---
|
||||
title: Test-Driven Development (TDD)
|
||||
description: Strict test-first development methodology
|
||||
---
|
||||
|
||||
The TDD skill enforces test-driven development with the fundamental rule: "If you didn't watch the test fail, you don't know if it tests the right thing."
|
||||
|
||||
## Overview
|
||||
|
||||
Test-Driven Development is a methodology where tests are written before production code. This ensures code is designed to be testable and that tests actually verify the intended behavior.
|
||||
|
||||
**Non-Negotiable Rule**: NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
|
||||
|
||||
## When to Use
|
||||
|
||||
- New feature development
|
||||
- Bug fixes (write test that reproduces bug first)
|
||||
- Refactoring (ensure tests exist before changing)
|
||||
- Any behavior change
|
||||
|
||||
## When NOT to Use
|
||||
|
||||
Requires explicit approval:
|
||||
- Throwaway prototypes
|
||||
- Generated/scaffolded code
|
||||
- Pure configuration changes
|
||||
|
||||
## The Red-Green-Refactor Cycle
|
||||
|
||||
### 1. RED: Write Failing Test
|
||||
|
||||
Write a minimal test demonstrating the desired behavior:
|
||||
|
||||
```typescript
|
||||
describe('calculateTotal', () => {
|
||||
it('should sum item prices', () => {
|
||||
const items = [{ price: 10 }, { price: 20 }];
|
||||
expect(calculateTotal(items)).toBe(30);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
### 2. VERIFY RED: Confirm Test Fails
|
||||
|
||||
Run the test and confirm it fails **for the right reason**:
|
||||
|
||||
```bash
|
||||
npm test -- --grep "sum item prices"
|
||||
# Expected: FAIL
|
||||
# Reason: calculateTotal is not defined
|
||||
```
|
||||
|
||||
**Critical**: The failure should be because the feature doesn't exist, not because of typos or syntax errors.
|
||||
|
||||
### 3. GREEN: Write Minimal Code
|
||||
|
||||
Write the simplest code that makes the test pass:
|
||||
|
||||
```typescript
|
||||
function calculateTotal(items: Item[]): number {
|
||||
return items.reduce((sum, item) => sum + item.price, 0);
|
||||
}
|
||||
```
|
||||
|
||||
**Don't over-engineer**. If the test passes with simple code, stop.
|
||||
|
||||
### 4. VERIFY GREEN: Confirm Test Passes
|
||||
|
||||
```bash
|
||||
npm test -- --grep "sum item prices"
|
||||
# Expected: PASS
|
||||
```
|
||||
|
||||
### 5. REFACTOR: Clean Up
|
||||
|
||||
With green tests, refactor safely:
|
||||
- Extract functions
|
||||
- Rename variables
|
||||
- Remove duplication
|
||||
- Run tests after each change
|
||||
|
||||
## The Rule
|
||||
|
||||
**NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST**
|
||||
|
||||
This is not a guideline. It's a rule.
|
||||
|
||||
### What If I Already Wrote Code?
|
||||
|
||||
Delete it. Completely.
|
||||
|
||||
```
|
||||
❌ WRONG: "I'll keep this code as reference while writing tests"
|
||||
✅ RIGHT: Delete the code, write test, rewrite implementation
|
||||
```
|
||||
|
||||
### Why So Strict?
|
||||
|
||||
- Code written before tests wasn't driven by tests
|
||||
- Keeping it as reference leads to rationalization
|
||||
- Tests written after code often just verify what was written
|
||||
- True TDD produces different (usually better) designs
|
||||
|
||||
## Test Quality Standards
|
||||
|
||||
### One Behavior Per Test
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Multiple behaviors
|
||||
it('should validate and save user', () => {
|
||||
expect(validateUser(user)).toBe(true);
|
||||
expect(saveUser(user)).toBe(1);
|
||||
});
|
||||
|
||||
// ✅ GOOD: Single behavior
|
||||
it('should validate user email format', () => {
|
||||
expect(validateUser({ email: 'test@example.com' })).toBe(true);
|
||||
});
|
||||
|
||||
it('should save valid user', () => {
|
||||
const user = createValidUser();
|
||||
expect(saveUser(user)).toBe(1);
|
||||
});
|
||||
```
|
||||
|
||||
### Clear Naming
|
||||
|
||||
Test names should describe the behavior:
|
||||
|
||||
```typescript
|
||||
// ❌ BAD
|
||||
it('test1', () => {});
|
||||
it('calculateTotal', () => {});
|
||||
|
||||
// ✅ GOOD
|
||||
it('should return 0 for empty cart', () => {});
|
||||
it('should apply discount when coupon is valid', () => {});
|
||||
```
|
||||
|
||||
### Real Code Over Mocks
|
||||
|
||||
Use real implementations when possible:
|
||||
|
||||
```typescript
|
||||
// ✅ PREFER: Real database (test container)
|
||||
const db = await startTestDatabase();
|
||||
const result = await userRepo.save(user);
|
||||
|
||||
// ⚠️ AVOID: Excessive mocking
|
||||
const mockDb = { save: jest.fn().mockResolvedValue(1) };
|
||||
```
|
||||
|
||||
### Test Observable Behavior
|
||||
|
||||
Test what the code does, not how it does it:
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Testing implementation
|
||||
it('should call helper function', () => {
|
||||
calculateTotal(items);
|
||||
expect(helperFn).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
// ✅ GOOD: Testing behavior
|
||||
it('should return correct total', () => {
|
||||
expect(calculateTotal(items)).toBe(30);
|
||||
});
|
||||
```
|
||||
|
||||
## Edge Cases to Test
|
||||
|
||||
Always include tests for:
|
||||
|
||||
- Empty inputs
|
||||
- Null/undefined values
|
||||
- Boundary conditions
|
||||
- Error scenarios
|
||||
- Large inputs
|
||||
- Invalid inputs
|
||||
|
||||
```typescript
|
||||
describe('calculateTotal', () => {
|
||||
it('should return 0 for empty array', () => {
|
||||
expect(calculateTotal([])).toBe(0);
|
||||
});
|
||||
|
||||
it('should handle null items array', () => {
|
||||
expect(() => calculateTotal(null)).toThrow();
|
||||
});
|
||||
|
||||
it('should handle negative prices', () => {
|
||||
const items = [{ price: -10 }, { price: 20 }];
|
||||
expect(calculateTotal(items)).toBe(10);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## Common Rationalizations
|
||||
|
||||
### "I'll write tests after"
|
||||
|
||||
**Rejected**. Tests written after code verify what was written, not what should happen.
|
||||
|
||||
### "Manual testing is enough"
|
||||
|
||||
**Rejected**. Ad-hoc testing is not systematic, misses edge cases, and doesn't prevent regressions.
|
||||
|
||||
### "This code is too simple to test"
|
||||
|
||||
**Rejected**. Simple code breaks too. A test takes seconds and provides permanent verification.
|
||||
|
||||
### "I don't have time"
|
||||
|
||||
**Rejected**. TDD is faster in the medium term. Debugging time saved far exceeds test-writing time.
|
||||
|
||||
### "I already wrote it, might as well keep it"
|
||||
|
||||
**Rejected**. Sunk cost fallacy. Delete and rewrite properly.
|
||||
|
||||
## TDD Workflow Example
|
||||
|
||||
### Bug Fix with TDD
|
||||
|
||||
```typescript
|
||||
// 1. RED: Write test that reproduces bug
|
||||
it('should handle expired session gracefully', () => {
|
||||
const session = createExpiredSession();
|
||||
const result = processRequest(session);
|
||||
expect(result.error).toBe('SESSION_EXPIRED');
|
||||
});
|
||||
|
||||
// 2. VERIFY RED: Confirm test fails
|
||||
// npm test → FAIL (current code crashes or returns wrong error)
|
||||
|
||||
// 3. GREEN: Fix the bug
|
||||
function processRequest(session: Session) {
|
||||
if (session.isExpired()) {
|
||||
return { error: 'SESSION_EXPIRED' };
|
||||
}
|
||||
// ... rest of logic
|
||||
}
|
||||
|
||||
// 4. VERIFY GREEN: Confirm test passes
|
||||
// npm test → PASS
|
||||
|
||||
// 5. Commit with test
|
||||
// git commit -m "fix: handle expired session gracefully"
|
||||
```
|
||||
|
||||
### New Feature with TDD
|
||||
|
||||
```typescript
|
||||
// 1. RED: Write test for feature
|
||||
it('should calculate discount for premium users', () => {
|
||||
const user = { type: 'premium' };
|
||||
const price = 100;
|
||||
expect(calculatePrice(user, price)).toBe(90); // 10% off
|
||||
});
|
||||
|
||||
// 2. VERIFY RED
|
||||
// npm test → FAIL (calculatePrice doesn't consider user type)
|
||||
|
||||
// 3. GREEN: Implement feature
|
||||
function calculatePrice(user: User, price: number): number {
|
||||
if (user.type === 'premium') {
|
||||
return price * 0.9;
|
||||
}
|
||||
return price;
|
||||
}
|
||||
|
||||
// 4. VERIFY GREEN
|
||||
// npm test → PASS
|
||||
|
||||
// 5. REFACTOR: Extract discount logic
|
||||
function getDiscount(user: User): number {
|
||||
return user.type === 'premium' ? 0.1 : 0;
|
||||
}
|
||||
|
||||
function calculatePrice(user: User, price: number): number {
|
||||
const discount = getDiscount(user);
|
||||
return price * (1 - discount);
|
||||
}
|
||||
|
||||
// 6. VERIFY still GREEN
|
||||
// npm test → PASS
|
||||
```
|
||||
|
||||
## Activation
|
||||
|
||||
### Via Command
|
||||
|
||||
```bash
|
||||
/tdd "add user authentication"
|
||||
/feature --methodology=tdd "payment processing"
|
||||
```
|
||||
|
||||
### Automatic in Plans
|
||||
|
||||
When using [Writing Plans](/claudekit/skills/methodology/writing-plans), every task follows TDD automatically.
|
||||
|
||||
### During Execution
|
||||
|
||||
[Executing Plans](/claudekit/skills/methodology/executing-plans) enforces TDD for each task.
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
### With Writing Plans
|
||||
|
||||
Plans include TDD steps for every task:
|
||||
|
||||
```markdown
|
||||
1. Write failing test
|
||||
2. Verify test fails
|
||||
3. Implement minimally
|
||||
4. Verify test passes
|
||||
5. Commit
|
||||
```
|
||||
|
||||
### With Verification
|
||||
|
||||
[Verification](/claudekit/skills/methodology/verification) ensures:
|
||||
- Tests actually fail before implementation
|
||||
- Tests pass after implementation
|
||||
- Full suite remains green
|
||||
|
||||
### With Testing Anti-Patterns
|
||||
|
||||
[Testing Anti-Patterns](/claudekit/skills/methodology/testing-anti-patterns) prevents:
|
||||
- Testing mocks instead of real code
|
||||
- Incomplete mocks
|
||||
- Over-mocking
|
||||
- Afterthought tests
|
||||
|
||||
## Benefits
|
||||
|
||||
### TDD Catches Bugs Early
|
||||
|
||||
- Writing test first forces you to think about edge cases
|
||||
- Seeing test fail proves it can catch failures
|
||||
- Green bar confirms the fix works
|
||||
- Test prevents regression forever
|
||||
|
||||
### TDD Improves Design
|
||||
|
||||
- Forces consideration of interfaces before implementation
|
||||
- Encourages small, focused functions
|
||||
- Makes dependencies explicit
|
||||
- Results in more testable code
|
||||
|
||||
### TDD Saves Time
|
||||
|
||||
Prevents this cycle:
|
||||
1. Write code
|
||||
2. Manual test (miss edge case)
|
||||
3. Ship
|
||||
4. Bug reported
|
||||
5. Debug
|
||||
6. Fix
|
||||
7. Ship again
|
||||
|
||||
With TDD:
|
||||
1. Write test
|
||||
2. See it fail
|
||||
3. Implement
|
||||
4. See it pass
|
||||
5. Ship confidently
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Keep Tests Fast
|
||||
|
||||
```typescript
|
||||
// ✅ Fast tests
|
||||
it('should validate email format', () => {
|
||||
expect(validateEmail('test@example.com')).toBe(true);
|
||||
});
|
||||
|
||||
// ⚠️ Slow tests (when avoidable)
|
||||
it('should validate email', async () => {
|
||||
await db.connect();
|
||||
await db.query('SELECT ...');
|
||||
// Use test doubles for unit tests
|
||||
});
|
||||
```
|
||||
|
||||
### Test Behavior, Not Implementation
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Brittle implementation test
|
||||
it('should call emailService.send', () => {
|
||||
registerUser(data);
|
||||
expect(emailService.send).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
// ✅ GOOD: Behavior test
|
||||
it('should send welcome email to new user', async () => {
|
||||
await registerUser({ email: 'test@example.com' });
|
||||
const emails = await getTestEmails();
|
||||
expect(emails).toContainEqual(
|
||||
expect.objectContaining({
|
||||
to: 'test@example.com',
|
||||
subject: 'Welcome'
|
||||
})
|
||||
);
|
||||
});
|
||||
```
|
||||
|
||||
### Arrange-Act-Assert Pattern
|
||||
|
||||
```typescript
|
||||
it('should calculate total with tax', () => {
|
||||
// Arrange
|
||||
const items = [{ price: 100 }];
|
||||
const taxRate = 0.1;
|
||||
|
||||
// Act
|
||||
const total = calculateTotalWithTax(items, taxRate);
|
||||
|
||||
// Assert
|
||||
expect(total).toBe(110);
|
||||
});
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
- Use with [Writing Plans](/claudekit/skills/methodology/writing-plans) for structured TDD
|
||||
- Combine with [Code Review](/claudekit/skills/methodology/code-review) for quality
|
||||
- Avoid [Testing Anti-Patterns](/claudekit/skills/methodology/testing-anti-patterns)
|
||||
- Enforce with [Verification](/claudekit/skills/methodology/verification)
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [Writing Plans](/claudekit/skills/methodology/writing-plans) - Plans include TDD steps
|
||||
- [Executing Plans](/claudekit/skills/methodology/executing-plans) - Enforces TDD per task
|
||||
- [Testing Anti-Patterns](/claudekit/skills/methodology/testing-anti-patterns) - Avoid mistakes
|
||||
- [Verification](/claudekit/skills/methodology/verification) - Prove tests work
|
||||
@@ -1,376 +0,0 @@
|
||||
---
|
||||
title: Testing Anti-Patterns
|
||||
description: Common testing mistakes that create false confidence
|
||||
---
|
||||
|
||||
The Testing Anti-Patterns skill helps recognize and avoid common testing mistakes that make tests pass while failing to verify actual behavior.
|
||||
|
||||
## Overview
|
||||
|
||||
Tests can provide false confidence when they verify mocks instead of real behavior, pollute production code, or are written as afterthoughts. This skill identifies these patterns and provides solutions.
|
||||
|
||||
## When to Use
|
||||
|
||||
- Writing new tests
|
||||
- Reviewing test code
|
||||
- Debugging flaky or unreliable tests
|
||||
- When tests pass but bugs still ship
|
||||
|
||||
## The Five Anti-Patterns
|
||||
|
||||
### 1. Testing Mock Behavior Instead of Real Code
|
||||
|
||||
**The Problem**: Tests verify mocks work, not that actual code works.
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Testing the mock
|
||||
it('should call the database', () => {
|
||||
const mockDb = { save: jest.fn().mockResolvedValue({ id: 1 }) };
|
||||
const service = new UserService(mockDb);
|
||||
|
||||
await service.createUser({ name: 'Test' });
|
||||
|
||||
expect(mockDb.save).toHaveBeenCalled(); // Only proves mock was called
|
||||
});
|
||||
```
|
||||
|
||||
**The Solution**: Test actual behavior with real (or realistic) dependencies.
|
||||
|
||||
```typescript
|
||||
// ✅ GOOD: Testing real behavior
|
||||
it('should persist user to database', async () => {
|
||||
const db = await createTestDatabase();
|
||||
const service = new UserService(db);
|
||||
|
||||
const result = await service.createUser({ name: 'Test' });
|
||||
|
||||
const saved = await db.findById(result.id);
|
||||
expect(saved.name).toBe('Test'); // Proves data was actually saved
|
||||
});
|
||||
```
|
||||
|
||||
**Key Principle**: Test what the code does, not what the mocks do.
|
||||
|
||||
### 2. Polluting Production with Test-Only Methods
|
||||
|
||||
**The Problem**: Adding methods to production code solely for test cleanup or access.
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Production class with test-only method
|
||||
class ConnectionPool {
|
||||
private connections: Connection[] = [];
|
||||
|
||||
// This method exists only for tests
|
||||
destroy(): void { // DON'T DO THIS
|
||||
this.connections.forEach(c => c.close());
|
||||
this.connections = [];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**The Solution**: Handle cleanup in test utilities, not production code.
|
||||
|
||||
```typescript
|
||||
// ✅ GOOD: Test utility handles cleanup
|
||||
// test-utils/connection-pool.ts
|
||||
export async function withTestPool(fn: (pool: ConnectionPool) => Promise<void>) {
|
||||
const pool = new ConnectionPool();
|
||||
try {
|
||||
await fn(pool);
|
||||
} finally {
|
||||
// Cleanup handled by test infrastructure
|
||||
await closeAllConnections(pool);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Key Principle**: Production code should never know it's being tested.
|
||||
|
||||
### 3. Mocking Without Understanding Dependencies
|
||||
|
||||
**The Problem**: Over-mocking to "be safe" removes behavior the test actually depends on.
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Mocking everything blindly
|
||||
it('should process order', () => {
|
||||
jest.mock('./inventory'); // What does this mock?
|
||||
jest.mock('./payment'); // Did we need to mock this?
|
||||
jest.mock('./shipping'); // This might break the test logic
|
||||
|
||||
const result = processOrder(order);
|
||||
expect(result.status).toBe('complete');
|
||||
});
|
||||
```
|
||||
|
||||
**The Solution**: Understand what each dependency does before mocking it.
|
||||
|
||||
```typescript
|
||||
// ✅ GOOD: Selective, understood mocking
|
||||
it('should process order when payment succeeds', () => {
|
||||
// Only mock external service (payment gateway)
|
||||
// Keep inventory and shipping real for integration test
|
||||
const paymentGateway = createMockPaymentGateway({
|
||||
chargeResult: { success: true, transactionId: 'txn-123' }
|
||||
});
|
||||
|
||||
const result = processOrder(order, { paymentGateway });
|
||||
|
||||
expect(result.status).toBe('complete');
|
||||
expect(result.transactionId).toBe('txn-123');
|
||||
});
|
||||
```
|
||||
|
||||
**Key Principle**: Mock at boundaries, not internally.
|
||||
|
||||
### 4. Creating Incomplete Mocks
|
||||
|
||||
**The Problem**: Partial mocks that only include known fields, hiding structural assumptions.
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Incomplete mock
|
||||
const mockApiResponse = {
|
||||
data: { users: [] }
|
||||
// Missing: status, headers, pagination, errors
|
||||
};
|
||||
|
||||
it('should handle API response', () => {
|
||||
fetchMock.mockResolvedValue(mockApiResponse);
|
||||
const result = await getUsers();
|
||||
expect(result).toEqual([]);
|
||||
});
|
||||
// Test passes, but production fails when accessing response.pagination
|
||||
```
|
||||
|
||||
**The Solution**: Create complete mocks that match real API responses.
|
||||
|
||||
```typescript
|
||||
// ✅ GOOD: Complete mock matching real response structure
|
||||
const mockApiResponse = {
|
||||
status: 200,
|
||||
headers: { 'content-type': 'application/json' },
|
||||
data: {
|
||||
users: [],
|
||||
pagination: { page: 1, total: 0, hasMore: false },
|
||||
errors: null
|
||||
}
|
||||
};
|
||||
|
||||
it('should handle empty API response', () => {
|
||||
fetchMock.mockResolvedValue(mockApiResponse);
|
||||
const result = await getUsers();
|
||||
expect(result.users).toEqual([]);
|
||||
expect(result.hasMore).toBe(false);
|
||||
});
|
||||
```
|
||||
|
||||
**Key Principle**: Mocks should be indistinguishable from real responses.
|
||||
|
||||
### 5. Writing Tests as Afterthoughts
|
||||
|
||||
**The Problem**: Treating testing as optional follow-up work rather than integral to development.
|
||||
|
||||
```typescript
|
||||
// ❌ BAD: Tests written after code, just verifying what exists
|
||||
it('should do what the function does', () => {
|
||||
// This test was written by looking at the implementation
|
||||
// It tests the current behavior, not the intended behavior
|
||||
const result = processData(input);
|
||||
expect(result).toMatchSnapshot(); // "Whatever it does is correct"
|
||||
});
|
||||
```
|
||||
|
||||
**The Solution**: Use TDD - tests define requirements before implementation.
|
||||
|
||||
```typescript
|
||||
// ✅ GOOD: Test written first, defines requirement
|
||||
it('should filter inactive users from report', () => {
|
||||
const users = [
|
||||
{ id: 1, name: 'Alice', active: true },
|
||||
{ id: 2, name: 'Bob', active: false }
|
||||
];
|
||||
|
||||
const report = generateReport(users);
|
||||
|
||||
expect(report.users).toHaveLength(1);
|
||||
expect(report.users[0].name).toBe('Alice');
|
||||
});
|
||||
// Now implement generateReport to make this pass
|
||||
```
|
||||
|
||||
**Key Principle**: TDD prevents all these anti-patterns naturally.
|
||||
|
||||
## Recognition Guide
|
||||
|
||||
| Symptom | Likely Anti-Pattern |
|
||||
|---------|---------------------|
|
||||
| Tests pass but bugs ship | #1 Testing mocks |
|
||||
| `destroy()` or `reset()` in production | #2 Test pollution |
|
||||
| "I mocked that to be safe" | #3 Blind mocking |
|
||||
| TypeError in production, not tests | #4 Incomplete mocks |
|
||||
| Tests feel like documentation | #5 Afterthought tests |
|
||||
|
||||
## Prevention Checklist
|
||||
|
||||
Before committing tests, verify:
|
||||
|
||||
- [ ] Tests use real dependencies where possible
|
||||
- [ ] Mocks are for external boundaries only
|
||||
- [ ] No production code exists solely for tests
|
||||
- [ ] Mock structures match real API responses
|
||||
- [ ] Tests were written before implementation (TDD)
|
||||
- [ ] Tests verify behavior, not implementation details
|
||||
|
||||
## Core Principle
|
||||
|
||||
**"Mocks are tools to isolate, not things to test."**
|
||||
|
||||
Mocks help you:
|
||||
- Isolate unit under test
|
||||
- Control external dependencies
|
||||
- Speed up slow operations (network, disk)
|
||||
|
||||
Mocks should never:
|
||||
- Be the thing you're verifying
|
||||
- Hide bugs in dependencies
|
||||
- Create false confidence
|
||||
|
||||
## Good Mocking Practices
|
||||
|
||||
### Mock External Services Only
|
||||
|
||||
```typescript
|
||||
// ✅ GOOD: Mock external API
|
||||
const mockStripeApi = {
|
||||
charges: {
|
||||
create: jest.fn().mockResolvedValue({ id: 'ch_123' })
|
||||
}
|
||||
};
|
||||
|
||||
// ✅ GOOD: Keep business logic real
|
||||
const paymentService = new PaymentService(mockStripeApi);
|
||||
const result = await paymentService.processPayment(order);
|
||||
```
|
||||
|
||||
### Use Test Containers for Databases
|
||||
|
||||
```typescript
|
||||
// ✅ BETTER: Use real database (in Docker)
|
||||
import { PostgreSqlContainer } from 'testcontainers';
|
||||
|
||||
let container: PostgreSqlContainer;
|
||||
let db: Database;
|
||||
|
||||
beforeAll(async () => {
|
||||
container = await new PostgreSqlContainer().start();
|
||||
db = await createDatabase(container.getConnectionString());
|
||||
});
|
||||
|
||||
it('should save user', async () => {
|
||||
const user = await db.users.create({ name: 'Test' });
|
||||
expect(user.id).toBeDefined();
|
||||
});
|
||||
```
|
||||
|
||||
### Create Mock Factories
|
||||
|
||||
```typescript
|
||||
// ✅ GOOD: Centralized, complete mocks
|
||||
function createMockUser(overrides: Partial<User> = {}): User {
|
||||
return {
|
||||
id: '123',
|
||||
email: 'test@example.com',
|
||||
name: 'Test User',
|
||||
role: 'user',
|
||||
active: true,
|
||||
createdAt: new Date(),
|
||||
...overrides
|
||||
};
|
||||
}
|
||||
|
||||
// Tests use complete, consistent mocks
|
||||
it('should greet admin', () => {
|
||||
const admin = createMockUser({ role: 'admin' });
|
||||
expect(greet(admin)).toBe('Hello Admin!');
|
||||
});
|
||||
```
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
### With TDD
|
||||
|
||||
[TDD](/claudekit/skills/methodology/tdd) naturally prevents anti-patterns:
|
||||
- Tests written first define real requirements
|
||||
- Can't test mocks when no mocks exist yet
|
||||
- Forces thinking about actual behavior
|
||||
|
||||
### With Verification
|
||||
|
||||
[Verification](/claudekit/skills/methodology/verification) ensures:
|
||||
- Tests actually run (not just mocked)
|
||||
- Tests verify real behavior
|
||||
- Evidence of actual execution
|
||||
|
||||
### With Code Review
|
||||
|
||||
[Code Review](/claudekit/skills/methodology/code-review) should catch:
|
||||
- Over-mocking in tests
|
||||
- Test pollution in production
|
||||
- Incomplete mock structures
|
||||
|
||||
## Examples of Good Tests
|
||||
|
||||
### Integration Test (Preferred)
|
||||
|
||||
```typescript
|
||||
it('should create user and send welcome email', async () => {
|
||||
const db = await createTestDatabase();
|
||||
const emailService = new TestEmailService();
|
||||
const userService = new UserService(db, emailService);
|
||||
|
||||
const user = await userService.create({
|
||||
email: 'new@example.com',
|
||||
name: 'New User'
|
||||
});
|
||||
|
||||
// Verify database persistence
|
||||
const saved = await db.users.findById(user.id);
|
||||
expect(saved.email).toBe('new@example.com');
|
||||
|
||||
// Verify email sent
|
||||
const emails = emailService.getSentEmails();
|
||||
expect(emails).toHaveLength(1);
|
||||
expect(emails[0].to).toBe('new@example.com');
|
||||
});
|
||||
```
|
||||
|
||||
### Unit Test with Minimal Mocking
|
||||
|
||||
```typescript
|
||||
it('should calculate total with tax', () => {
|
||||
const items = [
|
||||
{ price: 100, taxable: true },
|
||||
{ price: 50, taxable: false }
|
||||
];
|
||||
|
||||
const total = calculateTotal(items, 0.1); // 10% tax
|
||||
|
||||
expect(total).toBe(160); // 100 + 10 (tax) + 50
|
||||
});
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
To improve test quality:
|
||||
|
||||
1. **Review existing tests** for these anti-patterns
|
||||
2. **Use TDD** for new features
|
||||
3. **Prefer integration tests** over heavily mocked unit tests
|
||||
4. **Mock only at boundaries** (external APIs, file system)
|
||||
5. **Create complete mocks** matching real structures
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [TDD](/claudekit/skills/methodology/tdd) - Prevents afterthought tests
|
||||
- [Verification](/claudekit/skills/methodology/verification) - Ensures tests run
|
||||
- [Code Review](/claudekit/skills/methodology/code-review) - Catches anti-patterns
|
||||
- [Systematic Debugging](/claudekit/skills/methodology/systematic-debugging) - Investigates test failures
|
||||
@@ -1,394 +0,0 @@
|
||||
---
|
||||
title: Verification Before Completion
|
||||
description: Mandatory verification before claiming task completion
|
||||
---
|
||||
|
||||
The Verification Before Completion skill enforces evidence-based completion rather than assumption-based claims.
|
||||
|
||||
**Core Rule**: Never claim completion without proof
|
||||
|
||||
## Overview
|
||||
|
||||
This skill prevents premature completion claims by requiring actual verification for every assertion. Tests must run, builds must complete, and evidence must exist before declaring success.
|
||||
|
||||
## When to Use
|
||||
|
||||
- Before claiming tests pass
|
||||
- Before claiming build succeeds
|
||||
- Before claiming bug is fixed
|
||||
- Before marking any task complete
|
||||
- Before declaring success to user
|
||||
|
||||
## The 5-Step Verification Process
|
||||
|
||||
### Step 1: IDENTIFY
|
||||
|
||||
Determine the command that proves your assertion:
|
||||
|
||||
```markdown
|
||||
Claim: "Tests pass"
|
||||
Verification command: npm test
|
||||
|
||||
Claim: "Build succeeds"
|
||||
Verification command: npm run build
|
||||
|
||||
Claim: "Linting passes"
|
||||
Verification command: npm run lint
|
||||
```
|
||||
|
||||
### Step 2: EXECUTE
|
||||
|
||||
Run the command fully and freshly:
|
||||
|
||||
```bash
|
||||
# Don't rely on cached results
|
||||
# Don't assume previous run is still valid
|
||||
npm test
|
||||
```
|
||||
|
||||
### Step 3: READ
|
||||
|
||||
Read the complete output and exit codes:
|
||||
|
||||
```bash
|
||||
# Check output carefully
|
||||
# Don't skim - read every line
|
||||
# Note exit code (0 = success)
|
||||
```
|
||||
|
||||
### Step 4: VERIFY
|
||||
|
||||
Confirm the output matches your claim:
|
||||
|
||||
```markdown
|
||||
Claim: "All tests pass"
|
||||
Output shows: "42 passing, 0 failing"
|
||||
Verification: ✓ Claim is accurate
|
||||
```
|
||||
|
||||
### Step 5: CLAIM
|
||||
|
||||
Only now make the claim, with evidence:
|
||||
|
||||
```markdown
|
||||
✓ All tests pass (42 passing, verified at 2025-01-29 14:30)
|
||||
```
|
||||
|
||||
## Required Validations by Category
|
||||
|
||||
### Testing
|
||||
|
||||
```bash
|
||||
# Run test command
|
||||
npm test
|
||||
|
||||
# Verify in output:
|
||||
# - Zero failures
|
||||
# - Expected test count
|
||||
# - No skipped tests (unless intentional)
|
||||
```
|
||||
|
||||
**Not valid**: "Tests should pass" without running them
|
||||
|
||||
### Linting
|
||||
|
||||
```bash
|
||||
# Run linter completely
|
||||
npm run lint
|
||||
|
||||
# Verify in output:
|
||||
# - Zero errors
|
||||
# - Zero warnings (or acceptable known warnings)
|
||||
```
|
||||
|
||||
**Not valid**: Using lint as proxy for build success
|
||||
|
||||
### Building
|
||||
|
||||
```bash
|
||||
# Run build command
|
||||
npm run build
|
||||
|
||||
# Verify:
|
||||
# - Exit code 0
|
||||
# - Build artifacts created
|
||||
# - No errors in output
|
||||
```
|
||||
|
||||
**Not valid**: Assuming lint passing means build passes
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
```bash
|
||||
# Step 1: Reproduce original bug
|
||||
npm test -- --grep "failing test"
|
||||
# Should fail
|
||||
|
||||
# Step 2: Apply fix
|
||||
|
||||
# Step 3: Verify fix works
|
||||
npm test -- --grep "failing test"
|
||||
# Should pass
|
||||
```
|
||||
|
||||
**Not valid**: Claiming fix works without reproducing original failure
|
||||
|
||||
### Regression Tests
|
||||
|
||||
Complete red-green cycle required:
|
||||
|
||||
```bash
|
||||
# 1. Write test, run it
|
||||
npm test # Should PASS with new test
|
||||
|
||||
# 2. Revert the fix
|
||||
git stash
|
||||
|
||||
# 3. Run test again
|
||||
npm test # Should FAIL (proves test catches the bug)
|
||||
|
||||
# 4. Restore fix
|
||||
git stash pop
|
||||
|
||||
# 5. Run test again
|
||||
npm test # Should PASS
|
||||
```
|
||||
|
||||
## Forbidden Language
|
||||
|
||||
Never use these phrases without verification:
|
||||
|
||||
| Forbidden | Why |
|
||||
|-----------|-----|
|
||||
| "should work" | Implies uncertainty |
|
||||
| "probably fixed" | Not verified |
|
||||
| "seems to pass" | Didn't read output |
|
||||
| "I think it's done" | Guessing |
|
||||
| "Great!" (before checking) | Premature celebration |
|
||||
| "Done!" (before verification) | Unverified claim |
|
||||
|
||||
### Replace With
|
||||
|
||||
| Instead Say | After |
|
||||
|-------------|-------|
|
||||
| "Tests pass" | Running tests, seeing 0 failures |
|
||||
| "Build succeeds" | Running build, exit code 0 |
|
||||
| "Bug is fixed" | Reproducing bug, verifying fix |
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
### Partial Verification
|
||||
|
||||
```
|
||||
❌ BAD: "I ran one test and it passed"
|
||||
✅ GOOD: "Full test suite passes (42/42)"
|
||||
```
|
||||
|
||||
### Relying on Prior Runs
|
||||
|
||||
```
|
||||
❌ BAD: "Tests passed earlier"
|
||||
✅ GOOD: "Tests pass now (just ran)"
|
||||
```
|
||||
|
||||
### Skipping Verification
|
||||
|
||||
```
|
||||
❌ BAD: "This is a small change, no need to verify"
|
||||
✅ GOOD: "Small change, but verified: tests pass, lint clean"
|
||||
```
|
||||
|
||||
### Trusting Without Checking
|
||||
|
||||
```
|
||||
❌ BAD: "Agent said it's fixed, so it's fixed"
|
||||
✅ GOOD: "Agent said it's fixed, I verified by running tests"
|
||||
```
|
||||
|
||||
## Verification Checklist Template
|
||||
|
||||
Use before claiming completion:
|
||||
|
||||
```markdown
|
||||
## Task: Add Email Verification
|
||||
|
||||
### Verification Steps
|
||||
- [ ] Tests run: `npm test`
|
||||
- Result: 45 passing, 0 failing
|
||||
- [ ] Lint passes: `npm run lint`
|
||||
- Result: No errors, no warnings
|
||||
- [ ] Build succeeds: `npm run build`
|
||||
- Result: Exit code 0, dist/ created
|
||||
- [ ] Requirements met:
|
||||
- [ ] Users receive verification email (tested manually)
|
||||
- [ ] Token expires after 24 hours (unit test added)
|
||||
- [ ] Invalid tokens rejected (unit test added)
|
||||
|
||||
### Evidence
|
||||
```
|
||||
Test output:
|
||||
PASS src/services/email.test.ts
|
||||
PASS src/services/user.test.ts
|
||||
Test Suites: 2 passed, 2 total
|
||||
Tests: 45 passed, 45 total
|
||||
```
|
||||
|
||||
### Conclusion
|
||||
✓ Task complete, all verifications passed
|
||||
```
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
### With TDD
|
||||
|
||||
[TDD](/claudekit/skills/methodology/tdd) naturally includes verification:
|
||||
1. Write test - verify it fails (red)
|
||||
2. Implement - verify it passes (green)
|
||||
3. Refactor - verify it still passes
|
||||
|
||||
### With Systematic Debugging
|
||||
|
||||
[Debugging](/claudekit/skills/methodology/systematic-debugging) requires verification:
|
||||
1. Reproduce bug - verify it fails
|
||||
2. Fix bug - verify it passes
|
||||
3. Check regressions - verify full suite passes
|
||||
|
||||
### With Executing Plans
|
||||
|
||||
[Plan execution](/claudekit/skills/methodology/executing-plans) includes verification gates:
|
||||
- After each task - verify tests pass
|
||||
- After code review - verify issues fixed
|
||||
- Before completion - verify all requirements met
|
||||
|
||||
## Example Verification
|
||||
|
||||
### Before Claiming "Tests Pass"
|
||||
|
||||
```bash
|
||||
$ npm test
|
||||
|
||||
> project@1.0.0 test
|
||||
> vitest run
|
||||
|
||||
✓ src/models/user.test.ts (12 tests)
|
||||
✓ src/services/auth.test.ts (18 tests)
|
||||
✓ src/api/users.test.ts (15 tests)
|
||||
|
||||
Test Files 3 passed (3)
|
||||
Tests 45 passed (45)
|
||||
Start at 14:23:10
|
||||
Duration 2.34s
|
||||
```
|
||||
|
||||
**Now you can claim**: "All tests pass (45/45, verified at 14:23)"
|
||||
|
||||
### Before Claiming "Build Succeeds"
|
||||
|
||||
```bash
|
||||
$ npm run build
|
||||
|
||||
> project@1.0.0 build
|
||||
> tsc && vite build
|
||||
|
||||
vite v4.3.9 building for production...
|
||||
✓ 145 modules transformed.
|
||||
dist/index.html 0.42 kB
|
||||
dist/assets/index-a1b2c3d4.js 87.23 kB │ gzip: 28.42 kB
|
||||
|
||||
✓ built in 3.45s
|
||||
|
||||
$ echo $?
|
||||
0
|
||||
```
|
||||
|
||||
**Now you can claim**: "Build succeeds (exit code 0, dist/ created)"
|
||||
|
||||
### Before Claiming "Bug Fixed"
|
||||
|
||||
```bash
|
||||
# 1. Verify bug exists
|
||||
$ npm test -- --grep "login with expired session"
|
||||
FAIL src/auth.test.ts
|
||||
✕ login with expired session (45ms)
|
||||
Expected error, got success
|
||||
|
||||
# 2. Apply fix
|
||||
|
||||
# 3. Verify fix works
|
||||
$ npm test -- --grep "login with expired session"
|
||||
PASS src/auth.test.ts
|
||||
✓ login with expired session (12ms)
|
||||
|
||||
# 4. Verify no regressions
|
||||
$ npm test
|
||||
Test Files 3 passed (3)
|
||||
Tests 45 passed (45)
|
||||
```
|
||||
|
||||
**Now you can claim**: "Bug fixed, all tests pass including regression test"
|
||||
|
||||
## Activation
|
||||
|
||||
This skill is always active, but particularly enforced:
|
||||
|
||||
- During [Executing Plans](/claudekit/skills/methodology/executing-plans)
|
||||
- After [TDD](/claudekit/skills/methodology/tdd) implementation
|
||||
- Before [Code Review](/claudekit/skills/methodology/code-review)
|
||||
- In quality-critical contexts
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Verify Immediately
|
||||
|
||||
Don't wait to verify - do it right after implementation:
|
||||
|
||||
```
|
||||
Implement → Verify → Claim
|
||||
NOT: Implement → Claim → Verify later
|
||||
```
|
||||
|
||||
### Include Output in Claims
|
||||
|
||||
```
|
||||
✅ "Tests pass (45/45)"
|
||||
✅ "Build succeeds (exit 0, 87KB bundle)"
|
||||
✅ "Lint clean (0 errors, 0 warnings)"
|
||||
```
|
||||
|
||||
### Re-verify After Changes
|
||||
|
||||
```
|
||||
After changing code:
|
||||
1. Re-run tests (don't trust old results)
|
||||
2. Verify they still pass
|
||||
3. Update verification timestamp
|
||||
```
|
||||
|
||||
### Document Failed Attempts
|
||||
|
||||
```markdown
|
||||
## Verification Attempts
|
||||
|
||||
Attempt 1: FAILED (test 12 failing)
|
||||
- Fixed null check in user.ts:45
|
||||
- Re-verified
|
||||
|
||||
Attempt 2: PASSED (45/45 tests)
|
||||
- Verification complete
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
After successful verification:
|
||||
|
||||
1. **Document the evidence**: Keep verification output
|
||||
2. **Commit with confidence**: You know it works
|
||||
3. **Report completion**: With evidence attached
|
||||
4. **Move to next task**: Previous task is proven complete
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [TDD](/claudekit/skills/methodology/tdd) - Includes verification in cycle
|
||||
- [Systematic Debugging](/claudekit/skills/methodology/systematic-debugging) - Verify fixes work
|
||||
- [Executing Plans](/claudekit/skills/methodology/executing-plans) - Verification gates
|
||||
- [Code Review](/claudekit/skills/methodology/code-review) - Verify review feedback addressed
|
||||
@@ -1,478 +0,0 @@
|
||||
---
|
||||
title: Writing Plans
|
||||
description: Generate detailed implementation plans with bite-sized tasks
|
||||
---
|
||||
|
||||
The Writing Plans skill creates comprehensive, step-by-step implementation plans that bridge design and execution with 2-5 minute tasks.
|
||||
|
||||
## Overview
|
||||
|
||||
Writing Plans transforms completed designs into executable roadmaps. Each task includes exact file paths, complete code samples, and expected outcomes - enabling anyone to implement the plan successfully.
|
||||
|
||||
**Core Principle**: Tasks so small and clear that implementation becomes mechanical.
|
||||
|
||||
## When to Use
|
||||
|
||||
- After brainstorming/design is complete
|
||||
- Before starting implementation
|
||||
- When handing off work to another developer
|
||||
- For complex features requiring structured approach
|
||||
|
||||
## Plan Structure
|
||||
|
||||
### Header Section
|
||||
|
||||
```markdown
|
||||
# Plan: Add Email Verification
|
||||
|
||||
**Required Skill**: executing-plans
|
||||
|
||||
## Goal
|
||||
Add email verification to user registration flow.
|
||||
|
||||
## Architecture Overview
|
||||
Send verification email on registration, validate token on click,
|
||||
mark user as verified in database.
|
||||
|
||||
## Tech Stack
|
||||
- Node.js, TypeScript
|
||||
- PostgreSQL
|
||||
- SendGrid for email
|
||||
```
|
||||
|
||||
### Task Format
|
||||
|
||||
Each task follows this structure:
|
||||
|
||||
```markdown
|
||||
## Task 1: Add verified flag to User model
|
||||
|
||||
**Files**:
|
||||
- Modify: `src/models/user.ts`
|
||||
- Create: `src/migrations/add-verified-flag.ts`
|
||||
- Test: `src/models/user.test.ts`
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. Write failing test
|
||||
```typescript
|
||||
describe('User model', () => {
|
||||
it('should have verified flag defaulting to false', () => {
|
||||
const user = new User({ email: 'test@example.com' });
|
||||
expect(user.verified).toBe(false);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
2. Verify test fails
|
||||
```bash
|
||||
npm test -- --grep "verified flag"
|
||||
# Expected: 1 failing (verified is undefined)
|
||||
```
|
||||
|
||||
3. Add verified field to User model
|
||||
```typescript
|
||||
// src/models/user.ts
|
||||
export class User {
|
||||
email: string;
|
||||
verified: boolean = false; // Add this line
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
4. Verify test passes
|
||||
```bash
|
||||
npm test -- --grep "verified flag"
|
||||
# Expected: 1 passing
|
||||
```
|
||||
|
||||
5. Commit
|
||||
```bash
|
||||
git add src/models/user.ts src/models/user.test.ts
|
||||
git commit -m "feat(user): add verified flag with false default"
|
||||
```
|
||||
```
|
||||
|
||||
## Task Granularity
|
||||
|
||||
### The 2-5 Minute Rule
|
||||
|
||||
Each task should take 2-5 minutes of focused work:
|
||||
|
||||
- Write one test
|
||||
- Implement one function
|
||||
- Add one validation
|
||||
- Create one component
|
||||
|
||||
### Why So Small?
|
||||
|
||||
- Easier to verify correctness
|
||||
- Natural commit points
|
||||
- Reduces context switching
|
||||
- Enables parallel work
|
||||
- Clearer progress tracking
|
||||
|
||||
### Bad vs Good Breakdown
|
||||
|
||||
```
|
||||
❌ BAD: "Implement user authentication"
|
||||
(Too large - could take hours)
|
||||
|
||||
✅ GOOD:
|
||||
- Task 1: Create User model with email field (3 min)
|
||||
- Task 2: Add password hashing to User model (4 min)
|
||||
- Task 3: Create login endpoint (5 min)
|
||||
- Task 4: Add JWT token generation (4 min)
|
||||
- Task 5: Create auth middleware (5 min)
|
||||
- Task 6: Add token refresh endpoint (4 min)
|
||||
```
|
||||
|
||||
## Core Requirements
|
||||
|
||||
### Exact File Paths Always
|
||||
|
||||
Never use vague references:
|
||||
|
||||
```
|
||||
❌ BAD: "Update the user service"
|
||||
✅ GOOD: "Modify `src/services/user-service.ts`"
|
||||
```
|
||||
|
||||
### Complete Code Samples
|
||||
|
||||
Include exact code, not descriptions:
|
||||
|
||||
```
|
||||
❌ BAD: "Add a function that validates email"
|
||||
|
||||
✅ GOOD:
|
||||
```typescript
|
||||
export function validateEmail(email: string): boolean {
|
||||
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||
return emailRegex.test(email);
|
||||
}
|
||||
```
|
||||
```
|
||||
|
||||
### Expected Output Specifications
|
||||
|
||||
Always specify expected command results:
|
||||
|
||||
```bash
|
||||
npm test
|
||||
# Expected output:
|
||||
# PASS src/services/user.test.ts
|
||||
# User validation
|
||||
# ✓ validates correct email format (3ms)
|
||||
# ✓ rejects invalid email format (1ms)
|
||||
# 2 passing
|
||||
```
|
||||
|
||||
## Guiding Principles
|
||||
|
||||
### DRY (Don't Repeat Yourself)
|
||||
|
||||
- Identify patterns before implementation
|
||||
- Plan for reusable components
|
||||
- Note shared utilities needed
|
||||
|
||||
### YAGNI (You Aren't Gonna Need It)
|
||||
|
||||
- Only plan what's required now
|
||||
- Remove speculative features
|
||||
- Add complexity when justified
|
||||
|
||||
### TDD (Test-Driven Development)
|
||||
|
||||
Every task follows the cycle:
|
||||
1. Write failing test
|
||||
2. Verify it fails
|
||||
3. Implement minimally
|
||||
4. Verify it passes
|
||||
5. Refactor if needed
|
||||
6. Commit
|
||||
|
||||
### Frequent Commits
|
||||
|
||||
- Commit after each task
|
||||
- Clear, descriptive messages
|
||||
- Atomic changes only
|
||||
|
||||
## Activation
|
||||
|
||||
### Via Command
|
||||
|
||||
```bash
|
||||
/plan "add email verification"
|
||||
/plan --detailed "user authentication" # Extra detailed (30+ tasks)
|
||||
/plan designs/feature-x.md # Plan from design doc
|
||||
```
|
||||
|
||||
### Automatic from Brainstorming
|
||||
|
||||
```bash
|
||||
/brainstorm "payment processing"
|
||||
# After design completes...
|
||||
"Would you like me to create an implementation plan?"
|
||||
```
|
||||
|
||||
## Example Plan
|
||||
|
||||
```markdown
|
||||
# Plan: Add Password Reset
|
||||
|
||||
**Required Skill**: executing-plans
|
||||
|
||||
## Goal
|
||||
Allow users to reset forgotten passwords via email link.
|
||||
|
||||
## Architecture Overview
|
||||
User requests reset, receives email with token link, submits new password,
|
||||
password updated if token valid.
|
||||
|
||||
## Tech Stack
|
||||
- TypeScript, Express
|
||||
- PostgreSQL
|
||||
- SendGrid
|
||||
|
||||
---
|
||||
|
||||
## Task 1: Add resetToken field to User model
|
||||
|
||||
**Files**:
|
||||
- Modify: `src/models/user.ts`
|
||||
- Test: `src/models/user.test.ts`
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. Write test for reset token
|
||||
```typescript
|
||||
it('should store password reset token', () => {
|
||||
const user = new User({ email: 'test@example.com' });
|
||||
user.resetToken = 'abc123';
|
||||
user.resetTokenExpiry = new Date(Date.now() + 3600000);
|
||||
expect(user.resetToken).toBe('abc123');
|
||||
});
|
||||
```
|
||||
|
||||
2. Verify test fails
|
||||
```bash
|
||||
npm test -- --grep "reset token"
|
||||
# Expected: 1 failing
|
||||
```
|
||||
|
||||
3. Add fields to User model
|
||||
```typescript
|
||||
export class User {
|
||||
email: string;
|
||||
passwordHash: string;
|
||||
resetToken?: string;
|
||||
resetTokenExpiry?: Date;
|
||||
}
|
||||
```
|
||||
|
||||
4. Verify test passes
|
||||
```bash
|
||||
npm test
|
||||
# Expected: All passing
|
||||
```
|
||||
|
||||
5. Commit
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "feat(user): add reset token fields"
|
||||
```
|
||||
|
||||
## Task 2: Create password reset request endpoint
|
||||
|
||||
**Files**:
|
||||
- Create: `src/routes/auth.ts` (if not exists)
|
||||
- Modify: `src/routes/auth.ts`
|
||||
- Test: `src/routes/auth.test.ts`
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. Write test for POST /auth/reset-request
|
||||
```typescript
|
||||
it('should generate reset token for valid email', async () => {
|
||||
await createUser({ email: 'test@example.com' });
|
||||
|
||||
const res = await request(app)
|
||||
.post('/auth/reset-request')
|
||||
.send({ email: 'test@example.com' });
|
||||
|
||||
expect(res.status).toBe(200);
|
||||
expect(res.body.message).toContain('sent');
|
||||
});
|
||||
```
|
||||
|
||||
2. Verify test fails
|
||||
```bash
|
||||
npm test -- --grep "reset-request"
|
||||
# Expected: 404 (route doesn't exist)
|
||||
```
|
||||
|
||||
3. Implement endpoint
|
||||
```typescript
|
||||
router.post('/reset-request', async (req, res) => {
|
||||
const { email } = req.body;
|
||||
const user = await User.findByEmail(email);
|
||||
|
||||
if (!user) {
|
||||
return res.status(200).json({ message: 'Reset email sent' });
|
||||
}
|
||||
|
||||
user.resetToken = crypto.randomBytes(32).toString('hex');
|
||||
user.resetTokenExpiry = new Date(Date.now() + 3600000);
|
||||
await user.save();
|
||||
|
||||
await sendResetEmail(user.email, user.resetToken);
|
||||
|
||||
res.json({ message: 'Reset email sent' });
|
||||
});
|
||||
```
|
||||
|
||||
4. Verify test passes
|
||||
```bash
|
||||
npm test -- --grep "reset-request"
|
||||
# Expected: 1 passing
|
||||
```
|
||||
|
||||
5. Commit
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "feat(auth): add password reset request endpoint"
|
||||
```
|
||||
|
||||
## Task 3: ... (continue for remaining tasks)
|
||||
```
|
||||
|
||||
## Execution Handoff
|
||||
|
||||
After plan is complete, offer implementation pathways:
|
||||
|
||||
### Option 1: Subagent-Driven (Current Session)
|
||||
|
||||
```
|
||||
Use the executing-plans skill for automated execution with:
|
||||
- Fresh agent per task
|
||||
- Code review between tasks
|
||||
- Quality gates
|
||||
```
|
||||
|
||||
### Option 2: Manual Execution
|
||||
|
||||
```
|
||||
Developer executes in current or separate session:
|
||||
- Read plan file
|
||||
- Follow tasks sequentially
|
||||
- Commit after each task
|
||||
```
|
||||
|
||||
## Integration with Other Skills
|
||||
|
||||
### From Brainstorming
|
||||
|
||||
```bash
|
||||
/brainstorm "feature X"
|
||||
# → Design created
|
||||
/plan designs/feature-x.md
|
||||
# → Plan created
|
||||
```
|
||||
|
||||
### To Executing Plans
|
||||
|
||||
```bash
|
||||
/plan "feature Y"
|
||||
# → Plan created in plans/feature-y.md
|
||||
/execute-plan plans/feature-y.md
|
||||
# → Automated execution begins
|
||||
```
|
||||
|
||||
### With TDD
|
||||
|
||||
Every task in the plan follows TDD:
|
||||
1. Write failing test
|
||||
2. Verify failure
|
||||
3. Implement
|
||||
4. Verify success
|
||||
5. Commit
|
||||
|
||||
See [TDD skill](/claudekit/skills/methodology/tdd) for details.
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Start with File List
|
||||
|
||||
Before writing tasks, list all files:
|
||||
|
||||
```markdown
|
||||
## Files Involved
|
||||
- `src/models/user.ts` - Add fields
|
||||
- `src/services/user-service.ts` - Add methods
|
||||
- `src/routes/auth.ts` - Add endpoints
|
||||
- `src/utils/email.ts` - Email helpers
|
||||
- Tests for each of above
|
||||
```
|
||||
|
||||
### Group Related Tasks
|
||||
|
||||
```markdown
|
||||
## Phase 1: Database Layer (Tasks 1-3)
|
||||
## Phase 2: Business Logic (Tasks 4-6)
|
||||
## Phase 3: API Layer (Tasks 7-9)
|
||||
## Phase 4: Integration (Tasks 10-12)
|
||||
```
|
||||
|
||||
### Include Verification Steps
|
||||
|
||||
Every task must verify:
|
||||
- Test fails before implementation
|
||||
- Test passes after implementation
|
||||
- Full suite still passes
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
### Tasks Too Large
|
||||
|
||||
```
|
||||
❌ "Implement authentication system" (hours)
|
||||
✅ "Add password field to User model" (3 minutes)
|
||||
```
|
||||
|
||||
### Missing Expected Output
|
||||
|
||||
```
|
||||
❌ "Run npm test"
|
||||
✅ "Run npm test (expect: 42 passing, 0 failing)"
|
||||
```
|
||||
|
||||
### Vague File References
|
||||
|
||||
```
|
||||
❌ "Update the service"
|
||||
✅ "Modify src/services/user-service.ts line 45"
|
||||
```
|
||||
|
||||
### No TDD Cycle
|
||||
|
||||
```
|
||||
❌ "Add the feature and test it"
|
||||
✅ "1. Write failing test, 2. Verify fails, 3. Implement, 4. Verify passes"
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
After creating a plan:
|
||||
|
||||
1. **Review the plan**: Ensure it's complete and detailed
|
||||
2. **Execute manually**: Follow tasks yourself, or
|
||||
3. **Execute with agent**: Use [Executing Plans](/claudekit/skills/methodology/executing-plans)
|
||||
4. **Review code**: Use [Code Review](/claudekit/skills/methodology/code-review)
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [Brainstorming](/claudekit/skills/methodology/brainstorming) - Design before planning
|
||||
- [Executing Plans](/claudekit/skills/methodology/executing-plans) - Automated execution
|
||||
- [TDD](/claudekit/skills/methodology/tdd) - Test-driven development
|
||||
- [Code Review](/claudekit/skills/methodology/code-review) - Quality gates
|
||||
@@ -1,273 +0,0 @@
|
||||
---
|
||||
title: Skills Overview
|
||||
description: Comprehensive guide to all Claude Kit skills organized by category
|
||||
---
|
||||
|
||||
Claude Kit includes a rich library of skills that provide deep expertise in methodologies, languages, frameworks, and tools. Skills are automatically activated when relevant to your task, or can be explicitly invoked.
|
||||
|
||||
## What Are Skills?
|
||||
|
||||
Skills are knowledge modules that enhance Claude's capabilities in specific domains. Each skill contains:
|
||||
|
||||
- **Best practices** for the technology or methodology
|
||||
- **Common patterns** and code examples
|
||||
- **Anti-patterns** to avoid
|
||||
- **Activation conditions** - when the skill is used
|
||||
- **Integration points** with other skills
|
||||
|
||||
## Skill Categories
|
||||
|
||||
### Methodology Skills
|
||||
|
||||
Development methodologies and workflows for high-quality software delivery.
|
||||
|
||||
| Skill | Purpose | Key Feature |
|
||||
|-------|---------|-------------|
|
||||
| [Brainstorming](/claudekit/skills/methodology/brainstorming) | Interactive design refinement | One question at a time |
|
||||
| [Writing Plans](/claudekit/skills/methodology/writing-plans) | Detailed implementation plans | 2-5 minute tasks |
|
||||
| [Executing Plans](/claudekit/skills/methodology/executing-plans) | Automated plan execution | Fresh agents per task |
|
||||
| [Test-Driven Development](/claudekit/skills/methodology/tdd) | TDD workflow | Red-green-refactor cycle |
|
||||
| [Systematic Debugging](/claudekit/skills/methodology/systematic-debugging) | Root-cause debugging | Four-phase process |
|
||||
| [Code Review](/claudekit/skills/methodology/code-review) | Request & receive reviews | Categorized feedback |
|
||||
| [Sequential Thinking](/claudekit/skills/methodology/sequential-thinking) | Complex problem analysis | Evidence-based reasoning |
|
||||
| [Verification Before Completion](/claudekit/skills/methodology/verification) | Mandatory verification | Never claim without proof |
|
||||
| [Testing Anti-Patterns](/claudekit/skills/methodology/testing-anti-patterns) | Avoid common test mistakes | Mock behavior detection |
|
||||
|
||||
### Language Skills
|
||||
|
||||
Modern programming language expertise with best practices.
|
||||
|
||||
| Skill | Purpose | Key Features |
|
||||
|-------|---------|--------------|
|
||||
| [Python](/claudekit/skills/languages/python) | Python development | Type hints, async, dataclasses |
|
||||
| [TypeScript](/claudekit/skills/languages/typescript) | TypeScript development | Strict typing, utility types |
|
||||
| [JavaScript](/claudekit/skills/languages/javascript) | Modern JavaScript | ES6+, async patterns |
|
||||
|
||||
### Framework Skills
|
||||
|
||||
Full-stack framework knowledge and patterns.
|
||||
|
||||
| Skill | Purpose | Key Features |
|
||||
|-------|---------|--------------|
|
||||
| [React](/claudekit/skills/frameworks/react) | React components | Hooks, context, patterns |
|
||||
| [Next.js](/claudekit/skills/frameworks/nextjs) | Next.js App Router | Server components, actions |
|
||||
| [FastAPI](/claudekit/skills/frameworks/fastapi) | FastAPI REST APIs | Pydantic, async, OpenAPI |
|
||||
| [Django](/claudekit/skills/frameworks/django) | Django web apps | ORM, views, REST framework |
|
||||
|
||||
### Database Skills
|
||||
|
||||
Database design and query optimization.
|
||||
|
||||
- **PostgreSQL** - Relational database expertise
|
||||
- **MongoDB** - Document database patterns
|
||||
|
||||
### Testing Skills
|
||||
|
||||
Test frameworks and testing methodologies.
|
||||
|
||||
- **pytest** - Python testing with fixtures
|
||||
- **vitest** - Fast Vite-based testing
|
||||
|
||||
### DevOps Skills
|
||||
|
||||
Deployment and infrastructure automation.
|
||||
|
||||
- **Docker** - Container best practices
|
||||
- **GitHub Actions** - CI/CD workflows
|
||||
|
||||
### Frontend Skills
|
||||
|
||||
Modern frontend development tools.
|
||||
|
||||
- **Tailwind CSS** - Utility-first CSS
|
||||
- **shadcn/ui** - React component library
|
||||
|
||||
### Security Skills
|
||||
|
||||
Security best practices and vulnerability prevention.
|
||||
|
||||
- **OWASP** - Web security standards
|
||||
|
||||
### API Skills
|
||||
|
||||
API design and documentation.
|
||||
|
||||
- **OpenAPI** - REST API specification
|
||||
|
||||
### Optimization Skills
|
||||
|
||||
Performance and cost optimization.
|
||||
|
||||
- **Token Efficient** - Reduce API costs
|
||||
|
||||
## How Skills Are Activated
|
||||
|
||||
### Automatic Activation
|
||||
|
||||
Skills activate automatically based on context:
|
||||
|
||||
```typescript
|
||||
// Working with a .ts file automatically activates:
|
||||
// - TypeScript skill
|
||||
// - JavaScript skill (parent)
|
||||
|
||||
// Using React components activates:
|
||||
// - React skill
|
||||
// - TypeScript skill
|
||||
// - JavaScript skill
|
||||
```
|
||||
|
||||
### Explicit Activation
|
||||
|
||||
Reference skills directly in commands:
|
||||
|
||||
```bash
|
||||
# Use specific methodology
|
||||
/plan --methodology=tdd "add user authentication"
|
||||
|
||||
# Activate debugging skill
|
||||
/fix --use-skill=systematic-debugging "timeout error"
|
||||
|
||||
# Enable sequential thinking
|
||||
/research --sequential "performance bottleneck"
|
||||
```
|
||||
|
||||
### Mode-Based Activation
|
||||
|
||||
Certain modes activate related skills:
|
||||
|
||||
```bash
|
||||
# Deep research mode enables:
|
||||
/mode deep-research
|
||||
# - Sequential thinking
|
||||
# - Root cause tracing
|
||||
# - Evidence collection
|
||||
|
||||
# Implementation mode enables:
|
||||
/mode implementation
|
||||
# - TDD
|
||||
# - Verification before completion
|
||||
# - Testing anti-patterns awareness
|
||||
```
|
||||
|
||||
## Combining Skills
|
||||
|
||||
Skills work together synergistically:
|
||||
|
||||
### Planning to Execution
|
||||
|
||||
1. **Brainstorming** - Design the solution
|
||||
2. **Writing Plans** - Break into tasks
|
||||
3. **Executing Plans** - Automated implementation
|
||||
4. **Code Review** - Quality gates
|
||||
|
||||
### Bug Fixing
|
||||
|
||||
1. **Systematic Debugging** - Find root cause
|
||||
2. **Sequential Thinking** - Analyze evidence
|
||||
3. **TDD** - Write regression test
|
||||
4. **Verification** - Confirm fix works
|
||||
|
||||
### Feature Development
|
||||
|
||||
1. **Brainstorming** - Explore approaches
|
||||
2. **Writing Plans** - Detailed tasks
|
||||
3. **TDD** - Test-first implementation
|
||||
4. **Code Review** - Review and iterate
|
||||
5. **Verification** - Confirm completion
|
||||
|
||||
## Customizing Skills
|
||||
|
||||
Skills can be customized in your `.claude/CLAUDE.md`:
|
||||
|
||||
```markdown
|
||||
## Skill Overrides
|
||||
|
||||
### TDD Strictness
|
||||
- Level: Strict (no code without tests)
|
||||
- Red-Green-Refactor: Always required
|
||||
|
||||
### Code Review
|
||||
- Required reviewers: 1 minimum
|
||||
- Security review: Required for auth changes
|
||||
- Performance review: Required for queries
|
||||
|
||||
### Brainstorming
|
||||
- Style: Interactive (one question at a time)
|
||||
- YAGNI: Ruthless (remove all "might need")
|
||||
```
|
||||
|
||||
## Creating Custom Skills
|
||||
|
||||
Add project-specific skills:
|
||||
|
||||
```bash
|
||||
.claude/skills/
|
||||
├── custom/
|
||||
│ ├── company-api-patterns/
|
||||
│ │ └── SKILL.md
|
||||
│ └── deployment-checklist/
|
||||
│ └── SKILL.md
|
||||
```
|
||||
|
||||
See [Custom Skills Guide](/claudekit/guides/custom-skills) for details.
|
||||
|
||||
## Skill Reference
|
||||
|
||||
For detailed documentation on each skill:
|
||||
|
||||
- **Methodology**: See individual skill pages linked above
|
||||
- **Languages**: Python, TypeScript, JavaScript skill pages
|
||||
- **Frameworks**: React, Next.js, FastAPI, Django pages
|
||||
- **Other Categories**: Browse `/skills/` directory
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Let Skills Guide You
|
||||
|
||||
Trust the methodologies:
|
||||
|
||||
```bash
|
||||
# Instead of:
|
||||
"Just write some code for X"
|
||||
|
||||
# Use:
|
||||
"/brainstorm X" → design first
|
||||
"/plan X" → break into tasks
|
||||
"/execute-plan" → implement systematically
|
||||
```
|
||||
|
||||
### Combine Complementary Skills
|
||||
|
||||
Use skills together:
|
||||
|
||||
```bash
|
||||
# TDD + Systematic Debugging
|
||||
1. Write failing test (TDD)
|
||||
2. Investigate why it fails (Debugging)
|
||||
3. Fix root cause (Debugging)
|
||||
4. Verify test passes (Verification)
|
||||
|
||||
# Brainstorming + Sequential Thinking
|
||||
1. Explore options (Brainstorming)
|
||||
2. Analyze each deeply (Sequential Thinking)
|
||||
3. Choose with evidence (Sequential Thinking)
|
||||
```
|
||||
|
||||
### Respect Skill Constraints
|
||||
|
||||
Skills enforce quality standards:
|
||||
|
||||
- **TDD**: No production code without failing test first
|
||||
- **Verification**: Never claim completion without proof
|
||||
- **Code Review**: All critical issues must be fixed
|
||||
- **Systematic Debugging**: Three-fix rule stops runaway debugging
|
||||
|
||||
These aren't suggestions - they're requirements.
|
||||
|
||||
## Next Steps
|
||||
|
||||
- Explore [Methodology Skills](/claudekit/skills/methodology/brainstorming)
|
||||
- Learn [Language Skills](/claudekit/skills/languages/python)
|
||||
- Check [Framework Skills](/claudekit/skills/frameworks/react)
|
||||
- Try [Custom Skills](/claudekit/guides/custom-skills)
|
||||
@@ -0,0 +1,151 @@
|
||||
---
|
||||
title: Planning & Building
|
||||
description: How Claude Kit guides you from idea to implementation using brainstorming, planning, and execution skills.
|
||||
---
|
||||
|
||||
# Planning & Building
|
||||
|
||||
Claude Kit provides a structured workflow for turning ideas into working code: **Brainstorm > Plan > Execute > Verify**.
|
||||
|
||||
## The Workflow
|
||||
|
||||
```
|
||||
"I need to add user authentication"
|
||||
│
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Brainstorming │ Explore requirements, ask questions,
|
||||
│ │ evaluate approaches, validate design
|
||||
└────────┬────────┘
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Writing Plans │ Break into tasks, exact file paths,
|
||||
│ │ code samples, verification steps
|
||||
└────────┬────────┘
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Executing Plans │ Fresh subagent per task, code review
|
||||
│ │ between tasks, quality gates
|
||||
└────────┬────────┘
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Verification │ Run tests, verify builds,
|
||||
│ │ evidence before claims
|
||||
└─────────────────┘
|
||||
```
|
||||
|
||||
## Phase 1: Brainstorming
|
||||
|
||||
**Triggers on**: "brainstorm", "design", "explore", "what if", "how should we", "trade-offs"
|
||||
|
||||
The brainstorming skill uses a three-phase process:
|
||||
|
||||
1. **Understanding** — Asks one question at a time to clarify requirements. Prefers multiple-choice over open-ended questions.
|
||||
2. **Exploration** — Presents 2-3 approaches with trade-offs, leads with a recommendation.
|
||||
3. **Design** — Presents the validated design in digestible 200-300 word sections.
|
||||
|
||||
### Example
|
||||
|
||||
```
|
||||
You: "Let's brainstorm adding real-time notifications"
|
||||
|
||||
Claude: "Which delivery mechanism fits your use case best?
|
||||
a) WebSockets — persistent connection, instant delivery
|
||||
b) Server-Sent Events — simpler, one-way push
|
||||
c) Polling — simplest, but higher latency"
|
||||
|
||||
You: "b) SSE"
|
||||
|
||||
Claude: "## Approach 1: SSE + Redis Pub/Sub (Recommended)
|
||||
Server pushes events via SSE, Redis coordinates across instances.
|
||||
- Pros: Simple, works with load balancers, auto-reconnect built in
|
||||
- Cons: One-way only (client can't push back)
|
||||
|
||||
## Approach 2: SSE + PostgreSQL LISTEN/NOTIFY
|
||||
..."
|
||||
```
|
||||
|
||||
## Phase 2: Writing Plans
|
||||
|
||||
**Triggers on**: "plan", "break down", "implementation steps", "task list"
|
||||
|
||||
The writing-plans skill creates detailed implementation plans with:
|
||||
|
||||
- Exact file paths for every change
|
||||
- Complete code samples (not descriptions)
|
||||
- Verification commands with expected output
|
||||
- 2-5 minute task granularity
|
||||
|
||||
### Plan Structure
|
||||
|
||||
```markdown
|
||||
## Task 1: Create User model with email field
|
||||
|
||||
**Files**:
|
||||
- Create: `src/models/user.ts`
|
||||
- Test: `src/models/user.test.ts`
|
||||
|
||||
**Steps**:
|
||||
1. Write failing test
|
||||
2. Verify test fails
|
||||
3. Implement minimally
|
||||
4. Verify test passes
|
||||
5. Commit
|
||||
```
|
||||
|
||||
## Phase 3: Executing Plans
|
||||
|
||||
**Triggers on**: "execute the plan", "run the plan", "implement the plan"
|
||||
|
||||
The executing-plans skill runs each task with:
|
||||
|
||||
- **Fresh subagent per task** — Prevents context pollution
|
||||
- **Code review between tasks** — Catches issues early
|
||||
- **Quality gates** — Critical issues must be fixed before proceeding
|
||||
|
||||
### Execution Flow
|
||||
|
||||
```
|
||||
Task 1 → Implement → Review → Fix issues → ✓
|
||||
Task 2 → Implement → Review → Fix issues → ✓
|
||||
Task 3 → Implement → Review → Fix issues → ✓
|
||||
Final comprehensive review → ✓
|
||||
```
|
||||
|
||||
## Phase 4: Verification
|
||||
|
||||
**Auto-triggers on**: completion claims ("done", "fixed", "tests pass")
|
||||
|
||||
The verification-before-completion skill requires evidence before any completion claim:
|
||||
|
||||
- Run the actual test suite and read the output
|
||||
- Verify the build succeeds
|
||||
- Check that the feature works as intended
|
||||
|
||||
## Supporting Skills
|
||||
|
||||
These skills activate automatically during planning and building:
|
||||
|
||||
| Skill | When It Helps |
|
||||
|-------|---------------|
|
||||
| `feature-workflow` | End-to-end feature development |
|
||||
| `sequential-thinking` | Complex decisions needing step-by-step reasoning |
|
||||
| `languages` | Python/TypeScript/JavaScript idioms and patterns |
|
||||
| `backend-frameworks` | FastAPI, Django, NestJS, Express patterns |
|
||||
| `frontend` | React, Next.js component architecture |
|
||||
| `databases` | Schema design, queries, migrations |
|
||||
| `state-management` | Choosing between useState, Zustand, TanStack Query |
|
||||
|
||||
## Supporting Agents
|
||||
|
||||
| Agent | Role |
|
||||
|-------|------|
|
||||
| `planner` | Research and create implementation plans |
|
||||
| `brainstormer` | Explore solutions and evaluate trade-offs |
|
||||
| `researcher` | Research technologies and best practices |
|
||||
|
||||
## Related Pages
|
||||
|
||||
- [Testing & Debugging](/claudekit/workflows/testing-and-debugging/) — TDD and debugging workflows
|
||||
- [Reviewing & Shipping](/claudekit/workflows/reviewing-and-shipping/) — Code review and git workflows
|
||||
- [Skills Reference](/claudekit/reference/skills/) — All 43 skills
|
||||
@@ -0,0 +1,147 @@
|
||||
---
|
||||
title: Reviewing & Shipping
|
||||
description: How Claude Kit handles code review, git workflows, PR creation, and branch management.
|
||||
---
|
||||
|
||||
# Reviewing & Shipping
|
||||
|
||||
Claude Kit provides structured workflows for code review, committing, creating PRs, and finishing development branches.
|
||||
|
||||
## Code Review
|
||||
|
||||
### Requesting Reviews
|
||||
|
||||
**Triggers on**: completing features, before PRs, before merging
|
||||
|
||||
The requesting-code-review skill prepares code for review with:
|
||||
|
||||
- Clear scope of what changed and why
|
||||
- Areas of concern flagged for reviewers
|
||||
- Context on architectural decisions
|
||||
|
||||
### Receiving Reviews
|
||||
|
||||
**Triggers on**: review feedback, PR comments, review rejections
|
||||
|
||||
The receiving-code-review skill processes feedback systematically:
|
||||
|
||||
1. **Categorize** — Critical vs. important vs. minor
|
||||
2. **Prioritize** — Fix critical issues first
|
||||
3. **Implement** — Address feedback with evidence
|
||||
4. **Re-request** — Summary of changes made
|
||||
|
||||
### Review Agents
|
||||
|
||||
| Agent | Focus |
|
||||
|-------|-------|
|
||||
| `code-reviewer` | Quality, security, performance, maintainability |
|
||||
| `security-auditor` | OWASP compliance, vulnerability detection |
|
||||
|
||||
## Git Workflows
|
||||
|
||||
**Triggers on**: "commit", "push", "PR", "ship", "changelog"
|
||||
|
||||
The git-workflows skill enforces:
|
||||
|
||||
### Conventional Commits
|
||||
|
||||
```
|
||||
type(scope): subject
|
||||
|
||||
feat(auth): add JWT token refresh endpoint
|
||||
fix(cart): handle empty cart total calculation
|
||||
docs(api): update OpenAPI spec for v2 endpoints
|
||||
```
|
||||
|
||||
Types: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore`
|
||||
|
||||
### Branch Naming
|
||||
|
||||
```
|
||||
feature/AUTH-123-jwt-refresh
|
||||
fix/CART-456-empty-total
|
||||
hotfix/critical-payment-bug
|
||||
chore/upgrade-dependencies
|
||||
```
|
||||
|
||||
### PR Creation
|
||||
|
||||
Claude Kit generates well-structured PRs:
|
||||
|
||||
```markdown
|
||||
## Summary
|
||||
- Added JWT token refresh endpoint
|
||||
- Tokens auto-refresh 5 minutes before expiry
|
||||
|
||||
## Test Plan
|
||||
- [ ] Unit tests for token refresh logic
|
||||
- [ ] Integration test for refresh endpoint
|
||||
- [ ] Manual test: login → wait → verify auto-refresh
|
||||
```
|
||||
|
||||
## Finishing a Branch
|
||||
|
||||
**Triggers on**: "ship it", "ready to merge", "branch is done", "create a PR"
|
||||
|
||||
The finishing-a-development-branch skill runs a completion checklist:
|
||||
|
||||
1. **Verify** — All tests pass, build succeeds
|
||||
2. **Review** — Run final code review
|
||||
3. **Options** — Present merge strategies:
|
||||
- Create PR for team review
|
||||
- Merge directly (if authorized)
|
||||
- Clean up worktree (if using git worktrees)
|
||||
|
||||
## Git Worktrees
|
||||
|
||||
**Triggers on**: "worktree", "isolated branch", "parallel branches"
|
||||
|
||||
The using-git-worktrees skill creates isolated working copies for:
|
||||
|
||||
- Feature work that shouldn't affect the main workspace
|
||||
- Parallel development on multiple branches
|
||||
- Safe experimentation without risk to in-progress work
|
||||
|
||||
```
|
||||
main workspace: d:/project/ (main branch)
|
||||
feature worktree: d:/project-feature/ (feature/auth branch)
|
||||
hotfix worktree: d:/project-hotfix/ (hotfix/payment branch)
|
||||
```
|
||||
|
||||
## Changelog Generation
|
||||
|
||||
The git-workflows skill generates changelogs from conventional commits:
|
||||
|
||||
```markdown
|
||||
## [1.2.0] - 2026-04-19
|
||||
|
||||
### Added
|
||||
- JWT token refresh endpoint (AUTH-123)
|
||||
- Auto-refresh 5 minutes before expiry
|
||||
|
||||
### Fixed
|
||||
- Empty cart total calculation (CART-456)
|
||||
```
|
||||
|
||||
## Supporting Skills
|
||||
|
||||
| Skill | When It Helps |
|
||||
|-------|---------------|
|
||||
| `documentation` | Generating/updating docs after code changes |
|
||||
| `refactoring` | Improving code structure before shipping |
|
||||
| `writing-concisely` | Token-efficient mode for high-volume review sessions |
|
||||
|
||||
## Supporting Agents
|
||||
|
||||
| Agent | Role |
|
||||
|-------|------|
|
||||
| `git-manager` | Stage, commit, push with conventional commits |
|
||||
| `code-reviewer` | Comprehensive code review |
|
||||
| `copywriter` | Release notes, changelogs, PR descriptions |
|
||||
| `docs-manager` | Keep documentation in sync with code |
|
||||
|
||||
## Related Pages
|
||||
|
||||
- [Planning & Building](/claudekit/workflows/planning-and-building/) — Brainstorm, plan, execute
|
||||
- [Testing & Debugging](/claudekit/workflows/testing-and-debugging/) — TDD and debugging workflows
|
||||
- [Skills Reference](/claudekit/reference/skills/) — All 43 skills
|
||||
@@ -0,0 +1,145 @@
|
||||
---
|
||||
title: Testing & Debugging
|
||||
description: How Claude Kit enforces test-driven development, systematic debugging, and verification.
|
||||
---
|
||||
|
||||
# Testing & Debugging
|
||||
|
||||
Claude Kit enforces quality through three connected workflows: **TDD for building**, **systematic debugging for fixing**, and **verification before completion**.
|
||||
|
||||
## Test-Driven Development
|
||||
|
||||
**Triggers on**: "implement", "add feature", "fix bug", "write code", "build"
|
||||
|
||||
The TDD skill enforces a strict red-green-refactor cycle for all production code changes:
|
||||
|
||||
```
|
||||
1. Write a failing test → Run it → Confirm it fails (RED)
|
||||
2. Write minimal code → Run it → Confirm it passes (GREEN)
|
||||
3. Refactor if needed → Run it → Confirm it still passes
|
||||
4. Commit
|
||||
```
|
||||
|
||||
### Why TDD by Default?
|
||||
|
||||
- Tests document intent, not just behavior
|
||||
- Catches regressions immediately
|
||||
- Forces small, focused changes
|
||||
- Creates natural commit points
|
||||
|
||||
### Stack-Specific Commands
|
||||
|
||||
| Stack | Test Command | Full Verify |
|
||||
|-------|-------------|-------------|
|
||||
| Python/FastAPI | `pytest tests/test_<module>.py -v` | `pytest -v && ruff check .` |
|
||||
| TypeScript/NestJS | `npm test -- --testPathPattern=<module>` | `npm test && npm run lint && npm run build` |
|
||||
| Next.js/React | `npx vitest run <file>` | `npm test && next lint && next build` |
|
||||
|
||||
## Systematic Debugging
|
||||
|
||||
**Triggers on**: "bug", "error", "failing", "broken", "doesn't work", "TypeError", stack traces
|
||||
|
||||
The systematic-debugging skill follows a four-phase investigation:
|
||||
|
||||
### Phase 1: Observe
|
||||
|
||||
Gather evidence before forming hypotheses:
|
||||
- Read the error message and stack trace
|
||||
- Reproduce the issue
|
||||
- Check logs and recent changes
|
||||
|
||||
### Phase 2: Hypothesize
|
||||
|
||||
Form specific, testable theories:
|
||||
- "The null check on line 42 doesn't handle the empty array case"
|
||||
- Not: "Something is wrong with the data"
|
||||
|
||||
### Phase 3: Test
|
||||
|
||||
Verify each hypothesis systematically:
|
||||
- Add logging or breakpoints
|
||||
- Write a test that reproduces the bug
|
||||
- Isolate the failing component
|
||||
|
||||
### Phase 4: Fix
|
||||
|
||||
Apply the minimal fix:
|
||||
- Fix the root cause, not the symptom
|
||||
- Add a regression test
|
||||
- Verify the original error is gone
|
||||
|
||||
### Root Cause Tracing
|
||||
|
||||
**Triggers on**: deep bugs where the error location differs from the bug origin
|
||||
|
||||
For bugs that manifest far from their source, the root-cause-tracing skill traces the data flow backward to find where things first went wrong:
|
||||
|
||||
```
|
||||
Error: NullPointerException at OrderService.getTotal()
|
||||
↓ trace backward
|
||||
OrderService.getTotal() receives null item
|
||||
↓ trace backward
|
||||
CartService.getItems() returns null for empty cart
|
||||
↓ root cause
|
||||
CartRepository.findByUserId() returns null instead of []
|
||||
```
|
||||
|
||||
## Verification Before Completion
|
||||
|
||||
**Auto-triggers on**: "done", "fixed", "tests pass", "build succeeds"
|
||||
|
||||
The verification skill prevents false completion claims. Before saying "done", Claude must:
|
||||
|
||||
1. **Run the test suite** and read the output
|
||||
2. **Run the build** and confirm it succeeds
|
||||
3. **Check for regressions** in related functionality
|
||||
4. **Show evidence** — actual command output, not assumptions
|
||||
|
||||
### What Gets Caught
|
||||
|
||||
```
|
||||
Without verification:
|
||||
"I've fixed the bug" → Actually introduced a new failing test
|
||||
|
||||
With verification:
|
||||
Run pytest → See 2 failures → Fix both → Run again → All green → "Fixed"
|
||||
```
|
||||
|
||||
## Testing Anti-Patterns
|
||||
|
||||
**Triggers on**: "mock", "flaky test", "test passes but bug ships", "false positive"
|
||||
|
||||
The testing-anti-patterns skill catches common mistakes:
|
||||
|
||||
| Anti-Pattern | Problem | Fix |
|
||||
|-------------|---------|-----|
|
||||
| Heavy mocking | Tests pass but production breaks | Test real integrations |
|
||||
| Testing implementation | Tests break on refactor | Test behavior, not internals |
|
||||
| No edge cases | Happy path works, edge cases crash | Test boundaries and errors |
|
||||
| Flaky tests | Random failures erode trust | Fix or delete, never ignore |
|
||||
|
||||
## Defense in Depth
|
||||
|
||||
**Triggers on**: data validation bugs, "it slipped through", bypass scenarios
|
||||
|
||||
The defense-in-depth skill adds validation at multiple layers so a single-point failure can't cause data corruption:
|
||||
|
||||
```
|
||||
API layer: Validate input shape (Pydantic/Zod)
|
||||
Service layer: Validate business rules
|
||||
Database layer: Constraints (NOT NULL, UNIQUE, CHECK)
|
||||
```
|
||||
|
||||
## Supporting Agents
|
||||
|
||||
| Agent | Role |
|
||||
|-------|------|
|
||||
| `tester` | Run test suites, analyze coverage, validate error handling |
|
||||
| `debugger` | Investigate bugs, check logs, reproduce issues |
|
||||
| `security-auditor` | Security-focused code review |
|
||||
|
||||
## Related Pages
|
||||
|
||||
- [Planning & Building](/claudekit/workflows/planning-and-building/) — Brainstorm, plan, execute
|
||||
- [Reviewing & Shipping](/claudekit/workflows/reviewing-and-shipping/) — Code review and git workflows
|
||||
- [Skills Reference](/claudekit/reference/skills/) — All 43 skills
|
||||
Reference in New Issue
Block a user