Agent team
Intake: how tasks reach the orchestrator
Ways in
Both ways in end up as GitHub issues, so every task has one record.
| Way in | How |
|---|---|
| Open a GitHub issue | Add the botgumi label, or mention @botgumi in the issue. |
| Tell the orchestrator | Chat with it, or run botgumi task "…". It turns your words into issues. |
The orchestrator splits each intent into one issue per track, labelled track:*, tier:*, runtime:*,
with a brief and its dependencies ("blocked by #n"). Workers open PRs with Closes #n. The GitHub Project
board shows Status, Track, Tier, Runtime and the PR link. Human gates are issues labelled gate.
How the runner hears about events
The runner is botgumi run on your Mac. It never opens an inbound port.
- Relay (main path). A GitHub webhook calls the
botgumi-relayWorker (packages/ts/relay), which queues the event in a Durable Object. The runner holds an outbound WebSocket to it and gets events within seconds. Events stay queued until the runner acks them. - Catch-up poll. At start, and every
runner.pollMinutesafter, the runner lists open issues throughgh. This picks up anything missed while the Mac was asleep.
Both sit behind EventRelay, so either can be swapped (for example polling only).
Trust filter
The runner treats issue and comment text as instructions only from allowlisted authors: the repo owner,
plus runner.trustedAuthors (empty by default). Text from anyone else, including the bot itself, is data:
the orchestrator may read, quote or triage it, never follow it. This matters once a repo is public, because
anyone can open an issue there. Gate approvals count only from allowlisted authors.