From dotforge
Initializes Claude Code configuration in a new or existing project using the dotforge template. Supports minimal, standard, and full profiles with stack detection.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dotforge:bootstrap-projectThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Initialize a complete `.claude/` in the current project using the dotforge template.
Initialize a complete .claude/ in the current project using the dotforge template.
Check if $ARGUMENTS contains --profile minimal, --profile standard, or --profile full.
If not specified, use standard as default.
Profiles control what gets installed:
| Component | minimal | standard | full |
|---|---|---|---|
| CLAUDE.md | yes | yes | yes |
| settings.json | yes | yes | yes |
| block-destructive hook | yes | yes | yes |
| lint-on-save hook | no | yes | yes |
| session-report hook | no | yes | yes |
| warn-missing-test hook | no | no | yes (strict profile) |
| rules/ (_common + stack) | yes | yes | yes |
| commands/ | no | yes | yes |
| agents/ + orchestration | no | yes | yes |
| agent-memory/ | no | no | yes |
| CLAUDE_ERRORS.md | no | yes | yes (pre-populated) |
| memory.md rule | no | yes | yes |
Save the profile in .claude/settings.local.json under env.FORGE_BOOTSTRAP_PROFILE.
Use detection rules from $DOTFORGE_DIR/stacks/detect.md.
Show:
Profile: {{profile}}
Detected stack: {{stacks}}
Will create:
- CLAUDE.md (base template + stack rules)
- .claude/settings.json (base permissions + stack)
- .claude/rules/ (common rules + stack)
- .claude/hooks/ (block-destructive + lint + session-report) [minimal: block-destructive only]
- .claude/commands/ (audit, health) [minimal: skipped]
- .claude/agents/ + orchestration [minimal: skipped]
- CLAUDE_ERRORS.md (empty, for error logging) [minimal: skipped]
Proceed? (yes/no)
Adapt the list shown based on the profile (hide components that won't be installed).
Use $DOTFORGE_DIR/template/CLAUDE.md.tmpl as the base.
Replace markers:
{{PROJECT_NAME}} → name of the current directory<!-- forge:stack --> → detected technologies<!-- forge:commands --> → detected build/test commands (package.json scripts, Makefile targets, etc.)$DOTFORGE_DIR/template/settings.json.tmpl as the base$DOTFORGE_DIR/stacks/{stack}/settings.json.partialallow arrays from all partials with the base (union of sets, no duplicates)deny arrays the same way.claude/settings.jsonMulti-stack: If multiple stacks are detected (e.g.: python-fastapi + react-vite-ts + docker-deploy), merge ALL partials. Order does not matter — it is a union of sets.
Before writing settings.json, validate that the generated JSON is valid:
python3 -c 'import json; json.load(open(".claude/settings.json"))' 2>&1
Or if not yet written, validate the content in memory/string:
echo '<json_content>' | python3 -c 'import json,sys; json.load(sys.stdin)'
If validation fails, show the exact error and DO NOT write the file. Fix the JSON before continuing.
$DOTFORGE_DIR/template/hooks/block-destructive.sh → .claude/hooks/ (ALL profiles)standard or full: copy $DOTFORGE_DIR/template/hooks/lint-on-save.shstandard or full: copy $DOTFORGE_DIR/template/hooks/session-report.shstandard or full: copy $DOTFORGE_DIR/template/hooks/detect-stack-drift.shfull: copy $DOTFORGE_DIR/template/hooks/warn-missing-test.shchmod +x all copied hooks$DOTFORGE_DIR/stacks/{stack}/hooks/ exists:
.claude/hooks/{stack}/core/ directory exists alongside hooks, copy it too (e.g., hookify needs core/ + hooks/)$DOTFORGE_DIR/template/rules/_common.md → .claude/rules/$DOTFORGE_DIR/stacks/{stack}/rules/ → .claude/rules/Only if domain info was provided (via /forge init Q4 or user explicitly requests it during bootstrap).
If any detected stack has a domain: field in its rules (e.g., stacks/trading/rules/trading.md):
.claude/rules/domain/ directory.claude/rules/domain/ instead of .claude/rules/If the user provided domain description (from init Q4 context):
.claude/rules/domain/ directory if not existsglobs: (domain-specific patterns), domain: tag, last_verified: (today)jira-api.md, agile-metrics.md)If neither condition is met, skip this step entirely — no noise for projects without domain context.
Important: Domain rules in .claude/rules/domain/ are project-owned. They are NOT tracked in the forge manifest and are NOT updated by /forge sync.
Skip if profile is minimal.
Copy $DOTFORGE_DIR/template/commands/ → .claude/commands/
Skip if profile is minimal.
$DOTFORGE_DIR/agents/*.md → .claude/agents/$DOTFORGE_DIR/template/rules/agents.md → .claude/rules/agents.mdThis gives the project access to the 6 specialized subagents (researcher, architect, implementer, code-reviewer, security-auditor, test-runner) and the orchestration rule that defines when to delegate.
Skip if profile is minimal.
For full profile: pre-populate with the Type column format and example entry.
For standard profile: create empty template.
# Known errors — {{PROJECT_NAME}}
Evolving log of errors and lessons learned. Consult BEFORE working in areas with prior errors.
Truth hierarchy: source code > CLAUDE.md > CLAUDE_ERRORS.md > auto-memory
## Format
| Date | Area | Type | Error | Root cause | Fix | Derived rule |
|------|------|------|-------|------------|-----|--------------|
Valid types: `syntax`, `logic`, `integration`, `config`, `security`
Only for full profile. Standard creates the directory but not the seed files.
Create .claude/agent-memory/ directory for agents with memory: project to persist learnings:
mkdir -p .claude/agent-memory
Create a seed file for each memory-enabled agent so the directory structure is ready:
for agent in implementer architect code-reviewer security-auditor; do
touch ".claude/agent-memory/${agent}.md"
done
This enables implementer, architect, code-reviewer, and security-auditor to accumulate project-specific knowledge across sessions.
If the user does not have detect-claude-changes.sh installed in ~/.claude/settings.json, show:
Tip: For automatic practice capture, install the global hook:
Copy hooks/detect-claude-changes.sh to ~/.claude/hooks/
Add in ~/.claude/settings.json under hooks → Stop
See docs for details.
Create .claude/.forge-manifest.json with the SHA256 hash of each file created during bootstrap:
shasum -a 256 <file> | cut -d' ' -f1
Format:
{
"dotforge_version": "<version from $DOTFORGE_DIR/VERSION>",
"synced_at": "<current date YYYY-MM-DD>",
"stacks": ["<detected-stack-1>", "<detected-stack-2>"],
"files": {
".claude/settings.json": {"hash": "sha256:<hash>", "source": "template+stacks"},
".claude/rules/_common.md": {"hash": "sha256:<hash>", "source": "template"},
".claude/hooks/block-destructive.sh": {"hash": "sha256:<hash>", "source": "template"},
".claude/hooks/lint-on-save.sh": {"hash": "sha256:<hash>", "source": "template"}
}
}
source indicates where the file came from: "template", "template+stacks" (if merged from base + stacks), or "stacks/<name>"..claude/ (rules, hooks, commands, agents)..claude/).Show a summary of created files and suggest running /audit-project to verify.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub luiseiman/dotforge --plugin dotforge