01 · Why we built this

Building AC with AC

Built on agent-compose.Building agent-compose.

It runs on agent-compose, and uses it to handle its own Issues, change its own code, and repair CI.

The developer is Customer Zero; it must bootstrap itself to be AI native AI Native Let the Agent handle its own Issues, change its own code, and respond to its own CI.
agent-composeproduct + repository
Issueopened by customer zero
Workflow Agentreturns a Draft PR
repo → issue → agent → PR → repo
02 · Watch the workflow

How does an Issue become a Draft PR?

01 / 07
github.com/chaitin/agent-compose/issues/new
Type / to search Pull requests   Issues   Marketplace
chaitin / agent-compose
CodeIssuesPull requestsActions
Webhook writes successfully but still returns HTTP 500
B   I   <>   link   list
Reproducible in production: the write succeeds, but the caller retries and creates duplicate events.
agent-compose LIVE
event received
webhook.github.issues · opened
eventscheduleragentapply
Issue #439 matched the triage listener. Starting a fresh sandbox…
CHAPTER 01 · A CONTRIBUTOR

The story begins when a person encounters a problem.

A contributor opens the familiar GitHub Issue page, records the symptom, impact, and reproduction, then clicks “Submit new issue.” After submission, the picture-in-picture lights up: agent-compose enters the workflow for the first time.

USER ACTION · CREATE ISSUE
NO SPECIAL COMMAND OR BOT MENTION REQUIRED
github.com/chaitin/agent-compose/issues/439
Type / to search
chaitin / agent-compose
CodeIssuesPull requestsActions
Webhook writes successfully but still returns HTTP 500 #439
● Open
lin opened this issue now
Reproducible in production. The write succeeds, but the endpoint still returns 500, so the caller retries.
issue-triage[bot] commented
Triage summary
The production flow is affected and duplicate events are possible. Check the response write order first.
agent-compose AUTO
issue-triage run
target · chaitin/agent-compose#439
eventscheduleragentapply
managed write · labels + one comment. Human content remains untouched.
CHAPTER 02 · AUTOMATIC TRIAGE

Seconds later, the Issue becomes clearer on its own.

The user sees labels and a triage comment appear. The picture-in-picture simultaneously shows the Webhook, Scheduler, Agent, and managed write, making the background work visible.

VISIBLE RESULT · LABELS + ONE MANAGED COMMENT
TITLE AND USER CONTENT ARE PRESERVED
github.com/chaitin/agent-compose/issues/439
Type / to search
chaitin / agent-compose
CodeIssuesPull requests
Webhook writes successfully but still returns HTTP 500 #439
● Open
issue-triage[bot] commented
The scope is clear and reproducible. Treat this as a low-risk fix.
Apply labels to this issue
bug
agent:ready
priority:P2
agent-compose WAITING
draft-pr listener
authorization gate · closed
eventscheduleragentapply
no automation yet · waiting for a maintainer to add agent:ready.
CHAPTER 03 · THE HUMAN GATE

The maintainer reviews the information and makes the first critical decision.

When the problem is clear and the scope is appropriate, the maintainer selects agent:ready in GitHub’s label menu. This is not an ordinary status label: it explicitly authorizes the Agent to modify the repository. Until then, the picture-in-picture remains WAITING.

HUMAN ACTION · ADD agent:ready
TRIAGE NEVER ADDS THIS LABEL
github.com/chaitin/agent-compose/issues/439
Type / to search
chaitin / agent-compose
CodeIssuesPull requestsActions
Webhook writes successfully but still returns HTTP 500 #439
agent:running
Validate the Issue and repository statetrusted tool
Prepare an isolated workspacenew sandbox
Implement the fix and add a regression testDraft PR Agent
Inspect the diff, tests, and risktrusted tool
agent-compose RUNNING
authorized event
agent:ready · Issue #439
eventscheduleragentapply
fresh sandbox · workspace mounted, credentials cleared, Agent editing + testing.
CHAPTER 04 · WORK IN PROGRESS

