How to use Farna Control for vibe coding
Farna Control Team
Vibe coding is letting AI agents write code iteratively from natural language prompts: you describe what you want, the agent writes it, you review, you iterate.
Without governance, vibe coding trusts the agent completely: it writes code, tests, and documentation, and a mistake lands in your repo before you notice. Farna Control's governance layer sits between the agent and your repository, catching problems before they land.
Run it on a single local machine with Docker Compose
You need Docker Desktop and a GitHub account.
-
Clone the Farna Control repository and start the stack:
git clone https://github.com/farnalabs/modulo.gitcd farna-controldocker compose up -
Create a GitHub personal access token with repo scope, so Farna Control can watch your repository for PRs.
-
Log into Farna Control at http://localhost:8080. The default credentials are printed in the container logs.
-
Create a GitHub connector using your PAT.
-
Create a pipeline with three nodes:
- A trigger that fires on pull request events
- A sandbox agent node that receives the PR diff and makes changes
- A gate node that checks the agent's output
-
Open a pull request in your repository and Farna Control picks it up.
Setup takes about fifteen minutes, with no cloud account, credit card, or infrastructure beyond Docker.
What the pipeline does
Farna Control captures the PR diff and spawns an agent in an isolated sandbox. The agent reads the PR description, makes the changes, and produces a new diff, which the gate then checks:
- Does the diff contain any secrets or credentials?
- Does the output match the expected schema?
- Does the code pass basic quality thresholds?
If the gate passes, you review the evidence and decide whether to merge. If it fails, the agent gets a new run with the feedback attached, and the original stays as evidence.
The principles behind this: deterministic gates catch failures before they reach your repository, and humans in the loop where it matters means you always have the final say.