Anvil CoderLog in

The engine

From ticket to pull request

Anvil Coder plans a ticket and divides implementation into small work steps. These produce commits and, in the hosted service, a draft pull request. Build and tests are optional, enabled in the hosted service and require a matching toolchain; results that cannot be verified remain labelled as such.

A ticket in five steps

  1. Describe: write the task and acceptance criteria, or develop them in Spec Studio.
  2. Plan: split implementation into small steps with the context each needs.
  3. Implement: agents create changes and commits in the repository.
  4. Check: configured checks report their results. Build and tests require the appropriate toolchain; unavailable verification stays visible.
  5. Review: inspect the draft pull request in the hosted service and decide whether to merge.

Follow a Laravel bug fix through a recorded run, including the test that could not be executed in its sandbox.

System diagram: tickets and epics from YouTrack, GitHub, Jira, GitLab and the internal board flow into Anvil Coder; out come pull requests on GitHub, GitLab and Bitbucket; signals feed the dashboard, the model layer is interchangeable
The current state at a glance — dashed means planned.

The problem that had to be solved

A language model has a context window. A real software project does not fit inside it — not the requirements, not the existing code, certainly not both at once. Put a whole project into one prompt anyway and you get a sketch back, not a program.

Prompt slicing is the answer: the requirements are not summarised, they aredecomposed. Each TaskSlice is small enough to fit into a prompt completely — together with the context that this particular step needs.

Before the ticket: the Spec Studio

Not every order starts as a finished ticket. For the text that is not one yet, the cockpit has the Spec Studio: a guided specification in seven sections — from goal through roles and flows to the stack profile — each with its own follow-up chat that names gaps instead of papering over them. At the end the studio turns it into real tickets: epics and stories in the chosen tracker, on request together with a newly created repository.

The studio writes tickets, not code — the run still starts where it always starts: at the ticket, triggered by a person. The guide (in German) lives in thedocumentation.

Two axes: phases and slices

Execution runs on two crossing levels. Phases run one after another, separated by barriers: a phase starts only when every work step of the previous one is done. At the end stands a consistency pass over the whole. If it measures a regression, it sends the affected work steps into capped repair rounds. If it cannot measure, it lets the run through like the VERIFY gate and records an error on the gate — nothing was checked then. The measurement itself is available in the hosted service and is switched on per project. An additional build-and-test pass over the full state is optional; the hosted service runs it. TaskSlices run in parallel within a phase — as many at once as the deployment provides workers.

That is the difference between "typing faster" and "building more at the same time": order is preserved where it matters and dropped where it only slows things down.

REQUIREMENTS
The task description becomes a verified picture of requirements — open questions are recorded as assumptions and stay visible throughout the run.
ARCHITECTURE
Structure, interfaces and dependencies are settled before the first line of code exists.
IMPLEMENTATION
The actual work: each TaskSlice is exactly one AI prompt on one worker, with its own working tree.
RECONCILIATION (optional, on in the hosted service)
The parts built in parallel are checked against each other and merged.
TEST
Tests are created as work steps of their own, not as an afterthought.
VERIFY (optional, on in the hosted service)
The result is checked against the requirements — not against the intention that produced it.
DOCUMENTATION
What was built gets described while the context is still fresh.
CONSISTENCY
One final pass over the whole: does what was built separately fit together?
Illustration: one large glowing block is split on the anvil into a row of equally sized small billets — an epic becomes stories
An epic pulled onto the trigger state decomposes itself into evenly cut user stories — each one runs only after a human releases it individually.

What a worker does

A worker takes exactly one TaskSlice, executes one AI prompt, validates the result and commits it. No worker sees the overall plan; it sees its step and the context that step needs. Coordination sits with the coordinator, which holds the graph and distributes slices through a durable queue.

If a worker dies, its slice is not lost — it is redelivered. If a slice sits unacknowledged, it counts as demand and a worker is scaled up (optional).

What you see during a run

A run is not a black box. The cockpit shows live what is happening: which TaskSlice is being worked on, which changes it produces and which intermediate steps the model takes.

That includes cost — not summarised at the end of the month, but itemised per TaskSlice: which step consumed how much. If you want to know where a run's time or cost went, the answer is in the run itself, not in a reconstruction after the fact.

The result is a repository, not a suggestion

The result is not a chat transcript someone copies code out of. It is a Git repository with history: every TaskSlice leaves its commit, every phase its state. What sits there is verifiable — by a human, by a pipeline, by an auditor.