Files
2025-11-30 09:00:21 +08:00

262 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags: ["workflow", "initialization", "setup", "scaffolding", "update", "sync"]
description: "Initialize project with ai-toolkit structure - minimal questions, fast setup"
argument-hint: "[--force | --dry-run]"
allowed-tools: ["Read", "Write", "Edit", "Bash", "Glob", "AskUserQuestion"]
model: claude-sonnet-4-5
references_guidelines:
- docs/development/workflows/pm-workflows.md # PM structure and directory organization
- docs/development/workflows/task-workflow.md # Development workflow structure
---
# /toolkit-init
**WHAT**: Initialize project with complete ai-toolkit structure (54 files) or intelligently sync updates after plugin upgrades.
**WHY**: 30-second setup for new projects; preserve customizations while benefiting from template improvements in existing projects.
**HOW**: Smart mode detection (initial setup vs update/sync), minimal questions (2), comprehensive file copying with verification.
## Usage
```bash
/toolkit-init # Smart: Initial setup (new) or update/sync (existing)
/toolkit-init --force # Force: Overwrite all with templates (complete reset)
/toolkit-init --dry-run # Preview: Show changes without modifying files
```
## Execution Steps
### 1. Mode Detection
```bash
# Check for existing ai-toolkit structure
if pm/ AND docs/ exist:
if --force:
→ Force Reinit (skip to step 3)
else:
→ Update/Sync Mode (jump to Update Flow)
else:
→ Initial Setup (continue to step 2)
```
**Template verification**:
```bash
TEMPLATE_DIR="${CLAUDE_PLUGIN_ROOT}/templates/starter"
if not exists: ERROR "Template directory not found"
```
### 2. Initial Setup Questions (New Projects Only)
**Ask 2 questions**:
1. "What's your app called?" → {app-name}
2. "What does it do? (1-2 sentences)" → {description}
**No other questions**. Tech stack, links, infrastructure = filled in later.
### 3. Copy Template Files (51 Files)
**Copy all template files**:
```bash
TEMPLATE_DIR="${CLAUDE_PLUGIN_ROOT}/templates/starter"
# Use rsync if available (handles hidden files, nested dirs)
rsync -av "$TEMPLATE_DIR"/ . --exclude='.git'
# OR use cp with explicit hidden file handling
cp -r "$TEMPLATE_DIR"/* .
cp "$TEMPLATE_DIR"/.gitignore .
```
**CRITICAL**: Must copy ALL 51 template files including:
- `.gitkeep` files (preserve empty dirs in pm/specs/, pm/issues/, pm/notes/)
- `.gitignore` (hidden file)
- All nested subdirectories
### 4. Generate Project Docs from Templates
**Create 3 project-specific files from templates**:
| Generated File | Source Template | Customization |
|----------------|-----------------|---------------|
| `docs/project/architecture-overview.md` | `docs/development/templates/architecture-overview-template.md` | Copy as-is |
| `docs/project/design-overview.md` | `docs/development/templates/design-overview-template.md` | Copy as-is |
| `docs/project/writing-style.md` | `docs/development/templates/writing-style-template.md` | Copy as-is |
These provide starter structure for project-specific documentation that users fill in as the project develops.
**Note**: `docs/project-brief.md` is created by `/project-brief` command on first run, not by `/toolkit-init`.
### 5. Customize Existing Files
**Get plugin metadata**:
```bash
PLUGIN_VERSION=$(grep '"version"' "${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json" | sed 's/.*: *"\([^"]*\)".*/\1/')
CURRENT_DATE=$(date '+%Y-%m-%d')
```
**Update files with placeholders**:
- **CLAUDE.md**: Replace {app-name}, {description}, {toolkit-version}, {last-updated}
- **README.md**: Replace {app-name}, {description}
### 6. Verification
```bash
# Count files (should be 54: 51 template + 3 generated)
find . -type f | grep -v ".git" | wc -l
# Verify critical directories exist
[ -d "docs/development/conventions" ]
[ -d "docs/development/workflows" ]
[ -d "docs/development/templates" ]
[ -d "docs/project/adrs" ]
[ -d "docs/project/design-assets" ]
[ -d "pm/specs" ]
[ -d "pm/issues" ]
```
### 7. Success Output
```
✓ Created 54 files
Structure:
├── pm/ (4 files)
├── docs/development/ (34 files: conventions, workflows, templates, misc)
├── docs/project/ (6 files: READMEs + generated docs)
└── root (10 files: CLAUDE.md, README.md, etc.)
Generated from templates:
├── docs/project/architecture-overview.md
├── docs/project/design-overview.md
└── docs/project/writing-style.md
Next steps:
1. /project-brief (complete your project vision)
2. /spec (create your first feature spec)
```
## Update/Sync Flow (Existing Projects)
### 1. Version Detection
```bash
# Extract versions
PROJECT_VERSION=$(grep "Plugin Version" CLAUDE.md | sed 's/.*: *//')
PLUGIN_VERSION=$(grep '"version"' "${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json" | sed 's/.*: *"\([^"]*\)".*/\1/')
```
**Display version comparison**:
```
Your project: v0.37.0
Current plugin: v0.38.0
Checking for template changes...
```
### 2. Scan & Categorize Files
**Compare each template file with project file**:
| Status | Meaning |
|--------|---------|
| ✅ Identical | No changes needed |
| 🔧 Customized | User modified (offer merge options) |
| ❌ Missing | Template file not in project (will add) |
| New in Plugin | New template file (will add) |
**Example drift report**:
```
✅ Identical (40): .gitignore, most workflow files...
🔧 Customized (5): CLAUDE.md, README.md, docs/project-brief.md, testing-standards.md, git-workflow.md
❌ Missing (1): docs/development/workflows/spike-workflow.md
New in Plugin (2): docs/development/misc/new-feature.md
```
### 3. Interactive Decisions
**For each customized file**:
```
CLAUDE.md is customized.
Options:
1. Keep your version (no changes)
2. Replace with template (lose customizations)
3. Smart merge (keep your content, add new sections)
4. Show diff
5. Skip for now
Choose (1-5): _
```
**Smart merge strategy**:
- Parse markdown by headers (## sections)
- Keep user-added content in existing sections
- Add new template sections that don't exist
- Preserve YAML frontmatter customizations
### 4. Handle Generated Project Docs
**For docs/project/ files (architecture-overview.md, design-overview.md, writing-style.md)**:
- If file exists and is customized → Keep (these are user content)
- If file is missing → Offer to generate from template
- If template changed significantly → Notify user (don't auto-update)
### 5. Apply Updates
```bash
# Execute user choices
# Track results: UPDATED=(), KEPT=(), MERGED=(), ADDED=()
```
**Summary output**:
```
✅ Updated (3): spike-workflow.md, new-feature.md, agent-coordination.md
🔀 Merged (1): CLAUDE.md
⏭️ Kept (4): README.md, testing-standards.md, git-workflow.md, project-brief.md
Added (1): docs/development/misc/new-feature.md
```
### 6. Update Version Tracking
```bash
# Update CLAUDE.md with new plugin version
sed -i "s/Plugin Version\*\*: .*/Plugin Version**: $PLUGIN_VERSION/" CLAUDE.md
sed -i "s/Last Updated\*\*: .*/Last Updated**: $(date '+%Y-%m-%d')/" CLAUDE.md
```
## Error Handling
| Error | Message | Resolution |
|-------|---------|------------|
| Template not found | "Cannot find template at {path}" | Reinstall plugin |
| Copy fails | "Failed to copy templates" | Check permissions |
| Diff unavailable | - | Treat as customized, prompt for review |
| Merge conflict | - | Show both versions, ask user to choose |
## Integration
**Workflow position**:
```
/toolkit-init → /project-brief → /spec → /plan → /implement
```
**Update cycle**:
```
/plugin update ai-toolkit → /toolkit-init (sync) → Review changes
```
**When to run update/sync**:
- After plugin updates
- Before major releases (ensure template alignment)
- Periodically to detect drift
## Notes
- **54 files total**: 51 template files + 3 generated from templates
- **2 questions only**: App name + description
- **Smart merge**: Preserves user customizations while adding new content
- **Dry run**: Use `--dry-run` to preview all changes safely
- **Force mode**: Use `--force` only for complete reset (loses customizations)
- **Version tracking**: CLAUDE.md automatically tracks plugin version