Docs Start
Agents
Which agent CLIs report their state to easl, how to set each one up, and what happens when you quit or reboot.
All docs pages
Any terminal program runs in an easl tile, unmodified. Some agents also tell easl what they’re doing, so their tile shows a lifecycle dot, their reads and edits drive a follow tile, and your mentions reach their next prompt.
Which agents report what
| Agent | Setup | Lifecycle dot | Mentions ride with your prompt |
|---|---|---|---|
| omp | One symlink (below) | working, blocked, done | Yes |
| Claude Code | None, inside easl | working, blocked, done | Yes |
| Codex | None, inside easl | working, blocked, done | Yes |
| opencode | None, inside easl | working, blocked, done | Yes |
| Gemini CLI before 0.60 | None, inside easl | working, blocked, done | Yes |
| Gemini CLI 0.60 and later | None | None: a plain terminal | Hyper-V paste |
| aider | None (easl’s aider wrapper) |
done only | Hyper-V paste |
| Any other CLI | None | done only, if it sends a terminal notification or bell | Hyper-V paste |
omp
omp is the first-class agent. Install easl’s omp extension once:
mkdir -p ~/.omp/agent/extensions
ln -sf /Applications/easl.app/Contents/Resources/extensions/omp/easl.ts ~/.omp/agent/extensions/easl.ts
omp sessions started in an easl terminal tile then report their lifecycle, drive their follow tile, receive your mentions and get the easl skill. Every approval prompt shows the tile as blocked until you answer it. omp’s browser tool drives easl’s browser tiles.
Claude Code and Codex
Nothing to install. Inside an easl tile, claude and codex get the same integration as omp: easl puts its own claude and codex wrappers first on the tile’s PATH, and each wrapper starts the real program with this session’s hooks and the easl skill.
- Nothing is written to your global agent config. Claude Code loads easl’s plugin for the session; Codex gets its hooks as a per-session override, not written to
~/.codex. - A Codex tile shows blocked at launch while Codex asks whether to trust the folder.
- A question Claude Code or Codex asks you mid-turn turns the tile blocked with the question in its bubble, and ⌘J finds it, even with approvals off (
--dangerously-skip-permissions,--yolo). Answering takes it back to working. - Codex’s
workspace-writesandbox blocks the easl socket, so Codex runs its owneaslcommands with escalated permission. - The first
easlcommand in a Codex session asks once. Choose “don’t ask again for commands that start witheasl” and later calls ask no more, in that session and the next ones. - To turn the integration off for Claude Code and Codex, set
EASL_AGENT_HOOKS=0in the tile.
opencode and Gemini CLI
Also zero setup inside a tile. opencode gets easl’s plugin and reports working, blocked (a permission request or a question) and done; answering the permission puts it back to working. Gemini CLI gets easl’s hooks as an extra settings layer merged with your own. Inside tiles both run with self-update off.
Gemini CLI 0.60 and later refuses that settings layer, so it runs as a plain terminal with no lifecycle.
aider and other CLIs
aider has no hooks. easl’s aider wrapper turns on aider’s notifications, so the tile goes green (done) each time aider waits for you. It has no dot while it may be working, and it never shows blue or orange: read its screen for a y/n question.
Any other CLI works the same way if it sends a terminal notification (OSC 9 or OSC 777) or rings the bell while it’s in the foreground. At a shell prompt, a notification or bell raises a pink attention marker on the tile instead (unless you’re already looking at it).
These agents can’t receive mentions with a prompt. Use Hyper-V (⌃⌥⇧⌘V) to paste the staged mentions into the terminal as text; see Mentions.
States and ⌘J
| State | Dot | What you see |
|---|---|---|
| working | Blue | The agent is busy. |
| blocked | Orange | An orange ring and a ✋ bubble with its message (“approve Edit?”). Off screen, an orange pill at the edge of the view points at it. Click the bubble to answer in its terminal. |
| done | Green | It finished and you haven’t looked yet. |
| idle | Grey | Waiting for your next prompt. |
“Seen” means you focused the terminal, or it was visible at readable zoom for a few seconds; then done turns to idle.
- ⌘J (View › Go to Next Needs-You) goes to blocked agents first, then tiles with attention markers, then done agents you haven’t seen, each in reading order. Press it again for the next. With nothing pending: “Nothing needs you”.
- A dot on a board’s tab says an agent there needs you: orange for blocked, green for one that finished unseen.
- When easl isn’t the frontmost app, you get a macOS notification when an agent finishes or blocks.
- Go to (⌘P) lists what needs you first, flagged Blocked, Marked or Done.
What agents make
Objects an agent creates land next to its terminal, clear of other tiles, inside your view when there’s room nearby. Their title bar says “by
⌘Z undoes agents’ changes too, and says so: “Undid omp: created 9 code tiles, 6 arrows · ⇧⌘Z redoes”. An agent’s batch is one step. While a terminal has the keyboard, ⌘Z belongs to the terminal.
Quitting, closing and rebooting
- Quitting easl, or closing a board’s tab or window, ends nothing. Terminals live in zmx sessions: they survive quitting, a crash or a rebuild, and are back when you open the folder again. Closing a tab or window with terminals asks first: Keep Running, End Sessions or Cancel. Closing the last window quits easl, and the sheet says so.
- An agent that finishes while easl is closed comes back done (or blocked) with its answer when the board opens.
- After a reboot, omp, Claude Code and Codex tiles relaunch with their recorded session:
omp --resume=<id>,claude --resume <id>,codex resume <id>. - Closing a terminal tile ends its session. The close sheet names what ends (“omp and 1 background process”); Cancel is the default and Close is ⌘⌫. ⌘Z brings the tile back with a new session.
To see or end sessions without the app, use zmx list and zmx kill; see Troubleshooting and uninstall.