ponytail-on-stimulants0.5.1
Minimal architecture. Maximal execution. Completion discipline for coding agents.
Built for omp
The author tagged this package oh-my-pi.
Reports 0
No reports yet.
Readme
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 npm:ponytail-on-stimulants
pi update --extensions then keeps it on the latest release; pin with npm:ponytail-on-stimulants@<version> to opt out. git:github.com/phall1/ponytail-on-stimulants tracks main instead.
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, SubagentStart, UserPromptSubmit, PreToolUse, PostToolUse, and Stop, and start a new thread. Untrusted hooks never run. Codex uses hooks/codex-hooks.json; Claude retains its separate failure-event configuration.
If /hooks lists no Ponytail on Stimulants hooks, your Codex build skips plugin-bundled hooks (codex features list shows plugin_hooks false; Codex 0.162.1 does). Install the same hooks at user level from the plugin checkout, then trust them in /hooks:
node scripts/codex-hooks.js install # writes $CODEX_HOME/hooks.json; uninstall reverses it
Remove them again (uninstall) if your Codex starts running plugin hooks, or every hook runs twice.
Invoke skills as $ponytail-on-stimulants:ponytail-on-stimulants or $ponytail-on-stimulants:ponytail-on-stimulants-review. Append a mode to the primary skill to switch it.
OpenCode
{ "plugins": ["ponytail-on-stimulants"] }
From a checkout:
{ "plugins": ["/absolute/path/to/ponytail-on-stimulants"] }
OpenCode 2 uses plugins and the V2 API. OpenCode 1 uses plugin and the adapter's legacy server entry. Local checkouts include a .opencode/plugins/index.js discovery entry.
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 | Namespaced $ponytail-on-stimulants:<skill> |
Stop hook. Trust hooks; decision: block + reason continues. Tool outcomes remain unknown where the host supplies no reliable status. |
| OpenCode 2 / 1 | V2 context/compaction hooks; V1 system transform | Slash commands + skills | Best-effort. V2 execution-success events / V1 idle events queue a bounded prompt. No undocumented in-loop stop hook. |
| Claude Code | SessionStart inject | /ponytail-on-stimulants* + skills |
Stop hook. Stop additionalContext continues the turn without a fake agent_settled event. |
| Copilot CLI / VS Code | Native namespaced startup hook | Portable skills + MCP; mode selection applies at next startup | None packaged. Prompt-hook output is not context injection. |
| Gemini CLI / Qwen Code | Extension AGENTS.md |
Extension commands + skills | None packaged. |
| Cursor | Local sessionStart context |
Mode selection applies on the next chat | None packaged. Native prompt hooks cannot inject context. |
| Qoder | UserPromptSubmit + SubagentStart | Skills + native mode tracking | None packaged. |
| Hermes | Pre-LLM user-turn context | Skills + commands | None packaged; mode is process-wide, including gateway chats. |
| Static-rule hosts | Host-enabled rule file | No mutable native mode | None. |
Jev stays optional, disabled by default, and Pi/OMP-only (in-process). File-hook hosts do not call TypeSafe.
Recap index
Every host with an operational gate (Pi, OMP, Codex, OpenCode, Claude Code) appends one line per settled turn, in every mode, to a local append-only TSV: ${XDG_STATE_HOME:-~/.local/state}/ponytail-on-stimulants/recaps.tsv (%LOCALAPPDATA% on Windows). A turn is settled when no completion pass is queued; aborted and interrupted turns are skipped.
time harness project branch session stats ask → outcome
2026-10-18T09:41:03Z opencode ~/workspace/api fix-parser ses_1a2b3c4d5e6f dirty=2 tools=31 errors=0 Fix the parser bug → Fixed the parser and added a regression test.
The recap is deterministic: the first line of the request plus the first sentence of the final reply, markdown-stripped, secret-redacted, and truncated. No model call. Grep it like any log:
rg api ~/.local/state/ponytail-on-stimulants/recaps.tsv | tail
column -ts$'\t' ~/.local/state/ponytail-on-stimulants/recaps.tsv | tail -20
Set PONYTAIL_ON_STIMULANTS_RECAP=0 (or "recap": false in config.json) to disable it, and PONYTAIL_ON_STIMULANTS_RECAP_FILE (or "recapFile") to move it. The file holds task and reply excerpts; it never leaves the machine.
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/, .qoder/rules/, .kiro/steering/, or .github/copilot-instructions.md. Enable Always Apply where the host requires it. .agents/rules/ is a convenience copy, not a universal discovery standard. Windsurf's workspace copy explicitly declares trigger: always_on.
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; Claude/Codex fresh startup resets it to the configured default; Cursor restores the saved selection (including off) on the next local chat. Copilot and Qoder also retain profile mode until changed. 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 docs/harness-compatibility.md for reviewed API sources, adopted upstream fixes, and verification limits. 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.