-
Notifications
You must be signed in to change notification settings - Fork 108
Notifications And Approvals
An agent that stops to ask a question, with nobody watching, is a run that quietly wasted an hour. This page covers every way Codeman tells you it needs you, and how to answer without opening the session.
| Surface | Reaches you | Default |
|---|---|---|
| Tab alert | While the dashboard is open | On |
| Browser title flash | Another tab in the same browser | On |
| Desktop notification | Another window on the same machine | Opt-in |
| Push notification | Anywhere, even with no tab open | Opt-in |
| Approvals Inbox | One queue across every session | Opt-in |
| Phone overview | Phone home screen, NEEDS YOU section | On |
| Away Digest | Afterwards, as a summary | Opt-in |
The tab itself changes state:
| State | Meaning |
|---|---|
| Yellow, blinking | The agent is waiting for input from you. |
| Red, blinking | A question or permission prompt is blocking the session. |
These are a steady colour with a pulse layered on top, not a blink to transparent, so a tab needing attention looks that way at every point in the cycle.
They survive a reload. The alert state is re-seeded from the server on page load, so reloading the dashboard while a permission dialog is blocking a session does not leave you with a normal-looking tab.
For Claude sessions, these come from Claude Code's hooks and are precise about why the session stopped; DeepSeek Harness sessions report the same states themselves. For the other CLIs there are no hooks, so you get the coarser output-based signal.
The browser tab title is prefixed codeman:<host>, so several Codeman instances across
several machines stay distinguishable at a glance. Override the hostname with
codeman web --title-hostname <name>.
Desktop notifications use the same prefix. Enable them in App Settings → Notifications.
Push reaches your phone with no Codeman tab open at all, which is the only option that works while you are actually away.
Setup:
- Open Codeman over HTTPS. Web push requires a secure context. Tailscale gives you real
HTTPS;
--httpsgives you a self-signed certificate; plain HTTP over a LAN address will not work. - App Settings → Notifications → Subscribe, and accept the browser prompt.
- On iOS, add Codeman to your home screen first. Safari only delivers web push to installed web apps, not to tabs.
Once subscribed, a blocking prompt reaches your phone even from a locked screen.
Opt-in, off by default. Claude sessions, plus DeepSeek Harness sessions, whose terminal front door reports its prompts to Codeman.
One queue of every prompt currently waiting on a human, across all your sessions, answerable in place. When you have eight workers running, this is the difference between checking eight tabs and checking one list.
Turn it on in App Settings. Surfaces:
- A header bell with a count, hidden entirely while the count is zero. Never shown on phones.
- A drawer listing each waiting card.
- NEEDS YOU strips at the top of the phone overview home screen.
Each card shows the session, the case, and the captured prompt with its options. Answering sends the keystroke into the session for you: a digit for a menu choice, Escape to decline, or free text for an idle prompt.
Behaviour worth knowing:
- One item per session. A newer prompt supersedes the older one, because the older one is no longer on screen.
- Menu answers are validated against the live screen. Codeman re-captures the pane before sending, and refuses with a conflict if the dialog is no longer there. Otherwise your keystroke would land in the composer as stray text.
- Permission and question items clear only on definitive signals: the turn ending, the dialog completing, an answer, a supersede, the session exiting, or a 12 hour timeout. They do not clear on a heuristic "looks busy again" signal, because that signal is wrong often enough to lose a real prompt.
- In memory only. Restarting the server clears the queue; the prompts themselves are still sitting in the sessions.
With the inbox enabled, push notifications carry Approve and Deny buttons. Those are handled by the service worker directly, so they work with no tab open: tap Approve on a locked phone and the agent continues.
With the inbox off, the buttons are stripped from the notification payload entirely rather than being shown and failing.
On phones, tapping the "C" logo gives a session overview with NEEDS YOU first, then current sessions, then past ones. Rows use the same language as the tab strip: a green dot when fine, pulsing while working, yellow when waiting for input, red when a question is pending.
Answer strips let you resolve a prompt straight from the home screen without opening the session.
Retrospective rather than live: what happened while you were gone, aggregated from the lifecycle log, run summaries, live sessions, token statistics, and recent subagents.
It is the morning-after view for an overnight run. Enable its header button in App Settings → Header & Panels.
- HTTPS access, ideally Tailscale. See Remote Access.
- Push notifications subscribed, with Codeman installed to the home screen on iOS.
- Approvals Inbox on.
- Auto-resume on usage limit on, for each session you leave running. See Keeping Agents Running.
That combination means a blocking question wakes your phone and can be answered in two taps from the lock screen.
- No push over plain HTTP. It is a browser requirement, not a Codeman one.
- iOS needs the home screen install. A Safari tab will never receive push.
- The bell is invisible at zero. That is deliberate, not a broken setting.
- Approvals need real signals. They are built on hook events, which Claude emits and DeepSeek Harness reports itself; the other CLIs do neither.
- A stale menu answer is refused, not sent. If you answer a card for a dialog that has since gone away, Codeman declines rather than typing a digit into the composer.
- Keeping Agents Running - what to configure before walking away.
- Mobile Guide - the phone surfaces in full.
- Settings Reference - where each of these toggles lives.
Documents Codeman 1.30.x. Something wrong or missing on this page? These pages are
generated from docs/wiki/ in
the main repository, so browser edits here are overwritten on the next sync. Send a pull
request against that directory instead, or open a
Discussion.
Getting started
Using it
- The Dashboard
- Agent CLIs
- Custom Model Endpoints
- Working With Files
- Input And Voice
- Mobile Guide
- Keyboard Shortcuts
- Settings Reference
Keeping agents running
Where it runs
Access & security
Automation
Operating it