Extension inventory
Roder's /extensions page is backed by the app-server
extensions/list method. It reports the extensions installed in the active
runtime registry, not every crate that happens to exist in the repository.
Discovery contract
Clients call extensions/list and receive manifests plus capability statuses:
{
"method": "extensions/list",
"params": null
} Each manifest contains:
id,name,version, andapi_version.descriptionfor UI display.provides, the typed services installed into the registry.required_capabilities, the sensitive access requested by the extension.
Service types
Extensions can contribute these services:
InferenceEngineContextProviderContextPlannerSessionStoreCheckpointStoreMemoryStoreEmbeddingProviderToolProviderSubagentDispatcherPolicyContributorEventSinkTaskExecutorNotificationSinkInteractiveRegionHandlerRemoteRunnerProviderStatusSegmentPaletteSource
Built-in host extensions
| Runtime id | Provides | Purpose | Capabilities |
|---|---|---|---|
roder-ext-mock-provider | InferenceEngine(mock) | Deterministic local provider for tests and offline development. | none |
roder-ext-codex-oauth-provider | InferenceEngine(codex) | Codex provider backed by ChatGPT OAuth credentials. | none declared |
roder-ext-builtin-echo-tools | ToolProvider(builtin-echo) | Offline echo tool provider. | none |
roder-ext-builtin-coding-tools | ToolProvider(builtin-coding-tools) | Workspace file, search, patch, edit, workflow, media, shell, and command tools. | fs.read.workspace, fs.write.workspace, process.spawn.shell |
roder-ext-zerolang | ToolProvider(zerolang) | Zero compiler diagnostics, graph inspection, and checked ProgramGraph edit tools. | fs.read.workspace, fs.write.workspace, process.spawn.shell |
roder-ext-default-tui | StatusSegment(...), PaletteSource(...) | Built-in TUI status line and command-palette surfaces. | none |
The default TUI extension installs status segments for mode, model,
session, branch, usage, mcp, and
runner. It also installs palette sources for commands,
sessions, agents, models, modes,
workflow-imports, and media.
Inference providers
| Runtime id | Provides | When installed | Capabilities |
|---|---|---|---|
roder-ext-openai-responses-openai | InferenceEngine(openai) | When OpenAI credentials are configured. Runtime id is roder-ext-openai-responses-{provider_id}. | network.api.openai.com, secret.read.OPENAI_API_KEY |
roder-ext-openai-chat-completions | InferenceEngine(openai-chat-completions) | Implemented, but not installed by the default host path. | network.api.openai.com, secret.read.OPENAI_API_KEY |
roder-ext-anthropic | InferenceEngine(anthropic) | When Anthropic credentials are configured. | network.api.anthropic.com, secret.read.ANTHROPIC_API_KEY |
roder-ext-gemini | InferenceEngine(gemini) | When Gemini credentials are configured. | network.api.googleai, secret.read.GEMINI_API_KEY |
roder-ext-cursor | InferenceEngine(cursor) | Installed by default; live turns require a Cursor User API Key. | network.agentn.global.api5.cursor.sh, network.api2.cursor.sh |
roder-ext-openrouter-provider | InferenceEngine(openrouter) | Installed by default; live turns require an OpenRouter API key. Includes the built-in x-ai/grok-build-0.1 Grok Build route. | network.openrouter.ai, optionally secret.read.OPENROUTER_API_KEY |
roder-ext-xai | InferenceEngine(supergrok); also InferenceEngine(xai) with an API key. | Installed by default. Direct xAI API-key surface is conditional. | network.api.x.ai; optionally secret.read.XAI_API_KEY |
roder-ext-opencode-provider | InferenceEngine(opencode), InferenceEngine(opencode-go) | Installed by default. | network.opencode.ai |
roder-ext-poolside-provider | InferenceEngine(poolside) | Installed by default. | network.inference.poolside.ai |
Storage, memory, and embeddings
| Runtime id | Provides | Purpose | Capabilities |
|---|---|---|---|
roder-ext-jsonl-session | SessionStore(jsonl) | Append-only JSONL session persistence under Roder home. | fs.readwrite.roder-home |
roder-ext-memory | MemoryStore(sqlite-memory), ContextProvider(memory-context), ToolProvider(memory-tools) | SQLite-backed project/global memory, memory context, and memory tools. | fs.readwrite.roder-home |
roder-ext-openai-embeddings | EmbeddingProvider(openai) | OpenAI embedding provider for memories. | network.openai, secrets.openai-api-key |
Policy, tasks, subagents, and notifications
| Runtime id | Provides | When installed | Capabilities |
|---|---|---|---|
roder-ext-plan-mode | PolicyContributor(plan-mode) | Installed by default. | none |
roder-ext-task-process | TaskExecutor(process) | Installed by default. | process.spawn.shell |
roder-ext-task-subagent | Currently none declared in the manifest. | Implemented, but not installed by the default host path. | process.spawn.roder |
roder-ext-subagents | SubagentDispatcher(in-process-subagents) and a task tool provider. | Only when subagents are enabled and valid agent definitions are loaded. | process.spawn.roder |
roder-ext-notify-terminal | NotificationSink(terminal-bell) | When notifications and terminal notifications are enabled. | terminal.write |
roder-ext-notify-desktop | NotificationSink(desktop) | When notifications and desktop notifications are enabled. | desktop.notification |
The default notification kinds are NeedsInput, TurnIdle,
TaskCompleted, and TaskFailed.
Web search
Web search has a canonical router plus optional provider-specific tools. The router exposes
the unified local web_search tool when external web-search mode is configured.
| Runtime id | Provides | Purpose | Capabilities |
|---|---|---|---|
roder-ext-web-search | ToolProvider(web-search) | Canonical web_search router backed by Firecrawl, Perplexity, Tavily, or Parallel. | network.web |
roder-ext-firecrawl-search | ToolProvider(firecrawl-search) | Firecrawl-backed search and retrieval tools. | network.api.firecrawl.dev, secret.read.FIRECRAWL_API_KEY |
roder-ext-perplexity-search | ToolProvider(perplexity-search) | Perplexity raw Search API tools. | network.api.perplexity.ai, secret.read.PERPLEXITY_API_KEY |
roder-ext-tavily-search | ToolProvider(tavily-search) | Tavily-backed web search tools. | network.api.tavily.com, secret.read.TAVILY_API_KEY |
roder-ext-parallel-search | ToolProvider(parallel-search) | Parallel.ai objective-oriented search tools. | network.web |
Remote runners
Remote runner extensions install providers behind a common protocol for files, commands, ports, snapshots, mounts, artifacts, and provider state.
| Runtime id | Provides | Purpose | Capabilities |
|---|---|---|---|
roder-ext-runner-unix-local | RemoteRunnerProvider(unix-local) | Local Unix workspace runner. | fs.readwrite.workspace, process.spawn.shell |
roder-ext-runner-docker | RemoteRunnerProvider(docker) | Local Docker container runner. | fs.readwrite.workspace, process.spawn.docker |
roder-ext-runner-blaxel | RemoteRunnerProvider(blaxel) | Hosted Blaxel runner. | network.http, secret.read.BLAXEL_API_KEY |
roder-ext-runner-cloudflare | RemoteRunnerProvider(cloudflare) | Hosted Cloudflare runner. | network.http, secret.read.CLOUDFLARE_API_TOKEN |
roder-ext-runner-daytona | RemoteRunnerProvider(daytona) | Hosted Daytona runner. | network.http, secret.read.DAYTONA_API_KEY |
roder-ext-runner-e2b | RemoteRunnerProvider(e2b) | Hosted E2B runner. | network.http, secret.read.E2B_API_KEY |
roder-ext-runner-modal | RemoteRunnerProvider(modal) | Hosted Modal runner. | network.http, secret.read.MODAL_TOKEN_SECRET |
roder-ext-runner-runloop | RemoteRunnerProvider(runloop) | Hosted Runloop runner. | network.http, secret.read.RUNLOOP_API_KEY |
roder-ext-runner-vercel | RemoteRunnerProvider(vercel) | Hosted Vercel runner. | network.http, secret.read.VERCEL_TOKEN |
Catalog and support crates
roder-configure uses distribution catalog ids from crate metadata. Those ids are
for profile generation and do not always match runtime manifest ids.
openai-responsescan becomeroder-ext-openai-responses-openai.xaibecomesroder-ext-xai.jsonl-sessionbecomesroder-ext-jsonl-session.
Two workspace crates are worth calling out: roder-ext-runner-hosted-common is shared
hosted-runner support, not a user-facing manifest; roder-ext-disk-context has catalog
metadata and helper code, but no runtime RoderExtension implementation was present in
the inspected workspace.
Why the list can differ
- Missing API keys suppress OpenAI, Anthropic, Gemini, OpenRouter live requests, or direct xAI API-key surfaces.
- Notification settings can suppress terminal or desktop notification sinks.
- External web search appears only when enabled and configured.
- Subagents appear only with valid loaded definitions.
- Custom distributions can install a different extension set.