How to Invoke an Automaton
Invocation model
The Hall is label-driven. Labels declare which agent owns a thread. Comments and PR reviews extend a bound thread — they do not initiate dispatch on their own.
To start a new task: apply a hall:* label or use the issue template (which does it automatically). To continue an existing task: reply on an awaiting-input issue or submit a PR review with @hall-of-automata <agent> in the body.
Use case 1 — Task issue (the standard path)
Use this when you want an automaton to do work: implement a feature, fix a bug, write a script, research a question.
%%{init: {'theme': 'base', 'themeVariables': {'fontSize': '15px', 'primaryColor': '#1e3a5f', 'primaryTextColor': '#e2e8f0', 'primaryBorderColor': '#3b82f6', 'lineColor': '#60a5fa', 'secondaryColor': '#1e293b', 'tertiaryColor': '#0f1929', 'clusterBkg': '#0d1b2e', 'clusterBorder': '#334155', 'titleColor': '#c0cfe4', 'edgeLabelBackground': '#0f1929'}}}%%
graph LR
A([Open issue from\nAutomaton Task template]) -->|auto-applies\nhall:old-major| B
B[[invoke.yml fires\nOld Major dispatched]] --> C
C[Old Major reads issue\npicks specialist\napplies hall:agent] --> D
D[[invoke.yml fires again\nspecialist dispatched]] --> E
E[Agent works\nopens PR or replies] --> F([Status card updated\non your issue])
classDef user fill:#0f766e,stroke:#14b8a6,color:#ccfbf1,stroke-width:2px
classDef system fill:#1e3a8a,stroke:#3b82f6,color:#dbeafe,stroke-width:2px
classDef agent fill:#4c1d95,stroke:#7c3aed,color:#ede9fe,stroke-width:2px
classDef success fill:#14532d,stroke:#22c55e,color:#dcfce7,stroke-width:2px
class A user
class B,D system
class C,E agent
class F success
Steps:
- Open a new issue using the Automaton Task template.
- Fill in: what you want done, which repository, and which mode (
doing/advising/researching). - Submit — the template auto-applies
hall:old-major. - Old Major is dispatched automatically. He reads the issue, selects the right agent, and applies
hall:<agent>(e.g.hall:mergio). - The specialist agent is dispatched. A status card appears on the issue tracking its progress.
- The agent opens a PR when done (in
doingmode), or replies directly on the issue (inadvising/researchingmode).
Modes:
| Mode | What the agent does | Thread outcome |
|---|---|---|
doing |
Implements and opens a PR | Issue stays open until PR merged |
advising |
Analyses and posts a reply | Issue stays open — close it yourself when done |
researching |
Deep research, no code changes | Issue stays open — close it yourself when done |
Use case 2 — Continuing a conversation (awaiting-input reply)
When an agent needs more context it posts a clarifying question and the issue is labeled hall:awaiting-input. Reply directly on the issue thread to re-dispatch the same agent.
Steps:
- Read the agent's question in the status card or comment thread.
- Reply with the requested information as a new comment on the issue.
- The Hall automatically re-dispatches the bound agent (
hall:<agent>label determines who). hall:awaiting-inputis stripped before the agent runs again.
You do not need to apply or remove any labels. Just comment.
Use case 3 — PR review re-dispatch
Use this when a PR opened by an agent needs correction after a code review.
Steps:
- Open a Pull Request Review (not a plain comment) on the agent's PR.
- Include
@hall-of-automata <agent>in the review body — this is required. - Submit as Comment or Request changes — both trigger dispatch.
@hall-of-automata mergio the test in src/foo_test.cpp is missing the edge case
for empty input. Please add coverage.
The agent is re-dispatched with your review feedback injected into its context alongside restored task memory.
Use case 4 — Direct agent dispatch (power users)
If you know exactly which agent you want and want to skip Old Major, apply hall:<agent> directly to an issue instead of hall:dispatch-automaton.
| Label | Dispatched agent |
|---|---|
hall:old-major |
Old Major (triage → routes to specialist, or direct) |
hall:mergio |
Mergio (CI/CD / GitHub Actions / devops) |
Apply the label yourself via the GitHub UI or gh issue edit --add-label.
Status card
Every dispatch creates or updates a <!-- hall-status --> comment on the issue or PR. It shows the current lifecycle stage:
| Stage | Meaning |
|---|---|
| Assigning | Old Major is routing to the right agent |
| Dispatching | Specialist agent is starting |
| Working | Agent is actively running |
| PR opened | Agent opened a PR, link in card |
| Awaiting context | Agent posted a question, waiting for reply |
| Queued | All invoker quota exhausted, will retry |
| Failed | Something went wrong — check comments |
| Done | Response posted (advising/researching) or PR merged (doing) |
Dos and Don'ts
✅ Do
- Use the issue template. It sets the right label and structure automatically.
- Reply directly on the issue when you see
hall:awaiting-input. Just comment — no labels needed. - Use PR Reviews (not plain PR comments) when you want to re-dispatch an agent on its PR.
- Specify mode in the issue template.
advisingandresearchingget closed automatically when done. - Leave labels alone. Hall labels (
hall:*) are the system's state machine. They are managed by the Hall.
❌ Don't
- Don't type
@hall-of-automatain a plain comment hoping to trigger dispatch. This is not how invocation works. Use labels or PR reviews. - Don't manually remove
hall:<agent>from an issue or PR. This breaks re-dispatch — the agent won't be found on the next comment reply or review. - Don't remove
hall:awaiting-inputmanually. The Hall strips it automatically when re-dispatching. Removing it early breaks the reply path. - Don't apply
hall:dispatch-automatonto a PR. Task routing is for issues. Use PR reviews for PR-bound work. - Don't apply multiple
hall:<agent>labels to the same issue. Only one agent can own a thread; Old Major manages routing. - Don't close an issue while an agent is working (stage = Working / Dispatching). The agent may still push commits and open a PR.
- Don't comment on a PR to re-dispatch. Plain PR comments are only processed in awaiting-input state. Use a PR Review instead.
Quota and pool selection
Invokers each have a weekly dispatch cap (HALL_WEEKLY_CAP, measured in hours × 3 dispatches per hour). The Hall automatically picks the least-used invoker under cap. You never choose which invoker's token backs your dispatch.
If all invokers are at cap, the issue is labeled hall:invoker-queued and a comment explains the situation. Re-trigger after the weekly reset (Monday 00:00 UTC) or when a new invoker registers.
Quick reference
| Scenario | Action |
|---|---|
| New task (any kind) | Open issue from Automaton Task template |
| Agent asked a question | Reply on the issue thread |
| Review agent's PR | Submit a PR Review (include @hall-of-automata in body) |
| Want a specific agent | Apply hall:<agent> label to the issue |
| Quota exhausted | Wait for Monday reset or ask an invoker to register |
| Something went wrong | Check the status card stage and workflow run link |