feat: install ponytail as a Claude Code, codex and opencode plugin #1

Merged
marti merged 2 commits from feature/ponytail-plugin into main 2026-10-13 14:29:20 +02:00
Owner

Summary

m4rti-skills.ponytail.enable = true; installs ponytail as a plugin for every enabled target except pi. It works with or without m4rti-skills.enable.

 inputs
+  ponytail (github:DietrichGebert/ponytail, flake = false)

 nix/
   hm-module.nix
+    ponytail.enable  -> claude-code.plugins.ponytail
+                     -> codex.plugins
+                     -> opencode.settings.plugin (appended)
+  ponytail.nix       # packages.ponytail; hooks' `node` -> store Node

 skills/
+  improve-codebase-architecture
+  codebase-design     # called by improve-codebase-architecture
+  domain-modeling     # called by improve-codebase-architecture

Upstream's Claude and codex hooks run a bare node, which isn't on PATH on NixOS. The package points those hooks at Node in the Nix store.

Evidence

  • Before: with no node on PATH, every ponytail hook fails with node: command not found.
    After: the patched startup hook runs and prints the ponytail rules:
    $ <store>/nodejs-24.20.0/bin/node -e "require(.../hooks/ponytail-activate.js)"
    PONYTAIL MODE ACTIVE — level: full
    
  • Built a Home Manager setup with Claude Code, codex and opencode enabled, against the Home Manager in the local store, both with and without m4rti-skills.enable. There were no warnings or failed assertions.
    .claude/skills/ponytail                     -> claude-code-ponytail
    .codex/config.toml                          [plugins."ponytail@home-manager"] enabled = true
    .codex/plugins/cache/home-manager/ponytail/5.2.0
    opencode plugin = [ file://<ponytail>/.opencode/plugins/ponytail.mjs, file:///other.js ]
    
  • nix flake check: all checks passed. packages.ponytail is now one of the checks.
  • Not yet verified: switching a real machine to it, or starting a session in any agent.

Merge Danger

Door: two-way

The option is off by default. To undo, turn it off or revert the PR.

Blast Radius: opt-in

Consumers get the new ponytail input in their lock and three new skills in skills/. Nothing else changes until they turn ponytail on. In codex, the ponytail hooks need a one-time approval in /hooks.

🤖 Generated with Claude Code

## Summary `m4rti-skills.ponytail.enable = true;` installs [ponytail](https://github.com/DietrichGebert/ponytail) as a plugin for every enabled target except pi. It works with or without `m4rti-skills.enable`. ```diff inputs + ponytail (github:DietrichGebert/ponytail, flake = false) nix/ hm-module.nix + ponytail.enable -> claude-code.plugins.ponytail + -> codex.plugins + -> opencode.settings.plugin (appended) + ponytail.nix # packages.ponytail; hooks' `node` -> store Node skills/ + improve-codebase-architecture + codebase-design # called by improve-codebase-architecture + domain-modeling # called by improve-codebase-architecture ``` Upstream's Claude and codex hooks run a bare `node`, which isn't on PATH on NixOS. The package points those hooks at Node in the Nix store. ## Evidence - **Before:** with no `node` on PATH, every ponytail hook fails with `node: command not found`. **After:** the patched startup hook runs and prints the ponytail rules: ```text $ <store>/nodejs-24.20.0/bin/node -e "require(.../hooks/ponytail-activate.js)" PONYTAIL MODE ACTIVE — level: full ``` - Built a Home Manager setup with Claude Code, codex and opencode enabled, against the Home Manager in the local store, both with and without `m4rti-skills.enable`. There were no warnings or failed assertions. ```text .claude/skills/ponytail -> claude-code-ponytail .codex/config.toml [plugins."ponytail@home-manager"] enabled = true .codex/plugins/cache/home-manager/ponytail/5.2.0 opencode plugin = [ file://<ponytail>/.opencode/plugins/ponytail.mjs, file:///other.js ] ``` - `nix flake check`: all checks passed. `packages.ponytail` is now one of the checks. - Not yet verified: switching a real machine to it, or starting a session in any agent. ## Merge Danger **Door:** two-way The option is off by default. To undo, turn it off or revert the PR. **Blast Radius:** opt-in Consumers get the new `ponytail` input in their lock and three new skills in `skills/`. Nothing else changes until they turn ponytail on. In codex, the ponytail hooks need a one-time approval in `/hooks`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
m4rti-skills.ponytail.enable builds ponytail from a pinned flake input and
hands it to programs.claude-code.plugins, programs.codex.plugins and
programs.opencode.settings.plugin for each enabled target. The upstream
Claude/codex hooks call a bare `node`; the package pins them to a store
Node so they work without one on PATH.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Vendored from mattpocock/skills with the two skills it calls,
codebase-design and domain-modeling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
marti merged commit 5cb82ef852 into main 2026-10-13 14:29:20 +02:00
marti deleted branch feature/ponytail-plugin 2026-10-13 14:29:21 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
marti/agent-env!1
No description provided.