Agent pods carry no git or GitHub credentials, so a compromised agent cannot push or call the API. That raises an obvious question: how does a finished branch become a pull request?
When a branch is ready, the session runs one git command that needs no network and no secrets:
git bundle create /workspace/outbox/tiny-issue-7.bundle tiny/issue-7
A bundle is a self-contained, transportable branch. Writing that file is the whole submission; the agent has no other channel.
A scheduled GitHub Actions job (seconds long, every ~5 minutes) runs
tiny export:
origin/main — a bundle grown from an older clone must not carry
stale files back in.GITHUB_TOKEN — a
credential that exists for seconds, inside a runner, never inside an
agent pod.tiny/issue-N becomes a pull request; a REPLY.md committed on
tiny/reply-N becomes an issue comment (and the branch is deleted).tiny export --ack <bundle> retires the bundle — only after the
push succeeded. A failed push means the bundle waits for the next
courier run. Delivery is at-least-once; a re-bundle of the same
branch simply updates it.^[A-Za-z0-9][A-Za-z0-9._-]*\.bundle$); agent-controlled text never
reaches a shell.Wire-up lives in Issues to PRs; the design story in the field notes.