This guide explains how to adapt Vibespec to your project's specific needs while maintaining the core specs-first workflow.
Vibespec is designed to be flexible. While the core workflow (Requirements β Design β Tasks β Code) remains constant, you can customize many aspects to fit your team's needs.
All features require complete specs:
# Current default behavior
- Requirements.md required
- Design.md required
- Tasks.md required
- Approval gates enforcedFor smaller teams or projects:
# Edit .claude/hooks/enforce-specs.sh
# Add size detection:
if [[ "$USER_PROMPT" =~ (minor|small|quick|simple) ]]; then
echo "π Minor change detected - simplified specs allowed"
# Only require requirements.md
fiFor prototypes or experiments:
# Create .vibespec/config.json
{
"mode": "minimal",
"requireSpecs": ["requirements.md"],
"enforceApprovals": false
}Create different workflows for different feature types:
# In enforce-specs.sh, add:
case "$USER_PROMPT" in
*"bug fix"*)
echo "π Bug fix workflow - minimal specs required"
# Only check for requirements.md with bug description
;;
*"refactor"*)
echo "π§ Refactor workflow - design.md required"
# Skip requirements, focus on design
;;
*"new feature"*)
echo "β¨ Feature workflow - full specs required"
# Enforce all three files
;;
esac# For solo developers
{
"workflow": {
"autoApprove": true,
"allowSelfApproval": true,
"simplifiedDocs": true
}
}
# For large teams
{
"workflow": {
"requireReviewer": true,
"enforceCheckpoints": true,
"detailedSpecs": true
}
}Modify the requirements format in CLAUDE.md:
### Custom Requirements Format
Instead of standard EARS, use your format:
**Story Format**:
As a [user type]
I want [functionality]
So that [business value]
**Given-When-Then Format**:
Given [context]
When [action]
Then [expected outcome]Create .claude/hooks/custom-checks.sh:
#!/bin/bash
# Custom project checks
# Check for security considerations in auth features
if [[ "$USER_PROMPT" =~ (auth|security|login) ]]; then
if ! grep -q "Security" specs/*/design.md 2>/dev/null; then
echo "π Security section required in design.md for auth features"
exit 1
fi
fi
# Require performance metrics for API changes
if [[ "$TOOL_PATH" =~ api/ ]]; then
if ! grep -q "Performance" specs/*/requirements.md 2>/dev/null; then
echo "β‘ Performance requirements needed for API changes"
exit 1
fi
fiEdit .claude/settings.json:
{
"hooks": {
"UserPromptSubmit": [
{
// Only enforce for major features
"matcher": ".*(?:major|significant|critical).*(?:feature|change).*",
"hooks": [...]
},
{
// Custom patterns for your domain
"matcher": ".*(?:payment|billing|subscription).*",
"hooks": [
{
"type": "command",
"command": "./.claude/hooks/financial-checks.sh"
}
]
}
]
}
}Modify WORKFLOW.md to add steps:
## The 8-Step Process (Customized)
1. Understand & Clarify
2. Stakeholder Review (NEW)
3. Create Requirements
4. Security Assessment (NEW)
5. Design Solution
6. Architecture Review (NEW)
7. Plan Tasks
8. ImplementUpdate CLAUDE.md to enforce new steps:
### MANDATORY: Extended Workflow
1. Requirements gathering
2. **β³ STAKEHOLDER REVIEW**: Get business approval
3. Technical requirements
4. **β³ SECURITY REVIEW**: Security team approval
5. Continue with standard flow...specs/
βββ frontend/
β βββ feature-name/
β βββ requirements.md
β βββ design.md
β βββ tasks.md
βββ backend/
β βββ feature-name/
βββ shared/
βββ feature-name/specs/
βββ 2024-q1/
β βββ feature-name/
βββ 2024-q2/
β βββ feature-name/specs/
βββ critical/
β βββ feature-name/
βββ high/
β βββ feature-name/
βββ normal/
β βββ feature-name/Add .github/workflows/vibespec-check.yml:
name: Vibespec Compliance Check
on:
pull_request:
types: [opened, synchronize]
jobs:
check-specs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Check for specs
run: |
# Extract feature name from branch
FEATURE=$(echo ${{ github.head_ref }} | sed 's/feature\///')
# Check if specs exist
if [ ! -d "specs/$FEATURE" ]; then
echo "β Missing specs for feature: $FEATURE"
exit 1
fi
# Validate spec files
for file in requirements.md design.md tasks.md; do
if [ ! -f "specs/$FEATURE/$file" ]; then
echo "β Missing $file"
exit 1
fi
done
echo "β
Specs validated".vscode/settings.json:
{
"files.exclude": {
"**/.claude": false
},
"workbench.colorCustomizations": {
"activityBar.background": "#2E7D32",
"titleBar.activeBackground": "#2E7D32"
},
"terminal.integrated.env.osx": {
"VIBESPEC_MODE": "development"
}
}.vscode/tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "Create New Feature Specs",
"type": "shell",
"command": "mkdir -p specs/${input:featureName} && touch specs/${input:featureName}/{requirements,design,tasks}.md",
"problemMatcher": []
},
{
"label": "Validate Specs",
"type": "shell",
"command": "./test-workflow.sh",
"problemMatcher": []
}
],
"inputs": [
{
"id": "featureName",
"type": "promptString",
"description": "Feature name for specs"
}
]
}Create .vibespec/templates/:
# Requirements: {{FEATURE_NAME}}
## Business Context
[Why is this needed?]
## User Stories
- As a {{USER_TYPE}}, I want {{FEATURE}} so that {{VALUE}}
## Acceptance Criteria
- [ ] Criterion 1
- [ ] Criterion 2
## Out of Scope
- What this feature will NOT do
## Success Metrics
- How we'll measure success# Technical Design: {{FEATURE_NAME}}
## Architecture Decision Record (ADR)
**Status**: Proposed
**Date**: {{DATE}}
## Context
[Technical background]
## Decision
[What we're building]
## Consequences
- Positive:
- Negative:
## Alternatives Considered
1. Option A - Rejected because...
2. Option B - Rejected because...Create scripts/new-feature.sh:
#!/bin/bash
# Generate specs from templates
FEATURE_NAME=$1
DATE=$(date +%Y-%m-%d)
mkdir -p specs/$FEATURE_NAME
# Copy and customize templates
for template in requirements design tasks; do
sed -e "s/{{FEATURE_NAME}}/$FEATURE_NAME/g" \
-e "s/{{DATE}}/$DATE/g" \
.vibespec/templates/${template}-template.md > specs/$FEATURE_NAME/${template}.md
done
echo "β
Created specs for: $FEATURE_NAME"
echo "π Location: specs/$FEATURE_NAME/"Start with just documentation requirements:
# Only enforce documentation updates
rm .claude/hooks/enforce-specs.sh
rm .claude/hooks/check-workflow.sh
# Keep only update-docs.shEnforce specs for major features:
# Modify enforce-specs.sh
if [[ "$USER_PROMPT" =~ (major|critical|breaking) ]]; then
# Enforce full workflow
else
echo "βΉοΈ Minor change - specs optional but recommended"
fiEnable all enforcement mechanisms.
- Start Small: Don't customize everything at once
- Test Changes: Run
test-workflow.shafter customizations - Document Changes: Update README with your customizations
- Team Buy-in: Discuss changes with your team
- Iterate: Adjust based on real usage
- Relaxed approval requirements
- Simplified documentation
- Focus on speed with quality checks
- Strict compliance checks
- Detailed audit trails
- Multiple approval gates
- Integration with existing tools
- Community-friendly templates
- Contribution guidelines
- Public specs directory
- Simplified onboarding
- Review examples in this guide
- Check
examples/directory for patterns - Test customizations with
test-workflow.sh - Open an issue for complex scenarios
Remember: The goal is to maintain quality while fitting your workflow!