Plugin development reference and workflows based on real development experience (Dirigent, ContractorAgent, PrismFacet). Docs: structure, entry-point, hooks, tools, state, config, debugging Workflows: create-plugin, add-hook Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1.1 KiB
1.1 KiB
Add Hook
When adding a new hook handler to an existing plugin.
See
{baseDir}/docs/hooks.mdfor available hooks and dedup patterns.
Process
1. Create Hook File
Add plugin/hooks/<hook-name>.ts. Export a registration function:
export function registerMyHook(api, config) {
// Set up dedup on globalThis
// api.on("<hook-name>", handler)
}
2. Add Dedup
Choose the right dedup pattern:
before_model_resolve,before_prompt_build→ WeakSet on event objectagent_end→ Set on runId with size cap (500)gateway_start/stop→ globalThis flag (in index.ts, not in hook file)
3. Register in index.ts
Import and call the registration function in the register() method.
Hooks that need to run every register() call (agent-scoped): put outside the lifecycle guard. Hooks that should run once (gateway-scoped): put inside the lifecycle guard.
4. If Prompt Injection
If the hook returns prependSystemContext or appendSystemContext, ensure allowPromptInjection: true is set in the plugin's config entry and in the install script.
5. Test
Reinstall, restart gateway, verify via logs.