Skip to content

fix: install scripts — use marketplace CLI for Claude/Codex, plugin for Kilo Code#241

Open
nicklin11 wants to merge 4 commits into
DietrichGebert:mainfrom
nicklin11:feat/install-scripts
Open

fix: install scripts — use marketplace CLI for Claude/Codex, plugin for Kilo Code#241
nicklin11 wants to merge 4 commits into
DietrichGebert:mainfrom
nicklin11:feat/install-scripts

Conversation

@nicklin11

Copy link
Copy Markdown

What changed

Fixed the install scripts so ponytail actually loads in every agent.

Root cause

The original scripts created symlinks in ~/.claude/plugins/ponytail/, but Claude Code doesn't scan that directory — it uses a marketplace mechanism (claude plugin marketplace add + claude plugin install). Same issue with Codex. Kilo Code (fork of OpenCode) needs a plugin entry in kilo.json, not a rules-file symlink.

Changes

Claude Code — uses claude plugin marketplace add + claude plugin install ponytail@ponytail instead of symlinks

Codex — uses codex plugin marketplace add + codex plugin add ponytail@ponytail

Kilo Code — symlinks ponytail.mjs and adds plugin entry to kilo.json (same mechanism as OpenCode)

Other agents — unchanged (symlink approach works for Cursor, Windsurf, Cline, Kiro, etc.)

Hooks — removed legacy manual hooks from settings.json (the plugin manages its own hooks via plugin.json → hooks/claude-codex-hooks.json)

Detectiondetect_kilo() now finds /usr/bin/kilo binary and ~/.config/kilo/kilo.json

Status--list checks plugin status via CLI for Claude/Codex/Kilo instead of checking for symlinks

Uninstall — uses CLI commands for Claude/Codex, updates kilo.json for Kilo Code

Testing

./install.sh --list    # All detected agents show "plugin" or "symlink"
./install.sh --all     # Installs for all 14 agents
./install.sh --uninstall  # Clean removal

🤖 Generated with Claude Code

nicklin11 and others added 4 commits June 22, 2026 09:32
…ll 14 AI agents

Two new scripts for one-command ponytail installation across every AI agent
on the machine, with auto-detection of installed agentic harnesses.

install.sh (573 lines):
  - curl-pipe compatible: curl -fsSL https://raw.githubusercontent.com/...
  - Flags: --all, --agent <name>, --list, --uninstall, --repo <path>, --yes
  - Auto-detects agents via 8 methods: binary PATH, config dirs, npm global
    packages, VS Code extensions, gh extensions, cargo packages, macOS .app
    bundles, and common install paths
  - Creates symlinks from agent config dirs to ~/.config/ponytail/
  - Installs Claude Code lifecycle hooks (session activation + mode tracking)

install.js (681 lines):
  - Node.js version with --dry-run, --yes, colour output
  - node install.js --list for status overview
  - Same detection logic, cross-platform compatible

14 supported agents: claude, codex, copilot, opencode, cursor, windsurf,
cline, kiro, openclaw, gemini, pi, antigravity, kilocode, codewhale

README.md: add System-wide (auto-detect) section to Install, update
Development notes.

Co-Authored-By: Claude <noreply@anthropic.com>
- Claude Code and Codex don't scan ~/.claude/plugins/ for directories
- They require marketplace mechanism: plugin marketplace add + plugin install
- Kilo Code (fork of OpenCode) needs plugin entry in kilo.json, not a rules symlink
- install.sh/install.js now use correct mechanisms per agent type:
  - Claude Code: claude plugin marketplace add + claude plugin install
  - Codex: codex plugin marketplace add + codex plugin add
  - Kilo Code: symlink ponytail.mjs + plugin entry in kilo.json
  - All others: symlink approach (unchanged)
- Remove legacy hooks from settings.json (plugin manages its own hooks)
- Fix detect_kilo to find /usr/bin/kilo and ~/.config/kilo/kilo.json
- Fix sync_files to copy .claude-plugin, .codex-plugin, pi-extension
- Fix --list to check plugin status via CLI for Claude/Codex/Kilo
- Fix --uninstall to use CLI commands for Claude/Codex, update kilo.json for Kilo
- Add Kilo Code instructions to README

Co-Authored-By: Claude <noreply@anthropic.com>
- Add Hermes plugin (.hermes/plugins/ponytail/) with pre_llm_call hook
  for always-active ruleset injection
- Install Hermes as both plugin (always-active) and skill (visible in
  hermes skills list, like graphify)
- Fix OpenCode install: add plugin entry to opencode.json (was only
  creating symlink without config update)
- Add OpenCode command file symlinking for /ponytail commands
- Update both install.sh and install.js with detection, install,
  uninstall, and status for Hermes and OpenCode
- Update README with Hermes setup instructions

Co-Authored-By: Claude <noreply@anthropic.com>
Both installers maintain a 15-agent list in parallel (install.sh AGENT_DEFS,
install.js AGENTS array). When a new agent is added, it's easy to update
one and forget the other — graph analysis showed two separate god-node
communities (C2 install.sh, C5 install.js) that share zero edges, meaning
nothing catches silent drift.

This test parses both files and asserts the agent name sets match.
Verified: adding a fake agent to install.sh only fails the test.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant