modisa.Documentation
Agents & detection

DOCUMENTATION / Agents

Agents & detection

Which agents modisa knows, the states it tracks, and how it reads them.

24 agents, no setup

Modisa recognises these by their process, including when they're started through node, bun, python or a shell script:

  • Claude Codeclaude
  • Codexcodex
  • Gemini CLIgemini
  • Cursor Agentcursor-agent
  • Copilot CLIcopilot
  • OpenCodeopencode
  • Pipi
  • OMPomp
  • Droiddroid
  • Ampamp
  • Kiro CLIkiro-cli
  • Kimi Codekimi
  • Kilo Codekilo
  • Devin CLIdevin
  • Grok CLIgrok
  • Hermes Agenthermes
  • Qoder CLIqodercli
  • Qwen Codeqwen
  • Antigravity CLIagy
  • Clinecline
  • MastraCodemastracode
  • Makimaki
  • Musemuse
  • Aideraider

States

StateMeaning
!needs youA dialog, question or permission prompt is waiting on you.
◆workingThe agent is busy.
✓doneIt finished while you weren't looking. Focusing it clears it.
○idleWaiting for a prompt.

State shows in the pane border, the tab bar and the sidebar. The status row counts who's working and who needs you; clicking either lists just those agents.

How it reads state

Each agent has a manifest of rules over the live bottom of its screen, its terminal title (Claude, for one, animates a spinner there while it works) and its OSC 9;4 progress. Rules have priorities, regions (the last N lines, the prompt box, the text after the last horizontal rule, …) and nested all / any / not conditions. A screen that looks idle only mid-animation waits one more look before it counts.

Integrations can add more — see Integrations.

Add or tune an agent

A TOML file in ~/.config/modisa/adapters/<id>.toml adds an agent or overrides a built-in one:

toml
name = "My Agent"
process = ["my-agent"]
launch = "my-agent"
resume = "my-agent --continue"
resumeSession = "my-agent --resume {id}"

[[rules]]
id = "approval"
state = "blocked"
priority = 900
region = "bottom_non_empty_lines(6)"
contains = ["allow this command?"]

[[rules]]
id = "busy"
state = "working"
priority = 500
region = "bottom_non_empty_lines(3)"
regex = ['(?i)esc to interrupt']

modisa debug detect <pane> shows which rule matched, whether an integration is reporting, and the title and progress it saw.

Commands, keys, agents, settings…