Skip to content
maxwellmattryanPublic

About

A lightweight, self-improving software factory for AI coding agents (as a Claude Code plugin) πŸ—οΈ

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Latest commit

Β 

History

429 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Forge anvil logo

Forge

Thus at the flaming forge of life
Our fortunes must be wrought;
Thus on its sounding anvil shaped
Each burning deed and thought!

β€” Henry Wadsworth Longfellow, The Village Blacksmith (1840)

version CI Claude Code plugin zero dependencies node license

βš’οΈ Forge is a lightweight, self-improving software factory for AI coding agents. You hand it a feature, a bug or a backlog item. A team of agents plans it, specs it, builds it in its own git worktree, reviews it through the lenses your repo cares about, and opens a pull request, or stops and asks you when only a human can decide.

The Forge dashboard's Pipeline board: jobs queued, planning, building and in review, three agents running, two open PRs (one with checks passing, one pending), two jobs outlined in ember because they wait on you, and the Foreman and Daemon running in the status bar

It ships as a Claude Code plugin (an orchestrator skill, 13 agents, a zero-dependency Node CLI and a live dashboard) and works in any repository: each repo only carries a small .forge/ folder.

  • πŸ”€ Parallel by default. Every job gets its own worktree, branch and ports; a lease per job keeps sessions from colliding, and a crashed session's jobs are resumed.
  • πŸ” PR-aware. forge sync follows every PR through merges, conflicts, failing CI and review threads, and /forge continue #123 picks up any PR in the repo.
  • πŸ—‚οΈ Your tracker. A local backlog.md, GitHub Issues and Projects, or your own adapter (docs/TRACKERS.md).
  • πŸ” A review panel you choose. Twelve built-in lenses, your own checklists, and narrow yes/no verifiers that run before the panel.
  • πŸ™‹ Humans at the right moments. Spec approval, split proposals, escalations, conflicts, budget overruns and caught secrets stop the job and wait for you.
  • ✍️ You're the author. Nothing Forge produces credits an AI (Authorship).
  • πŸ“ˆ Measured and self-improving. Token and cost tracking per agent and job, eval suites, and retros that propose improvements as reviewed PRs (docs/IMPROVEMENT.md).

Install

In Claude Code:

/plugin marketplace add maxwellmattryan/forge
/plugin install forge@forge

You need Node β‰₯ 22.18 and git β‰₯ 2.38, plus gh β‰₯ 2.40 for pull requests. To use the CLI without Claude Code (other agent runtimes, scripts, CI), clone this repo and npm link it (details).

Updating

Run /forge update (or forge update in a terminal) when a new release is out: it updates the plugin or clone and restarts your dashboard. To pin or roll back a version, see Provenance and pinning.

Start

/forge init                      # detects your stack, asks a few questions, writes .forge/config.yml
/forge dash                      # opens the machine's dashboard for this repo: its login link (http://127.0.0.1:7400/?project=<name>#k=<key>)
forge dash url                   # reprints the login link, for a new browser or after a restart
/forge Add a reading-time badge to blog posts
/forge next 3                    # take the next three ready backlog items, in parallel

Commit the .forge/ folder; runtime state inside it is gitignored.

The skill can be invoked as /forge or, fully qualified, /forge:forge.

Commands

/forge <feature> new job from free text
/forge next [n] Β· /forge issue <ref> take work: next first resumes a queued job nobody drives, else triages and starts the next ready tracker item
/forge triage [n] readiness triage: mark ready items that lack an outcome, acceptance criteria, a bounded scope or are duplicates as needs-info, with one templated comment, so next skips them (details)
/forge continue <job | #pr | ref> [note] resume a job or PR: sync, integrate, address review feedback or CI
/forge approve <job> Β· revise <job> <note> Β· answer <job> <text> Β· rework <job> <note> Β· cancel <job> human decisions
/forge status Β· sync Β· dash Β· doctor Β· requests Β· update operate
/forge retro Β· /forge eval … improve and measure

