Tool vs. Command
The key distinction is who initiates the call:
If a user types a slash command to invoke it, use a Command. If an agent calls it as a function during its task loop, use a Tool.
Entrypoint format
Tool entrypoints can be:- JSON (
.json) — a function descriptor object - YAML (
.yaml) — a function descriptor object - Executable script — any regular executable file
- JSON and YAML descriptor entrypoints must exist and parse successfully.
- Script entrypoints must exist and be regular files. Host executability and local policy are checked at load time, not during portable validation.
Agent Volumes v0.1 does not standardize a full tool ABI. If your entrypoint is a JSON or YAML
descriptor and it includes
name and inputSchema fields, those are interpreted as
function-description metadata. The spec does not define the complete execution contract — that
remains runtime-local.Declaring a tool in volume.toml
Add a [[components]] entry with type = "tool" and point entrypoint to your tool descriptor or script.
JSON descriptor example
A JSON tool descriptor describes the function’s name, what it does, and the shape of its inputs:Portable capability classes
Agent Volumes describes tools in terms of portable capability classes — stable cross-runtime concepts that work regardless of which runtime loads your volume. When you design a tool, consider which capability class it belongs to:
Runtime-specific tool names like
Bash, WebFetch, or run_shell_command are profile-facing names. The portable capability class is what matters for cross-runtime compatibility.