Skip to main content
Extensions are the escape hatch. Anything you can’t do with a skill or a built-in tool, you can do with an extension.

What an extension can register

  • Tools — new AgentTool implementations the model can call.
  • Slash commands — new commands next to /refine, /login, etc.
  • Shortcuts — keyboard shortcuts in interactive clients.
  • UI extensions — components rendered by the web adapter through ExtensionUIContext.

Contract

Implement ExtensionRuntime and ExtensionAPI from packages/coding-agent/src/core/extensions/. Two hard rules:
  1. Degrade locally. An optional feature that fails to load must not block agent startup or session attach. Log, disable, move on.
  2. Update the adapter when the surface changes. If your extension exposes new UI, the web adapter has to know about it — they’re released in lockstep.

Load an extension

Or wire it into your config so it loads every time. Disable all extensions for a run with --no-extensions.

Extensions vs skills

  • Reach for a skill when the “code” is instructions or a small Python module.
  • Reach for an extension when you need a new tool, a new slash command, or UI hooks.
Skills are built on top of extensions — every skill registers as an extension under the hood.

MCP is an extension

MCP servers ship as extensions. See MCP integration.
Last modified on August 17, 2026