| Age | Commit message (Collapse) | Author |
|
The loop's agents blocked in a foreground sz-wait-for because nothing could
bring an agent back from a background one. Both harnesses now can: pi's
alarm fires when a when_done command exits, and Claude Code starts a new
turn when a run_in_background Bash task exits (checked on 2.1.310). So an
agent arms sz-wait-for as a wake and ends its turn: no context resent every
30 minutes to re-arm, the human can talk to it while it waits, and "arm,
then signal" becomes literal. The foreground wait stays for a harness with
neither.
The invariant is unchanged in substance: never idle, where idle now means
the other side's turn with no wake armed. sz-wait-for stays the watcher, for
its settle window.
pi-subagent: §5 says how to be woken in Claude Code too.
|
|
when_done runs a command (bash -c, in pi's cwd, output to a log file) and
fires when it exits, with its exit status; cancelling the alarm or ending
the session stops it. when_exits polls PIDs already running and fires once
all are gone. Either takes an optional deadline, 24 hours by default, at
which the alarm fires anyway and a still-running command is stopped.
A process exiting is a signal any condition can be turned into -- gh run
watch, sz-wait-for, an until-curl loop -- so the agent can start something
long, end its turn and be woken, instead of blocking on it. The delivery
path is the existing one, unchanged.
pi-subagent: §5 sets an alarm on the runs' PIDs instead of waiting.
|
|
run-agent.sh still runs with --no-session by default. --session saves the
run as session <name> under <workdir>/sessions/; --followup TEXT sends the
next message in it, from any provider and model; --fork FROM starts <name>
as a copy of FROM. A follow-up or fork inherits --tools, --thinking, --cwd
and --context-files, so a read-only subagent stays read-only, and the
earlier round's files move to <name>.round<N>.*.
Sessions are opened by file path: by id, pi looks only among sessions
started in the current directory and otherwise silently creates an empty
one, exit 0. A fresh retry moves the old session aside, since pi would
resume it given the same id.
pi-review-panel launches members with --session, so a contradiction can be
put to both reviewers before it is settled; verdicts are still tallied from
the original reviews.
From dot request 20261021-123436-work-laptop-d0adf2.
|
|
The panel's mechanics -- headless pi runs that don't hang, answer
extraction, billed cost, retries, verifying what comes back -- are not
review-specific. pi-subagent covers one delegated task, one brief fanned out
to several models, or a job split into parallel parts; pi-review-panel keeps
only what a review adds.
run-agent.sh replaces run-member.sh and fixes what it got wrong:
- `timeout` is not on a Mac without coreutils, which failed every member
with exit 127; it falls back to gtimeout, then perl's alarm (142 -> 124).
- pi exits 0 when the provider refuses the request, or the answer is empty;
both are now exit 1, with stopReason and error in the cost file.
- a retry moves the earlier attempt to <name>.attempt<N>.* instead of
overwriting its cost file.
New options: --tools (an allowlist; read,grep,find,ls is read-only by
construction), --cwd, --context-files, --brief, --deliver. status.sh
replaces the `pgrep -f run-member.sh` loop, which counted every panel on the
machine, and prints the cost table.
From dot request 20261021-114826-work-laptop-2b868c.
|