La Boétie

PRbot: issue to pull request AI agent

PRbot is an AI agent that turns an issue from GitHub or GitLab into a reviewed, tested draft pull request. The agent runs without a human operator. Each run works in its own sandbox, and the host checks the work before it opens the request. A run on Claude Haiku costs about $2 on sample repositories.

About $2 per run on sample repositories; default budget cap of $25

Status
Live
Access
By request

PRbot capabilities

How an issue becomes a draft pull request

An issue becomes a draft pull request through twelve gated phases, from understanding the issue to tests and a final review. The host checks the work before it commits, pushes and opens the request. Its body lists the goals with their evidence, the screenshots, the model and the cost.

Supported issue trackers and repositories

PRbot reads issues from GitHub and GitLab and opens its requests on both forges. You tick issues in the console or set a trigger label such as agent:run. A webhook fires within seconds of the label. Without a webhook, polling runs every 120 seconds. The Odoo source has unit tests and no live run yet. Jira and Linear are on the roadmap.

Cost per run and budget cap

A run on Claude Haiku costs about $2, and a dozen runs on sample repositories ranged from $1.55 to $3.60. The same work on Claude Opus costs about ten times more. Each run carries a default budget cap of $25, and the harness stops the run when it reaches the cap. The cost appears in the console, in the issue comment and in the request body. Runs on large repositories may differ.

Sandbox and credential isolation

The agent works in an isolated sandbox on your own machine, with your repository, your databases and a real browser. It holds no forge token and no model key. Network access is restricted.

Code review before a person merges

A separate agent reviews each change with none of the author context, and the author must answer every finding. Each end to end step needs a real screenshot. A failed check appears in the request body. A person then reads the draft, marks it ready and merges it.

How to get PRbot

PRbot is available by request, and no self serve signup exists. An operator provisions each tenant with its own Unix user, data directory and site. To start, send a brief that names your repository, your issue tracker and the model you want to use.

On this page

What an issue to pull request agent is

An issue to pull request agent is software that reads a ticket from your tracker, changes the code in a copy of your repository and proposes the result as a pull request. Your team reviews that proposal the way it reviews a colleague's work. GitLab calls the same object a merge request.

Most coding assistants need a person at the keyboard to approve each step. An issue to pull request agent runs from a ticket to a finished proposal with nobody driving it. That raises one hard question: how do you trust what comes back?

PRbot uses a fixed process to answer it. Each run moves through twelve phases, and checks on the host machine must pass before a draft opens. The agent cannot mark its own homework, and it holds no credential that could write to your repository.

How a run works, from issue to draft

  1. A person ticks an issue in the console, or adds a trigger label to it.
  2. The host clones the repository and prepares a sandbox with your databases, your seed data and a real browser.
  3. A planning pass reads the code and writes the scope, the analysis, the plan and the goals.
  4. A session pass writes the code and tests it against the running application.
  5. A separate agent with no shared context reviews the change.
  6. A final pass runs the end to end scenario, captures one screenshot per step and records the outcome in a file.
  7. The host checks what is on disk, commits, pushes and opens a draft.
  8. A person reads the draft, marks it ready and merges it.

The security of the system depends on step 7. The agent edits files in its sandbox. The host, and only the host, talks to your forge. A forge is the service that hosts your code, such as GitHub or GitLab.

Checks a run must pass

A run has to prove its work before a draft opens. The host machine runs these checks itself, on the files the agent left behind, and the agent takes no part in them.

What is checkedWhat it protects you from
The plan exists before any codeAn agent that starts coding with no understanding of the issue
Each goal has evidenceA claim of success with nothing behind it
Protected paths stayed untouchedChanges to CI, infrastructure or dependencies
Review findings were answeredCriticism that was ignored
Screenshots are realPlaceholder proof
The end to end scenario passedA done status over a broken flow

A failed check sends the work back. If it keeps failing, the failure appears in the merge request and the run cannot end as done.