The forge CLI underneath also serves scripts, CI and other agent runtimes: see Common commands and the full CLI reference.

How it works

  request
     β”‚
     β–Ό
   plan ──► spec ──► [design] ──► spec gate ◄── you approve
                                      β”‚
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
     β–Ό
   build ──► verify ──► verifiers ──► review panel
     β–²         β”‚           β”‚               β”‚
     └─────────┴───────────┴──────────────── fail / CHANGES
                                           β”‚ pass
                                           β–Ό
                                       integrate
                                           β”‚
                                           β–Ό
                                        decide
                                           β”‚ APPROVE Β· ESCALATE
                                           β–Ό
                     you ◄── merge gate ── PR ──► sync: merged, review
                                                  feedback, conflicts,
                                                  CI β†’ continue
  1. Plan. The spec-writer turns your request into a spec with acceptance criteria for you to approve. On a long request it first decides whether it is one job or several (the split check), and the planner runs only to plan a split.
  2. Build. The builder implements the spec on its own branch and worktree, then your tests and verifiers check it.
  3. Review. A panel of reviewers, picked from what the diff touches, reads it through one lens each; blocking findings send it back to build.
  4. Decide. The approver opens the pull request, or escalates to you on the open PR (the merge waits for you there), and Forge follows the PR until it merges. With approver.skipWhenClean on, a clean pass (every lens passed and nothing to escalate) opens the PR without the approver.

The CLI owns every deterministic step and all state, so agents only judge, and any session can resume any job. Dive deeper: How it works Β· Dashboard Β· CLI Β· Config Β· Glossary Β· Other agent runtimes

Notifications

Gates wait on you, so Forge can tell you. Add notify: to .forge/config.yml and it posts a small, fixed-shape message to your Slack (or any JSON webhook) and runs your own command when a job needs a human, a PR opens or merges, a job fails, the daemon stops on its own, a budget is exceeded or a secret is found:

notify:
  webhooks:
    - url: https://hooks.slack.com/services/T000/B000/XXXX
      events: [gate, pr-opened, job-failed]   # omitted = every event
      format: slack                           # json (default) | slack
  command: ./scripts/page.sh {event} {job} {title} {url}

Delivery runs in a detached process and never blocks the pipeline. The message carries only fixed reason text and the job's sanitised title, never request, review or agent text, and only a webhook's host is ever logged. forge notify test sends a sample. See Notifications.

Authorship

Forge treats the human who runs it as the author of everything it produces. This is enforced in three layers:

  1. Prompts: the orchestrator and every agent that writes commits or GitHub text are told never to add AI attribution.
  2. A hook: while the plugin is enabled, a PreToolUse hook checks every git, gh or glab command for attribution text, whatever global options come before the subcommand, including the message files it names with --file= / -F / --body-file (or --template / -t), --notes-file, --input and gh api -F key=@file. It blocks the command if that text carries an AI co-author trailer, a "Generated with …" footer, a robot-emoji signature or a session link. It runs for subagents too. Mentions such as "parse Claude Code transcripts" pass; only signatures are blocked.
  3. The CLI: before forge pr open pushes, it rewrites any branch commit message that still carries attribution (content and authorship untouched), and it strips attribution from PR bodies, issues and tracker comments.

Claude Code adds its own trailer and PR footer unless told not to, and a plugin isn't allowed to change that setting for you. To turn them off everywhere (not just in Forge), add this to ~/.claude/settings.json (Claude Code β‰₯ 2.1.281):

{ "attribution": false }

Opting out: aiAttribution: allow in a repo's .forge/config.yml, or FORGE_AI_ATTRIBUTION=allow in the environment. The hook reads aiAttribution: allow from the main checkout's .forge/config.yml of the project Claude Code runs in, never from a worktree's own config or the command's directory.

Project

License

MIT Β· Strike while the iron is hot. πŸ”₯

About

A lightweight, self-improving software factory for AI coding agents (as a Claude Code plugin) πŸ—οΈ

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages