@herbertgao/pi-extensions 2026.9.4 → 2026.9.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -15
- package/node_modules/@dietrichgebert/ponytail/.qoder-plugin/plugin.json +1 -1
- package/node_modules/@dietrichgebert/ponytail/README.es.md +33 -2
- package/node_modules/@dietrichgebert/ponytail/README.ko.md +33 -2
- package/node_modules/@dietrichgebert/ponytail/README.md +49 -5
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-icon.png +0 -0
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-dark.svg +4 -0
- package/node_modules/@dietrichgebert/ponytail/assets/retriever-logo-light.svg +4 -0
- package/node_modules/@dietrichgebert/ponytail/hooks/claude-codex-hooks.json +0 -3
- package/node_modules/@dietrichgebert/ponytail/hooks/cursor-hooks.json +17 -0
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-activate.js +22 -3
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-mode-tracker.js +27 -2
- package/node_modules/@dietrichgebert/ponytail/hooks/ponytail-runtime.js +61 -2
- package/node_modules/@dietrichgebert/ponytail/package.json +2 -1
- package/node_modules/@dietrichgebert/ponytail/scripts/cursor-hooks.js +135 -0
- package/node_modules/@dietrichgebert/ponytail/scripts/uninstall.js +21 -4
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/reference/index.ts +33 -15
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +6 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/scroll.ts +23 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-renderer.ts +69 -14
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +3 -3
- package/node_modules/@herbertgao/sol-pi/docs/compatibility.md +1 -1
- package/node_modules/@herbertgao/sol-pi/package.json +1 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/index.ts +0 -5
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/economics.ts +4 -4
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/extension.ts +41 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/state.ts +3 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/ask-user-question.ts +5 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/events.ts +5 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +3 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/tool/normalize-params.ts +56 -0
- package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/option-list-view.ts +1 -1
- package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/tab-bar.ts +1 -2
- package/node_modules/@pi-plugins/fast-mode/README.md +31 -44
- package/node_modules/@pi-plugins/fast-mode/dist/index.mjs +20914 -30
- package/node_modules/@pi-plugins/fast-mode/dist/index.mjs.map +1 -1
- package/node_modules/@pi-plugins/fast-mode/package.json +5 -7
- package/node_modules/@tifan/pi-copy-response/README.md +2 -2
- package/node_modules/@tifan/pi-copy-response/package.json +3 -2
- package/node_modules/@tifan/pi-inline-skills/README.md +2 -2
- package/node_modules/@tifan/pi-inline-skills/package.json +3 -2
- package/node_modules/@tifan/pi-mermaid-open/README.md +1 -1
- package/node_modules/@tifan/pi-mermaid-open/package.json +3 -2
- package/node_modules/@tifan/pi-preferred-thinking/package.json +3 -2
- package/node_modules/@tifan/pi-recap/package.json +3 -2
- package/node_modules/pi-mcp-adapter/CHANGELOG.md +78 -0
- package/node_modules/pi-mcp-adapter/README.md +125 -19
- package/node_modules/pi-mcp-adapter/agent-plugin-loader.ts +69 -30
- package/node_modules/pi-mcp-adapter/agent-plugin-provenance.ts +36 -0
- package/node_modules/pi-mcp-adapter/claude-plugin-loader.ts +365 -0
- package/node_modules/pi-mcp-adapter/commands.ts +13 -15
- package/node_modules/pi-mcp-adapter/config.ts +198 -30
- package/node_modules/pi-mcp-adapter/consent-manager.ts +40 -9
- package/node_modules/pi-mcp-adapter/direct-tool-surface.ts +250 -0
- package/node_modules/pi-mcp-adapter/direct-tools.ts +9 -228
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js +74 -32
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-loader.js.map +1 -1
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-provenance.d.ts +1 -0
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-provenance.js +31 -0
- package/node_modules/pi-mcp-adapter/dist/agent-plugin-provenance.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/claude-plugin-loader.d.ts +9 -0
- package/node_modules/pi-mcp-adapter/dist/claude-plugin-loader.js +362 -0
- package/node_modules/pi-mcp-adapter/dist/claude-plugin-loader.js.map +1 -0
- package/node_modules/pi-mcp-adapter/dist/config.d.ts +3 -1
- package/node_modules/pi-mcp-adapter/dist/config.js +189 -27
- package/node_modules/pi-mcp-adapter/dist/config.js.map +1 -1
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.js +7 -16
- package/node_modules/pi-mcp-adapter/dist/metadata-cache.js.map +1 -1
- package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js +5 -17
- package/node_modules/pi-mcp-adapter/dist/package-mcp-loader.js.map +1 -1
- package/node_modules/pi-mcp-adapter/dist/types.d.ts +30 -4
- package/node_modules/pi-mcp-adapter/dist/types.js +26 -0
- package/node_modules/pi-mcp-adapter/dist/types.js.map +1 -1
- package/node_modules/pi-mcp-adapter/dist/utils.d.ts +6 -0
- package/node_modules/pi-mcp-adapter/dist/utils.js +65 -6
- package/node_modules/pi-mcp-adapter/dist/utils.js.map +1 -1
- package/node_modules/pi-mcp-adapter/host-html-template.ts +20 -19
- package/node_modules/pi-mcp-adapter/http-ca.ts +84 -0
- package/node_modules/pi-mcp-adapter/index.ts +827 -164
- package/node_modules/pi-mcp-adapter/init.ts +48 -10
- package/node_modules/pi-mcp-adapter/lazy-loader.ts +7 -0
- package/node_modules/pi-mcp-adapter/mcp-auth-fetch.ts +113 -0
- package/node_modules/pi-mcp-adapter/mcp-auth-flow.ts +256 -77
- package/node_modules/pi-mcp-adapter/mcp-auth.ts +316 -54
- package/node_modules/pi-mcp-adapter/mcp-code.ts +45 -18
- package/node_modules/pi-mcp-adapter/mcp-install.ts +60 -0
- package/node_modules/pi-mcp-adapter/mcp-oauth-provider.ts +70 -6
- package/node_modules/pi-mcp-adapter/mcp-output-guard.ts +53 -42
- package/node_modules/pi-mcp-adapter/mcp-panel-theme.ts +104 -0
- package/node_modules/pi-mcp-adapter/mcp-panel.ts +366 -332
- package/node_modules/pi-mcp-adapter/mcp-references.ts +9 -14
- package/node_modules/pi-mcp-adapter/mcp-script-worker.mjs +3 -1
- package/node_modules/pi-mcp-adapter/mcp-setup-panel.ts +383 -341
- package/node_modules/pi-mcp-adapter/mcp-status.ts +5 -0
- package/node_modules/pi-mcp-adapter/metadata-cache.ts +7 -16
- package/node_modules/pi-mcp-adapter/namespace-tools.ts +61 -3
- package/node_modules/pi-mcp-adapter/oauth.ts +6 -2
- package/node_modules/pi-mcp-adapter/package-mcp-loader.ts +5 -17
- package/node_modules/pi-mcp-adapter/package.json +13 -3
- package/node_modules/pi-mcp-adapter/prompts.ts +35 -3
- package/node_modules/pi-mcp-adapter/proxy-modes.ts +108 -7
- package/node_modules/pi-mcp-adapter/runtime-owner.ts +16 -1
- package/node_modules/pi-mcp-adapter/sampling-handler.ts +9 -32
- package/node_modules/pi-mcp-adapter/sandbox-proxy-template.ts +20 -93
- package/node_modules/pi-mcp-adapter/server-manager.ts +227 -40
- package/node_modules/pi-mcp-adapter/session-approvals.ts +187 -0
- package/node_modules/pi-mcp-adapter/skills/mcp-scripting/SKILL.md +9 -1
- package/node_modules/pi-mcp-adapter/state.ts +10 -1
- package/node_modules/pi-mcp-adapter/tool-approval.ts +10 -22
- package/node_modules/pi-mcp-adapter/tool-metadata.ts +14 -0
- package/node_modules/pi-mcp-adapter/types.ts +57 -4
- package/node_modules/pi-mcp-adapter/ui-server.ts +36 -28
- package/node_modules/pi-mcp-adapter/utils.ts +64 -6
- package/package.json +13 -21
- package/examples/pi-footer.json +0 -275
- package/node_modules/@czottmann/pi-automode/CHANGELOG.md +0 -70
- package/node_modules/@czottmann/pi-automode/LICENSE.md +0 -21
- package/node_modules/@czottmann/pi-automode/README.md +0 -215
- package/node_modules/@czottmann/pi-automode/docs/GLOSSARY.md +0 -39
- package/node_modules/@czottmann/pi-automode/docs/adr/ADR-001-permission-precedence-and-trust-boundaries.md +0 -46
- package/node_modules/@czottmann/pi-automode/docs/adr/ADR-002-global-config-in-extension-data-directory.md +0 -60
- package/node_modules/@czottmann/pi-automode/docs/adr/INDEX.md +0 -6
- package/node_modules/@czottmann/pi-automode/docs/automode-classifier-flow.md +0 -428
- package/node_modules/@czottmann/pi-automode/docs/configuration.md +0 -171
- package/node_modules/@czottmann/pi-automode/docs/defaults.md +0 -178
- package/node_modules/@czottmann/pi-automode/docs/diagnostics.md +0 -90
- package/node_modules/@czottmann/pi-automode/docs/observability-logging.md +0 -160
- package/node_modules/@czottmann/pi-automode/examples/automode.local.json +0 -44
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/bash.ts +0 -692
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/classifier.ts +0 -852
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/config.ts +0 -904
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/constants.ts +0 -228
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/extension.ts +0 -954
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/hard-deny.ts +0 -429
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/log.ts +0 -173
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/model-selector.ts +0 -113
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/model.ts +0 -13
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/paths.ts +0 -297
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/permissions.ts +0 -623
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/state.ts +0 -102
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/transcript.ts +0 -236
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/types.ts +0 -205
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode/utils.ts +0 -54
- package/node_modules/@czottmann/pi-automode/extensions/auto-mode.ts +0 -26
- package/node_modules/@czottmann/pi-automode/package.json +0 -61
- package/node_modules/@czottmann/pi-automode/skills/automode-diagnostics/SKILL.md +0 -63
package/README.md
CHANGED
|
@@ -32,7 +32,6 @@ The package bundles 6 active `@herbertgao/*` child packages—`pi-bark`, `pi-cc-
|
|
|
32
32
|
- `pi-lens@4.1.3`
|
|
33
33
|
- `pi-web-access@0.27.0`
|
|
34
34
|
- `remote-pi@0.7.0`
|
|
35
|
-
- `@czottmann/pi-automode@1.15.0`
|
|
36
35
|
|
|
37
36
|
Pi loads their extensions and skills through `node_modules/` paths inside one package root. The upstream companions are pinned and bundled, not forked or renamed.
|
|
38
37
|
|
|
@@ -42,7 +41,7 @@ Pi loads their extensions and skills through `node_modules/` paths inside one pa
|
|
|
42
41
|
|
|
43
42
|
`@narumitw/pi-caffeinate@0.49.7` uses the host platform's sleep inhibitor during each Pi agent run. On macOS, `/caffeinate sleep` keeps the system awake while allowing the display to sleep; `/caffeinate display` also keeps the display awake. It releases the inhibitor when the run or session ends.
|
|
44
43
|
|
|
45
|
-
`@herbertgao/resume-from@0.2.0` keeps Claude Code sessions associated with their original repository when the active transcript later moves into a nested cwd. `@herbertgao/sol-pi@0.1.0` adds opt-in Action Fusion, ObservationPack, Evidence-Preserving Reducer, and Online Context Compact; see its [configuration guide](../sol-pi/docs/configuration.md). `pi-lens@4.1.3` expands language routing and bounds retained diagnostic facts across multi-root sessions. `pi-
|
|
44
|
+
`@herbertgao/resume-from@0.2.0` keeps Claude Code sessions associated with their original repository when the active transcript later moves into a nested cwd. `@herbertgao/sol-pi@0.1.0` adds opt-in Action Fusion, ObservationPack, Evidence-Preserving Reducer, and Online Context Compact; see its [configuration guide](../sol-pi/docs/configuration.md). `pi-lens@4.1.3` expands language routing and bounds retained diagnostic facts across multi-root sessions. `pi-web-access@0.27.0` adds configurable fetch deadlines and answer models plus isolated GitHub clone runtimes. Preferred Thinking 1.0.1 preserves an explicit subagent `--thinking` choice. Deprecated `@tifan/pi-titlebar-spinner` is no longer bundled; Rename remains the single owner of Herdr tab naming.
|
|
46
45
|
|
|
47
46
|
`pi-stash` is no longer bundled: `/btw` already preserves the main editor draft while handling side questions outside the main conversation. Prior `@herbertgao/pi-stash` releases remain available but are no longer maintained here.
|
|
48
47
|
|
|
@@ -52,18 +51,9 @@ If `pi-footer` was installed separately before upgrading to an aggregate release
|
|
|
52
51
|
pi remove npm:pi-footer@0.5.1
|
|
53
52
|
```
|
|
54
53
|
|
|
55
|
-
###
|
|
54
|
+
### Footer
|
|
56
55
|
|
|
57
|
-
`pi-footer` is enabled by the aggregate.
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
agent_dir="${PI_CODING_AGENT_DIR:-$HOME/.pi/agent}"
|
|
61
|
-
mkdir -p "$agent_dir/extensions"
|
|
62
|
-
cp "$agent_dir/npm/node_modules/@herbertgao/pi-extensions/examples/pi-footer.json" \
|
|
63
|
-
"$agent_dir/extensions/pi-footer.json"
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
The same copy is linked here as [`examples/pi-footer.json`](examples/pi-footer.json). The example preserves the native path, Git branch, session, token/context, model, and thinking information. It uses a gray `•` separator and shows Remote Pi/Subagents only when those extensions publish status. Restart Pi or run `/reload` after copying. Existing config is intentionally never overwritten automatically.
|
|
56
|
+
`pi-footer` is enabled by the aggregate. It preserves the native path, Git branch, session, token/context, model, and thinking information. Configure it in `$PI_CODING_AGENT_DIR/extensions/pi-footer.json`; use `/footer` for interactive changes. Only one footer-replacement extension should be enabled at a time.
|
|
67
57
|
|
|
68
58
|
For the intended compact status text, merge these optional companion settings into existing files rather than replacing the files:
|
|
69
59
|
|
|
@@ -84,8 +74,6 @@ For the intended compact status text, merge these optional companion settings in
|
|
|
84
74
|
}
|
|
85
75
|
```
|
|
86
76
|
|
|
87
|
-
The copy command replaces an existing `pi-footer.json`; review or back it up first. Only one footer-replacement extension should be enabled at a time. Use `/footer` for interactive changes.
|
|
88
|
-
|
|
89
77
|
Pi 0.84.1 or newer should use native `fullscreen` TUI mode.
|
|
90
78
|
|
|
91
79
|
### Hindsight memory server
|
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
<em>No dice nada. Escribe una línea. Funciona.</em>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
|
+
<p align="center">
|
|
15
|
+
<a href="https://trendshift.io/repositories/50668?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/50668" alt="DietrichGebert%2Fponytail | Trendshift" width="250" height="55"/></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
14
18
|
<p align="center">
|
|
15
19
|
<img src="https://img.shields.io/github/stars/DietrichGebert/ponytail?style=flat-square&color=111111&label=stars" alt="Stars">
|
|
16
20
|
<img src="https://img.shields.io/github/v/release/DietrichGebert/ponytail?style=flat-square&color=111111&label=release" alt="Release">
|
|
@@ -22,6 +26,7 @@
|
|
|
22
26
|
<p align="center">
|
|
23
27
|
<a href="https://trendshift.io/repositories/50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/daily" alt="DietrichGebert/ponytail | Trendshift" width="250" height="55"/></a>
|
|
24
28
|
<a href="https://trendshift.io/repositories/50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/weekly" alt="DietrichGebert/ponytail | Trendshift" width="250" height="55"/></a>
|
|
29
|
+
<a href="https://trendshift.io/repositories/50668?utm_source=trendshift-badge&utm_medium=badge&utm_campaign=badge-trendshift-50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/monthly?language=JavaScript" alt="DietrichGebert%2Fponytail | Trendshift monthly ranking" width="250" height="55"/></a>
|
|
25
30
|
</p>
|
|
26
31
|
|
|
27
32
|
<p align="center">
|
|
@@ -214,13 +219,39 @@ clawhub install ponytail
|
|
|
214
219
|
|
|
215
220
|
Instala ponytail como skill de OpenClaw desde ClawHub; los skills de review, audit, debt y help se instalan igual (`clawhub install ponytail-review`, etc.). OpenClaw lo aplica en tareas de código y también lo expone como comando `/ponytail`. Sin ClawHub, copia [`.openclaw/skills/ponytail`](.openclaw/skills/) a `~/.openclaw/skills/`.
|
|
216
221
|
|
|
222
|
+
### Grok Build
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
grok plugin install DietrichGebert/ponytail --trust
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Habilita el plugin (está desactivado por defecto): `/plugins` → Plugins → Space en `ponytail`, o en `~/.grok/config.toml`:
|
|
229
|
+
|
|
230
|
+
```toml
|
|
231
|
+
[plugins]
|
|
232
|
+
enabled = ["ponytail"]
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Abre una sesión nueva (o recarga los plugins). Los skills aparecen como `/ponytail`, `/ponytail-review`, `/ponytail-audit`, `/ponytail-debt`, `/ponytail-gain`, `/ponytail-help`. Verifica con `grok inspect`. Grok puede invocar ponytail automáticamente en tareas de código según la descripción del skill; usa `/ponytail` (o `/ponytail lite`, `/ponytail full`, `/ponytail ultra`) cuando necesites activarlo de forma explícita. No se usan hooks de ciclo de vida de Grok: la salida de `SessionStart` no puede inyectar instrucciones.
|
|
236
|
+
|
|
237
|
+
`AGENTS.md` sigue funcionando solo como instrucciones desde un checkout sin el plugin. Desinstalar: `grok plugin uninstall ponytail`.
|
|
238
|
+
|
|
239
|
+
### Cursor
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
git clone https://github.com/DietrichGebert/ponytail
|
|
243
|
+
node ponytail/scripts/cursor-hooks.js install
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Fusiona dos hooks nativos en `~/.cursor/hooks.json` (con `--project` escribe `<proyecto>/.cursor/hooks.json`) y conserva los hooks que ya tengas ahí. Las entradas ejecutan `node` desde ese checkout, así que déjalo donde está o vuelve a correr la instalación si lo mueves. Cursor recarga el archivo al guardarlo; abre un chat nuevo y el ruleset de tu nivel por defecto llega por `sessionStart`. Envía `/ponytail lite`, `/ponytail full`, `/ponytail ultra` o `/ponytail off` como mensaje normal para cambiar el nivel durante el resto de la conversación; `/ponytail` lo reporta. El `subagentStart` de Cursor no puede inyectar contexto, así que los subagentes corren sin el ruleset, y los agentes en la nube nunca disparan `sessionStart`. La regla permanente (`.cursor/rules/ponytail.mdc`) y los hooks son alternativas: mientras la regla esté en el workspace los hooks no inyectan nada y los comandos de modo responden con un aviso; borra la regla para que los hooks manejen el nivel. Contrato, verificación y límites: [docs/cursor-hooks.md](docs/cursor-hooks.md). Desinstalar: `node ponytail/scripts/cursor-hooks.js uninstall`.
|
|
247
|
+
|
|
217
248
|
Eso fue todo. Él estaría orgulloso. No lo va a decir.
|
|
218
249
|
|
|
219
250
|
Activo en cada sesión, con un puñado de comandos (ver [Comandos](#comandos)). `/ponytail ultra` existe para cuando el codebase te hizo algo personal. El texto de inicio y de cambio de modo muestra el nivel activo.
|
|
220
251
|
|
|
221
252
|
Configura el nivel para cada nueva sesión con la variable de entorno `PONYTAIL_DEFAULT_MODE` (`lite`/`full`/`ultra`/`off`), o con un campo `defaultMode` en `~/.config/ponytail/config.json` (`%APPDATA%\ponytail\config.json` en Windows). El default es `full`.
|
|
222
253
|
|
|
223
|
-
Cursor, Windsurf, Cline, GitHub Copilot (editor), Aider, Kiro: copia el archivo de reglas correspondiente de este repo ([`.cursor/rules/`](.cursor/rules/), [`.windsurf/rules/`](.windsurf/rules/), [`.clinerules/`](.clinerules/), [`.github/copilot-instructions.md`](.github/copilot-instructions.md), [`AGENTS.md`](AGENTS.md), [`.kiro/steering/`](.kiro/steering/)).
|
|
254
|
+
Cursor (solo la regla, alternativa a los [hooks](#cursor)), Windsurf, Cline, GitHub Copilot (editor), Aider, Kiro: copia el archivo de reglas correspondiente de este repo ([`.cursor/rules/`](.cursor/rules/), [`.windsurf/rules/`](.windsurf/rules/), [`.clinerules/`](.clinerules/), [`.github/copilot-instructions.md`](.github/copilot-instructions.md), [`AGENTS.md`](AGENTS.md), [`.kiro/steering/`](.kiro/steering/)).
|
|
224
255
|
|
|
225
256
|
Kiro: copia `.kiro/steering/ponytail.md` a `~/.kiro/steering/` (global) o `.kiro/steering/` en tu proyecto.
|
|
226
257
|
|
|
@@ -240,7 +271,7 @@ Qué archivos corresponden a qué agente: [Portabilidad de agentes](docs/agent-p
|
|
|
240
271
|
| `/ponytail-debt` | Recolecta los atajos marcados con `ponytail:` que dejaste pendientes en un registro, para que "después" no se convierta en "nunca". |
|
|
241
272
|
| `/ponytail-help` | Referencia rápida de los comandos anteriores. |
|
|
242
273
|
|
|
243
|
-
Los comandos requieren un host compatible con skills (Claude Code, Codex, Devin CLI, OpenCode, Gemini, pi, Swival). En Codex son skills; se invocan con `@` (`@ponytail-review`). Los adaptadores de solo instrucciones (Cursor, Windsurf, Cline, Copilot, Kiro, Antigravity) cargan el ruleset permanente sin los comandos.
|
|
274
|
+
Los comandos requieren un host compatible con skills (Claude Code, Codex, Devin CLI, OpenCode, Gemini, pi, Swival). En Codex son skills; se invocan con `@` (`@ponytail-review`). Cursor con los [hooks](#cursor) solo tiene el cambio de nivel con `/ponytail`, escrito como mensaje normal. Los adaptadores de solo instrucciones (la regla de Cursor, Windsurf, Cline, Copilot, Kiro, Antigravity) cargan el ruleset permanente sin los comandos.
|
|
244
275
|
|
|
245
276
|
## Desarrollo
|
|
246
277
|
|
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
<em>말이 없다. 한 줄을 쓴다. 돌아간다.</em>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
|
+
<p align="center">
|
|
15
|
+
<a href="https://trendshift.io/repositories/50668?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/50668" alt="DietrichGebert%2Fponytail | Trendshift" width="250" height="55"/></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
14
18
|
<p align="center">
|
|
15
19
|
<img src="https://img.shields.io/github/stars/DietrichGebert/ponytail?style=flat-square&color=111111&label=stars" alt="Stars">
|
|
16
20
|
<img src="https://img.shields.io/github/v/release/DietrichGebert/ponytail?style=flat-square&color=111111&label=release" alt="Release">
|
|
@@ -22,6 +26,7 @@
|
|
|
22
26
|
<p align="center">
|
|
23
27
|
<a href="https://trendshift.io/repositories/50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/daily" alt="DietrichGebert/ponytail | Trendshift" width="250" height="55"/></a>
|
|
24
28
|
<a href="https://trendshift.io/repositories/50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/weekly" alt="DietrichGebert/ponytail | Trendshift" width="250" height="55"/></a>
|
|
29
|
+
<a href="https://trendshift.io/repositories/50668?utm_source=trendshift-badge&utm_medium=badge&utm_campaign=badge-trendshift-50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/monthly?language=JavaScript" alt="DietrichGebert%2Fponytail | Trendshift monthly ranking" width="250" height="55"/></a>
|
|
25
30
|
</p>
|
|
26
31
|
|
|
27
32
|
<p align="center">
|
|
@@ -233,13 +238,39 @@ clawhub install ponytail
|
|
|
233
238
|
|
|
234
239
|
ClawHub에서 ponytail을 OpenClaw 스킬로 설치한다. review, audit, debt, gain, help 스킬도 같은 식으로 깐다(`clawhub install ponytail-review` 등). OpenClaw는 코딩 작업에 이를 적용하고 `/ponytail` 명령으로도 열어 준다. ClawHub가 없으면 [`.openclaw/skills/ponytail`](.openclaw/skills/)을 `~/.openclaw/skills/`에 복사하면 된다.
|
|
235
240
|
|
|
241
|
+
### Grok Build
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
grok plugin install DietrichGebert/ponytail --trust
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
플러그인은 기본이 꺼져 있다. `/plugins` → Plugins에서 `ponytail`에 Space, 또는 `~/.grok/config.toml`:
|
|
248
|
+
|
|
249
|
+
```toml
|
|
250
|
+
[plugins]
|
|
251
|
+
enabled = ["ponytail"]
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
새 세션을 열거나 플러그인을 다시 로드한다. 스킬은 `/ponytail`, `/ponytail-review`, `/ponytail-audit`, `/ponytail-debt`, `/ponytail-gain`, `/ponytail-help`로 보인다. `grok inspect`로 확인. Grok은 스킬 설명을 바탕으로 코딩 작업에서 ponytail을 자동으로 호출할 수 있다. 명시적으로 활성화해야 하면 `/ponytail`(또는 `/ponytail lite`, `/ponytail full`, `/ponytail ultra`)을 사용한다. `SessionStart` 출력으로는 지시문을 주입할 수 없으므로 Grok 라이프사이클 훅은 사용하지 않는다.
|
|
255
|
+
|
|
256
|
+
체크아웃의 `AGENTS.md`만으로도 지시문 전용 모드는 된다. 제거: `grok plugin uninstall ponytail`.
|
|
257
|
+
|
|
258
|
+
### Cursor
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
git clone https://github.com/DietrichGebert/ponytail
|
|
262
|
+
node ponytail/scripts/cursor-hooks.js install
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
네이티브 훅 두 개를 `~/.cursor/hooks.json`에 합쳐 넣고(`--project`를 붙이면 `<프로젝트>/.cursor/hooks.json`에 쓴다), 이미 있던 다른 훅은 그대로 둔다. 항목들은 그 체크아웃에서 `node`를 실행하니, 체크아웃을 옮기지 말거나 옮긴 뒤 설치를 다시 돌린다. Cursor는 저장하면 파일을 다시 읽는다. 새 채팅을 열면 기본 레벨의 룰셋이 `sessionStart`로 들어온다. `/ponytail lite`, `/ponytail full`, `/ponytail ultra`, `/ponytail off`를 일반 메시지로 보내면 그 대화의 남은 구간 동안 레벨이 바뀌고, `/ponytail`은 현재 레벨을 알려 준다. Cursor의 `subagentStart`는 컨텍스트를 주입할 수 없어서 서브에이전트는 룰셋 없이 돌고, 클라우드 에이전트는 `sessionStart`를 아예 실행하지 않는다. 늘 켜진 규칙(`.cursor/rules/ponytail.mdc`)과 훅은 둘 중 하나만 쓴다. 규칙이 워크스페이스에 있으면 훅은 아무것도 주입하지 않고 모드 명령은 안내문으로 답하니, 훅이 레벨을 관리하게 하려면 규칙을 지운다. 계약, 검증 기록, 한계: [docs/cursor-hooks.md](docs/cursor-hooks.md). 제거: `node ponytail/scripts/cursor-hooks.js uninstall`.
|
|
266
|
+
|
|
236
267
|
이게 끝이었다. 그 사람이라면 흐뭇해할 거다. 입 밖으로 내진 않겠지만.
|
|
237
268
|
|
|
238
269
|
매 세션 켜져 있고, 명령 몇 개가 딸려 온다([Commands](#commands) 참고). `/ponytail ultra`는 코드베이스가 당신에게 단단히 밉보인 날을 위해 있다. 시작할 때와 모드를 바꿀 때 지금 모드를 보여 준다.
|
|
239
270
|
|
|
240
271
|
새 세션마다 적용할 레벨은 `PONYTAIL_DEFAULT_MODE` 환경 변수(`lite`/`full`/`ultra`/`off`)로, 또는 `~/.config/ponytail/config.json`의 `defaultMode` 필드(Windows에선 `%APPDATA%\ponytail\config.json`)로 정한다. 기본값은 `full`이다.
|
|
241
272
|
|
|
242
|
-
Cursor, Windsurf, Cline, GitHub Copilot(에디터), Aider, Kiro, Zed, CodeWhale: 이 저장소에서 맞는 규칙 파일을 복사하면 된다([`.cursor/rules/`](.cursor/rules/), [`.windsurf/rules/`](.windsurf/rules/), [`.clinerules/`](.clinerules/), [`.github/copilot-instructions.md`](.github/copilot-instructions.md), [`AGENTS.md`](AGENTS.md), [`.kiro/steering/`](.kiro/steering/)).
|
|
273
|
+
Cursor(규칙 파일만, [훅 설치](#cursor)의 대안), Windsurf, Cline, GitHub Copilot(에디터), Aider, Kiro, Zed, CodeWhale: 이 저장소에서 맞는 규칙 파일을 복사하면 된다([`.cursor/rules/`](.cursor/rules/), [`.windsurf/rules/`](.windsurf/rules/), [`.clinerules/`](.clinerules/), [`.github/copilot-instructions.md`](.github/copilot-instructions.md), [`AGENTS.md`](AGENTS.md), [`.kiro/steering/`](.kiro/steering/)).
|
|
243
274
|
|
|
244
275
|
Kiro: `.kiro/steering/ponytail.md`를 `~/.kiro/steering/`(전역)이나 프로젝트의 `.kiro/steering/`에 복사한다.
|
|
245
276
|
|
|
@@ -260,7 +291,7 @@ Codex 확장을 쓰는 VS Code는 이 저장소가 함께 싣는 `AGENTS.md`를
|
|
|
260
291
|
| `/ponytail-gain` | 벤치마크로 잰 효과 스코어보드(코드 절감, 비용 절감, 속도 향상)를 보여 준다. |
|
|
261
292
|
| `/ponytail-help` | 위 명령들의 빠른 참조. |
|
|
262
293
|
|
|
263
|
-
명령들은 스킬을 지원하는 호스트가 있어야 돈다(Claude Code, Codex, Devin CLI, OpenCode, Gemini, pi, Swival). Codex에선 스킬이라 `@`로 부른다(`@ponytail-review`). 지시문 전용 어댑터(Cursor
|
|
294
|
+
명령들은 스킬을 지원하는 호스트가 있어야 돈다(Claude Code, Codex, Devin CLI, OpenCode, Gemini, pi, Swival). Codex에선 스킬이라 `@`로 부른다(`@ponytail-review`). [훅](#cursor)을 쓰는 Cursor는 `/ponytail` 레벨 전환만 되고, 일반 메시지로 입력한다. 지시문 전용 어댑터(Cursor 규칙 파일, Windsurf, Cline, Copilot, Kiro, Antigravity)는 명령 없이 늘 켜진 룰셋만 불러온다.
|
|
264
295
|
|
|
265
296
|
## Development
|
|
266
297
|
|
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
<em>He says nothing. He writes one line. It works.</em>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
|
+
<p align="center">
|
|
15
|
+
<a href="https://trendshift.io/repositories/50668?utm_source=repository-badge&utm_medium=badge&utm_campaign=badge-repository-50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/50668" alt="DietrichGebert%2Fponytail | Trendshift" width="250" height="55"/></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
14
18
|
<p align="center">
|
|
15
19
|
<img src="https://img.shields.io/github/stars/DietrichGebert/ponytail?style=flat-square&color=111111&label=stars" alt="Stars">
|
|
16
20
|
<img src="https://img.shields.io/github/v/release/DietrichGebert/ponytail?style=flat-square&color=111111&label=release" alt="Release">
|
|
@@ -22,6 +26,7 @@
|
|
|
22
26
|
<p align="center">
|
|
23
27
|
<a href="https://trendshift.io/repositories/50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/daily" alt="DietrichGebert/ponytail | Trendshift" width="250" height="55"/></a>
|
|
24
28
|
<a href="https://trendshift.io/repositories/50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/weekly" alt="DietrichGebert/ponytail | Trendshift" width="250" height="55"/></a>
|
|
29
|
+
<a href="https://trendshift.io/repositories/50668?utm_source=trendshift-badge&utm_medium=badge&utm_campaign=badge-trendshift-50668" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/trendshift/repositories/50668/monthly?language=JavaScript" alt="DietrichGebert%2Fponytail | Trendshift monthly ranking" width="250" height="55"/></a>
|
|
25
30
|
</p>
|
|
26
31
|
|
|
27
32
|
<p align="center">
|
|
@@ -39,6 +44,17 @@
|
|
|
39
44
|
<a href="https://ponytail.dev/soon"><img src="assets/waitlist-banner.png" alt="Something's coming, join the waitlist" width="760"></a>
|
|
40
45
|
</p>
|
|
41
46
|
|
|
47
|
+
## Already built with Ponytail
|
|
48
|
+
|
|
49
|
+
<a href="https://theretriever.app">
|
|
50
|
+
<picture>
|
|
51
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/retriever-logo-dark.svg">
|
|
52
|
+
<img src="assets/retriever-logo-light.svg" height="128" alt="Retriever">
|
|
53
|
+
</picture>
|
|
54
|
+
</a>
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
42
58
|
You know him. Long ponytail. Oval glasses. Has been at the company longer than the version control. You show him fifty lines; he looks at them, says nothing, and replaces them with one.
|
|
43
59
|
|
|
44
60
|
Ponytail puts him inside your AI agent.
|
|
@@ -109,7 +125,7 @@ Lazy, not negligent: trust-boundary validation, data-loss handling, security, an
|
|
|
109
125
|
|
|
110
126
|
The most effort ponytail will ever ask of you:
|
|
111
127
|
|
|
112
|
-
The Claude Code and Codex plugins run two tiny Node.js lifecycle hooks, so `node` needs to be on your PATH (note for Nix/nvm users: it must be on the non-interactive shell's PATH). If it isn't, the skills still work, the always-on activation just stays quiet instead of erroring on every prompt.
|
|
128
|
+
The Claude Code and Codex plugins (and the Cursor hooks) run two tiny Node.js lifecycle hooks, so `node` needs to be on your PATH (note for Nix/nvm users: it must be on the non-interactive shell's PATH). If it isn't, the skills still work, the always-on activation just stays quiet instead of erroring on every prompt.
|
|
113
129
|
|
|
114
130
|
### Claude Code
|
|
115
131
|
|
|
@@ -246,6 +262,32 @@ clawhub install ponytail
|
|
|
246
262
|
|
|
247
263
|
Installs ponytail as an OpenClaw skill from ClawHub; the review, audit, debt, gain, and help skills install the same way (`clawhub install ponytail-review`, and so on). OpenClaw applies it on coding tasks and also exposes it as a `/ponytail` command. Without ClawHub, copy [`.openclaw/skills/ponytail`](.openclaw/skills/) into `~/.openclaw/skills/`.
|
|
248
264
|
|
|
265
|
+
### Grok Build
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
grok plugin install DietrichGebert/ponytail --trust
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Enable the plugin (off by default): `/plugins` → Plugins → Space on `ponytail`, or in `~/.grok/config.toml`:
|
|
272
|
+
|
|
273
|
+
```toml
|
|
274
|
+
[plugins]
|
|
275
|
+
enabled = ["ponytail"]
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Start a new session (or reload plugins). Skills show as `/ponytail`, `/ponytail-review`, `/ponytail-audit`, `/ponytail-debt`, `/ponytail-gain`, `/ponytail-help`. Verify with `grok inspect`. Grok can auto-invoke ponytail for coding tasks from its skill description; use `/ponytail` (or `/ponytail lite`, `/ponytail full`, `/ponytail ultra`) when activation needs to be explicit. Grok lifecycle hooks are not used because their SessionStart output cannot inject instructions.
|
|
279
|
+
|
|
280
|
+
`AGENTS.md` still works instruction-only from a checkout without the plugin.
|
|
281
|
+
|
|
282
|
+
### Cursor
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
git clone https://github.com/DietrichGebert/ponytail
|
|
286
|
+
node ponytail/scripts/cursor-hooks.js install
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Merges two native hooks into `~/.cursor/hooks.json` (add `--project` to write `<project>/.cursor/hooks.json` instead) and keeps any hooks you already have there. The entries run `node` from that checkout, so leave it where it is or re-run the install after moving it. Cursor reloads the file on save; open a new chat and the ruleset for your default level arrives through `sessionStart`. Send `/ponytail lite`, `/ponytail full`, `/ponytail ultra` or `/ponytail off` as a plain message to switch the level for the rest of the conversation; `/ponytail` reports it. Cursor's `subagentStart` cannot inject context, so subagents run without the ruleset, and cloud agents never fire `sessionStart`. The always-on rule (`.cursor/rules/ponytail.mdc`) and the hooks are alternatives: while the rule is in a workspace the hooks inject nothing and the mode commands answer with a notice, so delete the rule to let the hooks manage the level. Contract, verification record and limitations: [docs/cursor-hooks.md](docs/cursor-hooks.md). Uninstall: `node ponytail/scripts/cursor-hooks.js uninstall`.
|
|
290
|
+
|
|
249
291
|
That was it. He'd be proud. He won't say it.
|
|
250
292
|
|
|
251
293
|
Active every session, with a handful of commands (see [Commands](#commands)). `/ponytail ultra` exists for when the codebase has wronged you personally. Startup and mode-change text shows the current mode.
|
|
@@ -254,7 +296,7 @@ Set the level for every new session with the `PONYTAIL_DEFAULT_MODE` env var (`l
|
|
|
254
296
|
|
|
255
297
|
While active, the ruleset is also injected into every subagent spawned via the Agent tool. To scope that to specific agent types (say, keep it off read-only search agents), set the `PONYTAIL_SUBAGENT_MATCHER` env var to a regex tested against the subagent's `agent_type`. It is unanchored and case-insensitive: `explore|general` matches either, `^general$` is exact, and plugin agent types look like `plugin:name`. Unset means inject into every subagent (the default); an invalid regex, or a subagent whose type the platform doesn't report, also falls back to injecting.
|
|
256
298
|
|
|
257
|
-
Cursor, Windsurf, Cline, GitHub Copilot Chat (the VS Code, JetBrains, and Visual Studio editor extension, not the standalone Copilot CLI covered under [Install](#install)), Aider, Kiro, Zed, CodeWhale, Swival, Qoder: copy the matching rules file from this repo ([`.cursor/rules/`](.cursor/rules/), [`.windsurf/rules/`](.windsurf/rules/), [`.clinerules/`](.clinerules/), [`.github/copilot-instructions.md`](.github/copilot-instructions.md), [`AGENTS.md`](AGENTS.md), [`.kiro/steering/`](.kiro/steering/), [`.qoder/rules/`](.qoder/rules/)).
|
|
299
|
+
Cursor (rule-only alternative to the [hooks install](#cursor)), Windsurf, Cline, GitHub Copilot Chat (the VS Code, JetBrains, and Visual Studio editor extension, not the standalone Copilot CLI covered under [Install](#install)), Aider, Kiro, Zed, CodeWhale, Swival, Qoder: copy the matching rules file from this repo ([`.cursor/rules/`](.cursor/rules/), [`.windsurf/rules/`](.windsurf/rules/), [`.clinerules/`](.clinerules/), [`.github/copilot-instructions.md`](.github/copilot-instructions.md), [`AGENTS.md`](AGENTS.md), [`.kiro/steering/`](.kiro/steering/), [`.qoder/rules/`](.qoder/rules/)).
|
|
258
300
|
|
|
259
301
|
Kiro: copy `.kiro/steering/ponytail.md` to `~/.kiro/steering/` (global) or `.kiro/steering/` in your project.
|
|
260
302
|
|
|
@@ -277,10 +319,12 @@ Which files map to which agent: [Agent portability](docs/agent-portability.md).
|
|
|
277
319
|
| Claude Code | `/plugin remove ponytail` |
|
|
278
320
|
| Codex | `codex plugin remove ponytail` |
|
|
279
321
|
| Devin CLI | `devin plugins remove ponytail` |
|
|
322
|
+
| Grok Build | `grok plugin uninstall ponytail` |
|
|
280
323
|
| Pi agent | `pi uninstall ponytail` |
|
|
281
|
-
| Cursor
|
|
324
|
+
| Cursor hooks | `node scripts/cursor-hooks.js uninstall` (add `--project` for a project-level install); removes only ponytail's entries from `hooks.json` |
|
|
325
|
+
| Cursor rule / Windsurf / Cline / Qoder / etc. | Delete the copied rule file |
|
|
282
326
|
|
|
283
|
-
These remove the plugin's own files. They leave behind a small amount of state ponytail writes outside the plugin folder: the mode flag, `~/.config/ponytail/config.json`, and (if you accepted the setup nudge) a `statusLine` entry in `~/.claude/settings.json`. Run `node scripts/uninstall.js` to clean those up too. **Run it before the host remove command above** — the script is itself a plugin file, so removing the plugin first deletes it (or run it from a separate clone of this repo). It only removes the statusLine entry if it points at ponytail's own script, so a statusline you set up yourself is left untouched.
|
|
327
|
+
These remove the plugin's own files. They leave behind a small amount of state ponytail writes outside the plugin folder: the mode flag (`~/.claude/.ponytail-active`, or `~/.cursor/.ponytail-active` for Cursor), `~/.config/ponytail/config.json`, ponytail's entries in `~/.cursor/hooks.json`, and (if you accepted the setup nudge) a `statusLine` entry in `~/.claude/settings.json`. Run `node scripts/uninstall.js` to clean those up too. **Run it before the host remove command above** — the script is itself a plugin file, so removing the plugin first deletes it (or run it from a separate clone of this repo). It only removes the statusLine entry if it points at ponytail's own script, so a statusline you set up yourself is left untouched.
|
|
284
328
|
|
|
285
329
|
## Commands
|
|
286
330
|
|
|
@@ -293,7 +337,7 @@ These remove the plugin's own files. They leave behind a small amount of state p
|
|
|
293
337
|
| `/ponytail-gain` | Show the measured impact scoreboard (less code, less cost, more speed) from the benchmark. |
|
|
294
338
|
| `/ponytail-help` | Quick reference for the commands above. |
|
|
295
339
|
|
|
296
|
-
Commands need a skill-capable host (Claude Code, Codex, Devin CLI, OpenCode, Gemini, pi, Swival, Hermes Agent, Qoder). In Codex they're skills, invoke with `@` (`@ponytail-review`). The instruction-only adapters (Cursor, Windsurf, Cline, Copilot, Kiro, Antigravity) load the always-on ruleset without the commands.
|
|
340
|
+
Commands need a skill-capable host (Claude Code, Codex, Devin CLI, OpenCode, Gemini, pi, Swival, Hermes Agent, Qoder, Grok Build). In Codex they're skills, invoke with `@` (`@ponytail-review`). Cursor with the [hooks](#cursor) gets `/ponytail` level switching only, typed as a plain message. The instruction-only adapters (Cursor's rule file, Windsurf, Cline, Copilot, Kiro, Antigravity) load the always-on ruleset without the commands.
|
|
297
341
|
|
|
298
342
|
## Development
|
|
299
343
|
|
|
Binary file
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="120" height="128" viewBox="0 0 120 128">
|
|
2
|
+
<image x="0" y="0" width="96" height="96" xlink:href="data:image/png;base64,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"/>
|
|
3
|
+
<text x="0" y="122" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="20" font-weight="600" fill="#e6edf3">Retriever</text>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="120" height="128" viewBox="0 0 120 128">
|
|
2
|
+
<image x="0" y="0" width="96" height="96" xlink:href="data:image/png;base64,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"/>
|
|
3
|
+
<text x="0" y="122" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="20" font-weight="600" fill="#1f2328">Retriever</text>
|
|
4
|
+
</svg>
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
{
|
|
8
8
|
"type": "command",
|
|
9
9
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/ponytail-activate.js\"",
|
|
10
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { node \"$env:CLAUDE_PLUGIN_ROOT\\hooks\\ponytail-activate.js\" }",
|
|
11
10
|
"timeout": 5,
|
|
12
11
|
"statusMessage": "Loading ponytail mode..."
|
|
13
12
|
}
|
|
@@ -20,7 +19,6 @@
|
|
|
20
19
|
{
|
|
21
20
|
"type": "command",
|
|
22
21
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/ponytail-subagent.js\"",
|
|
23
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { node \"$env:CLAUDE_PLUGIN_ROOT\\hooks\\ponytail-subagent.js\" }",
|
|
24
22
|
"timeout": 5,
|
|
25
23
|
"statusMessage": "Loading ponytail mode..."
|
|
26
24
|
}
|
|
@@ -33,7 +31,6 @@
|
|
|
33
31
|
{
|
|
34
32
|
"type": "command",
|
|
35
33
|
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/ponytail-mode-tracker.js\"",
|
|
36
|
-
"commandWindows": "if (Get-Command node -ErrorAction SilentlyContinue) { node \"$env:CLAUDE_PLUGIN_ROOT\\hooks\\ponytail-mode-tracker.js\" }",
|
|
37
34
|
"timeout": 5,
|
|
38
35
|
"statusMessage": "Tracking ponytail mode..."
|
|
39
36
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"hooks": {
|
|
4
|
+
"sessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"command": "node \"PONYTAIL_DIR/hooks/ponytail-activate.js\"",
|
|
7
|
+
"timeout": 5
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"beforeSubmitPrompt": [
|
|
11
|
+
{
|
|
12
|
+
"command": "node \"PONYTAIL_DIR/hooks/ponytail-mode-tracker.js\"",
|
|
13
|
+
"timeout": 5
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// ponytail — Claude Code SessionStart activation hook
|
|
2
|
+
// ponytail — Claude Code SessionStart activation hook (also Codex, Copilot,
|
|
3
|
+
// Grok and Cursor sessionStart)
|
|
3
4
|
//
|
|
4
5
|
// Runs on every session start:
|
|
5
6
|
// 1. Writes flag file at $CLAUDE_CONFIG_DIR/.ponytail-active (defaults to ~/.claude; statusline reads this)
|
|
@@ -12,8 +13,11 @@ const { getDefaultMode, getClaudeDir, isShellSafe } = require('./ponytail-config
|
|
|
12
13
|
const { getPonytailInstructions } = require('./ponytail-instructions');
|
|
13
14
|
const {
|
|
14
15
|
clearMode,
|
|
16
|
+
cursorRuleNotice,
|
|
17
|
+
cursorRulePath,
|
|
15
18
|
isCodex,
|
|
16
19
|
isCopilot,
|
|
20
|
+
isCursor,
|
|
17
21
|
setMode,
|
|
18
22
|
writeHookOutput,
|
|
19
23
|
} = require('./ponytail-runtime');
|
|
@@ -26,11 +30,26 @@ const mode = getDefaultMode();
|
|
|
26
30
|
// "off" mode — skip activation entirely, don't write flag or emit rules
|
|
27
31
|
if (mode === 'off') {
|
|
28
32
|
clearMode();
|
|
29
|
-
const hookOutput = (isCodex || isCopilot) ? '' : 'OK';
|
|
33
|
+
const hookOutput = (isCodex || isCopilot || isCursor) ? '' : 'OK';
|
|
30
34
|
writeHookOutput('SessionStart', 'off', hookOutput);
|
|
31
35
|
process.exit(0);
|
|
32
36
|
}
|
|
33
37
|
|
|
38
|
+
// Cursor with the always-on rule in the workspace: the rule already carries the
|
|
39
|
+
// ruleset and would contradict any other level, so leave the flag alone and
|
|
40
|
+
// hand the model a one-line notice instead of a second copy (#817).
|
|
41
|
+
if (isCursor) {
|
|
42
|
+
const rule = cursorRulePath();
|
|
43
|
+
if (rule) {
|
|
44
|
+
try {
|
|
45
|
+
writeHookOutput('SessionStart', mode, cursorRuleNotice(rule));
|
|
46
|
+
} catch (e) {
|
|
47
|
+
// Silent fail — stdout closed/EPIPE at hook exit must not surface as a hook failure
|
|
48
|
+
}
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
34
53
|
// 1. Write flag file
|
|
35
54
|
try {
|
|
36
55
|
setMode(mode);
|
|
@@ -42,7 +61,7 @@ try {
|
|
|
42
61
|
let output = getPonytailInstructions(mode);
|
|
43
62
|
|
|
44
63
|
// 3. Detect missing statusline config — nudge Claude to help set it up
|
|
45
|
-
if (!isCodex && !isCopilot) try {
|
|
64
|
+
if (!isCodex && !isCopilot && !isCursor) try {
|
|
46
65
|
let hasStatusline = false;
|
|
47
66
|
if (fs.existsSync(settingsPath)) {
|
|
48
67
|
// Strip UTF-8 BOM some editors prepend on Windows (breaks JSON.parse)
|