Ponytail on Stimulants
Ponytail stops over-engineering. On Stimulants stops under-executing.
Same senior engineer. Now the ticket actually gets closed.
This is the completion-discipline plugin: smallest sound design, then finish the whole change. Packaged as ponytail-on-stimulants (do not confuse the product nickname on steroids with the package name). Soft fork of DietrichGebert/ponytail. MIT.
Unbounded persistence. Bounded scope. Finish what the outcome requires. Do not turn persistence into unrelated refactoring.
Install (30 seconds)
Pi
pi install git:github.com/phall1/ponytail-on-stimulants
Oh My Pi (OMP)
omp plugin marketplace add phall1/ponytail-on-stimulants
omp plugin install ponytail-on-stimulants@ponytail-on-stimulants
Restart the session so the shared Pi completion gate loads. OMP reads .omp-plugin/marketplace.json (Claude's .claude-plugin/marketplace.json is the fallback). The plugin's package.json omp.extensions points at the same pi-extension Pi uses.
Codex
codex plugin marketplace add phall1/ponytail-on-stimulants
codex plugin add ponytail-on-stimulants@ponytail-on-stimulants
Then open /hooks, review and trust SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PostToolUseFailure, and Stop, and start a new thread. Untrusted hooks never run.
OpenCode
{ "plugin": ["ponytail-on-stimulants"] }
From a checkout:
{ "plugin": ["./.opencode/plugins/ponytail-on-stimulants.mjs"] }
Claude Code
Send these as two separate prompts:
/plugin marketplace add phall1/ponytail-on-stimulants
/plugin install ponytail-on-stimulants@ponytail-on-stimulants
Trust the plugin hooks when prompted, then start a new session.
| After install | Command |
|---|---|
| Set mode | /ponytail-on-stimulants focused|full-send|feral|off |
| Persist default | /ponytail-on-stimulants default <mode> |
| Show current / default | /ponytail-on-stimulants status |
| Review / audit / debt / gain / help | /ponytail-on-stimulants-review and siblings |
Upstream Ponytail can stay installed. This fork uses different package, plugin, command, skill, hook, and state names.
What you get
- Understand the repository and affected flow.
- Choose the smallest sound architecture.
- Execute the whole requested and mechanically implied change.
- Verify in proportion to blast radius.
- Run an adversarial second pass before stopping.
| Mode | Behavior | Forced completion passes |
|---|---|---|
focused | Complete the requested path with normal proportional verification. | 0 |
full-send | Trace affected paths, do implied work, verify, explicit adversarial pass. Default. | 1 |
feral | Stronger caller/edge search and broader reasonable verification; scope stays bounded. | at most 2 |
off | Disable injected behavior in native adapters. | 0 |
Human input resets the counter. Extension/hook follow-ups do not. Hard caps and fail-open error handling prevent infinite agency.
Host contract (honest)
| Host | Always-on instructions | Commands / skills | Operational completion gate |
|---|---|---|---|
| Pi | Per-turn system prompt | Slash commands + skills | Full. agent_end queues a bounded follow-up before public settlement. |
| OMP | Same Pi extension | Same Pi commands + skills/ | Full. Marketplace install loads omp.extensions → the same pi-extension + completion-gate/. |
| Codex | SessionStart inject | /ponytail-on-stimulants* + skills | Stop hook. Trust hooks, then Stop decision: block plus reason becomes a continuation prompt. |
| OpenCode | System transform every turn | Slash commands + skills | Best-effort. Tracks tools; uses session.stopping when the host has it; otherwise session.idle + session.prompt. Not Pi's in-loop agent_end. |
| Claude Code | SessionStart inject | /ponytail-on-stimulants* + skills | Stop hook. Stop additionalContext continues the turn without a fake agent_settled event. |
Jev stays optional, disabled by default, and Pi/OMP-only (in-process). File-hook hosts do not call TypeSafe.
Experimental Jev judge
Jev is never the coding model. On feral's second stop attempt, Pi/OMP can send compact structured state to TypeSafe's System One API. Code calculates deterministic facts; Jev judges fuzzy completion questions; the coding agent reasons and executes.
export PONYTAIL_ON_STIMULANTS_JEV_ENABLED=1
export TYPESAFE_API_KEY=...
Optional settings:
PONYTAIL_ON_STIMULANTS_JEV_MODEL(defaultjev-latest)PONYTAIL_ON_STIMULANTS_JEV_TIMEOUT_MS(default2500)PONYTAIL_ON_STIMULANTS_JEV_RETRIES(0or1, default0)PONYTAIL_ON_STIMULANTS_JEV_ENDPOINT(default official endpoint)
Missing credentials, timeout, transport errors, service errors, and malformed responses fail open. Jev is advisory: its judgment is shown to the coding model and never starts or suppresses execution directly. When enabled, the adapter sends only request/response length and claim flags, changed paths, tool-result fingerprints, and aggregate evidence to TypeSafe. It does not send task text, assistant-response text, file contents, tool output, or raw command text. Changed paths and fingerprints can still be sensitive metadata, so leave Jev disabled when repository metadata must not leave the machine. Core behavior has no TypeSafe dependency.
Other installs
The portable Agent Plugins v1.0.0 core is plugin.json, skills/*/SKILL.md, mcp.json, and mcp/server.js. Native adapters below are extra.
GitHub Copilot CLI
copilot plugin marketplace add phall1/ponytail-on-stimulants
copilot plugin install ponytail-on-stimulants@ponytail-on-stimulants
Gemini CLI
gemini extensions install https://github.com/phall1/ponytail-on-stimulants
Hermes Agent
hermes plugins install phall1/ponytail-on-stimulants --enable
Cursor hooks
git clone https://github.com/phall1/ponytail-on-stimulants
node ponytail-on-stimulants/scripts/cursor-hooks.js install
Static-rule hosts can copy the uniquely named rule from .cursor/rules/, .windsurf/rules/, .clinerules/, .agents/rules/, .qoder/rules/, .kiro/steering/, or .github/copilot-instructions.md.
Uninstall and state cleanup
Use each host's normal plugin/package removal command, then run node scripts/uninstall.js from an npm install or checkout to remove fork-owned user state. For a project-scoped Cursor hook installation, run node scripts/cursor-hooks.js uninstall --project from that project. These scripts match only ponytail-on-stimulants files and leave upstream Ponytail and unrelated hooks untouched.
Configuration
Default-mode resolution:
PONYTAIL_ON_STIMULANTS_DEFAULT_MODE~/.config/ponytail-on-stimulants/config.json(or XDG/Windows equivalent)full-send
Pi and OMP persist mode per session. File-hook native adapters preserve a selected mode across resume/compact events but share one fork-specific mode file per host profile; a fresh startup resets it to the configured default. Concurrent conversations in those hosts can therefore observe the most recent mode switch. Completion-turn evidence is stored per session_id so caps stay isolated.
Development
node scripts/build-openclaw-skills.js
npm run check
npm test
npm run test:completion
python3 benchmarks/agentic/run.py --selftest
python3 benchmarks/agentic/complete.py --selftest-offline
npm test inherits one upstream pandas-backed correctness check; install pandas in your environment or an isolated virtualenv for the CI-equivalent run.
See UPSTREAM.md for ownership and sync policy, RELEASE.md for the release checklist, and benchmarks/completion/ for fork-specific completion evaluation.
Attribution
Ponytail on Stimulants is derived from Ponytail, created by Dietrich Gebert, and retains the upstream MIT license and copyright notice. Fork-specific branding and behavior are maintained by phall1.