openfactory
Signals in. Pull requests out.
Tickets, alerts, and feature requests flow into a declared, versioned production line of AI agents. Write a blueprint — one markdown file — and the factory triages, fixes, adversarially verifies, and ships. You approve what merges.
---
blueprint: support-triage
on:
- event: CustomerTicket
filter: severity <= p1
agents:
Triager: { model: claude-haiku-4-5 }
Engineer: { model: claude-sonnet-5, env: node-20 }
outputs: { pr_url: url }
---
## triage @Triager
Classify {{ event.link }} by severity and area.
## fix @Engineer [needs: triage] [retry: 2]
Fix the bug. Open a PR when tests pass.
## verify @Engineer ×3 [needs: fix] [vote: 2/3]
Adversarially verify. Try to refute the fix.
## ship? [needs: verify]
Human gate: approve for merge.Works with
One file per factory line
A blueprint is markdown with YAML frontmatter: the frontmatter declares the world — triggers, typed events, agents, outputs — and every ## heading is a step in the line, its body the agent's instructions.
- [needs: …] wires the DAG
- ×3 [vote: 2/3] fans out and takes a quorum
- [if: …] [retry: 2] guards and retries
- ## ship? pauses for a human
---
blueprint: support-triage
on:
- event: CustomerTicket
filter: severity <= p1
agents:
Triager: { model: claude-haiku-4-5 }
Engineer: { model: claude-sonnet-5, env: node-20 }
outputs: { pr_url: url }
---
## triage @Triager
Classify {{ event.link }} by severity and area.
## fix @Engineer [needs: triage] [retry: 2]
Fix the bug. Open a PR when tests pass.
## verify @Engineer ×3 [needs: fix] [vote: 2/3]
Adversarially verify. Try to refute the fix.
## ship? [needs: verify]
Human gate: approve for merge.Blueprints
Declare the whole factory in one markdown file — triggers, agents, steps, gates. Version it, review it, diff it. Your infrastructure-as-code habit, pointed at your backlog.
Agent lines
Steps fan out to coding agents in sandboxed environments. Retries, conditions, ×N fan-out with quorum voting — adversarial verification is one attribute, not a meeting.
Human gates
A trailing ? on a step pauses the line for sign-off. Everything before it is automated; everything after it waits for you. You stay the factory boss.
Every channel
Slack threads, Telegram messages, forwarded email, or a raw HTTP POST — every channel normalizes into the same issue inbox the factory works from.
Live previews
Every PR gets a full-stack preview environment in an E2B or Daytona sandbox — web, API, and worker booted from the branch, behind your own proxy domain.
Encrypted intake
Reporter names, external ids, and arbitrary metadata are KMS-encrypted at rest. The factory floor is open; the paperwork is locked.
Send anything into the factory
Zero-dependency SDKs for TypeScript and Python post issue-shaped events to the API channel — with idempotency keys, retries, and typed events matching your blueprints. Or skip the SDK and POST JSON with a bearer token.
npm install @openfactory/sdk
pip install openfactory-sdk
Your backlog is a
Stop hand-crafting every fix. Declare the line once and let the factory run around the clock.
Start your factory