v4.9.0
v4.9.0: 53 commits of doing less
Added 4
- Add /ponytail default <mode> command to persist the default mode across restarts
- Add Qoder hooks support (UserPromptSubmit + PreToolUse)
- Add opt-in agent-type scoping for SubagentStart injection via PONYTAIL_SUBAGENT_MATCHER
- Add pi status bar controls to hide the indicator while keeping ponytail active
Changed 2
- Make bare /ponytail command report the active level instead of resetting to default
- Make the ultra statusline badge stand out
Fixed 14
- Fix copilot-plugin test to check all 6 command files
- Fix exec lifecycle hook commands
- Handle stdin error in ponytail-mode-tracker to avoid uncaught crash
- Prevent Windows session freeze from stdin EOF deadlock
- Strip UTF-8 BOM before parsing config.json
- Don't destroy combined statuslines on uninstall
- Don't crash uninstall on malformed settings.json
- Guard pi before_agent_start against bad event and missing systemPrompt
- Ship scripts/uninstall.js in the npm package
- Handle CRLF in loc.js fence regex
- Fix hermes test hardcoding python3 which fails on Windows
- Fix writeDefaultMode to merge config instead of overwriting
- Make statusline setup nudge honor CLAUDE_CONFIG_DIR
- Ignore invalid opencode mode arguments
Five weeks of merged work in one drop. The headline: /ponytail default <mode> makes your chosen mode survive restarts, and a bare /ponytail now reports the active level instead of resetting it. Also new: Qoder support, subagent scoping via PONYTAIL_SUBAGENT_MATCHER, pi status bar controls, and about 30 fixes across Windows, Codex, OpenCode, and the uninstaller.
What's Changed
- fix: copilot-plugin test checks all 6 command files by @nanaubusiness in https://github.com/DietrichGebert/ponytail/pull/393
- docs(benchmarks): add Independent benchmarks section by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/460
- fix: exec lifecycle hook commands by @sanmaxdev in https://github.com/DietrichGebert/ponytail/pull/474
- fix: handle stdin error in ponytail-mode-tracker to avoid uncaught crash by @Megashubham in https://github.com/DietrichGebert/ponytail/pull/227
- fix: prevent Windows session freeze from stdin EOF deadlock (#443) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/477
- fix: strip UTF-8 BOM before parsing config.json (#375) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/478
- fix: don't destroy combined statuslines on uninstall (#374) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/479
- docs(help): list all 6 skills and fix OpenCode command count (#437, #438) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/480
- fix: don't crash uninstall on malformed settings.json (#434) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/481
- fix: guard pi before_agent_start against bad event and missing systemPrompt (#439, #440) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/482
- fix: ship scripts/uninstall.js in the npm package by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/538
- docs(help): add /ponytail-gain to the OpenCode help card by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/539
- fix: handle CRLF in loc.js fence regex and remove dead codeOf (#339) by @dhedhialy in https://github.com/DietrichGebert/ponytail/pull/518
- fix: hermes test hardcoding python3 (fails on Windows) (#498) by @dhedhialy in https://github.com/DietrichGebert/ponytail/pull/513
- fix: writeDefaultMode merges config instead of overwriting (#490) by @dhedhialy in https://github.com/DietrichGebert/ponytail/pull/514
- fix: statusline setup nudge honors CLAUDE_CONFIG_DIR by @Lakshya77089 in https://github.com/DietrichGebert/ponytail/pull/338
- feat: add /ponytail default to persist the default (#329) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/541
- feat: hide the pi status bar indicator while keeping ponytail active (#324) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/544
- Update Spanish README with improved wording by @lorensation in https://github.com/DietrichGebert/ponytail/pull/560
- docs: clarify that GitHub Copilot Chat (VS Code/JetBrains) is supported (#497) by @yashrao2607 in https://github.com/DietrichGebert/ponytail/pull/526
- docs: reword Copilot Chat note without em dash by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/562
- docs: add Zed to the agent portability table by @Lakshya77089 in https://github.com/DietrichGebert/ponytail/pull/190
- docs: align benchmark prerequisites with promptfoo's Node requirement by @hamza-ali-shahjahan in https://github.com/DietrichGebert/ponytail/pull/205
- ux: make the ultra statusline badge stand out by @Lakshya77089 in https://github.com/DietrichGebert/ponytail/pull/192
- check-rule-copies: pin the reuse rung as an invariant by @Rafaelpta in https://github.com/DietrichGebert/ponytail/pull/281
- test: run ponytail-mcp suite under root npm test (wire MCP tests into CI) by @KC-Explore in https://github.com/DietrichGebert/ponytail/pull/235
- fix: ignore invalid opencode mode arguments by @sanmaxdev in https://github.com/DietrichGebert/ponytail/pull/302
- fix(benchmarks): make agentic fixture path portable via PONYTAIL_TMPL by @hamza-ali-shahjahan in https://github.com/DietrichGebert/ponytail/pull/206
- fix(pi-extension): list ponytail modes by @HannesOberreiter in https://github.com/DietrichGebert/ponytail/pull/237
- Fix test coverage and plugin metadata by @yjk0510 in https://github.com/DietrichGebert/ponytail/pull/503
- feat: report active level on bare /ponytail instead of resetting to default by @Jay-1409 in https://github.com/DietrichGebert/ponytail/pull/99
- fix(opencode): stop exporting parseCommandFile from plugin module by @ayushere in https://github.com/DietrichGebert/ponytail/pull/301
- fix: preserve combined statusLine on uninstall by @ousamabenyounes in https://github.com/DietrichGebert/ponytail/pull/550
- docs: update Claude Code Desktop install steps to match the current UI (#342) by @yashrao2607 in https://github.com/DietrichGebert/ponytail/pull/525
- pi-extension: make startup 'Ponytail loaded' toast opt-out via quietStartup by @blissini in https://github.com/DietrichGebert/ponytail/pull/308
- docs: add JetBrains Junie, Amp, and Jules support (native AGENTS.md readers) by @hamza-ali-shahjahan in https://github.com/DietrichGebert/ponytail/pull/326
- feat: add Qoder hooks support (UserPromptSubmit + PreToolUse) by @shixiaoding in https://github.com/DietrichGebert/ponytail/pull/529
- feat(hooks): opt-in agent-type scoping for SubagentStart injection (#… by @krishrathi1 in https://github.com/DietrichGebert/ponytail/pull/522
- fix(pi-extension): guard theme access with try-catch for pi-web compatibility by @huantian233 in https://github.com/DietrichGebert/ponytail/pull/336
- Revise Ponytail plugin installation steps by @Minibrams in https://github.com/DietrichGebert/ponytail/pull/545
- fix: catch fs errors when writing default mode in pi-extension by @guyoron1 in https://github.com/DietrichGebert/ponytail/pull/559
- fix: guard against non-string input.arguments in OpenCode plugin by @guyoron1 in https://github.com/DietrichGebert/ponytail/pull/557
- fix: merge system entries in OpenCode plugin for Qwen compat (#296) by @guyoron1 in https://github.com/DietrichGebert/ponytail/pull/536
- fix: Codex CLI SessionStart additionalContext at top level (#505) by @dhedhialy in https://github.com/DietrichGebert/ponytail/pull/508
- fix: read MCP server version from package.json by @nanaubusiness in https://github.com/DietrichGebert/ponytail/pull/354
- fix: drop bash-only
execfrom hooks so they run under PowerShell (#527, #569) by @Mrsandeep27 in https://github.com/DietrichGebert/ponytail/pull/572 - Fix Codex hook output schema by @saime428 in https://github.com/DietrichGebert/ponytail/pull/574
- fix: reject review as a default mode (pi-extension + config) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/576
- fix: narrow the
ponytail:marker to real corner-cuts, keep the prefix (#120) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/577 - fix: stop filterSkillBodyForMode from swallowing rule bullets that st… by @Dhruvy0804 in https://github.com/DietrichGebert/ponytail/pull/571
- fix(benchmarks): kill timed-out agent cells cross-platform by @codysj in https://github.com/DietrichGebert/ponytail/pull/225
- Emit statusline setup nudge at most once per user by @gglucass in https://github.com/DietrichGebert/ponytail/pull/483
- docs: FAQ entry on using caveman with ponytail by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/599
- chore: release v4.9.0 by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/703
New Contributors
- @nanaubusiness made their first contribution in https://github.com/DietrichGebert/ponytail/pull/393
- @sanmaxdev made their first contribution in https://github.com/DietrichGebert/ponytail/pull/474
- @Megashubham made their first contribution in https://github.com/DietrichGebert/ponytail/pull/227
- @dhedhialy made their first contribution in https://github.com/DietrichGebert/ponytail/pull/518
- @lorensation made their first contribution in https://github.com/DietrichGebert/ponytail/pull/560
- @yashrao2607 made their first contribution in https://github.com/DietrichGebert/ponytail/pull/526
- @Rafaelpta made their first contribution in https://github.com/DietrichGebert/ponytail/pull/281
- @KC-Explore made their first contribution in https://github.com/DietrichGebert/ponytail/pull/235
- @yjk0510 made their first contribution in https://github.com/DietrichGebert/ponytail/pull/503
- @Jay-1409 made their first contribution in https://github.com/DietrichGebert/ponytail/pull/99
- @ayushere made their first contribution in https://github.com/DietrichGebert/ponytail/pull/301
- @blissini made their first contribution in https://github.com/DietrichGebert/ponytail/pull/308
- @shixiaoding made their first contribution in https://github.com/DietrichGebert/ponytail/pull/529
- @krishrathi1 made their first contribution in https://github.com/DietrichGebert/ponytail/pull/522
- @huantian233 made their first contribution in https://github.com/DietrichGebert/ponytail/pull/336
- @Minibrams made their first contribution in https://github.com/DietrichGebert/ponytail/pull/545
- @guyoron1 made their first contribution in https://github.com/DietrichGebert/ponytail/pull/559
- @Mrsandeep27 made their first contribution in https://github.com/DietrichGebert/ponytail/pull/572
- @saime428 made their first contribution in https://github.com/DietrichGebert/ponytail/pull/574
- @Dhruvy0804 made their first contribution in https://github.com/DietrichGebert/ponytail/pull/571
- @codysj made their first contribution in https://github.com/DietrichGebert/ponytail/pull/225
- @gglucass made their first contribution in https://github.com/DietrichGebert/ponytail/pull/483
Full Changelog: https://github.com/DietrichGebert/ponytail/compare/v4.8.4...v4.9.0