AGENTS.md@packages/coding-agent/examples/extensions · git:20260824.0549249 · 2026-08-24 · sha256 9c67430b88e05bec

AGENTS.md@packages/coding-agent/examples/extensions git:20260824.0549249A

Immutable. This exact content is served forever at /api/v1/blob/9c67430b88e05bec.

# packages/coding-agent/examples/extensions

Flat catalog of executable extension examples plus multi-file extension packages. Own file because it is the densest `pi.*` registration surface in the repo (score 14: 110+ files, 10 subdirs, heavy symbol/export density). Load any single file with `senpi -e <path>.ts`; per-example docs live in `README.md`.

## STRUCTURE

```text
*.ts                        Single-file examples, one pattern each (kebab-case)
subagent/                   Subagent tool: single/parallel/chain dispatch (~1k LOC)
custom-provider-anthropic/  OAuth + Anthropic-compatible streaming provider
custom-provider-gitlab-duo/ Provider against GitLab Duo
gondolin/                   Route built-in tools + `!` commands into a Gondolin micro-VM
sandbox/                    OS-level sandboxing via @anthropic-ai/sandbox-runtime
plan-mode/                  Read-only planning mode (generated instructions)
openai-codex-usage/         Codex usage tracking
dynamic-resources/          Dynamic resource examples
with-deps/                  Extension with its own private dependency manifest
doom-overlay/               WASM Doom rendered as live overlay; doom/build/ is generated
```

## WHERE TO LOOK

| Task | First choice |
|---|---|
| Register tool/command/flag/shortcut/renderer | `tools.ts`, `commands.ts`, `dynamic-tools.ts`, `custom-header.ts` |
| Built-in tool override or rendering | `minimal-mode.ts`, `built-in-tool-renderer.ts` |
| Overlays, focus, geometry | `overlay-test.ts`, `overlay-qa-tests.ts`, `widget-placement.ts` |
| Provider auth/payload | `custom-provider-anthropic/`, `provider-payload.ts` |
| Persistent state via session entries | `todo.ts`, `tic-tac-toe.ts`, `bookmark.ts`, `handoff.ts` |
| Prompt/preset/config files | `preset.ts`, `prompt-customizer.ts`, `system-prompt-header.ts` |
| Games / keyboard input | `snake.ts`, `space-invaders.ts`, `tic-tac-toe.ts` |
| Deferred-tool activation (Kimi flow) | `kimi-deferred-tools.ts` |
| RPC/UI child process | `../rpc-extension-ui.ts`, `rpc-demo.ts` |

## CONVENTIONS

- Event seams used across examples: `session_start`/`session_shutdown`, `turn_*`, `agent_*`, `before_agent_start`, `tool_call`/`tool_result`, `input`, `user_bash`, `model_select`.
- Presets read `~/.senpi/agent/presets.json` then `<cwd>/.senpi/presets.json`; project file wins. `provider-payload.ts` writes under `CONFIG_DIR_NAME`.
- `overlay-qa-tests.ts` is a runtime QA extension (many overlay commands, timers, spawned streaming processes), not a conventional test target.

## ANTI-PATTERNS

- Custom tools MUST truncate output (`truncated-tool.ts` demonstrates ripgrep wrapping with 50KB/2000-line caps).
- Games never expose the user's cursor and never split a tool-call sequence across responses.
- Never leave timers or child processes alive past `session_shutdown`.
- Shell/process-delegating examples (`ssh.ts`, `interactive-shell.ts`, `inline-bash.ts`, `auto-commit-on-exit.ts`, `git-merge-and-resolve.ts`) cross trust boundaries; adopt deliberately, never as boilerplate.

---

Parent: `examples/AGENTS.md` (import rules, factory discipline, validation).