Skip to content

Latest commit

 

History

History
234 lines (200 loc) · 29.1 KB

File metadata and controls

234 lines (200 loc) · 29.1 KB

Changelog

1.0.0 (2026-07-21)

⚠ BREAKING CHANGES

  • 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)

Features

  • 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)

Bug Fixes

  • 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/agent not ~/.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)

Documentation

  • 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)

Miscellaneous Chores

  • 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)

[Unreleased]

Added

  • Harness config-dir scope abstraction — per-role and per-harness curated config directories via harness-config-directory in tmux-pilot.config.yaml, with overlay (deep-merge base + overlay) and replace (self-contained dir) modes
  • Generic synthesizeConfigDir() in core plus CodingHarness.configProfile descriptor 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_DIR redirect, cmd uses subshell-scoped HOME redirect to .commandcode/
  • Tests for config-dir synthesis, routing resolution, integration, and host-storage separation
  • Mise workflow (mise.toml) with install, check, lint, test, format, ci, and clean tasks
  • pnpm-workspace.yaml with approved build scripts for pnpm
  • clean package script to remove dist, node_modules, and coverage
  • Claude Code harness (harness: claude-code) — a CodingHarness for Anthropic's first-party claude CLI: 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 in settings.json, folder-trust and bypass-permissions-mode pre-seeding, and CLAUDE_CONFIG_DIR config profile. Live-verified end-to-end on an isolated tmux socket
  • Codex harness (harness: codex) — OpenAI Codex CLI TUI, OpenAI-only (ambient codex login; routing provider ignored). Always-synth per-spawn CODEX_HOME, notify-program lifecycle-end sentinel, rollout-file session parser supplying real usage and the real model context window, late-binding session-file discovery, thinkingmodel_reasoning_effort, Escape stop 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. No harness-config-directory support (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); relative agent-definition / harness-config-directory stay relative to the entry config
  • Definition-driven subagent behavior — a role's agent-definition Markdown body is delivered as role instructions on spawn; optional frontmatter description enriches 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 port 41273), 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's agent-definition Markdown
  • 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-names and per-role webui-theme console 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 effective cd; immutable spawn-time audit on the record. See docs/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 $TMPDIR for new spawns
  • resume_subagent tool — re-prompt an existing subagent (split out of the old subagent resume mode)

Changed

  • Claude Code harness is Anthropic-only: routing provider is no longer mapped to ANTHROPIC_BASE_URL (that field is a pi provider id such as opencode-go, and stuffing it into the base URL produced opencode-go/v1/messages?beta=true parse failures). Custom gateways, if needed, set ANTHROPIC_BASE_URL in ambient env
  • Migrated package manager from npm to pnpm (packageManager: pnpm@11.11.0, removed package-lock.json, tracked pnpm-lock.yaml)
  • README broad refresh: updated pilot-<parent> session naming, documented current-session/isolated topology, party/raid widget, slash commands, lifecycle-end sentinel completion, subagent-execution.cleanup-enabled, subagent-roles schema, 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 in AGENTS.md
  • BREAKING: The subagent tool now takes an agents array (batch spawn) — scalar spawn params moved under each array element; a single spawn is agents: [{ … }]. The resume mode and the vestigial run_in_background param were removed
  • Compact spawn/result feedback — the model-facing tool content is trimmed to what the model needs to act (spawn = Spawned <id> (<role>).; running = a terse one-liner), with render detail moved to a separate UI details channel; 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

[0.3.0]

Added

  • 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 -e flag, 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 provider field support — passes --provider flag 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

Changed

  • Session file search now checks both direct session dir and cwd-hash subdirectories
  • WATCH_TIMEOUT_MS reduced 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
  • SubagentRecord extended with currentTool, turnCount, responseText, lastActivity, statusFilePath fields
  • SpawnParams extended 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

Fixed

  • 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)

Features

  • pi-tmux-sessionizer: create package for tmux-based subagent spawning and monitoring (e22a81f)

Bug Fixes

  • pi-tmux-sessionizer: fix eslint and biome errors caught by CI (271ff19)