Documentation

Feathers

Extensions on the Perch — the Claude Feather, subprocess plugins, and building your own.

Feathers are toowl's extension system. They render in the Perch (left sidebar), respond to palette commands, and can spawn panes or show banners — all without restarting the terminal.

The Claude Feather

Ships built in via toowl-plugin-claude. Bring your own claude binary; the Feather handles the rest.

  • Session list — every Claude Code conversation in the active pane's cwd, labeled by title or last user prompt.
  • Live badge — running sessions show live; the list updates via filesystem watch on ~/.claude/projects/.
  • One-click resume — click a row to spawn or focus a Claude session in the current directory.
  • Crash recovery — unexpected exit shows a [R] Resume / [X] Dismiss banner with one-key restart.
  • Palette integration — Claude commands appear alongside terminal actions in Cmd+Shift+P.

Subprocess Feathers

Drop a Feather in ~/.config/toowl/plugins/<id>/ with a plugin.toml manifest and a binary. The host speaks newline-delimited JSON-RPC over stdio. Capabilities are declared in the manifest and enforced on every host API call.

# ~/.config/toowl/plugins/my-feather/plugin.toml
id = "my-feather"
name = "My Feather"
version = "0.1.0"
program = "./my-feather"
capabilities = ["spawn_pane", "set_sidebar_dirty"]

Enable / disable

[plugins.my-feather]
enabled = true

Changes hot-reload. Toggle Feathers in Settings, the hamburger Feathers… manager, or config.toml.

Developer env vars

VariableEffect
TOOWL_DEV_PLUGINS=dummyAdds a test Feather (palette counter + echo pane).
TOOWL_DEV_PLUGINS=noneDisables all Feathers (bisect helper).
TOOWL_PERF=1Logs a 1s frame-loop summary (skipped frames, render time).

Build your own

Read the wire protocol and the Aviary for install and publish workflows. In-process Feathers implement toowl_plugin::Plugin directly; out-of-process Feathers use JSON-RPC.

Want to contribute a Feather? Open a PR or issue on GitHub.