# Changelog

## [0.2.6] - 2026-11-15

### Added

- Each child now retains its newest 100 messages and the newest 50 completed tool
  activities that no retained message backs. Retention is by count, not bytes, so
  an unusually large message is kept rather than split.
- `read` and the `/agents` viewer report how many earlier messages were discarded.
- `read` accepts `limit` (2,000–16,000, default 8,000) and `offset`, so a parent can
  page back through the rendered transcript instead of asking the child to repeat
  itself. The window marker prints the body length and the next offset; windows
  reach the body start without gaps, and an offset at the end reports it explicitly.

### Changed

- A tool-result message is now the single owner of its output; the duplicate copy
  on the tool activity is released, so evicting a message really frees its text.
- Eviction is cut so that no surface is left inside a control string: the cut
  grows through the string instead of exposing the text it swallowed. A string
  that never closes keeps its payload unreadable rather than revealing it.
- Tool activity text is sanitized per activity, so one tool's escape sequence
  cannot hide another's output and the activity cap holds for coloured output.
- `read` now renders every retained message rather than the last eight. Each row
  is still clipped to 500 code points, but the current result stays unclipped at
  the end of the body so it can never be reduced to a preview.
- `subagent read` now keeps the latest ~8,000 characters instead of the first
  ones, preserving the conclusion of long answers and interrupted runs.
- Read output keeps the header and diagnostic pinned, caps oversized errors, and
  marks active reads as live previews.
- Read output no longer points the model at the human-only `/agents` TUI command.

### Fixed

- A window cut no longer steps back over an unpaired surrogate half, which could
  skip a character between two pages or split a valid pair across them.

## [0.2.5] - 2026-11-15

### Changed

- Treat blank optional `spawn` arguments as omitted, so they inherit preset or
  parent defaults instead of failing validation.
- Describe `message` as the task prompt for `spawn` and the follow-up text for
  `send`; the missing-message error now says where the prompt belongs.
- Include a short sanitized diagnostic in failed completion notices.
- Report missing child ids as “unknown or removed” without adding tombstones.
- Show the spawn model, thinking level and tool allowlist in the `/agents`
  detail view; list rows stay compact and `read()` output is unchanged.

## [0.2.4] - 2026-11-12

### Changed

- Added spawn-result and tool-guideline wording that tells the model to end its
  turn instead of waiting for children with shell sleep or polling; completion
  notices start a new turn.
- Re-verified compatibility with Pi 1.5.2 on Node 24.20.0: local and disposable
  lease suites pass, with no Pi-compatibility code changes required.
- Documented project-preset trust decisions and Pi 1.5.1+ idle cache warming.
- Consolidated current design into `docs/DESIGN.md`; removed the retired
  implementation plan, handoff and pre-implementation research snapshots.
- Added this changelog to the package payload for Pi's Extension Updates notice.

## [0.2.3] - 2026-11-11

### Changed

- Collapsed the child lifecycle to `active` and `stopped`, with `send` resuming a
  live stopped child.
- Added an eight-entry admission cap and a `remove` action that releases the
  process, transcript and slot.

## [0.2.2] - 2026-11-11

### Changed

- Added preset names to `list`, ten-minute running reminders, and timestamped
  child ids that survive restarts.

## [0.2.1] - 2026-11-10

### Changed

- Coalesced completion notifications at the next message boundary instead of one
  notice per idle transition.

## [0.2.0] - 2026-11-10

### Changed

- Added user-defined Markdown launch presets with `model`, `thinking`, `tools`
  and preset-only `system_append` defaults.
