Overview
| Tool | Category | Default | Gate | Description |
|---|---|---|---|---|
task_create | Task | Yes | — | Create a new task |
task_get | Task | Yes | — | Get a task by ID |
task_list | Task | Yes | — | List tasks with optional filters |
task_update | Task | Yes | — | Update an existing task |
shell | Shell | No | — | Execute a shell command |
shell_jobs | Shell | No | — | List background shell jobs |
shell_job_status | Shell | No | — | Check background job status |
shell_job_cancel | Shell | No | — | Cancel a background job |
agent_spawn | Sub-Agent | No | sub-agents | Spawn a new sub-agent |
agent_fork | Sub-Agent | No | sub-agents | Fork with continued context |
agent_status | Sub-Agent | No | sub-agents | Get sub-agent status |
agent_cancel | Sub-Agent | No | sub-agents | Cancel a sub-agent |
agent_list | Sub-Agent | No | sub-agents | List all sub-agents |
memory_search | Memory | N/A | memory-store-session | Search semantic memory |
wait | Utility | Yes | — | Pause execution |
datetime | Utility | Yes | — | Get current date/time |
send_message | Comms | Yes | comms | Send text to a peer |
send_request | Comms | Yes | comms | Send a request to a peer |
send_response | Comms | Yes | comms | Respond to a request |
list_peers | Comms | Yes | comms | List trusted peers |
Enabling and disabling tools
Factory-level flags
Factory-level flags
AgentFactory controls which tool categories are available via builder methods:| Flag | Builder Method | Default | Controls |
|---|---|---|---|
enable_builtins | .builtins(bool) | false | Task tools, utility tools (wait, datetime) |
enable_shell | .shell(bool) | false | All shell tools (shell, shell_jobs, shell_job_status, shell_job_cancel) |
enable_subagents | .subagents(bool) | false | All sub-agent tools (requires sub-agents feature) |
enable_memory | .memory(bool) | false | memory_search (requires memory-store-session feature) |
enable_comms | .comms(bool) | false | All comms tools (requires comms feature) |
meerkat/src/factory.rs — AgentFactory struct and builder methods.Per-build overrides
Per-build overrides
Each
All default to
AgentBuildConfig can override factory-level flags for a single agent build:| Override Field | Type | Effect |
|---|---|---|
override_builtins | Option<bool> | Takes precedence over enable_builtins when Some |
override_shell | Option<bool> | Takes precedence over enable_shell when Some |
override_subagents | Option<bool> | Takes precedence over enable_subagents when Some |
override_memory | Option<bool> | Takes precedence over enable_memory when Some |
None (use factory-level setting).Source: meerkat/src/factory.rs — AgentBuildConfig struct.ToolPolicyLayer
ToolPolicyLayer
Individual tools can be enabled or disabled via
ToolPolicyLayer in BuiltinToolConfig. When shell is enabled, a ToolPolicyLayer is applied that activates the four shell tools (which have default_enabled: false). The same mechanism applies to sub-agent tools.Capability registrations
Capability registrations
Capabilities are registered via the
inventory crate in meerkat-tools/src/lib.rs:- Builtins (
CapabilityId::Builtins):task_list,task_create,task_get,task_update,wait,datetime. Controlled byconfig.tools.builtins_enabled. - Shell (
CapabilityId::Shell):shell,shell_jobs,shell_job_status,shell_job_cancel. Controlled byconfig.tools.shell_enabled. - SubAgents (
CapabilityId::SubAgents):agent_spawn,agent_fork,agent_status,agent_cancel,agent_list. Requiressub-agentsfeature.
Task tools
Task tools provide structured work tracking. They are enabled by default when builtins are on. Tasks are persisted viaTaskStore (either FileTaskStore on disk or MemoryTaskStore in-memory).
Task data model
Task data model
A
Source:
Task object returned by task tools has these fields:| Field | Type | Description |
|---|---|---|
id | String | Unique task identifier |
subject | String | Short subject/title |
description | String | Detailed description |
status | String | "pending", "in_progress", or "completed" |
priority | String | "low", "medium", or "high" |
labels | String[] | Labels/tags for categorization |
blocks | String[] | IDs of tasks that this task blocks |
blocked_by | String[] | IDs of tasks that block this task |
created_at | String | ISO 8601 creation timestamp |
updated_at | String | ISO 8601 last-updated timestamp |
created_by_session | String? | Session ID that created this task |
updated_by_session | String? | Session ID that last updated this task |
owner | String? | Owner/assignee (agent name or user identifier) |
metadata | Object | Arbitrary key-value metadata |
meerkat-tools/src/builtin/types.rs — Task struct.task_create
task_create
Create a new task in the project task list.Default enabled: YesReturns: The created
Short subject/title of the task.
Detailed description of what needs to be done.
"low", "medium", or "high".Labels/tags for categorization.
Task IDs that this task blocks.
Task IDs that block this task.
Owner/assignee.
Arbitrary key-value metadata.
Task object (see task data model above).Source: meerkat-tools/src/builtin/tasks/task_create.rstask_get
task_get
Get a task by its ID.Default enabled: YesReturns: The
The task ID to retrieve.
Task object matching the given ID.Error: ExecutionFailed if the task ID is not found.Source: meerkat-tools/src/builtin/tasks/task_get.rstask_list
task_list
List tasks in the project, optionally filtered by status or labels.Default enabled: YesReturns: Array of
Filter by status:
"pending", "in_progress", or "completed".Filter by labels (tasks matching any label).
Task objects matching the filters.Source: meerkat-tools/src/builtin/tasks/task_list.rstask_update
task_update
Update an existing task. Only provided fields are modified; omitted fields remain unchanged.Default enabled: YesReturns: The updated
The task ID to update.
New subject/title.
New description.
New status:
"pending", "in_progress", or "completed".New priority:
"low", "medium", or "high".Replace all labels.
New owner/assignee.
Merge metadata (set key to
null to remove).Task IDs to add to the
blocks list.Task IDs to remove from the
blocks list.Task IDs to add to the
blocked_by list.Task IDs to remove from the
blocked_by list.Task object.Error: ExecutionFailed if the task ID is not found.Source: meerkat-tools/src/builtin/tasks/task_update.rsShell tools
Shell tools execute commands and manage background jobs. They are alldefault_enabled: false and require the factory-level enable_shell flag (or a ToolPolicyLayer override) to be active.
Shell configuration
Shell configuration
Shell behavior is controlled by
Source:
ShellConfig:| Config Field | Type | Default | Description |
|---|---|---|---|
enabled | bool | false | Master switch for shell tools |
default_timeout_secs | u64 | 30 | Default command timeout |
restrict_to_project | bool | true | Restrict working dirs to project root |
shell | String | "nu" | Shell binary name (Nushell by default; falls back to bash/zsh/sh) |
shell_path | PathBuf? | None | Explicit shell binary path |
project_root | PathBuf | CWD | Project root for path restriction |
max_completed_jobs | usize | 100 | Maximum completed jobs retained |
completed_job_ttl_secs | u64 | 300 | TTL for completed job records (seconds) |
max_concurrent_processes | usize | 10 | Maximum concurrent background processes |
security_mode | SecurityMode | Unrestricted | Command security policy |
security_patterns | Vec<String> | [] | Glob patterns for allow/deny lists |
meerkat-tools/src/builtin/shell/config.rsShell security modes
Shell security modes
The
Patterns are matched against the canonicalized command invocation. The engine parses the full command string into individual words, then validates the executable (first word) and the full command string against the pattern set.Source:
SecurityEngine validates commands before execution using POSIX-compliant word splitting (shlex) and glob pattern matching (globset).| Mode | Behavior |
|---|---|
Unrestricted | All commands allowed (default) |
AllowList | Only commands matching security_patterns globs are allowed |
DenyList | Commands matching security_patterns globs are rejected |
meerkat-tools/src/builtin/shell/security.rsshell
shell
Execute a shell command. Uses POSIX-style parsing for policy checks; runs via Nushell or fallback shell.Default enabled: No (requires shell to be enabled)Source:
The command to execute (POSIX-style parsing for policy checks).
Working directory (relative to project root).
Timeout in seconds.
If
true, run in background and return job ID immediately.Output is truncated to the last 100,000 characters if it exceeds that limit. Fields
stdout_lossy and stderr_lossy indicate whether output was lossy-decoded from non-UTF-8 bytes.meerkat-tools/src/builtin/shell/tool.rsshell_jobs
shell_jobs
List all background shell jobs.Default enabled: No (requires shell to be enabled)Parameters: None (empty object).The
status field is one of: "running", "completed", "failed", "timed_out", "cancelled".Source: meerkat-tools/src/builtin/shell/jobs_list_tool.rsshell_job_status
shell_job_status
Check status of a background shell job. Returns full job details including output when complete.Default enabled: No (requires shell to be enabled)Error:
The job ID to check.
ExecutionFailed if the job ID is not found.Source: meerkat-tools/src/builtin/shell/job_status_tool.rsshell_job_cancel
shell_job_cancel
Cancel a running background shell job.Default enabled: No (requires shell to be enabled)Error:
The job ID to cancel.
ExecutionFailed if the job ID is not found.Source: meerkat-tools/src/builtin/shell/job_cancel_tool.rsShell types
Shell types
JobId format:
"job_" followed by a UUID v7 string.JobStatus variants: Running, Completed, Failed, TimedOut, Cancelled (serialized as lowercase snake_case strings).Source: meerkat-tools/src/builtin/shell/types.rsSub-agent tools
Sub-agent tools allow spawning, forking, monitoring, and cancelling child agents. They are alldefault_enabled: false and require both the sub-agents Cargo feature and the factory-level enable_subagents flag.
Shared types
Shared types
agent_spawn
agent_spawn
Spawn a new sub-agent with clean context. The sub-agent starts fresh with only the provided prompt.Default enabled: No (requires When
sub-agents feature + subagents enabled)Initial prompt/task for the sub-agent.
LLM provider:
"anthropic", "openai", or "gemini".Model name (provider-specific).
Tool access policy (see shared types).
Budget limits (see shared types).
Override system prompt for the sub-agent.
Agent stays alive processing comms after initial prompt (only with
comms feature).The
host_mode parameter is only present when the comms feature is enabled. Without comms, SpawnParamsNoComms is used which omits this field.comms is enabled and host_mode is active, additional comms field is included with connection details.Source: meerkat-tools/src/builtin/sub_agent/spawn.rsagent_fork
agent_fork
Fork the current agent with continued context. The forked agent inherits the parent’s conversation history.Default enabled: No (requires Source:
sub-agents feature + subagents enabled)Additional prompt/instruction appended to inherited conversation history.
"anthropic", "openai", or "gemini".Model name (provider-specific).
Tool access policy (see shared types).
Budget allocation:
"equal", "remaining", "proportional", or "fixed:N".meerkat-tools/src/builtin/sub_agent/fork.rsagent_status
agent_status
Get status and output of a sub-agent by ID. Use this to poll for completion.Default enabled: No (requires When the agent is still running,
sub-agents feature + subagents enabled)UUID of the sub-agent.
is_final is false and output/duration_ms/tokens_used may be absent. If the agent failed, an error field is present instead of output.Source: meerkat-tools/src/builtin/sub_agent/status.rsagent_cancel
agent_cancel
Cancel a running sub-agent.Default enabled: No (requires Source:
sub-agents feature + subagents enabled)UUID of the sub-agent to cancel.
meerkat-tools/src/builtin/sub_agent/cancel.rsagent_list
agent_list
List all sub-agents spawned by this agent.Default enabled: No (requires Source:
sub-agents feature + subagents enabled)Parameters: None (empty object).meerkat-tools/src/builtin/sub_agent/list.rsMemory tool
The memory search tool lives in themeerkat-memory crate and is composed into the tool dispatcher as a separate MemorySearchDispatcher (implementing AgentToolDispatcher). It is NOT part of CompositeDispatcher — it is wired via ToolGateway when the memory-store-session feature is enabled and enable_memory is true.
memory_search
memory_search
Search semantic memory for past conversation content. Memory contains text from earlier conversation turns that were compacted away to save context space.The Returns an empty array if no matches are found.Source:
Natural language search query describing what you want to recall.
Maximum number of results to return (max: 20).
limit is capped at 20 regardless of the requested value.meerkat-memory/src/tool.rsUtility tools
Utility tools are general-purpose helpers enabled by default when builtins are on.wait
wait
Pause execution for the specified number of seconds. Supports fractional seconds. Useful for polling loops or rate limiting.Default enabled: YesMaximum wait time is 300 seconds (5 minutes). Values below 0.1 or above 300.0 are rejected.Source:
Duration to wait (range: 0.1 to 300.0).
meerkat-tools/src/builtin/utility/wait.rsdatetime
datetime
Get the current date and time. Returns ISO 8601 formatted datetime and Unix timestamp.Default enabled: YesParameters: None (empty object).Source:
meerkat-tools/src/builtin/utility/datetime.rsComms tools
Comms tools enable inter-agent communication. They require thecomms Cargo feature (dep:meerkat-comms) and the factory-level enable_comms flag. Unlike other tool categories, comms tools are provided as a separate CommsToolSurface dispatcher (implementing AgentToolDispatcher) and composed via ToolGateway, NOT bundled into CompositeDispatcher.
Comms tools are only shown to the agent when at least one trusted peer is configured (controlled by CommsToolSurface::peer_availability()).
Tool definitions (name, description, input schema) are dynamically loaded from meerkat_comms::tools_list().
send_message
send_message
send_request
send_request
Send a request to a trusted peer and wait for acknowledgement. Use this for structured interactions where you expect a response.Default enabled: Yes (when comms is active)Source:
Peer name to send the request to.
Request intent/action identifier.
Request parameters (arbitrary JSON).
meerkat-comms/src/mcp/tools.rs — SendRequestInputsend_response
send_response
Send a response back to a previous request from a peer.Default enabled: Yes (when comms is active)Source:
Peer name to send the response to.
ID of the request being responded to.
Response status:
"accepted", "completed", or "failed".Response result data (arbitrary JSON).
meerkat-comms/src/mcp/tools.rs — SendResponseInputlist_peers
list_peers
List all trusted peers and their connection status.Default enabled: Yes (when comms is active)Parameters: None (empty object).Source:
meerkat-comms/src/mcp/tools.rs — ListPeersInputCargo feature gates
Tool availability depends on compile-time features in themeerkat-tools crate:
| Feature | Default | Dependencies | Tools unlocked |
|---|---|---|---|
sub-agents | Yes | dep:meerkat-client | agent_spawn, agent_fork, agent_status, agent_cancel, agent_list |
comms | Yes | dep:meerkat-comms | send_message, send_request, send_response, list_peers |
mcp | Yes | dep:meerkat-mcp | External MCP tool routing (not builtin tools) |
memory_search tool is gated by the memory-store-session feature on the meerkat facade crate (not meerkat-tools), since MemorySearchDispatcher lives in meerkat-memory.
Source: meerkat-tools/Cargo.toml