1.0.0 (2026-07-21)
- spawn: The subagent tool parameter schema changes from scalar spawn fields (subagent_type, prompt, description, etc.) to an agents array of per-element specs with batch-level inherit_context/backend/ restart_policy hoisted out. The resume parameter is removed — resume moves to a dedicated resume_subagent tool.
- config: retired configuration keys (maxConcurrentAgents, enableSubagentCleanup, tmuxPilotSettings., harnessSettings, guards, config-dir, new-worktree, agentDef/agentDefFolder, style, camelCase guard fields, bars..bg, git-worktree-settings, placement values aboveEditor/ belowEditor/top/bottom, config-dir mode 'layer') are ignored with warnings; configurations must migrate to the canonical names.
- config: agent-model-routing.yaml is no longer loaded; configure tmux-pilot.config.yaml instead.
- subagent tmux sessions are named pilot- (was _pi-sub-) and live on an isolated per-parent tmux server; attaching requires the tmux -S command shown in tool results.
- worktree creation default flips from always-on to opt-in (no existing users)
- add git worktree isolation for subagents (93094a6)
- add guard config types, GuardMonitor orchestrator, and session archive (24189d9)
- add interrupted terminal state and resume lifecycle to subagent tracker (b72a888)
- add subagent visibility system, provider inheritance, and session monitor reliability fixes (25a84d3)
- config: add composable configuration imports (c98c8be)
- config: add web configuration console (f34b9db)
- config: cleanup linger, harness-global-defaults, durable pilot session (c592a4f)
- config: standardize public YAML schema to canonical lower-kebab-case names (22839d9)
- console: add agent definition editor (c0560e9)
- deliver role definitions to subagents (2053faf)
- frames: tui frames polish with host-adapter context window, config editor, and raid grid (287773e)
- harden subagent lifecycle with configurable cleanup, abort salvage, and stale-nudge fix (59d66d7)
- harness: add Claude Code harness, live-verified (b5197a0)
- harness: add Hermes Agent TUI harness with plugin mirror and TUI ensure (d7aeb1e)
- harness: add OpenAI Codex CLI harness with lifecycle sentinel and rollout parsing (ee46c9c)
- harness: add per-role and per-harness config-dir scope abstraction (ec7aadd)
- harness: close hardcoded cmd branches in prompt delivery, resume, and reconciliation (2856430)
- harness: declare owned temp paths for teardown/GC (dfdd993)
- harness: self-describing harness identity + default stop combo (c539083)
- host: add optional pi-repair-layer tool argument repair (1c75dc2)
- implement multi-harness subagent spawning with write-once cmd hook (c1591e1)
- integrate readTurnCount, --yolo flag, and sendKeysWithEnter into harness lifecycle (5474ebe)
- lifecycle-end sentinel completion detection (255df33)
- per-parent-owned concurrency cap, current-session default topology, poll discipline (8873d66)
- rebrand extension to tmux-pilot with log viewer and settings modal (f41121b)
- replace supervisor/guard-monitor with lifecycle-controller and decision-table system (257481f)
- runtime: relocate subagent lifecycle files into owned runtime storage (03ad9c1)
- sandbox: add opt-in OS sandbox for subagent spawns (6a7e453)
- spawn: compact spawn feedback (c958e89)
- spawner: extract confirmed prompt delivery with Enter-retry (da6551e)
- spawn: reshape subagent tool to always-array batch spawn with dedicated resume_subagent (563493d)
- stable-ID window targeting and per-parent tmux socket isolation (3c1d3e1)
- subagent output diet — trim model channel, compact UI render, terse nudges, adaptive batch window (9f3973a)
- supervisor & reconciliation framework with durable process management (7068bdc)
- webui: class-fantasy design system (18b5b45)
- webui: expand role-pack themes with packaged art (357804c)
- webui: refine responsive configuration console (836006a)
- webui: webui polish, role cards carousel, and theme system (49c2c6f)
- widget: color subagent frames by terminal state (0c67233)
- widget: configurable party-frame width band (5285af8)
- widget: frame-fixes — spawn floor, alignment, neutral track, cmd visibility (e7bca3e)
- widget: session-scoped linger + D12 visual v2 (raid squares, bar lanes) (223ba55)
- widget: theme-aware chrome, style config, and session-scoped ownership (9bec0dc)
- widget: WoW-style party/raid unit frames for subagents (50b7183)
- worktree config gating, ENOENT-safe session parse, configurable poll interval (b4f65d7)
- add timeout to waitForSessionFile and fix stale detection on parse errors (fca55eb)
- adv-rev-1: P0 critical fixes - Number(0) falsy bug, null handling, empty-string harness, migration warning (43ca39a)
- adv-rev-1: P1+P2 fixes — retry, types, cleanup, docs, tests (8f1888b)
- claude-code: ignore routing provider (Anthropic-only) (b38596b)
- claude-code: seed trust into ~/.claude.json and pin launch cwd (cf9787c)
- cmd-harness: register cmd completion hook globally in ~/.commandcode (5e94736)
- cmd: port /context token estimator for health bar (62c7e9d)
- cmd: prefer SessionStart transcript_path for session files (bb1b467)
- codex: stabilize composer readiness and recover discarded pastes (678e3b2)
- lifecycle-controller: invert turn-threshold comparison to prevent false-positive steer at spawn (f5f9958)
- match pi v0.80.x default config path (
~/.pi/agentnot~/.pi) (84bfab9) - normalize cmd session file slug to lowercase (f6842db)
- nudge: batch multiple subagent completions + use steer delivery (e709a25)
- remove NotificationManager sendMessage that injected fake user messages (45047a6)
- routing: accept raw new-worktree YAML key on role and global config (f8c85e7)
- sandbox: pre-seed pi extensions into synth config dir (97f73cf)
- spawner: apply config-dir redirect across full launch pipeline (7faf339)
- startup-reconciler: resolve sessionDir from record, enable teardown (d7aef14)
- tools: unbox spawn/get-result chat lines and restore log capture (dcd3d3c)
- unify spawn paths into single fire-and-forget with provider passthrough (92b63a4)
- use window names instead of numeric indices for tmux targeting (6b84a41)
- add adversarial review report #1 (3fb8aea)
- add ARCHITECTURE.md, update AGENTS.md, add session retros and harness notes (dad3073)
- add openspec specs for guard system capabilities (4e8db4e)
- add retro and lessons from subagent-result-delivery-fix session (1f93b14)
- add retro and lessons from tmux-pilot-rebrand-and-ui session (fa1dd97)
- add ROADMAP.md tracking model fallback in GuardMonitor (87256c2)
- add strategic direction ADRs, handoff notes, and tmux research (8e3c678)
- add unreleased changelog entries for Phase 3 supervisor & reconciliation (d7b3386)
- add worktree isolation documentation to README (22cc75e)
- align specs and docs with linger and harness-global-defaults (c86c949)
- align specs with full-pipeline config-dir redirect (1ff7f86)
- Archive openspec change (27fb88a)
- changelog: note claude-code harness and AGPL relicense (4b513b9)
- changelog: populate unreleased section with recent changes (a6e10f2)
- document guard system, GuardMonitor, session archive, and config schema (7d92da2)
- openspec: add claude-code harness research proposal (6379a27)
- openspec: add subagent-output-diet change proposal (400b6d5)
- openspec: sync and archive self-describing-harness-identity (ac732d6)
- readme: broad refresh to match current architecture (eff463a)
- readme: update tmux session naming scheme to pilot-<parent> (63e2bfc)
- reconcile living docs with current features (379c314)
- repair references to pruned working-notes (4ab4eec)
- research: add OS sandbox research corpus (d79e14f)
- specs: sync delta specs to main specs + archive subagent-routing-enhancements change (550358e)
- sync openspec delta specs and archive completed change (45aaca3)
- update pi-agent harness notes with QA findings (aa5ae32)
- Update ROADMAP.md (1266762)
- update subagent-observability spec with TUI-only notification requirement (17bede1)
- add incomplete tasks tracking document (12918d4)
- add retro and lessons from worktree-isolation change (4563760)
- add tmux-pilot-role-authoring to skills lock (f98f0e3)
- archive completed subagent-result-delivery-fix change (f7ef616)
- docs: add handoff document with architecture, test coverage, and roadmap (730d47f)
- docs: Clean up temp markdown files (e19682b)
- docs: expand handoff with full research context from ecosystem analysis (9e4d29f)
- gitignore worktrees, skills-CLI cache, and spike scratch state (1355104)
- init: standalone PTS extracted from pi-things monorepo (46276bc)
- mark adversarial review complete with adv-rev-1.md findings (c215f11)
- openspec: add documentation-hygiene spec and archive change (3ef20cc)
- openspec: archive completed widget changes and sync specs (c901a79)
- openspec: archive subagent-os-sandbox change (66e1c35)
- openspec: archive subagent-output-diet and sync its specs (34258cd)
- openspec: archive widget-terminal-state-colors and sync its specs (81143b0)
- openspec: sync delta specs and archive completed changes (7cfc182)
- purge committed transient working-notes (b6dc9aa)
- relicense from AGPL-3.0-or-later to MIT (ed90a0f)
- relicense under AGPL-3.0 (7557d52)
- Harness config-dir scope abstraction — per-role and per-harness curated config directories via
harness-config-directoryintmux-pilot.config.yaml, withoverlay(deep-merge base + overlay) andreplace(self-contained dir) modes - Generic
synthesizeConfigDir()in core plusCodingHarness.configProfiledescriptor so config-dir merge/union/symlink logic lives once for all harnesses getHostStorageDir()seam separating tmux-pilot's own host storage (tracker records, archives, teardown scoping) from a harness's child-template config dir- Pi and cmd harness config profiles: pi uses
PI_CODING_AGENT_DIRredirect, cmd uses subshell-scopedHOMEredirect to.commandcode/ - Tests for config-dir synthesis, routing resolution, integration, and host-storage separation
- Mise workflow (
mise.toml) withinstall,check,lint,test,format,ci, andcleantasks pnpm-workspace.yamlwith approved build scripts for pnpmcleanpackage script to removedist,node_modules, andcoverage- Claude Code harness (
harness: claude-code) — aCodingHarnessfor Anthropic's first-partyclaudeCLI: Anthropic-native session parser with real per-message token usage feeding the context/health bar, SessionStart/Stop lifecycle-sentinel hooks via a shared env-gated script insettings.json, folder-trust and bypass-permissions-mode pre-seeding, andCLAUDE_CONFIG_DIRconfig profile. Live-verified end-to-end on an isolated tmux socket - Codex harness (
harness: codex) — OpenAI Codex CLI TUI, OpenAI-only (ambientcodex login; routingproviderignored). Always-synth per-spawnCODEX_HOME,notify-program lifecycle-end sentinel, rollout-file session parser supplying real usage and the real model context window, late-binding session-file discovery,thinking→model_reasoning_effort,Escapestop combo - Hermes harness (
harness: hermes) — Hermes Agent TUI (Nous Research); routing model/provider pass verbatim to-m/--provider. Integrates via a permanent env-gated Python plugin in the user's real~/.hermes(JSONL session mirror + re-armable end sentinel); readiness via capture-pane marker. Noharness-config-directorysupport (warned-and-ignored) - Self-describing harness identity — a harness may declare its own widget color/sigil and default stop-key combo; core resolvers resolve declaration > built-in map > fallback
- Composable configuration —
imports:in any config document pulls in local files (globs, depth-first deep-merge, entry-file wins last); relativeagent-definition/harness-config-directorystay relative to the entry config - Definition-driven subagent behavior — a role's
agent-definitionMarkdown body is delivered as role instructions on spawn; optional frontmatterdescriptionenriches the role enum. Missing/invalid/oversized definitions reject the spawn before a tmux window is created - Web configuration console (
/tmux-pilot:webui) — full browser configuration surface bound to loopback (default port41273), one-time token → local session cookie, explicit validate/review/save against an exact-byte revision token; edits only the entry config, imports read-only. Includes an in-console editor for a role'sagent-definitionMarkdown - Class-fantasy design system for the web console — WoW-talent-pane composition with data-manifest themes resolved from harness/role identity, procedural CSS/SVG art, and a character-select role carousel;
show-fantasy-namesand per-rolewebui-themeconsole keys - Opt-in OS sandbox (
sandbox:policy) — static filesystem/network/environment/AF_UNIX containment for child harnesses on supported Linux x64 hosts, wrapped only after config redirection and the effectivecd; immutable spawn-time audit on the record. Seedocs/os-sandbox.md - Owned per-agent runtime storage — every spawn gets a tmux-pilot-owned runtime dir under host storage holding all lifecycle sentinel files (readiness/end/status), ownership-gated for recursive removal; replaces ambient
$TMPDIRfor new spawns resume_subagenttool — re-prompt an existing subagent (split out of the oldsubagentresumemode)
- Claude Code harness is Anthropic-only: routing
provideris no longer mapped toANTHROPIC_BASE_URL(that field is a pi provider id such asopencode-go, and stuffing it into the base URL producedopencode-go/v1/messages?beta=trueparse failures). Custom gateways, if needed, setANTHROPIC_BASE_URLin ambient env - Migrated package manager from npm to pnpm (
packageManager: pnpm@11.11.0, removedpackage-lock.json, trackedpnpm-lock.yaml) - README broad refresh: updated
pilot-<parent>session naming, documentedcurrent-session/isolatedtopology, party/raid widget, slash commands, lifecycle-end sentinel completion,subagent-execution.cleanup-enabled,subagent-rolesschema,worktree-settings.keep-named-worktrees, harness-config-directory scope, and pnpm/mise development workflow - BREAKING: Standardized all tmux-pilot-owned config keys to lower-kebab-case with descriptive scopes (
subagent-execution,subagent-widget,subagent-global-defaults,subagent-roles,harness-global-defaults,lifecycle-guards,widget-style,harness-config-directory, …). Hard cutover — no compatibility aliases; retired keys are diagnosed and ignored. See the migration table inAGENTS.md - BREAKING: The
subagenttool now takes anagentsarray (batch spawn) — scalar spawn params moved under each array element; a single spawn isagents: [{ … }]. Theresumemode and the vestigialrun_in_backgroundparam were removed - Compact spawn/result feedback — the model-facing tool
contentis trimmed to what the model needs to act (spawn =Spawned <id> (<role>).; running = a terse one-liner), with render detail moved to a separate UIdetailschannel; parent completion nudges are a single terse line with an adaptive batch window - Widget polish (tui-frames-polish) — width-responsive party frames within a configurable min/max band, operator-configurable raid grid density (
raid-max-rows/raid-per-row), remaining-budget countdown mana lane, three-phase cast lane (idle/thinking/tool), and spawn-time context-window stamping from the host model registry - Harness-owned temp-path resolution — teardown/GC obtain each harness's owned temp files through the harness interface rather than a hardcoded pi-shaped list
- Supervisor with Erlang-style supervision tree, configurable restart strategies, and lifecycle management
- Spawn backend for child process management with death watch monitoring
- Tmux backend for tmux session lifecycle, reconnection handling, and restoration
- Durable tracker with event log persistence for crash recovery
- Pending inbox for deferred subagent tasks
- Supervision policy engine with configurable strategies
- Backend reconnect handling with automatic tmux session restoration
- Tool idempotency support across steer, get-result, and subagent tools
- Reconciliation framework for state recovery on extension reload
- Ecosystem research docs covering Erlang OTP, Temporal, and comparable architectures
- Full test suites for all new modules and integration scenarios
- AgentWidget — persistent above-editor widget with animated spinners, tree connectors, status icons, turn count, and duration
- Child status-writer extension — tiny Pi extension loaded by spawned children via
-eflag, writes live tool/turn activity to status file - StatusPoller — polls child status files, merges C1 activity data into SubagentRecord, notifies observers
- CompositeObserver with error-isolated fan-out lifecycle notifications
- Completion notifications via registerMessageRenderer for background agent results
- Per-subagent settings system with configurable extensions, env var forwarding, and unknown-key passthrough
- Provider key (auth.json, models.json, trust.json) and settings inheritance from parent config to child config dir
- Model routing
providerfield support — passes--providerflag to spawned children - Auth-only model failover — fallback only on No API key found errors, not other failures
- Session file parsing for pi's nested JSONL format (message.role/message.content)
defaultProjectTrust: \"always\"for spawned children to skip trust prompts
- Session file search now checks both direct session dir and cwd-hash subdirectories
WATCH_TIMEOUT_MSreduced from 30s to 5s for faster fallback from fs.watch to polling- Session parser handles both flat role/content and nested message.role/message.content formats
SubagentRecordextended with currentTool, turnCount, responseText, lastActivity, statusFilePath fieldsSpawnParamsextended with provider and settings fields- spawner.ts passes --provider, -e (extensions), and PI_SUBAGENT_STATUS_FILE env var to children
- subagent-config.ts copies trust.json, reads parent settings for provider config
- DurableTracker.createTask() now passes through all SubagentRecord fields
- Session file lookup failing when pi writes files directly in session dir (no cwd-hash subdirectory)
- Session parser never detecting completion with real pi session files (nested message format)
- Children stuck at project trust prompt (defaultProjectTrust: always)
- Auth failures from model→provider misrouting (--provider flag now passed explicitly)
- Multiple spawned children from non-auth errors (fallback restricted to auth errors only)
- Status file path silently dropped in createTask (production bug)
0.2.0 (2026-06-11)
- pi-tmux-sessionizer: create package for tmux-based subagent spawning and monitoring (e22a81f)
- pi-tmux-sessionizer: fix eslint and biome errors caught by CI (271ff19)