Extension Tiers
Extensions are grouped into three tiers based on their role and configurability:Core
Bundled
/gsd extensions enable and /gsd extensions disable.Community
gsd install or /gsd extensions install.Bundled Extensions
These extensions ship with GSD Pi and are enabled by default. Toggle any of them with/gsd extensions enable <id> or /gsd extensions disable <id>.
browser-tools — Browser Automation
browser-tools — Browser Automation
browser_* tool surface that Pi uses to open pages, interact with UI elements, take screenshots, run visual diffs, and record sessions. Used during browser-based UAT, E2E flows, and visual verification.Engine selection. For browser-facing (web-app) projects, Pi prefers the managed GSD Browser engine when its CLI is available and the daemon connects at session start. If the connect probe fails or the CLI is missing, Pi falls back to legacy Playwright for that session and records the reason. Non-browser-facing projects stay on Playwright — browser tools are incidental there and the managed daemon’s startup cost isn’t worth it.The session-start connect probe has a 10-second budget. Falling back to Playwright preserves browser-based UAT instead of blocking the run; the engine actually registered is what later UAT guidance and re-warm-ups see.Overrides. Set these in your shell or your provider environment to force a specific engine or tune startup:| Variable | Values | Effect |
|---|---|---|
GSD_BROWSER_ENGINE | gsd-browser | Force the managed GSD Browser engine. No probe, no fallback. |
GSD_BROWSER_ENGINE | playwright (alias: legacy) | Force legacy Playwright, even on web-app projects. |
GSD_BROWSER_ENGINE | off | Disable Pi browser tools entirely. |
GSD_BROWSER_WARMUP | 0 | Skip eager warm-up. Without warm-up the connect probe can’t verify the managed engine, so the default resolves to Playwright; the managed engine still works if you set GSD_BROWSER_ENGINE=gsd-browser explicitly. |
browser-executable, live-runtime, mixed, or human-experience always run against whichever engine is registered for the session — the canonical browser_* contract is engine-stable, so prompts and policies don’t change with the engine. UAT specs that drive Playwright directly from a shell command should be declared runtime-executable so they record runtime evidence instead of browser evidence.External MCP clients. gsd-browser also ships as a standalone MCP server for external clients (Claude Desktop, Cursor, custom harnesses). Write the entry with /gsd mcp init. Setting GSD_BROWSER_MCP_ENABLED=0 only skips writing that external entry — it does not disable Pi’s own browser tools.async-jobs — Background Task Execution
async-jobs — Background Task Execution
bg-shell — Background Shell Processes
bg-shell — Background Shell Processes
search-the-web — Web Search Tools
search-the-web — Web Search Tools
/gsd config to use your own quota.subagent — Subagent Spawning
subagent — Subagent Spawning
voice — Voice Transcription
voice — Voice Transcription
visual-brief — Visual Context Capture
visual-brief — Visual Context Capture
context7 — Library Documentation Lookup
context7 — Library Documentation Lookup
CONTEXT7_API_KEY for higher rate limits.mac-tools — macOS Accessibility Automation
mac-tools — macOS Accessibility Automation
remote-questions — Remote Question Routing
remote-questions — Remote Question Routing
universal-config — AI Tool Config Discovery
universal-config — AI Tool Config Discovery
slash-commands — Extension and Command Scaffolding
slash-commands — Extension and Command Scaffolding
/gsd create-slash-command, /gsd create-extension, and /gsd audit. Useful when you want to extend Pi’s capabilities for your team.ttsr — Streaming Output Guardrails
ttsr — Streaming Output Guardrails
Managing Extensions
Inspect and control extensions from inside a GSD session:| Command | What it does |
|---|---|
/gsd extensions list | List all extensions with their status (enabled, disabled, [user] for installed) |
/gsd extensions enable <id> | Enable a disabled bundled extension |
/gsd extensions disable <id> | Disable a bundled extension |
/gsd extensions info <id> | Show extension details, capabilities, and configuration |
/gsd extensions install <spec> | Install a community extension from npm, a git URL, or a local path |
/gsd extensions uninstall <id> | Remove a user-installed extension |
/gsd extensions update [id] | Update a user-installed npm extension to its latest version |
/gsd extensions validate <path> | Validate an extension directory against the manifest schema |
Installing Community Extensions
Install community extensions from npm using thegsd install command from your shell:
- Starts with
https://or ends with.git→ cloned from git - Contains
/or.and exists on disk → copied from local path - Otherwise → fetched from npm
~/.gsd/extensions/<id>/ and are available across all projects. Restart GSD after installation to activate a new extension.
Example: Installing a Community Provider Extension
pi-dashscope community extension, which adds Alibaba DashScope (ModelStudio) provider support with Qwen3, GLM-5, and other models — with proper OpenAI-compatible endpoint configuration and thinking mode support.
Building Your Own Extension
Extensions are npm packages that implement the GSD extension SDK. An extension can contribute:- Tools — new tools available to Pi during agent sessions
- Slash commands — new
/gsdcommands for the TUI - UI components — dashboard widgets and visualizer tabs
- Provider integrations — new LLM providers or model configurations
- Hooks — event handlers that fire on auto-mode events
