Other agents
Claude Code is the agent Irie starts by default, but a profile, the recipe Irie starts an agent from, can start any agent that runs in a terminal. That includes other companies’ agents, and one your own team built.
The program behind an agent is its harness: it turns an AI model into a coding agent. A profile’s harness setting tells Irie which kind it starts: claude-code or generic.
What Irie sees of each
claude-code | generic | |
|---|---|---|
| Start it on a task, in a folder of its own | Yes | Yes |
| Working, needs you and done | Yes, from its hooks: small commands it runs at each step | No: working until it ends |
| Its conversation in plain words | Yes | No: its terminal only |
| Cost and tokens | Yes | The cost text you give it |
| Freeze, promote, rename and close | Yes | Yes |
| Reopen after closing | Carries the conversation on | Starts the task again |
Chosen by +auto, and handed subtasks | Yes | Leave it out: see below |
Any program
A profile with harness = "generic" starts any program that runs in a terminal. This one starts aider, an open-source coding agent:
[profiles.aider]
harness = "generic"
command = "aider"
args = ["--model", "ollama_chat/gpt-oss:20b"]
task = "paste"
cost = "free, on this computer"
commandis the program, and is required. Its own flags go inargs;model,effortandpermission_modearen’t allowed here.task = "arg", the default, adds the task as the program’s last argument.task = "paste"types the task into the program once it’s running, then presses Enter. It suits programs that take their task at a prompt.envadds settings to the program’s environment, such as which account to use.costis what Irie’s list says it costs, in your own words.
Irie can’t see a generic agent’s steps, so its row shows working until the program ends. Look in on it to see whether it needs you.
Leave generic profiles out of route.profiles. Irie can’t tell when their work is done, so it would learn how well they do only from your ratings, and a subtask handed to one would wait until its time ran out.
Your team’s own agent
Many companies wrap Claude Code in a launcher: a program of their own that adds the company’s settings, sign-in or safety checks, then starts Claude Code. Others build an agent of their own, and both run in Irie.
- If it starts Claude Code, use
harness = "claude-code"with your launcher as thecommand. Irie then sees everything it sees of Claude Code: A launcher that starts Claude Code. - If it’s a program of its own, use
harness = "generic", as in Any program. Irie starts it, keeps it running and shows whether it still runs. - To see more of a program of its own, Irie needs an adapter for it: Fuller support.
A launcher that starts Claude Code
Point command at your launcher, and put anything that has to come before Claude Code’s own flags in args. Irie adds Claude Code’s flags after them, as it would for claude.
[profiles.work]
harness = "claude-code"
command = "/opt/example/bin/agent-launch"
args = ["claude"]
model = "claude-opus-5-5"
A task on +work then runs:
/opt/example/bin/agent-launch claude --model claude-opus-5-5 \
--settings <file> --session-id <id> --name <name> <task>
For Irie to follow the agent, the launcher has to:
- Pass every flag and the task on to Claude Code unchanged.
--settingscarries Irie’s hooks for this one session. - Keep
IRIE_SESSION,IRIE_SOCKETandIRIE_BINin Claude Code’s environment. The hooks use them to find Irie. - Run Claude Code in the same terminal, in front, and end when it ends. Replacing itself with Claude Code, as the shell’s
execdoes, is simplest. - If it runs Claude Code in a sandbox, let it run
irie, at the path inIRIE_BIN, and open Irie’s socket, at the path inIRIE_SOCKET. - Pass
--versionand--helpon to Claude Code. Irie runs the launcher with each, once for each build of it and for 5 seconds at most, to learn which flags Claude Code takes.
If Irie’s hooks can’t reach it, the agent still works, but its row turns stalled after 30 seconds. Without --version and --help, Irie leaves out --name, and the row says why.
If your company’s own Claude Code settings allow only the hooks it deploys, Irie’s hooks don’t run at all: see Irie at work.
A program of its own
An agent your team built that doesn’t start Claude Code runs as a generic profile:
[profiles.house]
harness = "generic"
command = "example-agent"
args = ["--model", "claude-sonnet-5-5"]
task = "paste"
cost = "on the company account"
Then +house fix the cart total runs a task on it, and every rule of Any program applies.
Try a new profile
Check the settings file, then start a small task and wait for it:
$ irie config print
$ irie ctl spawn --wait +work say hello, then stop
With --wait, the command fails and says why if the agent fails, stalls or ends before it gets going. The session’s spec.json shows exactly what Irie ran:
cat ~/.local/state/irie/sessions/<id>/spec.json
For any other red row, Troubleshooting says what it means.
Fuller support
An adapter is code in Irie that starts one kind of agent and reads its own events. Claude Code’s is the only one so far; Codex CLI’s comes first after version 1, then others. Planned
An adapter can only show what the agent reports, so it needs the agent to offer these:
| For Irie to show | The agent needs |
|---|---|
| Working, needs you and done | Hooks, a plugin or a stream of events that says when it works, asks and finishes |
| A pause at its next step Planned | A hook before each step that can wait, and can pass the agent a message |
| Each helper it starts Planned | Events for its helpers, with an id each, and a record of what each did |
Irie is built only from public documentation. An adapter for an agent whose docs are public can come to Irie itself: open an issue first, as Contribute says.
An agent whose docs are private needs its adapter in your own copy of Irie, which the Apache 2.0 license allows. The interface an adapter fills in is in internal/harness/harness.go, and Claude Code’s adapter, in internal/harness/claude/, shows one filled in.