Forgeo is a software factory for your coding-agent. You're already working with an AI coding agent, prompting it task by task or giving it a goal. Forgeo organizes your work in a structured way with a backlog, and it decides what to work on next, runs your agent on it, and commits the result. Progress, pending decisions, and history are tracked in plain files you can inspect at any time, plus a web dashboard. Forgeo only interrupts you when a decision is genuinely yours to make, everything else happens autonomously. Transient failures (a network blip, a flaky test) are retried automatically when the retry policy is enabled, and only a task that keeps failing or genuinely needs a human decision ever reaches you.
All you need is basic comfort with a terminal, a git repository, and any coding agent CLI.
Quickstart
The full walkthrough is in Getting started.
1. Install the CLI
Pick any one installer (no root needed; re-running it upgrades Forgeo).
# Homebrew (macOS / Linux): prebuilt binary, no Python required
brew install lucaGazzola/forgeo/forgeo
# One-liner (Linux / macOS / Windows): prebuilt binary, falls back to pip
curl -fsSL https://forgeo.org/install.sh | bash
# pip (Python 3.11+)
pipx install forgeo-cli
2. Create your Forgeo
forgeo init
Guided wizard, run from your project root. Writes forgeo.yaml (the
config) and a .forgeo/ folder for the backlog, logs and blocker files.
The base flow is then three steps: fill the backlog, check the configuration, start the daemon.
3. Fill the backlog
# Either: edit the backlog file by hand — a plain JSON task list (see
# Backlog format), created on first use:
# .forgeo/backlog.json
# Or: add tasks from the web console once your forgeo is registered
# (first `forgeo start` registers it automatically):
forgeo web # dashboard at http://0.0.0.0:8790, or keep it on with `forgeo web -d`
4. Check the configuration
forgeo validate
Read-only dry run before the first start: verifies forgeo.yaml, the git
repo, branch and remote, that the backlog parses (fetching it once when it
is an HTTP endpoint), the agent command, and the lock state. Never invokes
the agent and writes nothing.
5. Start the daemon
forgeo start
Starts the daemon detached in the background and exits. Every
interval_minutes it runs one cycle: pick the oldest OPEN task whose
dependencies are all COMPLETED, run your coding agent on it, commit the
result. When the backlog is empty, the same agent runs a refactoring pass
over the codebase instead.
Day-to-day commands
forgeo status # Config, backlog counts, next runnable task, daemon running?, last outcome
forgeo once # Run exactly one cycle in the foreground, no daemon left behind
forgeo run --task SELF-012 # Run one specific OPEN task now (triage)
forgeo stop # Stop the background daemon
forgeo restart # Stop and start again (re-reads forgeo.yaml after edits)
forgeo web # Dashboard: every instance's backlog, run history and logs
forgeo web defaults to an open dashboard on http://0.0.0.0:8790; on a
shared host protect it with forgeo web --token (requires
Authorization: Bearer <token> on every /api/* route — see
Web console & HTTP API).
Multiple repositories (instances)
Run several factories at once, one per repository; each config is fully
independent (own backlog, logs, locks). Register each forgeo.yaml with
forgeo instance add NAME --config PATH, manage any of them by name with
forgeo start/status/stop --name NAME, list them all with forgeo list,
and get one aggregate overview with the central dashboard, forgeo web.
Documentation
| Topic | Where |
|---|---|
| Install, init, first cycle | Getting started |
Every forgeo.yaml key |
Configuration |
| Task schema and statuses | Backlog format |
| How the agent is invoked (env, exit codes, timeouts) | Agent contract |
| All CLI commands | CLI reference |
| Web dashboard & HTTP API | Web console & HTTP API |
Everything is stored in plain files: the backlog, forgeo.log, and
BLOCKER.md whenever a decision is pending. The backlog can also live in
another application behind an http(s) URL — Forgeo reads the whole task
document with GET and writes it back with POST, with optional OAuth2
client-credentials auth (see Backlog format). A file
backlog is snapshotted (rotating backlog.json.bak files) before every
agent run and on daemon startup, and restored automatically if it is ever
found corrupt — a bad write never loses your tasks.
Develop
pip install -e ".[dev]"
pytest
See CONTRIBUTING.md for the development setup, quality
gates (pytest, ruff check, mypy src/forgeo), and the pull-request
process.
License
MIT — see LICENSE.
Metadata
Release files for forgeo-cli 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| forgeo_cli-0.7.0.tar.gz | 879.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| forgeo_cli-0.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 999.1 kB
Release files / forgeo_cli-0.7.0.tar.gz
| Download URL | forgeo_cli-0.7.0.tar.gz |
|---|---|
| Size | 879.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
84dae970701d53a9581d8686018a69d3b583a24933f8d80edd9f982843ff3601
|
|
BLAKE2b-256 checksum How to use checksums |
cd0c7cc1460ad36eb40b601db09c57efa7ee726f78d11cb815bc132a31b4ec6c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency logRelease files / forgeo_cli-0.7.0-py3-none-any.whl
| Download URL | forgeo_cli-0.7.0-py3-none-any.whl |
|---|---|
| Size | 119.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eaf644891af45c729164c5b1f994871c1577f163780ad4acec79ac5aa0f9378e
|
|
BLAKE2b-256 checksum How to use checksums |
6ac21cbabc20b87d06b16f1a96ffec967e65547adbcfd1cee7c3ccb8b5fc7070
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency log