AItention

Documentation

Set up and understand

Installation

Download the archive, drag AItention.app into Applications, launch it. The app is signed with a Developer ID and notarised by Apple — no warning appears.

The status hooks

Without hooks the app can list which sessions are running, but not what they are doing. On first launch it offers to set them up: it adds entries to ~/.claude/settings.json that call a bundled program. That program writes a status file and does nothing else.

A backup is made before every change to that file. All entries are marked # aitention so removal never touches hooks you configured yourself:

~/Applications/AItention.app/Contents/MacOS/AItention --uninstall-hooks

The states

StateMeaning
DecisionClaude has asked a question with options to choose from.
WaitingA question or a permission is pending.
ErrorThe turn failed on an API error — overload, rate limit, billing.
DoneThe turn finished, the reply is unread.
WorkingA prompt is running, tools are executing.
SubagentsSubagents are running, the main agent waits for them — not for you.
Wake-upWaiting for a wake-up call it set itself — not for you.
ReadySession open, no turn active.
DormantEnded, but resumable with claude --resume.

If a working session goes quiet for more than thirty minutes it loses its colour and shows how long it has been silent instead. A stale display that looks confident is worse than one admitting it does not know.

Where the data comes from

Everything the app shows comes from these files. None of it leaves the machine.

FileWhat for
~/.claude/sessions/<pid>.jsonWhich sessions run, their working directory and origin
~/.claude/aitention/status/<id>.jsonThe live state, written by the hook — the only file AItention creates itself
~/.claude/projects/…/<id>.jsonlTranscripts: replies, tool calls, tokens
~/.claude/tasks/<id>/A session's task list, if it keeps one
~/Library/Application Support/Claude/…Title, model and mode of desktop sessions, plus rate window usage
~/.codex/sessions/…/rollout-*.jsonlCodex sessions: title, project, state, context and consumption
~/.codex/session_index.jsonlThe names Codex gives its sessions
~/.claude/history.jsonlYour own prompts — the basis of the prompt search

Connecting other tools

AItention reads a small JSON file per session at ~/.claude/aitention/status/<session-id>.json. For Claude Code the bundled hook writes it. Any other tool that can start a program on events may do the same — and then appears in the list with no change to AItention.

The contract is published and checked against the source on every build: aitention.app/schema/status-v1.json. Three fields are required — session_id, state and ts. A tool identifies itself with agent (claude, codex or an identifier of your own); without the field, claude is assumed. With more than one tool running, a fourth grouping appears in the list.

What you write, AItention shows — nothing more. It starts nothing, evaluates nothing and forwards nothing.

Previous sessions and prompt search

“Previous sessions” lists everything that can be resumed — across a restart too. Ordered by application or project, across seven days, thirty days or the whole period, with a search field. On each row one click puts the full command on the clipboard: cd <project folder> && claude --resume <id> or codex resume <id>. The project folder belongs to it — without it neither tool finds its session.

If the name escapes you, search your own prompts instead. ~/.claude/history.jsonl is searched; the hit leads to its session, and the resume command sits next to it.

Codex

Codex sessions appear in the same list as those of Claude Code — with the icon of the application they run in, with project, context and consumption. From two tools onwards, grouping by tool is added. Nothing changes in your Codex setup: Codex keeps its own transcript per session, AItention reads it and does not write to it.

One limitation. AItention does not report the “waiting for you” state for Codex. Claude Code communicates it through the status hook; in Codex transcripts we have not yet found a corresponding event. Codex sessions therefore appear as working, done or failed. As soon as such an event turns up, the state follows.

Activating a licence

After purchase you receive a mail with a button that opens the app and enters the licence. If that does not work: Settings → Licence → paste the key → Activate. No connection is made.

When something is wrong

The diagnostic output shows what the app sees without starting the interface — including every path and the hook status:

~/Applications/AItention.app/Contents/MacOS/AItention --dump

To check a licence key: --verify-licence <key>