Releases: feci/parley-deck-cli
v1.26.0 — TUI /run command
- New TUI
/runcommand. Advance the protocol on demand from inside the live
TUI — it kicks the auto-driver (cross-review → consensus → finalize → opted-in
implementation) for the current run. Most useful with--no-autoruns; under
the default auto-drive it is a no-op once driving has started (idempotent). The
command appears in/helpand slash autocomplete.
v1.25.0 — auto-drive on by default
Auto-drive is now the default.
parley runauto-drives by default. After round-01 the protocol now
advances automatically — cross-review rounds, consensus draft, signoff
requests, and finalize — without you running the next step. Pass--no-auto
to opt out (stop after round-01 and advance manually). The flipped flag also
governs the launch prompt: a default run launches and drives unattended, while
--no-auto(without--yes) restores the pre-launch confirmation.- Auto-drive now runs inside the TUI. Previously the driver only ran on the
--no-tuipath, so a TUI run stalled at round-01. The driver now runs in the
background while the live TUI shows it advancing (its output is discarded so it
never corrupts the render; quitting the TUI stops it). - Code-mutation stays gated. The implementation/fix-up phases (Phase 5–8) are
still only auto-driven when the idea opts in viaauto_implement; flipping the
auto default does not auto-write code.--no-implementstill stops the driver
atFINAL.md. parley continueis unchanged: it still prints the next action by default and
executes it only with--auto.
v1.24.1 — embedded default protocol resync + drift guard
Maintenance (idea embedded-default-protocol-resync, PR #47):
- Embedded default protocol resynced with the live deck. The
parley init
bootstrap template (internal/protocol/defaults/COOPERATION.md) gained the
missing## 12. Pipeline blocks & action stagessection (byte-identical to the
live deck) and was genericized: headerWorkspace/Createdare now
placeholders and both §2 tables ship empty bodies, so a freshlyparley init-ed
project no longer inherits this repo's roster/workspace. - Anti-drift guard: a fail-closed Go test (
TestEmbeddedDefaultMatchesLiveDeck)
asserts the embedded default stays in sync withparley-deck/COOPERATION.md
(modulo five documented, anchored project-specific zones) and that the embedded
bootstrap shape holds — so a protocol edit landing in only one copy now breaks
the build. PlusTestDefaultCooperationForInitfor the init output. - Synced the project deck to
parley-deck-skill1.3.1 (§12 was already present).
v1.24.0 — runner hardening + review-gate honesty (kindly adoption)
Adopted from the MIT-licensed "kindly" skill (ideas runner-hardening-kindly +
meta-protocol-change-review-gate-honesty):
- Agent supervision: first-output watchdog (120s, one retry), stall guard
(30m, output-growth based), persistedagent.heartbeatevents (60s; excluded
from transcripts/triggers); counting writers — zero healthy-path I/O; typed
agent.no_first_output/agent.stalledevents appended BEFORE the kill.
Config:first_event_timeout_ms,stall_timeout_ms,heartbeat_ms. - Failure classification:
agent.failednow carriesfailure_class+
recovery_hint(rate-limit/auth/billing/overloaded/…); surfaced in the TUI
narrator and agent headers. - Artifact beats exit code: a validated artifact with an ordinary nonzero
exit finishes withagent_exitinstead of failing (removes the agy
wrote-then-exit-1 flake); ACP validation now respects the run phase; fix-ups
validate IMPLEMENTATION.md instead of trusting exit 0;Result.Success(). - Review snapshots: Phase 6 reviewers read a disposable shared-clone
checkout on local tmp (dirty trees become temp-index snapshot commits);
artifacts move back via copy+fsync+rename; loud fallback events. - parley consult +
parley consults list: advisory cross-agent questions
with durable artifacts under parley-deck/consults/ (never quorum evidence). - Hardening: claude participants shed nested host markers; read-only git probes
set GIT_OPTIONAL_LOCKS=0;fsutil.AppendLine; docs/agent-cli-mechanics.md. - Protocol: Phase 6 "Review briefs and dispositions" (no-suppression),
Phase 8 opt-instrict_gate+ "Stopping judgment", §8 "Consults" standing;
mirrored to the embedded default protocol.
v1.23.0 — protocol visibility in the live TUI
Highlights
- Protocol ribbon on every tab (Ctrl+P):
◆ Ph 2: Cross-Review (R02) · Delivered 1/3 · Waiting: agy, hermes · Next: consensus— with [STALE]/disk-fallback/reconciled-age honesty markers and a 3-line expanded view (Pipeline / Delivery / System). - Tab activity glyphs: braille spinner (output flowing), · (running silent), ✓ delivered, ✗ failed, x killed, - skipped, ! STALE — fed by tail-cursor growth plus a 2s stat cache for unvisited tabs.
- Narrator lines woven into every transcript (── 12:43:51 codex wrote round-02/codex.md ──) with a bounded replay ring; /narrate cycles protocol → verbose → off.
- Buffered-agent placeholder: a silent agy tab now shows declared buffering, liveness, byte counters, and its own recent activity instead of a blank pane (new
buffers_stdoutagent flag, TOML-configurable). - Protocol tab (/protocol or /status): PIPELINE 0-8, DELIVERY matrix, SIGNOFFS, NEXT; /refresh forces a reconcile.
- Home: per-idea phase chip + attention badge.
- Status line:
ph=2:xrev-r02 wait=agy,hermesreplacesround=…. - Driver: new
run.phaseevent after every phase-changing cursor commit; cursor-save errors are no longer discarded;driver.RebuildDetailexports phase evidence in one disk pass.
All disk reconciliation is event-driven + 15s/60s timers — nothing runs on the 250ms tick; phase never regresses without two agreeing reconciles (virtio-fs discipline).
Designed and reviewed via Parley Deck (parley-deck/ideas/tui-protocol-visibility/, PR #45).
v1.22.0 — never orphan a run on a manifest hiccup
Fix: launch failed: mkdir …/runs/<id> could still orphan a run (follow-up to 1.21.0)
1.21.0's MkdirAllResilient (75ms) didn't fully stop it: the run is created but run.json is missing → the deterministic failure is runmanifest.Write, whose mkdir on the already-existing run dir fails under a virtio-fs stale cache that outlasts 75ms.
Two-part hardening:
- Longer retry window —
MkdirAllResilient75ms → ~1.9s (8 attempts) to outlast a virtio-fs ~1s cache timeout. Healthy path unchanged; permission fails fast. - Best-effort manifest —
runcontrol.Createno longer aborts the launch if the manifest write hiccups; it recordsrun.manifest_deferredand continues. Orphaning is now deterministically impossible (the run is defined byevents.jsonl;run.jsonis optional metadata).
Reviewed via Parley Deck (codex/agy/hermes — all ACCEPT).
Upgrade (macOS): brew update && brew upgrade parley-deck-cli — then fully quit any open parley TUI and start a fresh one (an already-running TUI is still the old binary).
Windows: x64 / arm64 .exe below.
v1.21.0 — resilient MkdirAll for virtio-fs launch failures
Fix: spurious launch failed: mkdir … on virtio-fs shared mounts
parley tui → N (new idea) could fail with launch failed: mkdir .../runs/<id>: <errno> even though the run dir was created and the run ran in the background (orphaned). Root cause: an AppleVirtIOFS (virtio-fs) shared mount with weak cross-process cache coherence makes os.MkdirAll return a transient ENOENT/ENOTDIR from a stale dentry/attribute cache while the dir is (or becomes) present.
Fix: new internal/fsutil.MkdirAllResilient — healthy path is exactly one os.MkdirAll (zero overhead); on error it returns nil when a fresh Stat shows the directory, fails fast on fs.ErrPermission, otherwise retries [0,5,20,50]ms and returns the last mkdir error. fs.ErrExist is never trusted blindly. Applied on the new-idea launch path (CreateIdea, Store.Append, runmanifest) and the live run path (runner/steer/phase58/handoff dirs, hitl questions).
Designed + reviewed via Parley Deck (claude/codex/agy/hermes) — all participants ACCEPT. 8 internal/fsutil tests; full suite green.
Install/upgrade (macOS): brew update && brew upgrade parley-deck-cli
Windows: download the x64 or arm64 .exe below.
parley-deck-cli 1.20.0 — live agent transcript
Live, scrollable, Codex-CLI-style agent transcript
Fixes blank agent tabs during a run. The tab is now a live conversation:
- Streams in place — a streaming line rewrites itself via
\r(the Codex-CLI "potom sa to prepíše"); the TUI used to strip\r. - Shows stderr (merged + dimmed
[err]) where the otherwise-silent one-shot agents narrate;/stderrtoggles it.codex execshows live. - Always-on status header (
● working/✓ finished · wrote <artifact>/✗ failed/ killed / stale) — never blank. - Woven steers — typing to an agent appends
❯ you: …and the reply streams into the same scrollable history (no more panel that replaces the view);/artifactviews the produced file.
No agent-flag changes (artifact capture untouched), no new deps; the transcript imports neither runner nor app. Reviewed via the full Parley Deck protocol (Phase 6 found 4 MAJOR → fixed → all three reviewers ✅ ACCEPT).
Upgrade
brew update && brew upgrade parley-deck-cli
Windows binaries attached.
parley-deck-cli 1.19.0 — durable agent kill + liveness
Durable, cross-restart agent kill (+ truthful liveness)
Fixes "an agent shows running for days and can't be killed after a parley restart."
- Kill survives a restart — each agent's process identity is persisted; a restarted or opened/resumed run can kill it from the TUI (these runs previously had no kill at all).
ctrl+kworks there now. - Reaps the whole tree — agents spawn in their own process group, so a kill takes out orphaned grandchildren (the real cause of "running for days"); timeouts group-kill too.
- Never kills the wrong process — a strict fail-closed check (boot-id + microsecond start-time + process-group + session-leader + command) means a reused PID is never signaled; parley never signals its own group.
- RUN vs STALE badge — see whether an agent is genuinely alive;
ctrl+kon a stale one clears the hanging badge, and Home shows a stale-agent banner.
No new dependencies. macOS/Linux/Windows build-tagged (Windows durable kill refuses; live kill works). Verified with real-process tests on macOS (group kill, grandchild reap, tampered-identity refusal, live end-to-end durable kill).
Designed + reviewed via the full Parley Deck protocol (claude/codex/agy/hermes): Phase 6 found 2 CRITICAL + 4 MAJOR → fixed → all three reviewers ✅ ACCEPT.
Upgrade
brew update && brew upgrade parley-deck-cli
Windows binaries attached.
parley-deck-cli 1.18.0 — TUI live steering, kill, autocomplete
TUI: live steering, per-agent kill, slash autocomplete
parley tui is now an active console:
- Steer round-trip — type a message to an agent (agy/hermes/codex) and it actually runs: a fresh single-agent attempt whose reply streams into that agent's tab (cyan
steer <agent> ›prefix, " is replying…"). Previously steers were silently recorded with no reply. - Kill an agent —
ctrl+kon a running agent tab →kill <agent>? (y/N)terminates just that agent (the rest of the run continues); it shows a KILLED badge. - Slash autocomplete — type
/+ a letter for a command menu; Tab completes, ↑/↓+Enter pick. Tab still switches tabs when you're not typing a command.
Steer attempts are isolated (own dir, no clobber of the round transcript/artifacts), depth-1 queue per agent; per-agent kill never tears down the whole run. Pure TUI/runner change; --no-tui untouched.
Built and reviewed via the full Parley Deck protocol (claude/codex/agy/hermes): design → FINAL → implement → review (4 MAJOR) → fix-up → re-review × 2; codex + hermes ✅ ACCEPT.
Install / upgrade (Homebrew)
brew update && brew upgrade parley-deck-cli
Windows binaries are attached below.