Flow

Claude Code

How Flow passes its hooks to Claude Code and what each dot means.

There is nothing to set up. Run claude in a Flow terminal and the dot follows the session.

What Flow passes

Claude Code reads hooks from a --settings flag as well as from its settings files. Flow starts claude with a --settings value that adds a hook for the SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Notification, Stop, StopFailure and SessionEnd events. Each hook runs flw hook claude, which reads the event on stdin and reports it to Flow.

The same settings turn off Claude Code’s own terminal notifications, since Flow’s would duplicate them.

Hooks in your ~/.claude/settings.json and project settings still run. Flow does not read or write those files.

Your own —settings

Claude Code honours one --settings flag, so if you pass your own, Flow merges the two. Your hooks run as well as Flow’s. For any other key, Flow’s value wins. If Flow cannot read the file or JSON you passed, it starts Claude Code with your value alone and no Flow hooks, and Claude Code reports the problem.

What each dot means

DotClaude Code
Blue, pulsingA prompt was sent, or a tool is running
YellowClaude is asking for permission, asking you a question, or waiting for you to open a link
GreenThe turn ended, or failed, while you were looking elsewhere

The notification for a yellow dot says which of the three it is. The notification for a green dot shows Claude’s last message, or the error if the turn failed.

The reminder Claude Code sends a minute after a turn ends does not change the dot.

A message sent with Claude Code’s push notification tool shows up as a Flow notification with that message. It uses the sound and notification setting for a finished agent.

Interrupting a turn with Esc

The dot stays blue after Esc

When you press Esc to stop Claude Code mid-turn, Claude Code runs no hook. Its Stop hook covers normal completion only, and the hooks documentation says it does not run when a user interrupts. So Flow hears nothing, and the dot stays blue.

The dot changes on the next event Flow hears, which is normally your next prompt. Codex is not affected, since it has an Interrupt hook.

A hook for user interrupts is an open request in the Claude Code repository, issue 9516. Flow will use it once it exists.