Agents & Usages
Scan, search, and answer agent approvals, questions, and turn completions in one feed; track Claude Code, Codex, OpenCode, and coding-plan rate limits per account.
The Inbox and Usage screens are how Moshi turns the firehose of agent activity on your hosts into something you can scan in seconds and act on with one tap. Both are populated by moshi-hook (see Hooks) and stay synchronized between your iPhone and paired Apple Watch.
A kanban for running agents
With several agents in flight, the Inbox reads like a kanban board: Needs you at the top, Working under it, Done below that. A Claude Code session refactoring in one project and a Codex session migrating another each hold a card, the spinning context ring tells you who's still grinding, and a card jumping sections is your cue to act — no terminal-switching to find out who's blocked.
On iPhone the Inbox sits one swipe to the left of Home. On iPad and foldables it sits beside Home, and the Full screen button next to the search field maximizes it into a full-screen board with one column per section. The board is made to be propped next to your keyboard: tap Keep screen on in its header and the display stays awake while the board is open, so the device becomes a second monitor whose only job is telling you which agent needs you next. Back to Home shrinks it again.
What the Inbox shows
The Inbox collects every event the daemon forwards from Moshi's Tier A and Tier B agent integrations and renders one row per session.
- Approvals and questions — agent stopped to ask permission or for an answer. Approve or deny a waiting prompt right from its row in the list; tap the row to read the full prompt or pick from a longer list of options on the detail screen.
- Task completions — a turn finished. Useful when you queued work and walked away.
- Session events — a new agent session started, a tool ran, or a tool finished. These are throttled so the inbox does not become a log viewer.
Rows from a host with end-to-end encryption on read Encrypted until your phone has connected to that host over SSH in Moshi and fetched its key; from then on they show the real text and can be answered as usual.
Each row names the machine it came from, with the icon you chose for that connection, plus the project and model. Sessions running in Rex show their session name, and opening one takes you to its pane.
New events for the same session collapse into the existing row instead of stacking. That keeps the list shaped like "agents I am working with right now," not "every keystroke since this morning."
Active vs Archived
The inbox is split between active rows and Archived with deliberate decay rules:
- A pending approval stays active until you answer it or the host times it out.
- A completed turn stays active for 10 minutes — long enough to glance at, short enough not to clutter.
- Anything older than 6 hours auto-archives, even if you never opened it.
- Swipe to archive immediately when you want a row gone now.
Active rows with a still-valid pending approval float above everything else, sorted by recency. To hide archived rows entirely, turn off Show archived in the Filter menu.
Search, filter, and group
The search field at the top of the Inbox (Search agents, hosts, projects) narrows every section as you type, archived rows included. The Filter menu next to it picks rows by Agent, Host, or Project; the chips under the search field do the same in one tap, and Clear resets them.
On iPhone, the Group by menu switches the active rows from Status to Host or Project — useful when the same agent runs on a Mac and a Linux box, or when you want one repo's sessions together. On the iPad and foldable board, the same choice turns the columns into one per host or per project, busiest first.
Usages
Usages shows the rate-limit windows your agents are burning. The usage pill floating at the bottom of the Inbox carries a chip for your two busiest accounts (more dots when there are others); tap it to open the full Usage sheet with one card per account. The same numbers feed the Home Screen and Lock Screen widgets and the Apple Watch.
By default the moshi-hook daemon polls each signed-in agent's rate-limit surface on the host and ships a snapshot for every account it has seen recently:
- Claude Code — the 5h and 7d windows, plus Claude's per-model weekly limits.
- Codex — a variable set of windows with human labels (e.g., "5h", "weekly"). A ChatGPT account you use from Codex, OpenCode, and Pi shows as a single card, whichever of them is signed in. Codex profiles with their own
CODEX_HOMEeach get a card per account once a session has run under them (moshi-hook 0.4.55+). - OpenCode — provider-dependent; whatever the provider exposes.
- Kimi Code, Grok Build, and Antigravity — Kimi's rolling and weekly windows, SuperGrok or X Premium weekly credits, and Antigravity's quota grouped by model family, when those CLIs are signed in.
- Coding plans paid with an API key — Z.ai GLM, MiniMax, and Kimi coding plans. moshi-hook finds the key where your harness already keeps it: Pi, OpenCode, Claude Code pointed at the vendor's endpoint, or the vendor's environment variable.
Each card shows the agent logo, the account label, the host that captured the snapshot, and one bar per window with its percentage and when it resets. A gap in each bar marks your pace: where even spending would put you by now, including on Claude's per-model weekly limits. A fill that stops short of the gap has room to spare; one past it is burning faster than the window allows. Under the bars the card says On pace, or when that window runs out at this rate. Once a window is nearly used up (95% or more), Alert me when … is free schedules a notification for the moment it resets.
The time in the card's corner is when moshi-hook last checked the account, even if the numbers haven't changed since. With Moshi 4.2.0 and moshi-hook 0.4.38 or newer, usage updates in real time while the app is open, and the usage pill shows a Live badge while every account on it is streaming. Otherwise values refresh roughly every minute as long as moshi-hook is running on the host with usage collection enabled.
Hosts with end-to-end encryption send usage sealed. Their cards read Encrypted account until your phone has connected to that host over SSH in Moshi and fetched the key; after that they show the real account and numbers.
Opt out of background usage collection
Background collection is on by default so the Usage sheet, widgets, and Apple Watch complication stay current. To stop the daemon from polling agent rate-limit APIs and uploading snapshots to Moshi on a host:
moshi-hook set usage-collection off
brew services restart moshi-hook # macOS / Homebrew
systemctl --user restart moshi-hook.service # Linux / systemd
That writes usage_collection = false under [gateway] in ~/.config/moshi/config.toml (restart required — the daemon reads settings at startup). While it is off:
- No background Claude / Codex / Kimi / Grok / coding-plan rate-limit polls.
- No automatic uploads to Moshi; usage cards from that host stop advancing until you turn collection back on or push manually.
- Explicit
moshi-hook usageandmoshi-hook usage --syncstill work for on-demand inspection.
Turn it back on with moshi-hook set usage-collection on and restart the daemon. See Hook settings for every persistent daemon option.
Context remaining
Inbox rows for agents that expose transcript visibility carry a small ring showing how much of the model's context window is left. The same value powers the Apple Watch complication. When the ring drops below about 15% you are close to losing the agent's working memory — a good moment to ask it to summarize before continuing.
When the Inbox is empty
A truly empty inbox is the goal: every prompt answered, every turn either still running or auto-archived. If it feels too quiet, check that:
moshi-hookis running, paired, and has current hooks for your agents (moshi-hook doctor, moshi-hook 0.4.3 or newer; older versions:moshi-hook status).- The host's account is one of the agents Moshi normalizes events for.
- Push notifications are enabled in Settings -> Notifications so new events also surface as a banner.
See Troubleshooting for the longer checklist.