You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 40e604a
Browse filesBrowse the repository at this point in the historyBrowse files
0027007744
committed
fix(zcode): re-add ZCode support with prompt-unwrap and resume-keep fixes
#1040 dropped ZCode because it could not be tested. Field debugging on
ZCode 3.x (Windows) found the two behaviors that made it look broken,
both now fixed and live-verified:
- ZCode renders a slash command as a markdown link, so UserPromptSubmit
prompts arrive as [$ponytail](path) args; the mode tracker now
unwraps that form. Bare /ponytail, @Ponytail and $ponytail pass
through unchanged.
- ZCode resumes its runtime right after a slash-command prompt, firing
SessionStart(resume) that reset a just-switched level to the default
within seconds; activate now reads the hook payload's source and, on
ZCode only, keeps the live level across resume/compact. Other hosts
keep their long-standing reset behavior.
Restores the isZcode detection, the strict-JSON output branch (#798),
the hook test and the INSTALL/portability rows removed by #1040.
Copy file name to clipboardExpand all lines: INSTALL.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -167,6 +167,10 @@ Start a new session (or reload plugins). Skills show as `/ponytail`, `/ponytail-
167
167
168
168
`AGENTS.md` still works instruction-only from a checkout without the plugin.
169
169
170
+
## ZCode
171
+
172
+
ZCode loads Claude Code plugins. Open **Settings → Plugins**, choose **Create → Add marketplace**, enter `DietrichGebert/ponytail`, then install ponytail from the Personal tab. The ruleset arrives at session start and `/ponytail` level switches work, like in Claude Code (needs ponytail 4.10.3 or later and `node` on your PATH). ZCode has no `SubagentStart` event, so subagents run without the ruleset.
Copy file name to clipboardExpand all lines: docs/agent-portability.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,6 +12,7 @@ to load in a given agent.
12
12
| Codex |`.codex-plugin/plugin.json`, `hooks/claude-codex-hooks.json`, `hooks/`, `skills/`| Plugin install with the same skills plus lifecycle hooks for activation and mode tracking. |
13
13
| CodeBuddy |`.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`, `hooks/claude-codex-hooks.json`, `hooks/`, `skills/`| CodeBuddy Code reads the Claude-format manifests when no `.codebuddy-plugin/` exists and expands `${CLAUDE_PLUGIN_ROOT}` in hook commands, so `/plugin marketplace add DietrichGebert/ponytail` + `/plugin install ponytail@ponytail` installs the Claude plugin unchanged. The hooks detect it by `CODEBUDDY_PLUGIN_ROOT`, keep the mode flag in `$CODEBUDDY_CONFIG_DIR` or `~/.codebuddy`, and answer in `hookSpecificOutput` JSON. No subagent injection: CodeBuddy discards `SubagentStart` hook output. Verified with CodeBuddy CLI 2.161.2. |
14
14
| Grok Build | root `plugin.json`, `.grok-plugin/marketplace.json`, `skills/`, `commands/`|`grok plugin install DietrichGebert/ponytail --trust`, then enable. Grok can auto-invoke ponytail from its coding-task skill description; `/ponytail` makes activation explicit. Grok lifecycle hooks are not used because passive hook output cannot inject instructions. |
15
+
| ZCode |`.claude-plugin/plugin.json`, `hooks/claude-codex-hooks.json`, `hooks/`, `skills/`| ZCode loads Claude Code plugins: **Settings → Plugins → Create → Add marketplace** → `DietrichGebert/ponytail`, then install ponytail. The hooks answer in ZCode's strict JSON shape (detected via `ZCODE_APP_VERSION`, #799), so the ruleset arrives at session start and `/ponytail` switches land. ZCode renders `/ponytail` prompts as markdown links and resumes its runtime right after a slash-command prompt; the hooks unwrap the link and keep the switched level across that resume. ZCode has no `SubagentStart` event, so subagents run without the ruleset; the statusline nudge is skipped. Confirmed by users on ZCode 3.14.4 with ponytail 4.10.3 (#798). |
15
16
| Goose |`plugin.json`, `skills/`, `AGENTS.md`|`goose plugin install https://github.com/DietrichGebert/ponytail.git` clones the repo into `~/.agents/plugins/ponytail/` and imports the six skills as `ponytail:<skill>`. Always-on rules come from `AGENTS.md`: goose reads it from the project (git root down to the working directory) and from `~/.agents/AGENTS.md`, plus `.goosehints` from `~/.config/goose/`. No lifecycle hooks, so no persistent `/ponytail` levels. Verified with Goose 1.53.0. |
16
17
| Muse Code (Meta) |`AGENTS.md`, `skills/`| Muse reads `AGENTS.md` (or `CLAUDE.md`) in the project once the workspace is trusted, and `~/.config/muse/AGENTS.md` for every project. Skills: copy the folders from `skills/` to `~/.agents/skills/`, or run `muse skills install ./skills/<name> --scope user` per skill. Instruction-tier, no `/ponytail` levels or hooks. Verified with Muse Code 1.4.2. |
17
18
| OpenCode |`.opencode/plugins/ponytail.mjs`, `.opencode/command/`, `hooks/`, `skills/`| Server plugin injects the ruleset each turn via `experimental.chat.system.transform` and persists `/ponytail` switches; reuses the shared instruction builder. Installs globally with `opencode plugin add @dietrichgebert/ponytail` (OpenCode writes the `plugins` entry itself), or per project through the `plugins` array in `opencode.json`. |
0 commit comments