Overview
tallow ships with 52 built-in extensions that handle everything from tool output rendering to multi-agent coordination. Extensions aren’t plugins bolted on — they’re the primary way tallow’s features are implemented.
What extensions can do
Section titled “What extensions can do”Extensions have full access to tallow’s runtime:
- Register tools — give the LLM new capabilities
- Render TUI widgets — status bars, task boards, progress indicators
- Hook lifecycle events — intercept tool calls, turn completions, errors
- Register commands — add
/slashcommands for users - Inject context — modify the system prompt dynamically
- Compose with each other — one extension can enhance another
Categories
Section titled “Categories”Every extension has a category property in its extension.json
manifest. The docs sidebar and the installer group extensions by
these categories:
Note: Some extensions provide both LLM-callable tools and UI features. For example, the
tasksextension provides a task board UI and amanage_taskstool that lets the AI manage tasks programmatically.
| Category | Count | What’s in it |
|---|---|---|
| Tools | 19 | bash, edit, read, write, cd, web_fetch, web_search, subagent, teams, tasks, agent-commands, ask-user-question, background-task, output-styles, theme-selector, MCP adapter, session-memory, wezterm-pane-control |
| UI & Display | 6 | custom footer, git status, tool display, minimal skill display, session-namer, random-spinner |
| Commands | 7 | command-prompt, command-expansion, context-fork, file-reference, health, shell-interpolation, skill-commands |
| Utilities | 6 | cheatsheet, context-usage, debug, init, show-system-prompt, read-tool-enhanced |
| Integrations | 3 | lifecycle hooks, claude-bridge, worktree |
| Language Support | 1 | LSP |
| Context | 1 | context-files |
| Dev | 1 | upstream-check |
| Aliases | 1 | /clear → /new |
| Core | 1 | _icons (internal icon registry) |
Catalog and selection
Section titled “Catalog and selection”Use the catalog command to inspect extensions before enabling them:
tallow extensions # default table outputtallow extensions --json # machine-readable catalogtallow extensions tasks # detail view for one extension ID| Invocation | Output |
|---|---|
tallow extensions | Human-friendly table (default) |
tallow extensions --json | Full JSON payload for scripts/CI |
tallow extensions <id> | Expanded metadata for a single extension |
Catalog output is driven by each extension manifest, including
whenToUse, capabilities, and permissionSurface.
For least-privilege startup, explicitly select only what you need:
tallow --extensions-only --extension tasks --extension lspRepeat --extension <selector> to compose the exact extension set.
How extensions are loaded
Section titled “How extensions are loaded”All bundled extensions ship with tallow and are loaded
automatically — no separate installation step. Just run tallow.
Extensions load from multiple sources in this order:
- Bundled — shipped in the tallow package’s
extensions/directory - User global —
~/.tallow/extensions/ - Project local —
.tallow/extensions/
If a user extension has the same directory name as a bundled extension, the user version overrides the bundled one. tallow prints a notice at startup when this happens.
Disabling extensions
Section titled “Disabling extensions”The installer lets you disable extension groups. Under the hood,
disabled extension names are stored in settings.json:
{ "disabledExtensions": ["git-status", "cheatsheet"]}You can also pass --no-extensions on the CLI to disable all
extensions for a session.
Creating your own
Section titled “Creating your own”See Creating Extensions for the full guide on building custom extensions.