From your users to your codebase_
From users to your codebase_

Unlock your community.

Let your software heal itself.

Every report comes back as a draft pull request, with the whole run on record.

Claude
Codex
Gemini
Copilot
Cursor
~/runs/reporte

reporte-a-issue✔ triage agent → issue #209 opened

Thinking..

~/runs/issue-209

issue-a-pr sandbox → install → baseline → fixpr

> branch pushed by the engine, never by the agent
> draft PR #210 opened
> titled "sin verificación automática"

~/runs/issue-209/evidence

tokens counted · tools used · files touched · no verdict

Thinking..

A report from your console. A draft pull request on GitHub.
const next = await fetch("https://api.example.com/next-section");
Black and white grid pattern with black dots at the intersections, forming a repeating checkered design.
From report to pull request_

Your users describe the problem in their own words. The engine turns that into a technical issue, then into a proposed fix and a run you can audit.

Report
Issue
Fix
Draft PR
PROGRESS SECTION // 02 SUPCOFLOW
PROGRESS SECTION // 02 SUPCOFLOW
Submit Button
Submit ButtonSubmit Button

Every run is recorded: which files the agent touched, which tools it used, how many tokens it burned, and how it ended. No verdict — the engine does not grade its own work.

Triaged, Not Guessed

An agent reads the report and writes the technical issue first

Ephemeral microVM

Your repo cloned, isolated, and destroyed after the run

Evidence On Every Run

Tokens, tools used, files touched, and how the run ended

You Merge, Or You Don't

PRs land as drafts — nothing reaches main without you

Triaged, Not Guessed

An agent reads the report and writes the technical issue first

Ephemeral microVM

Your repo cloned, isolated, and destroyed after the run

Evidence On Every Run

Tokens, tools used, files touched, and how the run ended

You Merge, Or You Don't

PRs land as drafts — nothing reaches main without you

const next = await fetch("https://api.example.com/next-section");
Black and white grid pattern with black dots at the intersections, forming a repeating checkered design.

A report is one POST and a fix is another, both from a signed-in console. The repository is never read from the request — it comes from your project row, so untrusted input cannot choose where an issue gets written.

View Code Sample
// The console posts this. Nothing else
// can: it needs a signed-in session.

POST /api/issues
{
"title": "Checkout hangs on the last step",
"body": "I press pay and nothing happens…",
"project_id": "prj_acme_storefront"
}

// No owner and no repo: both come from
// your project row.
// A second call, on purpose: this one
// spends money, and it is refused until
// your own credential is on file.

POST /api/issue-runs
{
"issue_number": 209,
"project_id": "prj_acme_storefront"
}

// You send it after reading the issue
// the first call wrote.
<!-- Declared. Not shipped — and what
blocks it is not the widget: the microVM
still has open outbound internet. -->

<script src="…/widget.js" defer></script>

<!-- An end user has no account, so the
session model does not apply to them.
This needs a public entry of its own,
with a per-tenant ingest key and a
quota. Until then, reports come from a
signed-in console. -->
// The console posts this. Nothing else
// can: it needs a signed-in session.

POST /api/issues
{
"title": "Checkout hangs on the last step",
"body": "I press pay and nothing happens…",
"project_id": "prj_acme_storefront"
}

// No owner and no repo: both come from
// your project row.
// A second call, on purpose: this one
// spends money, and it is refused until
// your own credential is on file.

POST /api/issue-runs
{
"issue_number": 209,
"project_id": "prj_acme_storefront"
}

// You send it after reading the issue
// the first call wrote.
<!-- Declared. Not shipped — and what
blocks it is not the widget: the microVM
still has open outbound internet. -->

<script src="…/widget.js" defer></script>

<!-- An end user has no account, so the
session model does not apply to them.
This needs a public entry of its own,
with a per-tenant ingest key and a
quota. Until then, reports come from a
signed-in console. -->
const next = await fetch("https://api.example.com/next-section");
Black and white grid pattern with black dots at the intersections, forming a repeating checkered design.
Support as a development engine_

Every report your users leave comes back as a technical issue. You decide which ones are worth an agent's time, and those come back as draft pull requests. Growth stops being a support burden and becomes your development engine.

const next = await fetch("https://api.example.com/next-section");
Black and white grid pattern with black dots at the intersections, forming a repeating checkered design.

The things worth knowing before you point an agent at your repository.

Updated as the engine changes. If something here is out of date, tell us.

No. Every run ends at a draft pull request on its own branch. Merging is a decision you make, and nothing reaches main without it.

A clone inside an ephemeral microVM, created for that single run and destroyed after it. The tool set is an allowlist, the model and CLI versions are pinned, and every file the agent touched is recorded.

The run closes as no-changes: no pull request, and a record of what the agent read and tried. There is no not-reproduced outcome anywhere in the product, because there is no automatic judge — the engine reports what happened and never grades whether it was right. And when the agent never got to work at all, the run closes as failed and says so, instead of dressing that up as no-changes.

It is the only way this runs. Both product paths bill your own account, and until a credential is on file the API refuses to start a run. There is no inference to buy from us. The credential is scoped to inference only, and it never leaves the environment of the command that needs it.

Each run records its token counts, the tools it used and the files it touched. It does not record a dollar figure: with a subscription credential there is no per-request invoice to derive one from, so that column stays empty on purpose instead of showing you a list-price guess. The dollars are on your provider bill, and the tokens here tell you which run they belong to.

const next = await fetch("https://api.example.com/next-section");
Black and white grid pattern with black dots at the intersections, forming a repeating checkered design.

Ready to turn support into shipping?

Connect a repo, report the first problem from your console, and watch it come back as a draft pull request.

Every problem a user reports comes back as a technical issue, and then as a draft pull request for you to review. Leave your email and we will set up your first repo with you — today that is still done by hand.