Other agents

What Irie sees of an agent depends on its harness: Claude Code reports working, needs you and done, while any other program shows only whether it still runs. Two profile cards side by side. On the left, harness claude-code: Claude Code, or a launcher that runs it. An arrow leads down to its rows in Irie’s list: working, needs you in red, and done with a green tick. On the right, harness generic: any program that runs in a terminal. An arrow leads down to its rows: working, then exited once the program ends, and no needs you or done. claude-code generic Claude Code, or a launcher that runs it any program that runs in a terminal working needs you done working exited no needs you or done
Claude Code tells Irie how it’s doing, so its rows show working, needs you and done. Any other program shows only whether it’s still running.

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-codegeneric
Start it on a task, in a folder of its ownYesYes
Working, needs you and doneYes, from its hooks: small commands it runs at each stepNo: working until it ends
Its conversation in plain wordsYesNo: its terminal only
Cost and tokensYesThe cost text you give it
Freeze, promote, rename and closeYesYes
Reopen after closingCarries the conversation onStarts the task again
Chosen by +auto, and handed subtasksYesLeave 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"

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.

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:

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 showThe agent needs
Working, needs you and doneHooks, a plugin or a stream of events that says when it works, asks and finishes
A pause at its next step PlannedA hook before each step that can wait, and can pass the agent a message
Each helper it starts PlannedEvents 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.