What the final status means

StatusMeaning
doneThe whole process completed and every check passed
partialThe run ended with something red. A draft usually still exists
blockedPhase 0 found a hard blocker and no code was written
failedAn error the run could not settle, such as an account out of usage
interruptedThe service restarted under the run. A rerun returns to the same branch

A hard blocker has two possible causes: the change needs files outside the allowance, or the issue contradicts a stated constraint of the repository. An ambiguous ticket does not stop a run. The agent writes its assumptions into the scope file, where a reviewer can read them.

What your reviewer sees

The draft opens with a block written by the host, and the agent's own description follows it.

ItemSource
Run id, harness and modelHost
Verdict and any red gatesHost, from validated files
Screenshot countHost
Cost and token countsHost, from the gateway
Link that closes the issue on mergeHost
Goals, each with met, unmet or unverified and its evidenceVerdict file
Description of the changeAgent

The issue receives a comment when the run starts. A second comment at the end gives the link, the outcome and a table of goals. After a person merges, PRbot notices on its next check, every ten minutes by default, and records the commit, the time and the person.

Testing against your real application

Many agents stop at unit tests, which miss a broken screen. PRbot starts your stack inside the sandbox and drives it with a real browser.

You declareWhat happens
DatabasesOne PostgreSQL, MongoDB or Redis per run, on the loopback
Seed commandsSchema, then fixtures, run before the stack starts
Start commands and ready URLsThe dev stack comes up and must answer
Environment variablesEach is classified as local, safe for dev or external secret

Keys for outside services stay empty in the sandbox, so the seed must leave your application able to boot without them. A payment or mail integration needs a stub or a feature flag. The seed uses no production data, so screenshots in the draft show fake records.

What you connect

AxisOptions
Issue sourceGitHub issues, GitLab issues, Odoo project
RepositoryGitHub or GitLab, through a token or a GitHub App
Model providerAnthropic, OpenAI, DeepSeek, OpenRouter, or any compatible endpoint
HarnessClaude, Codex, opencode, Hermes
Run profileadvancedpr for the twelve phases, onboard for setup

A harness is the program that drives the model. Changing one is a setting, so you can try two on the same issue and compare the drafts and the costs.

How issues get picked

There are two ways in. In the console, you tick one issue or several and press run. You can also set a label rule, and the convention looks like this.

agent:run      a person adds this label to start a run
agent:mr       applied when the draft opens
agent:merged   replaces it after the merge

A webhook starts a GitHub or GitLab run within seconds of the label. Without a webhook, and always for Odoo, the service polls every 120 seconds by default.

One issue has one active run. A second request returns the run already in progress. A rerun reuses the branch, so it updates the same draft and leaves no duplicate behind.

Security model

An agent that reads tickets is exposed to whatever a ticket says. A malicious issue could tell it to send your secrets somewhere. PRbot limits what any instruction can reach.

RiskWhat PRbot does
An agent reads other projectsEach stage runs isolated on your machine
An agent sends data awayNetwork access is restricted
An agent steals the model keyThe key stays on the host
An agent pushes bad codeIt holds no forge credential, and the host decides
A secret lands in a commitThe host refuses the change
Credentials at restEncrypted, and no API call returns one

Why branch protection is required

PRbot refuses a repository whose base branch accepts a direct push, and it proves the rule by testing it during setup. Your forge enforces branch protection, so that rule holds even if every layer above it failed. The rule needs one required review on the base branch. On GitLab, the equivalent is a protected branch with push access set to no one.

A person takes the last step, since PRbot has no merge function.

What a run costs

The figures below come from live runs on sample repositories. Each run took about ten screenshots. Your code will differ.

RunCost
Claude Haiku, twelve phasesAbout $2, from $1.55 to $3.60 across a dozen runs
Claude Opus, same workAbout ten times more
Onboarding run, three phases, no draftAbout $0.22

