mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-20 09:09:35 +02:00
docs: correct which CLIs the Approvals Inbox and screen-checked idle cover
The README (and its Chinese mirror) said the Approvals Inbox queues every pending prompt and answers it from the bell or the phone. It holds prompts from Claude Code, Codex (screen-read) and DeepSeek Harness only, and only Claude's are answerable: Codex and DeepSeek items are alerts that say to answer in the terminal, with no Approve/Deny on the push or the phone strip. The wiki, the TUI guide and the phone guide now say the same. Keeping Agents Running, Troubleshooting and the API reference still said every CLI but Claude, Codex and DeepSeek falls back to output stabilization. OpenCode, Gemini CLI, Pi and OMP declare capabilities.workDetect too and get the same screen check; only Antigravity and Grok Build declare none. Core Concepts now mentions Codex's screen-read dialogs, and the respawn gotcha notes that DeepSeek's own end-of-turn report reaches the respawn controller. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
ce809eac41
commit
e17eb633c3
11 files changed
+53
-36
No files matched your search
@@ -244,8 +244,8 @@ contract is a **marker unique to each call** (`MARK="DONE_$RANDOM"`, send
|
||||
|
||||
| Signal | Source | Actually fires for |
|
||||
|--------|--------|--------------------|
|
||||
| `idle` | the session's own `idle` event | `claude`: yes, on ❯-prompt detection after activity. `shell`: **once only**, ~500 ms after start, and never again. External CLIs: not guaranteed (they render their own TUIs and readiness is output stabilization) |
|
||||
| `working` | the session's own `working` event | `claude` only in practice (spinner and work-keyword detection are Claude output formats) |
|
||||
| `idle` | the session's own `idle` event | `claude`: yes, on ❯-prompt detection after activity. `codex`, `opencode`, `gemini`, `pi`, `omp`: yes, the same screen check through the prompt marker and working line each declares (`capabilities.workDetect`). `shell`: **once only**, ~500 ms after start, and never again. Other external CLIs (`antigravity`, `grok`, `deepseek`): not guaranteed (they render their own TUIs and readiness is output stabilization) |
|
||||
| `working` | the session's own `working` event | `claude`, plus `codex`, `opencode`, `gemini`, `pi` and `omp` through the working line each declares. Elsewhere not guaranteed: it rests on generic output heuristics such as a braille spinner glyph |
|
||||
| `stop` | the Claude Code `stop` hook, the definitive end-of-turn signal | `claude` (and `deepseek`) only |
|
||||
| `blocked` | a `permission_prompt` or `elicitation_dialog` hook; on `codex`, a dialog read off its screen | `claude`, `deepseek` and `codex`; on `claude` rarer than it looks: see below |
|
||||
| `exit` | no process is behind the session | every mode |
|
||||
|
||||
@@ -265,8 +265,9 @@ siblings; no other external CLI mode qualifies. Two edges are worth repeating he
|
||||
reports a turn that never ran, and leaves the prompt in a pane that was not yet
|
||||
accepting input. Wait for the composer (`❯`) instead.
|
||||
- **Wait on `stop`, not on the default signal set.** That set also carries `idle`,
|
||||
which for every external CLI is inferred from output stabilization; a dsh TUI
|
||||
that repaints rarely reads as idle mid-turn.
|
||||
which for dsh, as for every external CLI that declares no working line, is
|
||||
inferred from output stabilization; a dsh TUI that repaints rarely reads as idle
|
||||
mid-turn.
|
||||
|
||||
## 6. The web UI as a tab
|
||||
|
||||
|
||||
@@ -121,8 +121,10 @@ the remote host, `grok login --device-auth` exists for exactly this.
|
||||
|
||||
## Known gaps
|
||||
|
||||
- **No idle/completion hook yet.** Idle detection falls back to output-stabilization
|
||||
like the other external CLIs. Grok has a hooks system, so a Codeman hook POSTing to
|
||||
- **No idle/completion hook yet.** Idle detection falls back to output-stabilization,
|
||||
as it does for Antigravity: the registry entry declares no `workDetect` prompt marker
|
||||
or working line, which is what gives Codex, OpenCode, Gemini, Pi and OMP a screen
|
||||
check instead. Grok has a hooks system, so a Codeman hook POSTing to
|
||||
`/api/hook-event` is the highest-value follow-up.
|
||||
- **No response viewer.** Grok writes ACP JSONL sessions under
|
||||
`~/.grok/sessions/<encoded-cwd>/<session-id>/updates.jsonl`; nothing reads them yet.
|
||||
|
||||
+5
-1
@@ -90,7 +90,7 @@ Groups are always in this order, and a session is in exactly one of them:
|
||||
|
||||
| Group | Glyph | Means | Comes from |
|
||||
| --- | --- | --- | --- |
|
||||
| **NEEDS YOU** | `⚠` | A permission or question dialog is blocking the agent | The approvals inbox (`permission_prompt` hooks, with the on-screen options parsed) |
|
||||
| **NEEDS YOU** | `⚠` | A permission or question dialog is blocking the agent | The approvals inbox (`permission_prompt` hooks, with the on-screen options parsed; for Codex, a dialog read off its screen) |
|
||||
| | `✋` | Waiting for your next instruction, or errored | `idle_prompt`, or an errored session (equally something only a human clears) |
|
||||
| **WORKING** | `✻` animating | A turn is running | The same working classification the web dashboard uses |
|
||||
| **IDLE** | `○` | Live, but sitting there | |
|
||||
@@ -158,6 +158,10 @@ the TUI says `that dialog is no longer on screen` rather than pressing a key int
|
||||
live composer. The answer is scoped to the options the server parsed off the actual
|
||||
frame, never to a guess.
|
||||
|
||||
Only a Claude dialog can be answered this way. A Codex or DeepSeek Harness item is an
|
||||
alert: the server refuses the answer and the TUI shows its message saying to answer in
|
||||
the terminal, so attach with `Enter` and answer it in the pane.
|
||||
|
||||
An idle prompt (`✋`) is not a dialog: there is nothing to approve, so `p` is the
|
||||
reply path and the footer says `p reply` instead of `p prompt`.
|
||||
|
||||
|
||||
@@ -166,7 +166,9 @@ wait primitives.
|
||||
|
||||
This is why some features are Claude-only. The one partial exception is DeepSeek Harness,
|
||||
whose terminal front door reports idle, working and blocked to Codeman over the harness's
|
||||
own supervisor contract, so it gets the hook-driven signals without a hook file. The other
|
||||
own supervisor contract, so it gets the hook-driven signals without a hook file. Codex gets
|
||||
one of them from its screen: Codeman reads its approval, question and trust dialogs off the
|
||||
pane and raises the same red "needs you" alert a `permission_prompt` hook raises. The other
|
||||
CLIs have no equivalent, so for them Codeman falls back to watching terminal output, which
|
||||
is coarser: it can see that something happened, not what it was.
|
||||
|
||||
|
||||
@@ -27,12 +27,12 @@ keystroke echo. Idle now lands a few seconds after a turn genuinely ends.
|
||||
There are several layers stacked on that: a completion message from the CLI, an AI check,
|
||||
output silence, and token stability.
|
||||
|
||||
**For the other CLIs** it depends on what the CLI tells Codeman. Codex declares its own
|
||||
prompt glyph and working line, so it gets the same screen check Claude does (before 1.26.1
|
||||
every Codex session reported idle for its whole life). DeepSeek Harness reports idle,
|
||||
working and blocked to Codeman itself, which is as precise as hooks. Everything else is
|
||||
output stabilization: the session is idle when output stops changing. Coarser, and it is
|
||||
why the features further down this page are Claude-only.
|
||||
**For the other CLIs** it depends on what the CLI tells Codeman. Codex, OpenCode, Gemini
|
||||
CLI, Pi and OMP each declare their own prompt marker and working line, so they get the same
|
||||
screen check Claude does (before 1.26.1 every Codex session reported idle for its whole
|
||||
life). DeepSeek Harness reports idle, working and blocked to Codeman itself, which is as
|
||||
precise as hooks. Antigravity and Grok Build declare neither, so they fall back to output
|
||||
stabilization: the session is idle when output stops changing, which is coarser.
|
||||
|
||||
## The Respawn Controller
|
||||
|
||||
@@ -161,8 +161,9 @@ run summary and lifecycle log carry the detail.
|
||||
- **The update prompt is what makes a reset survivable.** After `/clear`, everything the
|
||||
agent knows comes from that summary and the project files. A vague update prompt produces
|
||||
a vague next cycle.
|
||||
- **Non-Claude sessions can respawn**, but with output-based idle detection and no
|
||||
usage-limit auto-resume.
|
||||
- **Non-Claude sessions can respawn**, but with no usage-limit auto-resume, and with
|
||||
output-based idle detection except on DeepSeek Harness, whose own end-of-turn report
|
||||
reaches the respawn controller the way Claude's `stop` hook does.
|
||||
- **Do not run respawn on a session you are actively typing in.** It will send prompts
|
||||
underneath you.
|
||||
|
||||
|
||||
@@ -44,7 +44,8 @@ as the keyboard appearing.
|
||||
Tapping the "C" logo gives a session overview rather than a welcome page:
|
||||
|
||||
1. **NEEDS YOU** first: sessions blocked on a question, with answer strips so you can
|
||||
resolve them without opening the session.
|
||||
resolve a Claude prompt without opening the session. A Codex or DeepSeek Harness row
|
||||
offers **Answer in terminal** instead, which opens the session.
|
||||
2. **CURRENT SESSIONS** with live status.
|
||||
3. **PAST SESSIONS**, resumable.
|
||||
|
||||
@@ -167,9 +168,9 @@ phone, and it is the main reason the feature exists.
|
||||
|
||||
## Notifications
|
||||
|
||||
Push notifications reach you with no tab open, and with the Approvals Inbox on they carry
|
||||
**Approve** and **Deny** buttons handled by the service worker, so you can unblock an agent
|
||||
from the lock screen.
|
||||
Push notifications reach you with no tab open, and with the Approvals Inbox on, those for a
|
||||
Claude prompt carry **Approve** and **Deny** buttons handled by the service worker, so you
|
||||
can unblock a Claude agent from the lock screen.
|
||||
|
||||
Setup in [Notifications And Approvals](Notifications-And-Approvals).
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ opening the session.
|
||||
| Desktop notification | Another window on the same machine | Opt-in |
|
||||
| Push notification | Anywhere, even with no tab open | Opt-in |
|
||||
| Webhook (ntfy, Slack, Discord) | Anywhere, with no browser or subscription at all | Opt-in |
|
||||
| Approvals Inbox | One queue across every session | Opt-in |
|
||||
| Approvals Inbox | One queue for Claude, Codex and DeepSeek prompts | Opt-in |
|
||||
| Phone overview | Phone home screen, NEEDS YOU section | On |
|
||||
| Away Digest | Afterwards, as a summary | Opt-in |
|
||||
|
||||
@@ -37,8 +37,10 @@ For Claude sessions, these come from Claude Code's hooks and are precise about *
|
||||
session stopped; DeepSeek Harness sessions report the same states themselves. Codex has no
|
||||
hooks, but its dialogs are distinctive enough to read off the screen, so a Codex session
|
||||
waiting on an approval, a question or the "Trust this folder?" prompt turns red too, and
|
||||
clears a few seconds after you answer. For the other CLIs there are no hooks, so you get the
|
||||
coarser output-based signal.
|
||||
clears a few seconds after you answer. For the other CLIs there are no hooks and no dialog
|
||||
reading, so you get only the coarser working and idle state: read off the screen for
|
||||
OpenCode, Gemini CLI, Pi and OMP, and inferred from output settling for Antigravity and
|
||||
Grok Build.
|
||||
|
||||
## Window title and OS notifications
|
||||
|
||||
@@ -116,9 +118,9 @@ front door reports its prompts to Codeman, and Codex sessions, whose dialogs Cod
|
||||
off the screen.** DeepSeek and Codex cards are alerts: they say "Answer in the terminal" and
|
||||
carry no answer buttons, because Codeman cannot verify a keystroke into those dialogs.
|
||||
|
||||
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.
|
||||
One queue of the prompts currently waiting on a human, across all your sessions, with the
|
||||
Claude ones 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:
|
||||
|
||||
@@ -147,9 +149,10 @@ Behaviour worth knowing:
|
||||
|
||||
### Approve and Deny from the notification
|
||||
|
||||
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 enabled, push notifications for a Claude prompt 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. A Codex or DeepSeek Harness
|
||||
notification carries no Approve or Deny, since those dialogs are answered in the terminal.
|
||||
|
||||
With the inbox off, the buttons are stripped from the notification payload entirely rather
|
||||
than being shown and failing.
|
||||
@@ -189,8 +192,9 @@ current sessions, then past ones. Rows use the same language as the tab strip: a
|
||||
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.
|
||||
Answer strips let you resolve a Claude prompt straight from the home screen without opening
|
||||
the session. A Codex or DeepSeek Harness strip offers **Answer in terminal** instead, which
|
||||
opens the session.
|
||||
|
||||
## The Away Digest
|
||||
|
||||
|
||||
@@ -116,9 +116,11 @@ seconds in. Current versions confirm against the actual screen before believing
|
||||
|
||||
### A session is stuck showing busy
|
||||
|
||||
For non-Claude CLIs, idle detection is output-based and coarser by necessity: those CLIs
|
||||
expose no hooks. A session that has genuinely gone quiet will settle. If it never does,
|
||||
interrupt it (`Ctrl+C` with nothing selected).
|
||||
For Antigravity and Grok Build, idle detection is output-based and coarser by necessity:
|
||||
those CLIs expose no hooks and declare no working line Codeman can read off the screen.
|
||||
Codex, OpenCode, Gemini CLI, Pi and OMP get the same screen check Claude does, and DeepSeek
|
||||
Harness reports its own state. A session that has genuinely gone quiet will settle. If it
|
||||
never does, interrupt it (`Ctrl+C` with nothing selected).
|
||||
|
||||
### The agent asks about bypass permissions every time
|
||||
|
||||
|
||||
Reference in new issue
Block a user