Delivery Governance Platform
Govern the software development lifecycle
Farna Control orchestrates pipelines of AI agents and keeps an auditable record of every run — self-hosted, on your own infrastructure, with no phone-home.

| Time | Node | Result | Actor |
|---|---|---|---|
| 09:14:02Z | intake.github | PASSED | agent |
| 09:14:40Z | implement | PASSED | agent |
| 09:17:11Z | tests | PASSED | agent |
| 09:17:12Z | gate.approve | WAITING | human |
Sample data.
Govern work across the lifecycle
Farna Control governs more than issue-to-PR automation. Model and improve the work around code, dependency and licensing changes, security remediation, release, documentation and knowledge, evidence, and the human decisions that connect them across your SDLC.

Your agents, as nodes
Each agent is a node. Draw the pipeline as a graph and pick the model and agent behind every node. A diamond is a gate, where a person decides.
Execution contract
How existing agents connect in practice
You never rewrite your agents to use Modulo (or Farna Control). If an agent can run from a terminal or a CI job, Modulo can govern it.
Containerized or CLI agents
Point a pipeline node at your container image or command (Docker, Kubernetes pod, or E2B sandbox). Modulo provisions the environment, passes the task context, and reads back the result.
CI/CD dispatch
Modulo triggers your existing workflows (GitHub Actions, GitLab CI, CircleCI, or internal webhooks) via dispatch, passes parameters, and awaits completion.
A person decides at the gate
At a gate, agents wait for a named role to approve or send back. The decision, the role, and the exact diff that was approved are written to the audit log, so you can answer "who allowed this" later.
- 1. HumanPeople make every handoff.
- 2. AssistedAgents draft, people execute.
- 3. GatedAgents execute, a named role approves.
- 4. AutonomousOnly where proven, with the gate and audit still in place.
WAITING
The gate is holding. Switch it to RUN to see the barrier lift once a person approves.
| Time | Node | Result | Actor |
|---|---|---|---|
| 09:17:11Z | tests | PASSED | agent |
| 09:17:12Z | gate.approve | WAITING | human |

Every run is on record

What ran, what each step returned, and who approved are filed in your instance, in the system you already back up.
| Run | Time | Verdict | Approver |
|---|---|---|---|
| run_sample_0001 | 09:21:47Z | PASSED | tech-lead |
| run_sample_0002 | 10:03:15Z | SENT BACK | tech-lead |
Audit row: diff approved in run_sample_0001, approver tech-lead
@@ src/billing/retry.ts @@export function retryDelay(attempt: number) {return 1000 * attempt;return Math.min(30000, 1000 * 2 ** attempt);}
Runs where your code lives
There is no hosted version for customers to sign up to. Your code, prompts, and run history stay on machines you control.
- Self-hosted
- You run it on your own servers or cloud account.
- No telemetry by default
- Telemetry is opt-in only. With default settings and no connectors configured, Farna Control makes zero external network calls.
- Air-gap capable
- Run it inside a network with no route to the internet.
- Bring your own model backend
- Point a node at Anthropic, OpenAI, or a local model.
- Bring your own agents
- Use the agents you already have as nodes in the graph.
Giving you the control needed to scale delivery.
Most of the work in a pipeline is routine, and agents take that part. What is left is judgment, and it stays with people. Farna Control gives you the deterministic gates, audit trail and human review needed to let agents ship with confidence.
Figure pending: dated, from our own pipelines.
Is Farna Control right for my team?
Farna Control is one more system to host and operate. It only earns that spot if your team needs it. Here is how to tell.
A good fit if you:
- Need control over spend, agent permissions, and a human gate on what ships.
- Want the handoffs you make by hand recorded and enforced before any go to an agent.
- Want governance that survives swapping models, agent tools, or git hosts.
- Prefer tools you host over giving a vendor your source and agent traffic.
Probably not a fit if you:
- Face no audit or compliance need to prove what your agents did.
- Would rather not host another platform.
- Already get equivalent governance from GitHub Enterprise, GitLab Ultimate, or in-house tooling.
In that case, your git host's built-in protection rules are probably enough for now.
Where Farna Control fits
Install with Docker
You need Docker. Three commands bring up the full stack. When it is running, open it in your browser and wire your first pipeline.
Latest release v0.3.325. Farna Control is pre-1.0. The API can still change between releases.
git clone https://github.com/farnalabs/modulo.gitcd Farna Controldocker compose up -d
Latest release: v0.3.325 (2026-11-05) · release page on GitHub
Works anywhere Docker runs: Linux, macOS and Windows.
What you get
- Farna Control API at
http://localhost:8000 - Farna Control Web UI at
http://localhost:5173 - PostgreSQL + Redis included
- Automatic migrations on first run
Release package
Release v0.3.325 also ships a Compose package with a production stack: modulo-0.3.325-compose.tar.gz (8.1 KB). Extract it, run ./init-env.sh to generate the environment file, then docker compose up -d. This package serves the app at http://localhost, not on the ports above. SHA-256: d32fb0e781242477a1a953955da287adcb98fc2e9ccfc53efcf45895266f20f1.
Requirements
- Docker Desktop 4.30+ (or Docker Engine 24+ with Compose v2)
- 4 GB RAM minimum (8 GB recommended)
- 10 GB free disk space
Next steps
- Open
http://localhost:5173in your browser - Create your admin account
- Add a model backend (Settings → Model Backends)
- Create your first pipeline
Govern the agents you run
Self-hosted and source-available. Clone it, wire it around one pipeline, and add gates as you go.