You pay your model provider directly with your own keys. Each run has a cap, 25 dollars by default, and you can set a lower one per tenant. The harness receives the cap and stops when it reaches it. Tokens are counted at the gateway, so all four harnesses report through one meter. A model missing from the price table shows tokens and no cost, since PRbot does not estimate a rate it lacks.

Adding a repository

Setup happens in the console, in five steps. PRbot first proves the credential works, then reads the repository and prefills the commands, databases and environment list. It installs the toolchain, runs the stack once to confirm that everything starts, and offers fixes when something fails. A person approves each proposal.

Which issues suit an agent

Good fitPoor fit
A clear bug with steps to reproduceA vague request with no acceptance criteria
A small feature in existing patternsA new architecture
A change you can check in a browserA change that needs production data
Copy, validation and form changesChanges to CI or infrastructure on denied paths

Writing the ticket well matters more than choosing the model. State what should happen, where, and how to see it working. The first runs should use small issues and a cheap model, so you learn how the agent reads your repository.

Coding assistant, hosted agent or PRbot

QuestionAssistant in an editorHosted coding agentPRbot
Who drives it?A developerNobody, after assignmentNobody, after assignment
Where does the code run?The developer's machineThe vendor's cloudYour machine
Who chooses the model?Depends on the toolUsually the vendorYou, per tenant
Who checks the result?The developerThe agent and your CIHost gates, then your reviewer
Runs your stack with a browser?Only if a developer sets it upVaries by productYes, on every run

An assistant suits work a developer wants to steer. PRbot suits a team with a backlog of well described tickets that wants its code to stay on its own hardware.

Next step

Send a brief with your forge, your stack and a few typical issues, and the studio will reply with a setup. PRbot shares its gateway core with GateLLM and runs on the same engine as Agent Runtime.

Frequently asked questions

Can an AI agent turn a GitHub issue into a pull request?

Yes. PRbot takes an issue from GitHub or GitLab and returns a draft pull request. The agent edits files inside its sandbox and holds no forge token. The host checks what the agent left on disk, then commits and pushes the work and opens the request. PRbot posts a comment on the issue with a link to the request, the goals, the screenshot count and the cost.

How much does a PRbot run cost?

A dozen runs on Claude Haiku on sample repositories ranged from $1.55 to $3.60, which gives about $2 per run. Those runs covered twelve phases and about ten screenshots. Claude Opus costs about ten times more for the same work. An onboarding run of three phases costs around $0.22. These figures count model tokens. Runs on large repositories may differ.

Which coding agents and models does PRbot support?

PRbot runs four harnesses: Claude, Codex, opencode and Hermes. The confirmation dialog lets you choose the harness, the provider and the model before a run starts. Live proofs cover Claude Haiku on GitHub and GitLab, Codex on GitHub, and opencode and Hermes on GLM 5.3 Flash on GitHub. A model missing from the pricing table shows token counts with no cost.

Does PRbot have automatic merge?

No. PRbot opens a draft, and a person reviews it, marks it ready and merges it. Every ten minutes the API reads back the requests a run left open. When one is merged, PRbot records the commit, the time and the person, then comments on the issue and closes it. Each write back step can be switched on or off per source.

Does PRbot work with Jira or Linear?

Jira and Linear are on the roadmap. GitHub and GitLab have live runs behind them. The Odoo source is implemented and unit tested, and it has not run live. If your team uses another tracker, name it in your brief so the studio can tell you what intake exists.

What does a repository need before PRbot can test it?

A repository needs a seed that fills a development database and lets the application boot with no live third party key. Keys of outside integrations stay empty in the sandbox, so payment, mail and partner calls need a stub or a feature flag. PRbot cannot test a repository whose seed needs a live key. Screenshots in the request show the fake seed data.

What happens when a PRbot run fails?

The run tries again with the failure in view. If the failure stays, the run ends as partial and the request body names it. A hard blocker stops the run before any code is written.