Agents
What Flow shows while Claude Code, Codex or OpenCode runs, and how it hooks in without changing your config.
Run claude, codex or opencode in a Flow terminal and a dot on its workspace and tab shows what the agent is doing.
| Dot | Meaning |
|---|---|
| Blue, pulsing | The agent is working |
| Yellow | The agent is waiting for you |
| Green | A turn finished while you were looking elsewhere |
Looking at the terminal clears the green dot. A workspace or tab with several agents shows the most urgent one, so a yellow dot wins over a blue one. With Reduce motion turned on in macOS, the blue dot doesn’t pulse.
Each agent has its own page on what Flow passes to it and what each dot means for it.
Press ⌘I to list your agents, the ones waiting for you first, and go to one. See Command palette.
Pasting images
Copy a screenshot or an image from a browser and press ⌘V in an agent. Flow saves the image as a PNG and pastes its path, which Claude Code, Codex and OpenCode attach to your message.
Notifications
When an agent in a terminal you can’t see needs you or finishes, Flow posts a macOS notification and plays a sound. Click the notification to go to that terminal. Flow stays quiet for the terminal you’re looking at.
The notification’s title is the workspace’s name. Its text says why the agent is waiting, such as “Needs permission” or “Has a question for you”, or shows the agent’s last message when a turn finishes. An agent that keeps asking for the same thing doesn’t notify again.
By default the sound is Ping when an agent needs you and Glass when it finishes. To pick other sounds, or to turn the notifications or sounds off, open Settings › Notifications.
How it works
Flow starts each agent with the agent’s own hooks or plugin added for that launch, and nothing else. It never writes to ~/.claude, ~/.codex or ~/.config/opencode. An agent you start outside Flow behaves exactly as before.
At the first prompt in each terminal, Flow’s shell integration puts a small directory of shims in front of PATH, one for each agent it finds installed. Typing claude runs the shim, which starts the real claude with Flow’s hooks. The hooks call flw, a helper inside the Flow app, which reports the agent’s progress to Flow.
Subagents report to the same session as their parent, so Flow ignores them. The dot follows the agent you’re talking to.
Shells
Nothing to set up for zsh and fish.
Flow can’t add itself to bash. Put this at the end of ~/.bashrc or ~/.bash_profile:
[ -n "$FLOW_FLW" ] && source "${FLOW_FLW%/*}/../Resources/shell-integration/bash/flow.bash"After installing an agent
Flow looks for agents once, at the first prompt of each terminal. A new tab picks up an agent you install later. To pick it up in the terminal you’re in, run this in zsh or bash:
eval "$("$FLOW_FLW" agents refresh)"Or this in fish:
"$FLOW_FLW" agents refresh | sourceRunning an agent without Flow’s hooks
Set FLOW_AGENTS_DISABLED for one launch and the agent starts exactly as typed, with no dot and no notifications:
FLOW_AGENTS_DISABLED=1 claudeExport it in your shell config and Flow leaves agents alone in every terminal.