Agents & statuses
BeSwarm recognizes the coding agent running in each tab and tracks its status. Agent commands act on the recognized agent currently in a tab.
Supported agents
beswarm agent kinds lists the agents your build recognizes:
| Kind | Executable | Kind | Executable |
|---|---|---|---|
pi | pi | copilot | copilot |
claude | claude | kimi | kimi |
codex | codex | kiro | kiro-cli |
gemini | gemini | droid | droid |
cursor | cursor-agent | amp | amp |
devin | devin | grok | grok |
agy | agy | hermes | hermes |
cline | cline | kilo | kilo |
omp | omp | qodercli | qodercli |
mastracode | mastracode | qwen | qwen |
opencode | opencode | maki | maki |
muse | muse | mcode | mcode |
Any other program still runs in a tab — it just isn't tracked as an agent.
Statuses
| Status | Meaning |
|---|---|
working | Mid-turn. |
done | Finished, and nobody has acknowledged it yet. Ready for input. |
idle | Waiting for input, and you've seen it. |
blocked | A permission prompt or chooser is up. agent prompt refuses a blocked agent; answer it with agent send-keys. |
unknown | An agent is present but detection can't classify it. It doesn't prove completion. |
How detection works
Each agent has a detection manifest: a set of rules that read the agent's screen and terminal title for spinners, permission prompts and idle prompts. Inspect them with:
beswarm agent manifests # the active manifest per agent
beswarm agent explain claude --file screen.txt
beswarm agent explain --target api # run detection on a live agentexplain prints every rule's verdict, which is the fastest way to see why an agent shows the status it does.
Override a manifest
Put your own manifest at ~/.config/beswarm/agent-detection/<agent>.toml. The menu's "reload config" applies it without a restart.
Names and ids
- A terminal id looks like
18d47dc212160d20-1and is printed bystatusandagent list. - An agent name matches
[a-z][a-z0-9_-]{0,31}and is unique within a session. Set it withagent start --nameoragent rename. - Always address agents by name or terminal id — never by kind.
clauderesolves until a second Claude tab exists, and then a script that worked yesterday prompts the wrong agent.