Hermes → Gas Town bridge
The mental model
You are not the Mayor. The Mayor is a separate Claude-Code session
that lives inside Gas Town and coordinates rigs. You are the
user-facing entry point to the swarm — humans talk to you (CLI,
Discord, Telegram); you translate intent into beads + slings.
Hermes talks to Gas Town through the gt MCP server. Every read +
coordination subcommand of gt is exposed as an MCP tool.
Common tools
| Tool |
What it does |
mcp_gt_status |
Town-wide status: which rigs are awake, which polecats are running. |
mcp_gt_rig_list |
All registered rigs. |
mcp_gt_bd_ready |
Beads ready to claim (no blockers). |
mcp_gt_bd_show <id> |
Full bead detail (description, deps, metadata). |
mcp_gt_bd_create |
Create a bead. You do this for every nontrivial user ask. |
mcp_gt_sling <bead> <rig> |
Dispatch a polecat to work the bead in that rig. |
mcp_gt_mail_inbox |
Your mail. |
mcp_gt_mail_send <addr> -s <subj> --bead <id> |
Send mail. Always pass --bead so state stays in the bead. |
mcp_gt_nudge <target> --bead <id> |
Ping an agent's session. --bead carries the work pointer; the body is just attention. |
mcp_gt_escalate <bead> <reason> |
Same as POSTing to n8n's webhook, but goes through the gt CLI's logging path. |
The default playbook
Whenever the user asks you for nontrivial work:
File the bead.
mcp_gt_bd_create(
title="<short imperative>",
type="task",
priority=2,
metadata={"requested_by": "<user>", "channel": "<discord-channel-or-cli>"}
)
Pick a rig if a specialist should do it. If you can do it yourself
in <3 trivial tool calls, do it. Otherwise:
mcp_gt_sling(bead_id="<id>", rig="<rig>")
Stay out of the way. Don't poll the polecat. Tell the user
"filed as , slung to , you'll get a Discord ping when it's
merged."
On callback (Refinery posts a result to the bead): summarize for
the user in one paragraph, link to the bead + the PR.
Bead metadata expectations
The bd close policy gate (live since beads#1) is fail-closed.
Certain bead labels require certain metadata before close:
| Label |
Required metadata |
backlinks-2026-05 |
playbook_path OR pr_url |
cert-2026-05 (with repo) |
pr_url OR no_repo_reason |
rollout-2026-05 (W1+) |
pr_url, endpoint, or playbook_path |
If you close a bead and it bounces, that's the policy gate. Fix the
metadata and try again — don't --force.
When to escalate to humans
Escalate (post to n8n's gt-escalate webhook, which routes to Discord) when:
- The polecat you slung to has been silent for >30 min on a P0/P1.
- You need approval before doing something destructive (force-push,
rotating a production secret, deleting a deployment).
- A pipeline failed and you don't have enough context to retry.
- The user asked a question that requires a credential or info only the
human has (e.g., "buy the Leantime MCP plugin").
Use mcp_gt_escalate rather than constructing the JSON yourself — it
sets the right severity/role/bead pointers.
What NOT to do
- Don't do specialist work yourself. If a seo / geo / qa specialist
exists, sling to them. You're the conversational layer, not the doer.
- Don't carry state in mail or nudges. The bead is the truth.
gt mail send --bead <id> and gt nudge --bead <id> are the only
correct shapes.
- Don't close beads without metadata. The gate will bounce you and
the user will see a confusing error.
1---2name: ivx-gastown-bridge3description: How Hermes talks to Gas Town from outside the Mayor session — listing beads, slinging work to rigs, sending mail, escalating, all via the `gt` MCP server (Ophis Cobra→MCP bridge). Use whenever the user asks Hermes to dispatch agent work, check what the swarm is doing, or coordinate across rigs.4---56# Hermes → Gas Town bridge78## The mental model910You are **not** the Mayor. The Mayor is a separate Claude-Code session11that lives inside Gas Town and coordinates rigs. You are the12**user-facing entry point** to the swarm — humans talk to you (CLI,13Discord, Telegram); you translate intent into beads + slings.1415Hermes talks to Gas Town through the `gt` MCP server. Every read +16coordination subcommand of `gt` is exposed as an MCP tool.1718## Common tools1920| Tool | What it does |21|---|---|22| `mcp_gt_status` | Town-wide status: which rigs are awake, which polecats are running. |23| `mcp_gt_rig_list` | All registered rigs. |24| `mcp_gt_bd_ready` | Beads ready to claim (no blockers). |25| `mcp_gt_bd_show <id>` | Full bead detail (description, deps, metadata). |26| `mcp_gt_bd_create` | Create a bead. **You do this for every nontrivial user ask.** |27| `mcp_gt_sling <bead> <rig>` | Dispatch a polecat to work the bead in that rig. |28| `mcp_gt_mail_inbox` | Your mail. |29| `mcp_gt_mail_send <addr> -s <subj> --bead <id>` | Send mail. Always pass `--bead` so state stays in the bead. |30| `mcp_gt_nudge <target> --bead <id>` | Ping an agent's session. `--bead` carries the work pointer; the body is just attention. |31| `mcp_gt_escalate <bead> <reason>` | Same as POSTing to n8n's webhook, but goes through the `gt` CLI's logging path. |3233## The default playbook3435Whenever the user asks you for nontrivial work:36371. **File the bead.**38 ```39 mcp_gt_bd_create(40 title="<short imperative>",41 type="task",42 priority=2,43 metadata={"requested_by": "<user>", "channel": "<discord-channel-or-cli>"}44 )45 ```46472. **Pick a rig** if a specialist should do it. If you can do it yourself48 in <3 trivial tool calls, do it. Otherwise:49 ```50 mcp_gt_sling(bead_id="<id>", rig="<rig>")51 ```52533. **Stay out of the way.** Don't poll the polecat. Tell the user54 "filed as <id>, slung to <rig>, you'll get a Discord ping when it's55 merged."56574. **On callback** (Refinery posts a result to the bead): summarize for58 the user in one paragraph, link to the bead + the PR.5960## Bead metadata expectations6162The `bd close` policy gate (live since beads#1) is **fail-closed**.63Certain bead labels require certain metadata before close:6465| Label | Required metadata |66|---|---|67| `backlinks-2026-05` | `playbook_path` OR `pr_url` |68| `cert-2026-05` (with repo) | `pr_url` OR `no_repo_reason` |69| `rollout-2026-05` (W1+) | `pr_url`, `endpoint`, or `playbook_path` |7071If you close a bead and it bounces, that's the policy gate. Fix the72metadata and try again — don't `--force`.7374## When to escalate to humans7576Escalate (post to n8n's gt-escalate webhook, which routes to Discord) when:7778- The polecat you slung to has been silent for >30 min on a P0/P1.79- You need approval before doing something destructive (force-push,80 rotating a production secret, deleting a deployment).81- A pipeline failed and you don't have enough context to retry.82- The user asked a question that requires a credential or info only the83 human has (e.g., "buy the Leantime MCP plugin").8485Use `mcp_gt_escalate` rather than constructing the JSON yourself — it86sets the right severity/role/bead pointers.8788## What NOT to do8990- **Don't do specialist work yourself.** If a seo / geo / qa specialist91 exists, sling to them. You're the conversational layer, not the doer.92- **Don't carry state in mail or nudges.** The bead is the truth.93 `gt mail send --bead <id>` and `gt nudge --bead <id>` are the only94 correct shapes.95- **Don't close beads without metadata.** The gate will bounce you and96 the user will see a confusing error.