Commit Graph
14 Commits
Author SHA1 Message Date
d5f4ffdd65 pi-extension: make startup notification opt-out via quietStartup (#308)
The status bar already shows the active ponytail mode at all times, but the
startup toast is also a deliberate trust-heartbeat for a behavior-modifying
extension (it confirms ponytail loaded, in which mode, and survives session
resume where the persisted mode may differ from the default). Default
behavior is preserved.

Users who prefer a clean startup can now silence it via:

  - config:  ~/.config/ponytail/config.json -> { "quietStartup": true }
  - env var: PONYTAIL_QUIET_STARTUP=1

Resolution order mirrors the existing defaultMode setting: env var > config
file > default (false). Added readQuietStartup export and a test covering
all three layers.

Co-authored-by: blissini <blissini@users.noreply.github.com>
Co-authored-by: Emeriko <dietrich.gebert@gmail.com>
2026-07-09 12:29:12 +02:00
Hannes 72274181e9 fix(pi-extension): list ponytail modes (#237) 2026-07-09 03:29:35 +02:00
1b2760d384 feat: hide the pi status bar indicator while keeping ponytail active (#324) (#544)
Add getHideStatus() to the shared config resolver: PONYTAIL_HIDE_STATUS (any
truthy value; 0/false/empty mean don't hide) or config.hideStatus === true, with
BOM-stripped config reads. The pi extension caches it at init and re-reads on
session_start, and syncStatus() returns early when set, so the indicator is
suppressed while the ruleset still injects every turn.

Reconciles #511 and #328: takes #328's caching and ruleset-stays-active test,
#511's BOM-safe config read, a stricter env check (0/false do not hide), and
drops #328's writeDefaultMode change which already landed in #514.

Closes #324

Co-authored-by: dhedhialy <91044156+dhedhialy@users.noreply.github.com>
Co-authored-by: sanmaxdev <46221775+sanmaxdev@users.noreply.github.com>
2026-07-07 04:06:37 +02:00
DietrichGebertandAroool 39bad58d40 fix: guard pi before_agent_start against bad event and missing systemPrompt (#482)
The before_agent_start handler read event.systemPrompt with no guard. A
null/undefined event crashed the agent with a TypeError (#439), and a truthy
event without a systemPrompt key stringified to the literal 'undefined',
prepending garbage to every system prompt (#440). Both are fixed with one
optional-chain guard that mirrors the event?. pattern the input handler already
uses: prepend the base prompt only when present, otherwise inject the ruleset
alone. Adds a regression test covering null/undefined event, missing
systemPrompt, and the normal base-prompt path.

Closes #439
Closes #440

Co-authored-by: Aroool <90670606+Aroool@users.noreply.github.com>
2026-07-07 01:23:31 +02:00
DietrichGebert c8b12b6384 fix(pi-extension): guard status bar render when ui has no theme (#279)
syncStatus guarded setStatus but used theme.fg unguarded, so a Pi host
exposing setStatus without a theme threw TypeError on session_start (and
agent_start/agent_end/setMode). Require both before rendering.

Add tests for the render path (previously untested) and the theme-absent
degradation. Follow-up to #275 / #84.
2026-06-24 01:10:04 +02:00
Tanmay Garg 947f2ff4de feat(pi-extension): add status bar indicator for ponytail mode (closes #84) (#275)
Add a syncStatus function to Pi extension to display the current
Ponytail mode in the status bar.

The indicator updates upon mode changes and hooks into the agent_start
and agent_end events to display a visual active/inactive state.
This provides the user with clear feedback on the currently active
Ponytail intensity level (lite, full, ultra) without running commands.
2026-06-24 00:51:23 +02:00
Tanmay Gargandgoogle-labs-jules[bot] 7b21459621 🧪 Add missing test for resolveSessionMode edge case (#268)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-06-24 00:25:17 +02:00
Ben YounesandClaude Opus 4.8 15749f7ffc feat(skills): add /ponytail-gain measured-impact scoreboard (#108)
A one-shot scoreboard showing ponytail's measured benchmark impact
(less code, less cost, more speed) as plain ASCII bars, then points to
/ponytail-debt and /ponytail-audit for this repo's real numbers.

Complements the existing skills rather than duplicating them: debt
harvests the ponytail: ledger, audit finds what's cuttable, gain shows
the measured why-it-matters. No per-repo savings number is ever printed
-- the unbuilt version was never written, so there is no real baseline
to subtract from in a live repo. The bars carry the published benchmark
medians (5 tasks, 3 models); per-repo figures come from debt's count.

Ships every adapter the other commands ship: Claude commands/*.toml,
OpenCode .opencode/command/*.md, OpenClaw skill (generated), Pi command
registration. Help card, command enumeration, portability table, and
README updated in the same change.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:24:37 +02:00
Manvi 55b7cb1925 fix: resolve test failure on Node.js < 20.11.0 by using new URL (#157) 2026-06-18 22:50:06 +02:00
Lakshya77089 53fd1e850e fix: only deactivate on a standalone "stop ponytail" / "normal mode" (#162)
The deactivation check matched the phrase anywhere in the prompt, so an
ordinary request like "add a normal mode toggle" silently turned ponytail
off for the rest of the session. Match the whole message instead (trimmed,
case-insensitive, trailing punctuation ignored) through a shared helper used
by both the Claude/Codex hook and the pi extension.

Fixes #161
2026-06-18 22:50:03 +02:00
DietrichGebertandClaude Opus 4.8 d9e1480c74 feat: add ponytail-debt skill (#40)
Closes the last gap from the field review: deferral creep. /ponytail-debt
greps the repo for `ponytail:` comment markers and prints a ledger
(file:line, what was simplified, ceiling, upgrade trigger), flagging any
marker with no trigger as the rot risk. One-shot, reports only.

Full parity like ponytail-audit: skill + commands/.toml + .opencode/.md + pi
registerCommand (+ test) + agent-portability + README.

Verified: tests 32/32 (pi command list updated), rule check green, the scan
finds the repo's real markers, and a live end-to-end run produced a correct
ledger (2 markers, 1 no-trigger, prose/examples excluded).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 02:32:45 +02:00
92efc4a648 feat: add ponytail-audit skill (#20)
* Add ponytail-audit skill

Whole-codebase audit for over-engineering. Scans a repository and produces a
ranked report of things to delete, simplify, or replace with stdlib/native
equivalents.

* Drop counting-by-number heuristics: remove Phase 5 (structural audit) and TODO-age heuristic per review

* feat: slim ponytail-audit and add cross-platform parity

Rewrite the ponytail-audit skill to ponytail-review's lean shape (35 lines,
was 111): same five tags, repo-wide scope, ranked output. Drop the
prescriptive phase walkthrough, sampling rules, report template, and the
license frontmatter that no other skill carries.

Add the adapters the skill was missing so it ships on every supported
platform the way ponytail-review does:
- commands/ponytail-audit.toml
- .opencode/command/ponytail-audit.md
- pi-extension registerCommand (+ test)
- agent-portability and README entries

Co-authored-by: Alexander Brandt <github@a13x.de>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Emeriko <dietrich.gebert@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 17:35:45 +02:00
Paul Ogier c15db8d3c9 fix: stop mode filter stripping rule bullets with a colon
filterSkillBodyForMode only filters lines whose label is a real mode (lite/full/ultra). Rule bullets like 'No unrequested abstractions:' and the 'ponytail:' comment convention were being stripped from injected instructions in every mode. Adds regression test.
2026-06-13 01:43:26 +02:00
Hannes 8c279cbfb3 feat: add pi extension (#1) 2026-06-12 17:55:24 +02:00