# Changelog

## [1.0.0](https://github.com/r3b1s/tmux-pilot/compare/tmux-pilot-v0.3.0...tmux-pilot-v1.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-<parent> (was _pi-sub-<parent>) and live on an isolated per-parent tmux server; attaching requires the tmux -S <socket> 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](https://github.com/r3b1s/tmux-pilot/commit/93094a660d2a69d82a41e7a263602a0e460fd928))
* add guard config types, GuardMonitor orchestrator, and session archive ([24189d9](https://github.com/r3b1s/tmux-pilot/commit/24189d9291810dfec6846a46b0f4f7653fe5ba5e))
* add interrupted terminal state and resume lifecycle to subagent tracker ([b72a888](https://github.com/r3b1s/tmux-pilot/commit/b72a88846a23d6f773adcef592db69215e0b48e1))
* add subagent visibility system, provider inheritance, and session monitor reliability fixes ([25a84d3](https://github.com/r3b1s/tmux-pilot/commit/25a84d3b8ae0109cee5d149793637057b1b8e89a))
* **config:** add composable configuration imports ([c98c8be](https://github.com/r3b1s/tmux-pilot/commit/c98c8beb17cca7c663ad109c10190a0abfe3e540))
* **config:** add web configuration console ([f34b9db](https://github.com/r3b1s/tmux-pilot/commit/f34b9db4d0d2ff329910411c41a507fefb1041cd))
* **config:** cleanup linger, harness-global-defaults, durable pilot session ([c592a4f](https://github.com/r3b1s/tmux-pilot/commit/c592a4fc3ed2962d4e3aba050203055ae398d307))
* **config:** standardize public YAML schema to canonical lower-kebab-case names ([22839d9](https://github.com/r3b1s/tmux-pilot/commit/22839d9d516c2958dab143bd8e57f62d1f885a95))
* **console:** add agent definition editor ([c0560e9](https://github.com/r3b1s/tmux-pilot/commit/c0560e93b45b4220ad727c4ce8b2f476f39caa87))
* deliver role definitions to subagents ([2053faf](https://github.com/r3b1s/tmux-pilot/commit/2053fafddac95d201849b0ab71e04c3ee2e0d02a))
* **frames:** tui frames polish with host-adapter context window, config editor, and raid grid ([287773e](https://github.com/r3b1s/tmux-pilot/commit/287773eb690f6c5ed6231d0fabf7d67d047b5157))
* harden subagent lifecycle with configurable cleanup, abort salvage, and stale-nudge fix ([59d66d7](https://github.com/r3b1s/tmux-pilot/commit/59d66d77be083d27ee3848f263c6da464fb36ddf))
* **harness:** add Claude Code harness, live-verified ([b5197a0](https://github.com/r3b1s/tmux-pilot/commit/b5197a01dbb275171901dcec2ca86436c3b68557))
* **harness:** add Hermes Agent TUI harness with plugin mirror and TUI ensure ([d7aeb1e](https://github.com/r3b1s/tmux-pilot/commit/d7aeb1e8e7f6a22081504c37858c34ea3c2ff99c))
* **harness:** add OpenAI Codex CLI harness with lifecycle sentinel and rollout parsing ([ee46c9c](https://github.com/r3b1s/tmux-pilot/commit/ee46c9c1783b5fa34da873c3197f760b51b5c475))
* **harness:** add per-role and per-harness config-dir scope abstraction ([ec7aadd](https://github.com/r3b1s/tmux-pilot/commit/ec7aadd0b7f0ebe1a1fbe190514bb31f80946a1e))
* **harness:** close hardcoded cmd branches in prompt delivery, resume, and reconciliation ([2856430](https://github.com/r3b1s/tmux-pilot/commit/28564301d4749dddf8d8c35ced21568045c9dd87))
* **harness:** declare owned temp paths for teardown/GC ([dfdd993](https://github.com/r3b1s/tmux-pilot/commit/dfdd9934613c399b90555f129c094a64ce4937d7))
* **harness:** self-describing harness identity + default stop combo ([c539083](https://github.com/r3b1s/tmux-pilot/commit/c539083c8c73a83c131aed870a90cf99e8f5c30d))
* **host:** add optional pi-repair-layer tool argument repair ([1c75dc2](https://github.com/r3b1s/tmux-pilot/commit/1c75dc2acbe9c9ac86d8a4c9e779fe6b369e4255))
* implement multi-harness subagent spawning with write-once cmd hook ([c1591e1](https://github.com/r3b1s/tmux-pilot/commit/c1591e1676a4b5c514bd40a1ef56e4a8cbc8c1e6))
* integrate readTurnCount, --yolo flag, and sendKeysWithEnter into harness lifecycle ([5474ebe](https://github.com/r3b1s/tmux-pilot/commit/5474ebe95ddf7169ab4b9301c613c50bf7de1009))
* lifecycle-end sentinel completion detection ([255df33](https://github.com/r3b1s/tmux-pilot/commit/255df3349ff43add9c11e41a82d0b6e14d306770))
* per-parent-owned concurrency cap, current-session default topology, poll discipline ([8873d66](https://github.com/r3b1s/tmux-pilot/commit/8873d6649795620364d1cc48db2de80fe2b36a97))
* rebrand extension to tmux-pilot with log viewer and settings modal ([f41121b](https://github.com/r3b1s/tmux-pilot/commit/f41121b3a67501c73df6d352caad69debd7cbdab))
* replace supervisor/guard-monitor with lifecycle-controller and decision-table system ([257481f](https://github.com/r3b1s/tmux-pilot/commit/257481f46ea125f3cf0be3a1aacbca9b4500646d))
* **runtime:** relocate subagent lifecycle files into owned runtime storage ([03ad9c1](https://github.com/r3b1s/tmux-pilot/commit/03ad9c1c9dda7f6d0e7792106efeee6e2e921713))
* **sandbox:** add opt-in OS sandbox for subagent spawns ([6a7e453](https://github.com/r3b1s/tmux-pilot/commit/6a7e4537c872efb3ead53d665d2501280e83491f))
* **spawn:** compact spawn feedback ([c958e89](https://github.com/r3b1s/tmux-pilot/commit/c958e891d67b083219c826223e2a63099c90f4c1))
* **spawner:** extract confirmed prompt delivery with Enter-retry ([da6551e](https://github.com/r3b1s/tmux-pilot/commit/da6551e9bcafd9e2664fc758bf6eff651e7f8e45))
* **spawn:** reshape subagent tool to always-array batch spawn with dedicated resume_subagent ([563493d](https://github.com/r3b1s/tmux-pilot/commit/563493df2f5b6aa7e14ee18fb8d178f67fa54366))
* stable-ID window targeting and per-parent tmux socket isolation ([3c1d3e1](https://github.com/r3b1s/tmux-pilot/commit/3c1d3e18311ce5287f4779beb601f8fb75e35e85))
* subagent output diet — trim model channel, compact UI render, terse nudges, adaptive batch window ([9f3973a](https://github.com/r3b1s/tmux-pilot/commit/9f3973a41182cb0eaab987ebc543409703fe3e35))
* supervisor & reconciliation framework with durable process management ([7068bdc](https://github.com/r3b1s/tmux-pilot/commit/7068bdce1ad99085330bb704eab04b34a9c42406))
* **webui:** class-fantasy design system ([18b5b45](https://github.com/r3b1s/tmux-pilot/commit/18b5b45a639200d173692d07f9ce6baa00cb7e10))
* **webui:** expand role-pack themes with packaged art ([357804c](https://github.com/r3b1s/tmux-pilot/commit/357804c48082e55a810241a99c55e203c22f5219))
* **webui:** refine responsive configuration console ([836006a](https://github.com/r3b1s/tmux-pilot/commit/836006a70ae86323ddae0318838dedd4e8ffb05b))
* **webui:** webui polish, role cards carousel, and theme system ([49c2c6f](https://github.com/r3b1s/tmux-pilot/commit/49c2c6f8f3f8052e92b0244ddbe2793e6745045d))
* **widget:** color subagent frames by terminal state ([0c67233](https://github.com/r3b1s/tmux-pilot/commit/0c67233c693a9af1e70f381758682f5f6422524f))
* **widget:** configurable party-frame width band ([5285af8](https://github.com/r3b1s/tmux-pilot/commit/5285af8746b64b0b231bd0461e1df6ad8a3ed994))
* **widget:** frame-fixes — spawn floor, alignment, neutral track, cmd visibility ([e7bca3e](https://github.com/r3b1s/tmux-pilot/commit/e7bca3e42bf2983b6ec96d04b89f8a83e4fadc1b))
* **widget:** session-scoped linger + D12 visual v2 (raid squares, bar lanes) ([223ba55](https://github.com/r3b1s/tmux-pilot/commit/223ba55ea11be173ef8a78f83701a784124784a3))
* **widget:** theme-aware chrome, style config, and session-scoped ownership ([9bec0dc](https://github.com/r3b1s/tmux-pilot/commit/9bec0dc29ddc2e1eb9a9f4099d885338ae6c64e7))
* **widget:** WoW-style party/raid unit frames for subagents ([50b7183](https://github.com/r3b1s/tmux-pilot/commit/50b718378a7f729629c39132133cbe832598c86a))
* worktree config gating, ENOENT-safe session parse, configurable poll interval ([b4f65d7](https://github.com/r3b1s/tmux-pilot/commit/b4f65d7863d6a371caed86f807c19424ee4595a4))


### Bug Fixes

* add timeout to waitForSessionFile and fix stale detection on parse errors ([fca55eb](https://github.com/r3b1s/tmux-pilot/commit/fca55eb75b93f8685f946b76588f6b5286b0f044))
* **adv-rev-1:** P0 critical fixes - Number(0) falsy bug, null handling, empty-string harness, migration warning ([43ca39a](https://github.com/r3b1s/tmux-pilot/commit/43ca39a7c4c9c7edf203870fdad7b3f5fbf72aa6))
* **adv-rev-1:** P1+P2 fixes — retry, types, cleanup, docs, tests ([8f1888b](https://github.com/r3b1s/tmux-pilot/commit/8f1888bb1c18da3c81d289e08068e7f5a585a220))
* **claude-code:** ignore routing provider (Anthropic-only) ([b38596b](https://github.com/r3b1s/tmux-pilot/commit/b38596b69d29ee9cd6f96a6c3ae99da4e3de1bc4))
* **claude-code:** seed trust into ~/.claude.json and pin launch cwd ([cf9787c](https://github.com/r3b1s/tmux-pilot/commit/cf9787c1f6bf82986a3303e16913f49d7147cc25))
* **cmd-harness:** register cmd completion hook globally in ~/.commandcode ([5e94736](https://github.com/r3b1s/tmux-pilot/commit/5e947363b9a00618bb80737f1352a33447ae43b8))
* **cmd:** port /context token estimator for health bar ([62c7e9d](https://github.com/r3b1s/tmux-pilot/commit/62c7e9dcf1e8035252ef72cf3badc6c380f80dc0))
* **cmd:** prefer SessionStart transcript_path for session files ([bb1b467](https://github.com/r3b1s/tmux-pilot/commit/bb1b4675bc1ee9794a743e9956ad87c40d4d5023))
* **codex:** stabilize composer readiness and recover discarded pastes ([678e3b2](https://github.com/r3b1s/tmux-pilot/commit/678e3b20f2392a2b305221d644c1f857b0aaf9d7))
* **lifecycle-controller:** invert turn-threshold comparison to prevent false-positive steer at spawn ([f5f9958](https://github.com/r3b1s/tmux-pilot/commit/f5f9958eab19ab485aeb773a7c6e98e15a665ca7))
* match pi v0.80.x default config path (`~/.pi/agent` not `~/.pi`) ([84bfab9](https://github.com/r3b1s/tmux-pilot/commit/84bfab94872c4e13bab4404067096c35d8c15fe5))
* normalize cmd session file slug to lowercase ([f6842db](https://github.com/r3b1s/tmux-pilot/commit/f6842dbdfb213249093802459aa78353094d25d8))
* **nudge:** batch multiple subagent completions + use steer delivery ([e709a25](https://github.com/r3b1s/tmux-pilot/commit/e709a257fd53657ef34852cb9bc67fbc628c719e))
* remove NotificationManager sendMessage that injected fake user messages ([45047a6](https://github.com/r3b1s/tmux-pilot/commit/45047a629148f54e6bc24114b09eac8690dea361))
* **routing:** accept raw new-worktree YAML key on role and global config ([f8c85e7](https://github.com/r3b1s/tmux-pilot/commit/f8c85e736e7ff041e04eb1998676137ce5ccebf0))
* **sandbox:** pre-seed pi extensions into synth config dir ([97f73cf](https://github.com/r3b1s/tmux-pilot/commit/97f73cf80250c99e05c84bfed88e38a592f2d90a))
* **spawner:** apply config-dir redirect across full launch pipeline ([7faf339](https://github.com/r3b1s/tmux-pilot/commit/7faf3392088ff0351b62218ee73d1dba91396dd0))
* **startup-reconciler:** resolve sessionDir from record, enable teardown ([d7aef14](https://github.com/r3b1s/tmux-pilot/commit/d7aef14b32d41abea45988383fae9682b4a75919))
* **tools:** unbox spawn/get-result chat lines and restore log capture ([dcd3d3c](https://github.com/r3b1s/tmux-pilot/commit/dcd3d3c5095a8591db222a7d519df405cd7cdb91))
* unify spawn paths into single fire-and-forget with provider passthrough ([92b63a4](https://github.com/r3b1s/tmux-pilot/commit/92b63a4f0139baa12196545940e7f9038b74d0b1))
* use window names instead of numeric indices for tmux targeting ([6b84a41](https://github.com/r3b1s/tmux-pilot/commit/6b84a415ebfe4ccb14dad8faf426c8b36205bae1))


### Documentation

* add adversarial review report [#1](https://github.com/r3b1s/tmux-pilot/issues/1) ([3fb8aea](https://github.com/r3b1s/tmux-pilot/commit/3fb8aea4484d54bc71f977ceb5a72945416a4759))
* add ARCHITECTURE.md, update AGENTS.md, add session retros and harness notes ([dad3073](https://github.com/r3b1s/tmux-pilot/commit/dad30736ee61605be0edf1c5e5daf2b122a05603))
* add openspec specs for guard system capabilities ([4e8db4e](https://github.com/r3b1s/tmux-pilot/commit/4e8db4e1beace55dbb7ddd8b698c954abd41ce98))
* add retro and lessons from subagent-result-delivery-fix session ([1f93b14](https://github.com/r3b1s/tmux-pilot/commit/1f93b14b6cdd210bc186dcb1a4fde56f1da65bf9))
* add retro and lessons from tmux-pilot-rebrand-and-ui session ([fa1dd97](https://github.com/r3b1s/tmux-pilot/commit/fa1dd97ab53b93a45a27f315f7bb469afba70277))
* add ROADMAP.md tracking model fallback in GuardMonitor ([87256c2](https://github.com/r3b1s/tmux-pilot/commit/87256c24c633a9e42c0bee9a4db48b5a118b2c5f))
* add strategic direction ADRs, handoff notes, and tmux research ([8e3c678](https://github.com/r3b1s/tmux-pilot/commit/8e3c678e12e2a6d451541cb5cdd4adedc70bde26))
* add unreleased changelog entries for Phase 3 supervisor & reconciliation ([d7b3386](https://github.com/r3b1s/tmux-pilot/commit/d7b33861b0875921eba249b99acabfca06f18396))
* add worktree isolation documentation to README ([22cc75e](https://github.com/r3b1s/tmux-pilot/commit/22cc75e0f153749569fc669ba8b9d0b774c26318))
* align specs and docs with linger and harness-global-defaults ([c86c949](https://github.com/r3b1s/tmux-pilot/commit/c86c949b8bedd3ce7b26c2d496e7bdc5083856a8))
* align specs with full-pipeline config-dir redirect ([1ff7f86](https://github.com/r3b1s/tmux-pilot/commit/1ff7f867f4bc86f1695435dc2db4d954132cf240))
* Archive openspec change ([27fb88a](https://github.com/r3b1s/tmux-pilot/commit/27fb88a6a06e1731a24cad94b2f4231957ffaaed))
* **changelog:** note claude-code harness and AGPL relicense ([4b513b9](https://github.com/r3b1s/tmux-pilot/commit/4b513b9eb987f8e0f55a4eff0378bcbd4ec283aa))
* **changelog:** populate unreleased section with recent changes ([a6e10f2](https://github.com/r3b1s/tmux-pilot/commit/a6e10f2f6541dbca49ea2cb0a6e1b0bfc6bac8ea))
* document guard system, GuardMonitor, session archive, and config schema ([7d92da2](https://github.com/r3b1s/tmux-pilot/commit/7d92da22935ab67a871fe66d59c727f2f7bf8f49))
* **openspec:** add claude-code harness research proposal ([6379a27](https://github.com/r3b1s/tmux-pilot/commit/6379a275f01bd17ae268bc07d5903a661cc36ceb))
* **openspec:** add subagent-output-diet change proposal ([400b6d5](https://github.com/r3b1s/tmux-pilot/commit/400b6d5468faaf707fe9c10a1bfa6a894dab1866))
* **openspec:** sync and archive self-describing-harness-identity ([ac732d6](https://github.com/r3b1s/tmux-pilot/commit/ac732d67f8481e2a2ac51f2547d6b30cc404ba96))
* **readme:** broad refresh to match current architecture ([eff463a](https://github.com/r3b1s/tmux-pilot/commit/eff463a7d3784890a13d4af8d0ebe65565593905))
* **readme:** update tmux session naming scheme to pilot-\&lt;parent\&gt; ([63e2bfc](https://github.com/r3b1s/tmux-pilot/commit/63e2bfc5657590b1e253e778394dae9a5e294815))
* reconcile living docs with current features ([379c314](https://github.com/r3b1s/tmux-pilot/commit/379c31440526bbf33df7c8584f6c3f811c8dea03))
* repair references to pruned working-notes ([4ab4eec](https://github.com/r3b1s/tmux-pilot/commit/4ab4eecde8ec2598ecaaa767a996326234c007f3))
* **research:** add OS sandbox research corpus ([d79e14f](https://github.com/r3b1s/tmux-pilot/commit/d79e14fa818a4771725b30f25b055042867400d9))
* **specs:** sync delta specs to main specs + archive subagent-routing-enhancements change ([550358e](https://github.com/r3b1s/tmux-pilot/commit/550358e089c73bc5b721139a1a4f6c6d463495a6))
* sync openspec delta specs and archive completed change ([45aaca3](https://github.com/r3b1s/tmux-pilot/commit/45aaca37b0554ee5231c03f7d6521e5fbc810191))
* update pi-agent harness notes with QA findings ([aa5ae32](https://github.com/r3b1s/tmux-pilot/commit/aa5ae32c1a578e8a29f83ec9d10cc11e89f6f574))
* Update ROADMAP.md ([1266762](https://github.com/r3b1s/tmux-pilot/commit/1266762689d5cfee5a99b7b1b623d0547ed2e2a2))
* update subagent-observability spec with TUI-only notification requirement ([17bede1](https://github.com/r3b1s/tmux-pilot/commit/17bede115afe4528d07e39fabc9eeb80d4f2731b))


### Miscellaneous Chores

* add incomplete tasks tracking document ([12918d4](https://github.com/r3b1s/tmux-pilot/commit/12918d476df13bbfdf8b5cd405dc7eec2c53ac39))
* add retro and lessons from worktree-isolation change ([4563760](https://github.com/r3b1s/tmux-pilot/commit/456376093b32b5f253a122d987be608b877c4a0e))
* add tmux-pilot-role-authoring to skills lock ([f98f0e3](https://github.com/r3b1s/tmux-pilot/commit/f98f0e3b64f06bef0e3e0d7160ed2f43cc0e8259))
* archive completed subagent-result-delivery-fix change ([f7ef616](https://github.com/r3b1s/tmux-pilot/commit/f7ef61691fdf5fc4ce3f9bd580ec81e5fc64e639))
* **docs:** add handoff document with architecture, test coverage, and roadmap ([730d47f](https://github.com/r3b1s/tmux-pilot/commit/730d47f218c4c57cf792346fdae57bdece430b49))
* **docs:** Clean up temp markdown files ([e19682b](https://github.com/r3b1s/tmux-pilot/commit/e19682bf544758659908a2d801994e46f3b731c9))
* **docs:** expand handoff with full research context from ecosystem analysis ([9e4d29f](https://github.com/r3b1s/tmux-pilot/commit/9e4d29f948e5e6be16156d20464b4e1c0e6434ef))
* gitignore worktrees, skills-CLI cache, and spike scratch state ([1355104](https://github.com/r3b1s/tmux-pilot/commit/13551047acf93968f03122f3e6fb81cf37c46649))
* **init:** standalone PTS extracted from pi-things monorepo ([46276bc](https://github.com/r3b1s/tmux-pilot/commit/46276bcf5d4cf175ea82d0721d4fd6469f781f37))
* mark adversarial review complete with adv-rev-1.md findings ([c215f11](https://github.com/r3b1s/tmux-pilot/commit/c215f114e4e8e3649a2d214dd3d8e60ed8387db5))
* **openspec:** add documentation-hygiene spec and archive change ([3ef20cc](https://github.com/r3b1s/tmux-pilot/commit/3ef20ccbc5beed445a8b16234fe3d19f878259fb))
* **openspec:** archive completed widget changes and sync specs ([c901a79](https://github.com/r3b1s/tmux-pilot/commit/c901a79449f0e8f54d6397c8f209ba7903b929cf))
* **openspec:** archive subagent-os-sandbox change ([66e1c35](https://github.com/r3b1s/tmux-pilot/commit/66e1c35bb5b410350a693d6e56127b61a9bf8d56))
* **openspec:** archive subagent-output-diet and sync its specs ([34258cd](https://github.com/r3b1s/tmux-pilot/commit/34258cd2fb6b05eae10daa77566f64dbbc6351a5))
* **openspec:** archive widget-terminal-state-colors and sync its specs ([81143b0](https://github.com/r3b1s/tmux-pilot/commit/81143b06aca636ae26ae2f1ee627423ec773ce33))
* **openspec:** sync delta specs and archive completed changes ([7cfc182](https://github.com/r3b1s/tmux-pilot/commit/7cfc18202aa1b71f7fafba98334f1522b74bb32d))
* purge committed transient working-notes ([b6dc9aa](https://github.com/r3b1s/tmux-pilot/commit/b6dc9aa615b8c9efb48250f24a5a596bdd61ee1c))
* relicense from AGPL-3.0-or-later to MIT ([ed90a0f](https://github.com/r3b1s/tmux-pilot/commit/ed90a0f84ff5b81dd49d3459b9d34654badde54a))
* relicense under AGPL-3.0 ([7557d52](https://github.com/r3b1s/tmux-pilot/commit/7557d527179f900dcbfb37c3a74229600f6874a8))

## [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, `thinking` → `model_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](https://github.com/r3b1s/pi-things/compare/pi-tmux-sessionizer-v0.1.0...pi-tmux-sessionizer-v0.2.0) (2026-06-11)


### Features

* **pi-tmux-sessionizer:** create package for tmux-based subagent spawning and monitoring ([e22a81f](https://github.com/r3b1s/pi-things/commit/e22a81fe699dfb74aa6bf372e7f1a6053a803f60))


### Bug Fixes

* **pi-tmux-sessionizer:** fix eslint and biome errors caught by CI ([271ff19](https://github.com/r3b1s/pi-things/commit/271ff19cc53f0c7c1a4b261af2a127038f5495e4))
