Extensions

Extend zot in any language over JSON-RPC.

zot can be extended in any language via a subprocess plus JSON-RPC protocol. Extensions can register slash commands, expose new tools to the model, intercept tool calls for permission gates, push status notes (notify / clear_notes), and open interactive extension-owned panels inside the TUI.

Extension command names match case-insensitively, while command_invoked.name uses the canonical spelling the extension registered. Registrations that differ only by case conflict, and the first registration remains active.

Nothing installs automatically. Opt in per machine with zot ext install, or per run with zot --ext ./path while hacking on one. Each extension gets its own directory, so persistent state can live beside the extension itself.

Enable show loaded resources at startup in /settings to list active extension names in the compact Extensions startup section.

Lifecycle events

Extensions can subscribe to lifecycle notifications, including tool_confirmation_requested. This event fires immediately before zot waits for interactive approval and includes tool_id, tool_name, and the short tool_preview shown in the confirmation dialog. It is not emitted in yolo mode, for remembered approvals, or when a call is blocked before confirmation, and it is notification-only rather than interceptable.

shell
zot ext install ./my-extension    # copy into $ZOT_HOME/extensions/
zot ext list                      # show what's loaded
zot ext logs my-extension -f      # tail stderr
zot update                        # fast-forward every git-installed extension

Reload and diagnose

Run /reload-ext after editing an extension to stop and reload discovered extensions plus explicit --ext paths without restarting zot. Load failures from startup and reload stay in the scrolling chat until a successful reload or /clear, but are never sent to the model or saved in the session transcript.

Startup and handshake failures include the exact extension stderr log path. If an extension exits before sending hello, the error also reports its exit status or terminating signal. Use zot ext logs <name> -f to follow that log while debugging.

Reference implementations live under examples/extensions/ in Go, TypeScript, and Node. Browse community extensions on the Extensions page, or read the full protocol spec on GitHub.