Recipes
Ways to get real work done with Irie, from an idea to a merged change. Each one says what works today and what is planned.
- Several agents on one feature
- A local model for small jobs, a cloud model for hard ones
- Scripting Irie with
irie ctl spawn --wait - A quick fix in your own checkout
- Hand over a long log or spec
- Keep agents working while you’re away
- Let an agent hand work to another
Several agents on one feature
Split a feature into parts that touch different files, and give each part to its own agent. Each works in its own worktree, a second working copy of your project, so they don’t trip over each other.
- Commit your work first. Agents start from your last commit, and changes you haven’t committed stay behind.
- Start one task per part, each with
@shop:@shop add an API for saved carts: GET and PUT /api/carts/{id} @shop build the saved carts page, calling GET /api/carts/{id} @shop write tests for saving and loading carts - Watch the rows. Answer the ones that turn red, and leave the rest alone.
- When a row shows
✓, look in, then read its branch, its line of changes, from your checkout:cd ~/code/shop git log --oneline HEAD..irie/add-an-api-for-saved git diff HEAD...irie/add-an-api-for-saved - Merge each branch, or push it and open a pull request, a change sent for review:
git merge irie/add-an-api-for-saved - Once a branch is merged, remove its worktree and branch: see When you’re done.
Agents don’t see each other’s changes until you merge them. For a part that builds on another, merge the first, then start the next.
What works today
- A worktree and a branch for every
@shoptask, with your local files copied in. - Rows that turn red when an agent needs you, whichever row you’re looking at.
What is planned
- Sending a working agent a note, such as a change its neighbour made. Planned
- Telling each agent which others work in the same repo, and on which branches. Planned
- A review of each branch by another company’s model before it reaches you. Planned
A local model for small jobs, a cloud model for hard ones
Keep the default, Claude Code with Opus 5.5, for hard work, and add a profile for a model on your own computer. A profile is a recipe you name for starting an agent.
[profiles.local]
model = "gpt-oss:20b"
env = { ANTHROPIC_BASE_URL = "http://127.0.0.1:11434", ANTHROPIC_AUTH_TOKEN = "ollama", ANTHROPIC_API_KEY = "" }
Restart Irie’s core so it reads the new profile: see how. Then choose for each task:
@shop +local add comments to cart.go
@shop +local rename the variable tot to total in cart.go
@shop redesign the checkout flow
Give the local model jobs that are easy to check, such as comments, renames and small tests, and look over what it did. Give it enough room first: see Profiles for local models.
What works today
- A profile per model, picked for each task with
+, and completed with Tab. - Any local server that speaks Anthropic’s API, such as Ollama, LM Studio or llama-server.
What is planned
- A check that a local model has room enough before its agent starts, with the fix if it hasn’t. Planned
- Irie choosing the profile for you, by how hard the task is and how much of your plan is left. Planned
- Moving a task to another profile when it hits a usage limit. Planned
Scripting Irie with irie ctl spawn --wait
A script, a file of commands run in a row, can start agents and wait for them, with no window open. This one starts a task, then checks every 10 seconds until it’s done or needs you:
#!/bin/sh
set -e
id=$(irie ctl spawn --wait @shop "fix the flaky checkout test")
while :; do
state=$(irie ctl list | awk -v id="$id" '$1 == id { print $2 }')
case $state in
done|idle) echo "$id is done"; break ;;
needs_you|stalled|failed|exited) echo "$id: $state" >&2; exit 1 ;;
esac
sleep 10
done
--wait returns once the agent is working, and fails if it never gets there, so set -e stops the script. Start many tasks from a file, one per line:
while IFS= read -r task; do
irie ctl spawn @shop "$task"
done < tasks.txt
Pass a long task as a file, and follow one agent’s steps as they happen:
irie ctl spawn --wait --name refactor-cart @shop - < refactor.md
irie ctl watch --session "$id"
What works today
irie ctl spawn,list,showandwatch, all described in Keys and commands.- Starting Irie on the first spawn, with no window open.
What is planned
- Pausing, freezing and sending notes from scripts, as each arrives. Planned
irie ctl preflightandspawn --forcefor local models. Planned
A quick fix in your own checkout
When a worktree is more than a job needs, add ! to work in the repo’s own folder:
@shop! fix the typo in the README
The agent then works on your own files, next to any changes you haven’t committed. Give it one job at a time there.
What works today
@shop!and@~/code/shop!, and any folder outside git.
Hand over a long log or spec
Paste it straight into the task box. Anything over 8 KiB shows as a chip, such as [paste 32.8 KB · 700 lines], and reaches the agent whole:
@shop explain why this test fails: [paste 32.8 KB · 700 lines]
Or keep it in a file and pass it to irie ctl spawn with -. A task over 100 KiB goes to the agent as a file it’s told to read in full.
What works today
- Tasks and pastes of any size, sent word for word.
Keep agents working while you’re away
Your agents live in tmux, not in the window, so they keep working after you close it. Open it again later with irie.
Irie can also run on another computer, such as a Linux server, and you can check in over SSH, a safe way to use another computer’s terminal:
ssh alice@example.com
irie
Several windows can show the same Irie at once, from one computer or many.
What works today
- Closing the window, opening it again, and opening it from more than one place.
What is planned
- Opening Irie from the Mac’s Spotlight, in a Ghostty window of its own. Planned
- A desktop alert when an agent needs you. Planned
Let an agent hand work to another
The agents Irie starts can run irie ctl spawn themselves. So an agent can hand a small part of its work to a helper on another profile, each in its own row.
Split this refactor into parts. Start a helper for each small part with
"$IRIE_BIN" ctl spawn --wait @shop +local "<the part>"
and read their branches before you merge them.
IRIE_BIN holds the path to irie, which Irie gives every agent it starts.
What works today
- Agents starting helpers with
irie ctl spawn, and checking on them withirie ctl list.
What is planned
- The helper’s result coming back to the first agent as a note. Planned