v2.12.0 (2026-02-27)
Added
- Windows PowerShell adapters — native
.ps1adapters for all 11 IDEs (codex, gemini, copilot, windsurf, kiro, openclaw, amp, antigravity, kimi, opencode, kilo). No Git Bash or WSL required. Filesystem watchers use .NETFileSystemWatcher. 198 Pester tests added. (#285)
Fixed
- OpenCode subagent noise — filter subagent sessions from sound/notification events. Subagent sessions (spawned by Task tool with
parentID) no longer trigger sounds forsession.idle,session.error, andsession.statusevents. (#290, fixes #289)
v2.11.0 (2026-02-26)
Added
- Kimi Code adapter — filesystem watcher for Kimi Code CLI (MoonshotAI). Watches
~/.kimi/sessions/for session events and translates them to CESP format. Uses the samefswatch/inotifywaitpattern as the Amp and Antigravity adapters. Includes BATS tests.
v2.10.1 (2026-02-25)
Fixed
- Fix Ghostty terminal detection when running inside tmux:
_mac_terminal_bundle_id()now falls back to env vars (GHOSTTY_RESOURCES_DIR,ITERM_SESSION_ID,WARP_IS_LOCAL_SHELL_SESSION) whenTERM_PROGRAMis overwritten by tmux/screen (#269) - Fix case-sensitive Ghostty process name in
terminal_is_focused(): add lowercaseghosttymatch alongsideGhostty(#269)
v2.10.0 (2026-02-23)
Added
- Amp adapter — filesystem watcher for Amp (Sourcegraph). Watches
~/.local/share/amp/threads/for thread JSON file changes. DetectsSessionStart(new thread) andStop(agent finished turn, waiting for input) by inspecting the last message in the thread JSON. Uses the samefswatch/inotifywait+ idle timer pattern as the Antigravity adapter, with an additionalthread_is_waiting()check to confirm the agent isn’t mid-tool-execution. Includes 17 BATS tests.
v2.9.0 (2026-02-21)
Added
- MSYS2 / Git Bash platform support —
install.sh,peon.sh, andscripts/notify.shnow detectMSYS_NT-*/MINGW*uname strings as"msys2"platform. Audio plays via native players (ffplay,mpv,play) with PowerShellwin-play.ps1fallback. Desktop notifications use Windows toast (standard) or Windows Forms overlay, withcygpath -wfor path conversion.
v2.8.0 (2026-02-20)
Fixed
- Cursor on Windows: peon.ps1 now maps Cursor’s camelCase event names (
sessionStart,stop, etc.) to PascalCase, fixing no-sounds-on-new-chat when using Third-party skills - Cursor on Windows:
install.ps1anduninstall.ps1now handle Cursor’s flat-arrayhooks.jsonformat (matchinginstall.shfix from v2.7.x) - peon.ps1 pack rotation: accept
session_overridealias in addition toagentskill
Added
- Click-to-focus for IDE embedded terminals (Cursor, VS Code, Windsurf, Zed) — when
TERM_PROGRAMdoesn’t map to a standalone terminal, falls back to deriving the IDE’s bundle ID from its PID vialsappinfo(macOS built-in) - PID-based
NSRunningApplicationactivation inmac-overlay.jsas belt-and-suspenders fallback when bundle ID lookup fails
v2.7.0 (2026-02-19)
Added
path_rulesconfig array: glob-pattern-based CWD-to-pack assignment (layer 3 in override hierarchy)- Click-to-focus terminal on macOS notification click — overlay style detects terminal via
TERM_PROGRAM→ bundle ID mapping (Ghostty, Warp, iTerm2, Terminal.app); standard style usesterminal-notifierwith-activate - IDE PID detection (
_mac_ide_pid()) for Cursor/Windsurf/Zed/VS Code ancestor click-to-focus
Changed
active_pack→default_pack(backward-compat fallback +peon updatemigration)agentskillrotation mode →session_override(agentskillaccepted as alias)- Override hierarchy (high→low):
session_override> local project config >path_rules>pack_rotation>default_pack
v2.6.0 (2026-02-19)
Added
suppress_subagent_completeconfig option (default:false) — when enabled, suppressestask.completesounds and notifications for sub-agent sessions spawned via Claude Code’s Task tool, so only the parent session’s completion sound fires
v2.5.0 (2026-02-18)
Added
cwdfield inlast_activestate (.state.json) — records the working directory of each hook invocation, enabling peon-pet to display the project folder name in session dot tooltips
v2.4.1 (2026-02-18)
Fixed
- Pack rotation:
session_packsentries in dict format (after cleanup upgrade) were not recognized by thein pack_rotationcheck, causing a new random pack to be picked on every non-SessionStart event — same session could play sounds from different characters each turn SubagentStartnow exits silently after saving state — previously could playtask.acknowledgesound on the parent session- Task-spawned subagent sessions now inherit the parent session’s voice pack via
pending_subagent_packstate, ensuring a single conversation always uses one character
v2.4.0 (2026-02-18)
Added
- Project-local config override: place a
config.jsonat.claude/hooks/peon-ping/config.jsonin any project to override the global config for that project only
Fixed
hook-handle-use.sh: macOS BSD sed does not support\s/\S— replaced with POSIX[[:space:]]/[^[:space:]]classes (closes #212)- OpenCode plugin:
desktop_notifications: falsein config was ignored — AppleScript notifications now respect the setting (closes #207) - OpenCode plugin: Linux audio backend chain now matches
peon.shpriority order (pw-play→paload→aplay) with correct per-backend volume scaling
v2.3.0 (2026-02-18)
Added
peon volume [0.0-1.0]CLI command — get or set volume from the terminalpeon rotation [random|round-robin|agentskill]CLI command — get or set pack rotation mode from the terminal
Fixed
- macOS overlay (
mac-overlay.js) is now correctly copied during install — previously only.sh/.ps1/.swiftscripts were copied, so the visual overlay banner never appeared - Resume sessions (
source: "resume") preserve the active voice pack instead of picking a new random one
Changed
- Default pack set reduced to 5 curated WC/SC/Portal packs:
peon,peasant,sc_kerrigan,sc_battlecruiser,glados