The user stays in GitHub while work begins behind the scenes.

The Issue enters agent:running. agent-compose mounts an isolated checkout in a fresh sandbox. The Agent can edit and test, but has no GitHub credentials and cannot commit or push.

VISIBLE STATE · agent:running
NO TOKEN · NO COMMIT · NO PUSH
github.com/chaitin/agent-compose/pull/440
Type / to search
chaitin / agent-compose
CodeIssuesPull requestsActions
Return success after webhook persistence #440
Draft
ConversationCommits 1Checks 2Files changed 3
SummaryEnsure the success response is written after the webhook transaction commits.
Add a regression test covering duplicate delivery behavior.
Reviewersmaintainers

DevelopmentCloses #439
draft-pr[bot] opened this draft pull request
Tests: passed · Risk: low · Branch: codex/issue-439
agent-compose APPLY
Agent result received
outcome · implemented · risk low
eventscheduleragentapply
trusted boundary · diff + tests validated → commit, push, open Draft PR.
CHAPTER 05 · A DRAFT APPEARS

A readable Draft PR appears beside the Issue.

After the trusted outer layer validates the diff, tests, secrets, and risk, it commits, performs a non-force push, and opens the Draft PR for the Agent. The user sees the summary, tests, and full change set directly.

VISIBLE RESULT · DRAFT PR #440
THE WORKFLOW NEVER MARKS IT READY OR MERGES IT
github.com/chaitin/agent-compose/pull/440/checks
Type / to search
chaitin / agent-compose
CodeIssuesPull requestsActions
Return success after webhook persistence #440
Draft
ConversationCommits 2Checks 2Files changed 3
Checks
×task test:unit
duplicate delivery regression failed
1m 12s
draft-pr[bot] pushed 1 fix commit · verify response ordering before retry
task test:unit
all package tests passed
58s
task lint
no issues found
22s
agent-compose FIX LOOP
check_suite.completed
conclusion · failure · current head
eventscheduleragentapply
verified repair · failed checks refetched → 1 fix commit → non-force push.
CHAPTER 06 · FEEDBACK LOOP

When CI or review finds a problem, the PR keeps improving.

A failed check suite or changes requested from a trusted reviewer triggers a fresh isolated run. The Agent validates and repairs the problem, with no more than one commit per batch and never a force-push.

VISIBLE RESULT · FIX COMMIT + GREEN CHECKS
STALE HEADS AND UNTRUSTED COMMENTS ARE REJECTED
github.com/chaitin/agent-compose/pull/440
Type / to search
chaitin / agent-compose
CodeIssuesPull requestsActions
Return success after webhook persistence #440
Draft
ConversationCommits 2Checks 2Files changed 3
maintainer approved these changes
Implementation matches the Issue, regression coverage is present, and all checks pass.
All checks have passed · Review approved
agent-compose HUMAN ONLY
workflow boundary reached
Draft PR · checks green · review approved
eventscheduleragentapply
automation stopped · ready / merge / close remain explicit maintainer actions.
CHAPTER 07 · BACK TO THE HUMAN

Finally, the view returns to the maintainer.

The complete diff, tests, and repair history remain in the familiar GitHub PR page. The workflow stops here: marking ready, merging, or closing the Issue always remain decisions for the maintainer.

HUMAN ACTION · REVIEW AND DECIDE
THE WORKFLOW NEVER MERGES

Behind the scenes, it starts with YAML.

The configuration declares Agents, Skills, and the Scheduler. The runtime then activates events, isolated environments, and trusted writes in sequence.

agent-compose.ymldeclarative → runtime
agents:
  issue-triage:
    skills: [issue-triage]
    scheduler:
      sandbox_policy: new
      concurrency_policy: parallel

  draft-pr:
    skills: [draft-pr]
    scheduler:
      sandbox_policy: new
config loadedYAML
event subscribedQuickJS
sandbox createdAgent
verified writeNode tool

Don’t stop here. See it in action.

Open Agent Compose UI, inspect a real Issue, or read the Workflow source directly.