Agents - andreaderuvo/argus GitHub Wiki
Argus does not care what runs in a session: if it runs in a terminal, it works โ you see it, type into it, hand it prompts and read the files it writes. That part has no matrix.
What does differ is the handful of things where the agent has to meet Argus halfway: it has to tell us something no amount of watching from outside can work out: when a turn starts, when it finishes or wants you, and which folder it is in. This is who can do them.
| Claude Code | Codex | Gemini CLI | a shell | |
|---|---|---|---|---|
| Terminal, files, documents, prompts | yes | yes | yes | yes |
| Prompts, with the Enter pressed for you | yes | yes | yes | yes |
| Teams | yes | yes | yes | โ |
In a team: team_task/team_done, and the Stop guard that sends it back to report |
yes (plugin) | yes (plugin) | the tools only, no guard | โ |
| Says when a turn starts | yes โ UserPromptSubmit
|
yes โ UserPromptSubmit (0.160 and later) |
no | no |
| Rings when it finishes or wants you | yes โ Stop, Notification
|
yes โ Stop, PermissionRequest; notify before its hooks are reviewed |
yes, on versions with hooks โ AfterAgent, Notification
|
no |
| Says which folder it is in | yes โ the status line hook | no | no | not needed |
| Folder shown with nothing wired | where it started | where it started | where it started | where it is, live |
| Argus as MCP tools | yes | yes | yes | โ |
| The Argus plugin (hooks + tools in one install) | yes | yes | tools only (an extension) | โ |
The bold rows come from two switches in Settings, which write into the agent's own configuration file: Let your agents ring (the first two rows) and Let your agents say where they are (the third). They keep a copy of the file as it was before Argus first touched it, they report a hook you wrote yourself rather than replacing it, and turning them off takes back only what carries Argus's own marker. The plugin is the other way to the same hooks, installed from the agent instead.
Hooks come first, the pane is the fallback. An agent that says when it starts and stops is believed over its pane: Argus no longer has to guess "working" from the screen redrawing, which a long command's silence used to fool. Without hooks the pane is still watched, and still right most of the time. A wired Codex counts as hooked only once its hooks have actually been heard, because Codex runs them only after you have reviewed them (below).
Codex 0.160 has Claude Code's hooks โ the same file shape (~/.codex/hooks.json), the same
event names, the same JSON on stdin โ measured on an isolated Codex with every event logged.
Codex runs a hook only after a person has reviewed it, so the first time it starts after you
turn the bell on (or install the plugin) it asks you to approve the Argus hooks. Until then
notify rings at the end of each turn, as before, and its pane is watched like any agent's
without hooks. Argus cannot see that review, so it waits until a hook speaks.
Recent Gemini CLI versions have hooks (AfterAgent, Notification) and Let your agents ring
wires them. Early ones (0.1.x) have none: there the bell is the only thing missing, and the pane
is still watched.
An agent never chdir()s its own process. It runs your commands in children, and keeps its
own idea of where it is working โ so tmux, /proc and everything built on them go on naming
the folder the session was started in, however far the work has moved. Measured: a claude
working elsewhere still reported its start directory from both pane_current_path and
/proc/<pid>/cwd.
The only cure is the agent saying so, and Claude Code has the place to say it: its status line
hook is handed workspace.current_dir on every turn, and the script Argus installs writes
that into a tmux pane option that Argus prefers over anything it can observe. Three options,
in fact, and each is a thing nothing outside the agent can work out:
@argus_cwd |
the folder it considers current |
@argus_model |
the model it is running โ the process is called claude whatever is behind it, and a model named in a config is the one it started with |
@argus_agent |
its own name, which matters on a board: a tile has no process tree to read and no business running ps on somebody else's machine |
Anything can write them โ tmux set -p @argus_cwd /the/folder โ so a wrapper script or a
shell prompt can do for another agent what the hook does for Claude Code.
They reach a board too. Panoptes shows the agent's name on the session chip and the model in its tooltip, taken from what the session declared and never inferred: what a session says is what a tile shows, and one that says nothing shows nothing.
Codex has no equivalent, so its window shows where it started and says "started in" rather than pretending. See Sessions and the terminal.
Nothing has to be installed inside the agent for the ordinary work: no wrapper. The rest is
optional. The Argus plugin puts the hooks and the MCP tools in one install.
argus-mcp alone is for an agent that should be able to ask you things and start other agents
on its own (see An agent driving Argus).
The two switches above are hooks in a config file you can read. Agents working on one goal are a
team: the server directs them through a markdown file they all read, TEAM.argus.md.
(The Two agents sheet that did this before was removed on 2026-10-06.) That is the whole
integration surface, on purpose โ it is why an agent that changes next month does not take Argus
with it.