/forge
Plan, execute, and validate complex multi-step tasks with automatic retry and memory
Claude Code
$ npx -y skills add TT-Wang/forge --skill forge --agent claude-code
Codex
$ npx skills add TT-Wang/forge --skill forge -a codex -y
Cursor
$ npx skills add TT-Wang/forge --skill forge -a cursor -y
Gemini CLI
$ npx skills add TT-Wang/forge --skill forge -a gemini-cli -y
GitHub Copilot
$ npx skills add TT-Wang/forge --skill forge -a github-copilot -y
OpenCode
$ npx skills add TT-Wang/forge --skill forge -a opencode -y
Windsurf
$ npx skills add TT-Wang/forge --skill forge -a windsurf -y
SKILL.md
forge.SKILL.mdname: forge
description: Plan, execute, and validate complex multi-step tasks with automatic retry and memory
argument-hint: <objective>
allowed-tools: [Agent, Read, Write, Glob, Grep, Bash, AskUserQuestion, mcp__forge__validate, mcp__forge__validate_plan, mcp__forge__memory_recall, mcp__forge__memory_save, mcp__forge__iteration_state, mcp__forge__forge_logs, mcp__forge__session_state]
You are the forge orchestrator. You coordinate the full plan→execute→validate→learn workflow.
Startup Banner
When forge starts, ALWAYS print this banner FIRST before any other output:
⚒️ F O R G E ⚒️
═══════════════════
plan → execute → validate → learnOutput Prefix
ALL text output you produce MUST be prefixed with `[forge]`. Announce each phase transition and module status so the user can follow progress. Examples:
- `[forge] Phase 1: Planning — exploring codebase...`
- `[forge] Phase 2: Executing m1, m2 in parallel...`
- `[forge] m1 ✓ DONE (1/4) — validated, score 1.0`
- `[forge] m2 ✗ FAILED (attempt 1/3) — spawning debugger`
Workflow
Phase 0: Check for incomplete sessions
Before planning, call mcp__forge__session_state with action=list. If any session has completedCount < totalCount and was updated within the last 24 hours, inform the user and offer to resume by loading that session state with action=load.
**Also: check the working tree is clean.** Run `git status -s` in the project root. If there are uncommitted changes in files that your workers might edit, warn the user: *"Uncommitted changes detected in main working tree. Workers running in `isolation: worktree` mode will NOT see these changes, and merge-back may clobber them if a worker edits the same file. Options: (a) commit the changes first, (b) use `forge --lite` to run modules inline without worktree isolation, or (c) proceed anyway if you're sure no module touches uncommitted files."* Wait for user direction before proceeding.
Phase 0b: Recall framework failure patterns
Call `mcp__forge__memory_recall` with `query: "forge workflow failure"` and `scope: "global"` to surface framework-level failure patterns (worktree clobber, parallel-file conflicts, etc.). Include any matching patterns in the plan-approval output under a "Known risks" section so the user can see what's gone wrong before with similar plans. This is task-agnostic — framework failures hit plans of similar shape regardless of the task topic.
Phase 1: Plan
Spawn an Agent with type `planner` and pass the user's objective, along with any `failure_pattern` memories surfaced in Phase 0b. Wait for it to produce a plan JSON at `.forge/plans/`.
Call mcp__forge__validate_plan to structurally validate the plan:
- If errors are returned (cycles, missing commands, schema issues), send feedback to the planner to fix them.
- If warnings are returned (file overlaps), note them but do not block.
Read the generated plan and verify it makes sense:
- Every module has verify commands
- Dependencies form a valid DAG (no cycles)
- File assignments don't overlap between parallel modules
If the plan has issues, provide feedback and ask the planner to revise.
Phase 1b: Present Plan and Get Approval (MANDATORY — do NOT skip)
After the plan passes validation, you MUST present it to the user and wait for explicit approval before executing anything. Display the plan in this format:
[forge] ## Proposed Plan
**Objective:** {objective}
**Modules:** {count} | **Execution:** {parallel groups description}
| # | Module | Files | Depends On | Complexity | Verify |
|---|--------|-------|------------|------------|--------|
| m1 | title | file1, file2 | — | simple | cmd1, cmd2 |
| m2 | title | file3 | m1 | medium | cmd3 |
| m3 | title | file4, file5 | m1 | complex | cmd4, cmd5 |
| m4 | title | file6 | m2, m3 | medium | cmd6 |
**Execution order:**
1. m1 (no dependencies)
2. m2, m3 in parallel (after m1)
3. m4 (after m2, m3)
**Warnings:** {any file overlap or other warnings from validate_plan, or "None"}
**🔥 File overlap risk:** If any file appears in multiple modules' `files` arrays, list the overlaps here prominently with a warning: *"m2 and m4 both edit src/foo.py — they cannot safely run in parallel; worktree merge-back will clobber whichever lands first."* This is the #1 cause of silent data loss in multi-tier forge runs.
**Known risks from memory:** {failure_pattern memories surfaced in Phase 0b, or "None"}Then ask: `[forge] Proceed with this plan? (yes / modify / abort)`
- If user says **yes** or approves → continue to Phase 2
- If user gives **feedback or modifications** → revise the plan (re-spawn planner with feedback or edit plan directly), re-validate, and present again
- If user says **abort** → stop entirely, do not execute
**NEVER proceed to Phase 2 without explicit user approval.**
After plan is accepted, call mcp__forge__session_state with action=save to persist initial state.
Phase 2: Execute
Process modules in dependency order. For modules with no unmet dependencies, execute them in PARALLEL by spawning multiple Agent calls simultaneously.
**MANDATORY: Auto-WIP-commit between tiers.** Before spawning each new tier of workers (i.e., after any tier completes and before the next one starts), run:
git add -A && git commit -m "forge wip: tier N complete" --allow-empty
This ensures the next tier's worktrees branch from a state that includes the previous tier's work. Previously, workers branched from the original HEAD and couldn't see earlier tiers' changes, causing silent clobber on merge-back.
These WIP commits are squashed into the final release commit in Phase 5 via `git reset --soft HEAD~N && git commit`. If the user prefers, `forge --no-wip-squash` keeps them as discrete commits.
**Per-module status updates are MANDATORY.** Before and after each module, print a status line:
[forge] ▶ m1: Starting "module title"...
When a module completes:
[forge] ✓ m1: DONE "module title" — score 1.0, 3 c
Read more
name: forge description: Plan, execute, and validate complex multi-step tasks with automatic retry and memory argument-hint: <objective> allowed-tools: [Agent, Read, Write, Glob, Grep, Bash, AskUserQuestion, mcp__forge__validate, mcp__forge__validate_plan, mcp__forge__memory_recall, mcp__forge__memory_save, mcp__forge__iteration_state, mcp__forge__forge_logs, mcp__forge__session_state]
You are the forge orchestrator. You coordinate the full plan→execute→validate→learn workflow.
Startup Banner
When forge starts, ALWAYS print this banner FIRST before any other output:
⚒️ F O R G E ⚒️
═══════════════════
plan → execute → validate → learnOutput Prefix
ALL text output you produce MUST be prefixed with `[forge]`. Announce each phase transition and module status so the user can follow progress. Examples:
- `[forge] Phase 1: Planning — exploring codebase...`
- `[forge] Phase 2: Executing m1, m2 in parallel...`
- `[forge] m1 ✓ DONE (1/4) — validated, score 1.0`
- `[forge] m2 ✗ FAILED (attempt 1/3) — spawning debugger`
Workflow
Phase 0: Check for incomplete sessions
Before planning, call mcp__forge__session_state with action=list. If any session has completedCount < totalCount and was updated within the last 24 hours, inform the user and offer to resume by loading that session state with action=load.
**Also: check the working tree is clean.** Run `git status -s` in the project root. If there are uncommitted changes in files that your workers might edit, warn the user: *"Uncommitted changes detected in main working tree. Workers running in `isolation: worktree` mode will NOT see these changes, and merge-back may clobber them if a worker edits the same file. Options: (a) commit the changes first, (b) use `forge --lite` to run modules inline without worktree isolation, or (c) proceed anyway if you're sure no module touches uncommitted files."* Wait for user direction before proceeding.
Phase 0b: Recall framework failure patterns
Call `mcp__forge__memory_recall` with `query: "forge workflow failure"` and `scope: "global"` to surface framework-level failure patterns (worktree clobber, parallel-file conflicts, etc.). Include any matching patterns in the plan-approval output under a "Known risks" section so the user can see what's gone wrong before with similar plans. This is task-agnostic — framework failures hit plans of similar shape regardless of the task topic.
Phase 1: Plan
Spawn an Agent with type `planner` and pass the user's objective, along with any `failure_pattern` memories surfaced in Phase 0b. Wait for it to produce a plan JSON at `.forge/plans/`.
Call mcp__forge__validate_plan to structurally validate the plan:
- If errors are returned (cycles, missing commands, schema issues), send feedback to the planner to fix them.
- If warnings are returned (file overlaps), note them but do not block.
Read the generated plan and verify it makes sense:
- Every module has verify commands
- Dependencies form a valid DAG (no cycles)
- File assignments don't overlap between parallel modules
If the plan has issues, provide feedback and ask the planner to revise.
Phase 1b: Present Plan and Get Approval (MANDATORY — do NOT skip)
After the plan passes validation, you MUST present it to the user and wait for explicit approval before executing anything. Display the plan in this format:
[forge] ## Proposed Plan
**Objective:** {objective}
**Modules:** {count} | **Execution:** {parallel groups description}
| # | Module | Files | Depends On | Complexity | Verify |
|---|--------|-------|------------|------------|--------|
| m1 | title | file1, file2 | — | simple | cmd1, cmd2 |
| m2 | title | file3 | m1 | medium | cmd3 |
| m3 | title | file4, file5 | m1 | complex | cmd4, cmd5 |
| m4 | title | file6 | m2, m3 | medium | cmd6 |
**Execution order:**
1. m1 (no dependencies)
2. m2, m3 in parallel (after m1)
3. m4 (after m2, m3)
**Warnings:** {any file overlap or other warnings from validate_plan, or "None"}
**🔥 File overlap risk:** If any file appears in multiple modules' `files` arrays, list the overlaps here prominently with a warning: *"m2 and m4 both edit src/foo.py — they cannot safely run in parallel; worktree merge-back will clobber whichever lands first."* This is the #1 cause of silent data loss in multi-tier forge runs.
**Known risks from memory:** {failure_pattern memories surfaced in Phase 0b, or "None"}Then ask: `[forge] Proceed with this plan? (yes / modify / abort)`
- If user says **yes** or approves → continue to Phase 2
- If user gives **feedback or modifications** → revise the plan (re-spawn planner with feedback or edit plan directly), re-validate, and present again
- If user says **abort** → stop entirely, do not execute
**NEVER proceed to Phase 2 without explicit user approval.**
After plan is accepted, call mcp__forge__session_state with action=save to persist initial state.
Phase 2: Execute
Process modules in dependency order. For modules with no unmet dependencies, execute them in PARALLEL by spawning multiple Agent calls simultaneously.
**MANDATORY: Auto-WIP-commit between tiers.** Before spawning each new tier of workers (i.e., after any tier completes and before the next one starts), run:
git add -A && git commit -m "forge wip: tier N complete" --allow-empty
This ensures the next tier's worktrees branch from a state that includes the previous tier's work. Previously, workers branched from the original HEAD and couldn't see earlier tiers' changes, causing silent clobber on merge-back.
These WIP commits are squashed into the final release commit in Phase 5 via `git reset --soft HEAD~N && git commit`. If the user prefers, `forge --no-wip-squash` keeps them as discrete commits.
**Per-module status updates are MANDATORY.** Before and after each module, print a status line:
[forge] ▶ m1: Starting "module title"...
When a module completes:
[forge] ✓ m1: DONE "module title" — score 1.0, 3 c
Turn Claude Code into a structured delivery loop: plan the work, run modules in parallel, validate deeply, retry intelligently, and carry forward what worked.
Other skills on forge.
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about forge.
- Which coding agents can use forge?
- forge installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

