forge-init
Skill2 starsChanged 5 months agoMITView on GitHub
Initialize the Forge SDLC pipeline in a project. Use whenever a user
3 other projects use a version of this.
Adopted by
Most recently taken up by
- fabioalencar/forgedesigntheir own version, first seen Oct 20, 2026
- tinyorbit-ai/skillstheir own version, first seen Aug 20, 2026
- weselben/RooForgetheir own version, first seen Aug 17, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- weselben/RooForge★ 4same name
- fabioalencar/forgedesign★ 1same name
- tinyorbit-ai/skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository46 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- forge-opencode/CLAUDE.mdCLAUDE.md
- forge-adoptSkill
- forge-arch-proSkill
- forge-archSkill
- forge-autopilotSkill
- forge-autopilot-stopSkill
- forge-build-proSkill
- forge-buildSkill
- forge-deploySkill
- forge-doctorSkill
- dreamer-runSkill
- forge-evalSkill
- forge-feedbackSkill
- flowSkill
- forge-force-advanceSkill
- graduateSkill
- health-checkSkill
- forge-monitorSkill
- forge-orchestrateSkill
- forge-plan-proSkill
- forge-planSkill
- preflightSkill
- forge-product-proSkill
- forge-productSkill
- forge-releaseSkill
- forge-resolveSkill
- forge-resumeSkill
- forge-retroSkill
- forge-reviewSkill
- forge-rulesSkill
- forge-set-profileSkill
- skill-creatorSkill
- forge-spec-proSkill
- forge-specSkill
- forge-sprint-proSkill
- forge-sprintSkill
- forge-srs-proSkill
- forge-srsSkill
- forge-statusSkill
- forge-trace-matrixSkill
- forge-uninstallSkill
- forge-validateSkill
- watchSkill
- watch-stopSkill
- forge-whySkill
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 6 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 17
Use this skill whenever the user wants to:
- Distinctive: line 19
Start using Forge in a project
- Distinctive: line 31
Stop here. Do not proceed to step 3 or any subsequent step: Wait for the user to explicitly confirm they want to apply the plan before …
- Distinctive: line 32
Run the real init in manifest mode to capture what was created:
- Very specific: line 42
Write the detected (or user-confirmed) type into pipeline/state.md:
- Very specific: line 46
Check .gitignore for .forge/:
- Very specific: line 47
Read .gitignore if it exists.
- Very specific: line 48
If .forge/ (or .forge) is NOT already on a non-commented line, ask the user: *".forge/ holds runtime state — lessons, session logs, hook …
- Distinctive: line 59
After running (in non-dry-run mode), confirm:
- Very specific: line 66
If the user accepted the gitignore prompt, .gitignore contains .forge/ on its own line
- Distinctive: line 71
No files exist that didn't exist before invocation
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
forge-init
When to Use
Use this skill whenever the user wants to:
- Start using Forge in a project
- Initialize the Forge pipeline in a new or existing project
- Says "init", "initialize", "set up Forge", or "start using Forge"
- Describes starting a new project they want orchestrated
- Passes
--dry-runto preview what would be created without writing files
Steps
- Parse
$ARGUMENTSfor--dry-run. If present, setDRY_RUN=true. If the user passed--type <profile>, capture that asOVERRIDE_TYPE. - If
DRY_RUN:- Run
bash ${CLAUDE_PLUGIN_ROOT}/scripts/init-pipeline.sh --dry-run - Present the plan verbatim. The final line reads "Re-run without --dry-run to apply."
- Stop here. Do not proceed to step 3 or any subsequent step. Wait for the user to explicitly confirm they want to apply the plan before doing the real init.
- Run
- Run the real init in manifest mode to capture what was created:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/init-pipeline.sh --manifest-only- The manifest is JSON:
{dry_run: false, root: "<abs path>", created: [...], skipped: [...]} - Parse the JSON. The
createdarray length tells you how many files were written; theskippedarray shows pre-existing files that were left alone.
- Detect the project type (skip if
OVERRIDE_TYPEwas set):- Run
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/detect-project-type.py --cwd . - The output is JSON with a
project_type(orassigned_profile) field, plus aconfidencescore andindicatorslist. - If the response contains
suggested_profileinstead ofassigned_profile(this happens for thescriptprofile, which is opt-in only), prompt the user: "This looks like a small script (under 500 LOC, no package manifest). Forge has a streamlinedscriptprofile (4 active stages instead of 12). Use it, or the full pipeline?" — and use the user's choice. - If confidence < 0.7, ask the user: "I detected
[type](confidence [N]%) based on[indicators]. Does that sound right, or would you like to pick a different profile?" - Available types:
ml-pipeline,fullstack,api,cli,library,script,unknown.
- Run
- Write the detected (or user-confirmed) type into
pipeline/state.md:python3 ${CLAUDE_PLUGIN_ROOT}/scripts/state-manager.py set --field project_type --value <type> --cwd .- This is the only place project_type gets set on init; do not hand-edit the YAML frontmatter.
- The assigned profile influences which lessons get surfaced at session start and which gate criteria apply.
- Check
.gitignorefor.forge/:- Read
.gitignoreif it exists. - If
.forge/(or.forge) is NOT already on a non-commented line, ask the user: ".forge/holds runtime state — lessons, session logs, hook errors. It's typically noise to commit. Add.forge/to .gitignore? (y/N)" - On yes (or "yes", "sure", "go ahead", etc.): append
.forge/to.gitignore. If.gitignoredoesn't exist, create it with just that line. - On no (or silence after a reasonable prompt): do nothing. Do not ask again in subsequent sessions.
- Read
- Print a welcome message that includes:
- How many files were created (from the manifest's
created.length) - The assigned project type
- Whether
.forge/was added to.gitignore - The next suggested command (
/forge:srsfor a fresh project,/forge:resumeif the user mentioned an existing pipeline)
- How many files were created (from the manifest's
Verification
After running (in non-dry-run mode), confirm:
pipeline/state.mdexists with valid YAML frontmatter (schema_version: 1,current_stage: 0,project_type: <not "unknown" if detected>)pipeline/01-srs/throughpipeline/12-release/all existtasks/todo.mdandtasks/lessons.mdexist.forge/lessons.yamland.forge/patterns.jsonlexist.forge/sessions/exists (with.gitkeep)- If the user accepted the gitignore prompt,
.gitignorecontains.forge/on its own line - The user knows the next command to run
In dry-run mode, confirm:
- No files exist that didn't exist before invocation
- The user has seen the full plan and the "Re-run without --dry-run to apply." line
Examples
User: "Initialize Forge here"
Claude: [runs bash ${CLAUDE_PLUGIN_ROOT}/scripts/init-pipeline.sh --manifest-only and parses the JSON; 18 files created]
[runs python3 ${CLAUDE_PLUGIN_ROOT}/scripts/detect-project-type.py --cwd . and gets {"project_type": "api", "confidence": 0.85, "indicators": ["fastapi in requirements.txt", "routes/ directory"]}]
[runs python3 ${CLAUDE_PLUGIN_ROOT}/scripts/state-manager.py set --field project_type --value api --cwd .]
[reads .gitignore and finds no .forge/ entry]
"Initialized Forge pipeline. Detected project type: api (confidence 85% — based on fastapi in requirements.txt, routes/ directory).
Created 18 files:
pipeline/with 12 stage directoriespipeline/state.md(initial state)tasks/todo.mdandtasks/lessons.md.forge/for runtime memory
.forge/ isn't in your .gitignore yet — it holds runtime state (lessons, sessions, hook errors) that's usually noise to commit. Want me to add it? (y/N)"
User: "yes"
Claude: [appends .forge/ to .gitignore]
"Added .forge/ to .gitignore. Next step: run /forge:srs to define requirements, or /forge:resume if you've worked on this before."
User: "/forge:init --dry-run"
Claude: [runs bash ${CLAUDE_PLUGIN_ROOT}/scripts/init-pipeline.sh --dry-run]
would create: pipeline/01-srs/.gitkeep
would create: pipeline/02-product-ux/wireframes/.gitkeep
would create: pipeline/03-architecture/adr/.gitkeep
... (15 more lines)
─────────────────────────────────────────────────────────────
Forge pipeline plan:
18 file(s) would be created
target: /home/user/my-project
Re-run without --dry-run to apply."That's the plan — 18 files in pipeline/, tasks/, and .forge/. Nothing was created. Run /forge:init (without --dry-run) when you're ready, or tell me what you'd like to tweak first."
[STOP. Do not call init-pipeline.sh again without explicit user confirmation.]
User: "Set up Forge for this 200-line shell script project"
Claude: [runs bash ${CLAUDE_PLUGIN_ROOT}/scripts/init-pipeline.sh --manifest-only; 18 files created]
[runs python3 ${CLAUDE_PLUGIN_ROOT}/scripts/detect-project-type.py --cwd . and the response includes "suggested_profile": "script" because the repo is small and has no package manifest]
"This looks like a small script (under 500 LOC, no package manifest). Forge has a streamlined script profile that compresses the pipeline from 12 stages to 4 active ones (SRS-lite → Build → Eval → optional Release). Want to use it, or stick with the full pipeline?"
User: "use the script profile"
Claude: [runs python3 ${CLAUDE_PLUGIN_ROOT}/scripts/state-manager.py set --field project_type --value script --cwd .]
[gitignore check, etc.]
"Done. Using the script profile — Stages 2, 5, 8, 9, 10, 11 are skipped; Stages 3, 4, 12 are optional. Next step: /forge:srs for a one-page requirements doc."
User: "init Forge but skip the gitignore stuff, I manage that elsewhere"
Claude: [runs init-pipeline.sh, detect-project-type.py, state-manager.py as normal]
[honors the user's request — skips step 6 entirely]
"Initialized Forge. 18 files created. Detected project type: library. Next step: /forge:srs."
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

