Skip to main content
Forgeo logo
Forgeo

CI License: MIT

Forgeo running a backlog task end to end

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 wizard asks for the backlog provider (file for a local JSON file, or github/gitlab/jira/http for an external tracker — for github it auto-detects owner/repo from git remote and can persist a pasted GITHUB_TOKEN to ~/.config/forgeo/github_token_env.sh).

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: pick github/gitlab/jira in forgeo init (or configure forgeo.yaml
# manually): set backlog_provider: github and backlog: https://api.github.com
# with github.repo + token_env, then export GITHUB_TOKEN and run
# forgeo validate. See backlog docs for Jira/GitHub/GitLab.

# 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`

Forgeo web console

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).

Running the agent in a container

By default Forgeo runs the agent directly on the host. To run it inside a Docker container instead, set agent_sandbox: docker in forgeo.yaml:

agent_sandbox: docker
agent_sandbox_image: your-image
agent_sandbox_network: none   # default; set bridge/host to allow network
agent_sandbox_mounts:         # optional, read-only, e.g. ~/.claude
  - ~/.claude

The image must already contain the agent CLI your agent_command uses plus a shell (nothing is installed at run time). Forgeo bind-mounts the repository into the container at the same path, so the agent's edits land on your checkout and are committed as usual; the task is passed through as FORGEO_TASK. Networking is off by default (none) and nothing else is visible inside the container unless you list it in agent_sandbox_mounts. See the Configuration docs for details.

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 local backlog, forgeo.log, and BLOCKER.md whenever a decision is pending. Backlog providers (see Backlog format):

File and HTTP backlogs exchange the complete task document; Jira/GitHub/GitLab issues are read and transitioned individually with workflow state and engine metadata stored on the issue. 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.

The central dashboard (forgeo web) mirrors every instance: for file/http it is the primary editor; for jira/github/gitlab it is a read-mostly mirror of the native tracker — each task card and its detail modal link to the native issue (Open in Jira/GitHub/GitLab ↗), a top banner links to the native board, and the board surfaces Forgeo-specific state the native UI does not (BLOCKED/FAILED reasons, agent_response, retry budget) — triage stays in the tracker (see Web console & HTTP API).

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.10.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for forgeo-cli 0.10.0
File Size Uploaded
forgeo_cli-0.10.0.tar.gz 1.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for forgeo-cli 0.10.0
File Interpreter ABI Platform
forgeo_cli-0.10.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / forgeo_cli-0.10.0.tar.gz

Download URL forgeo_cli-0.10.0.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
1c3a9bb386c81dedbf2431af1bf9b2d2668fe339ecc2c31ffd2c1bfb9be79806
BLAKE2b-256 checksum
How to use checksums
3bc65da496baf91c92ee5ed185318b720f4ff659304828c25f6898319eed3312
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 24, 2026.

Transparency log

Release files / forgeo_cli-0.10.0-py3-none-any.whl

Download URL forgeo_cli-0.10.0-py3-none-any.whl
Size 150.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e7c31c62c7fc5a10d519f3b9484deb3b6e8d4a97a77c043b6a95a21ad2220509
BLAKE2b-256 checksum
How to use checksums
70a1211d2cbaffe81f260d9daef018e1ade4cb642d299267f56ae1dc8a8e7f85
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 24, 2026.

Transparency log

Release history Release notifications | RSS feed

0.11.0

2 release files

This release

0.10.0 This release

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page