@kind, @deploy) that can orchestrate tools, interact with APIs, or perform any logic you can program.
For Users: Managing Plugins
List installed plugins
[builtin] plugins (such as @coder) and [remote] plugins (from connected servers).
Install a plugin
Install directly from a Git repository:~/.chatcli/plugins/.
View plugin details
Uninstall a plugin
Reload plugins
ChatCLI automatically monitors~/.chatcli/plugins/ and reloads when it detects changes (creation, removal, modification). A 500ms debounce prevents multiple reloads.
To force a manual reload:
For Developers: Creating a Plugin
The plugin contract
- Executable — The plugin must be an executable file (any language)
- Location — Placed in
~/.chatcli/plugins/ - Command name — The file name becomes the command. E.g., file
kind= command@kind - Metadata (
--metadata) — Required. The executable must respond to this flag with JSON:
- Schema (
--schema) — Optional. Describes the accepted parameters:
- Communication (stdout vs stderr):
- stdout — Only the final result (returned to ChatCLI/AI)
- stderr — Progress logs, status, and warnings (displayed in real time to the user)
Example: “Hello World” Plugin in Go
Compilation and installation
Capability Interfaces (opt-in)
Plugins can expose capabilities through optional Go interfaces. Legacy plugins that don’t implement them keep working unchanged — every interface is fail-closed (conservative default). When implemented, the plugin participates in orchestrator optimizations:
Example — a plugin that wants auto-allow + parallelization + custom label:
@read, @search, @tree, @todo) — see Atomic Tools — use every relevant capability as a reference implementation.
Signature Verification
Starting with this version, plugins require Ed25519 digital signatures by default. This ensures that only plugins from trusted sources are loaded and executed.How It Works
Each plugin must have a corresponding.sig file in the same directory:
Managing Trusted Keys
Ed25519 public keys are stored in the~/.chatcli/trusted-keys/ directory:
1
Generate a key pair
2
Sign a plugin
3
Distribute the public key
Share the
.pub file with users who should trust your plugins. They should place it in ~/.chatcli/trusted-keys/.File Permissions
The plugins directory uses 0o700 permissions (owner-only read, write, and execute). ChatCLI checks permissions on startup and warns if they are more permissive.Development Mode
For local development, you can disable signature verification:Remote Plugins
When connecting to a server viachatcli connect, server plugins are discovered automatically:
- They appear in
/plugin listwith the[remote]tag - They are executed on the server (not downloaded locally by default)
- Local and remote plugins coexist without conflict