create-agent-pluginlisted
Install: claude install-skill gpambrozio/Gallager
# Create a Gallager Agent (Sidecar) Plugin
A **sidecar plugin** is a standalone executable Gallager spawns as a child process
and talks to over stdin/stdout using JSON-RPC. It lets a third party add a brand-new
coding agent to Gallager — out of process, crash-isolated, no changes to the app.
Your plugin's job: turn your agent's hook events into the agent-blind `PluginEvent`
shape Gallager understands (session working / done / needs-attention, notifications,
project name), and optionally push text or keys back into the pane.
This skill ships a runnable Python starter and the full protocol contract. Lean on
them — don't hand-write the framing from memory.
## Two silent-drop traps to internalize first
Both make a plugin that "loads but does nothing", and neither logs an error
anywhere you'll see. Get these right before anything else.
**1. Three JSON places, two casings.** Gallager speaks JSON in three places:
- **`plugin.json` manifest** → snake_case (`schema_version`, `display_name`, `short_name`)
- **Ingress *socket* frame** (your hook → app) → snake_case (`plugin_id`, `context`, `payload`)
- **Stdio *transport* RPC** (app ↔ your sidecar) → **camelCase** (`pluginID`, `sessionID`, `tmuxPane`, `pluginRoot`)
So the `translate_event` params you read and the `PluginEvent` you write back over
stdio are **camelCase**. A `plugin_id` key in a `translate_event` reply is silently
dropped. (Reference §1.)
**2. `appActions` is required on every `PluginEvent`.** It is non-Optional i