Recipes

One feature, saved carts, split between three agents: each works on its own branch in its own worktree, and each branch is merged back into main. A line labelled main runs down the left. From one commit on it, three branches fan out to the right. On each branch sits an agent’s box with a green tick and a worktree: api, page and tests. Lower down, each branch curves back and joins main again. one feature: saved carts main api page tests worktree worktree worktree
One feature, three agents, three worktrees. You review each branch, then merge it.

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

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.

  1. Commit your work first. Agents start from your last commit, and changes you haven’t committed stay behind.
  2. 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
  3. Watch the rows. Answer the ones that turn red, and leave the rest alone.
  4. 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
  5. Merge each branch, or push it and open a pull request, a change sent for review:
    git merge irie/add-an-api-for-saved
  6. 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

What is 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

What is 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

What is 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

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

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

What is 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

What is planned