Tooling Reference
Complete reference for all built-in agent tools — parameters, requirements, and scope restrictions.
Tools are grouped by domain: file operations, search, code intelligence (LSP), debugger (DAP), and kaged-internal (checkpoint, issues, interaction).
Each tool can be enabled or disabled per-agent via tool_overrides in project.yaml. Tools marked root-only are rejected on subagents at both DSL parse time and dispatch time.
Parameters marked required must be provided by the agent. Optional parameters show their defaults where applicable.
# file.read
Read a file or directory listing. Returns line-numbered content with offset/limit pagination. Binary files return metadata instead of content.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | — | Project-relative path to read. |
offset |
integer |
no | — | Line number to start from (1-indexed). Default: 1. [min: 1] |
limit |
integer |
no | — | Max lines to return. Default: 2000. [min: 1] |
Enable/disable in project.yaml: tool_overrides: { "file.read": { enabled: true } }
Requires read-only filesystem access
# file.write
Write (create or overwrite) a file. Creates parent directories if needed. The agent must have read the file first before overwriting.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | — | Project-relative path. |
content |
string |
yes | — | Full file content. |
Enable/disable in project.yaml: tool_overrides: { "file.write": { enabled: true } }
Requires read-write filesystem access
# file.edit
Apply a targeted edit to a file using exact string matching. The agent must have read the file first.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | — | Project-relative path. |
old_string |
string |
yes | — | Exact text to find. |
new_string |
string |
yes | — | Replacement text. Must differ from old_string. |
replace_all |
boolean |
no | — | Replace all occurrences. Default: false. |
Enable/disable in project.yaml: tool_overrides: { "file.edit": { enabled: true } }
Requires read-write filesystem access
# file.create
Create a new file. Fails if the file already exists. Creates parent directories if needed.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | — | Project-relative path. |
content |
string |
yes | — | File content. |
Enable/disable in project.yaml: tool_overrides: { "file.create": { enabled: true } }
Requires read-write filesystem access
# search.grep
Search file contents using regular expressions. Supports file-pattern filtering and multiple output modes. Timeout: 60s, output cap: 256 KB.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
pattern |
string |
yes | — | Regex pattern. |
path |
string |
no | — | Directory to search. Default: project root. |
include |
string |
no | — | File glob filter (e.g. "*.ts", "*.{ts,tsx}"). |
output_mode |
"content" | "files_with_matches" | "count" |
no | — | "content" (matching lines), "files_with_matches" (paths only), "count" (match counts per file). Default: "files_with_matches". |
head_limit |
integer |
no | — | Max results. Default: unlimited. [min: 1] |
Enable/disable in project.yaml: tool_overrides: { "search.grep": { enabled: true } }
Requires read-only filesystem access
# search.glob
Find files by name pattern. Results sorted by modification time (most recent first). Timeout: 60s, file limit: 100.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
pattern |
string |
yes | — | Glob pattern. |
path |
string |
no | — | Directory to search. Default: project root. |
Enable/disable in project.yaml: tool_overrides: { "search.glob": { enabled: true } }
Requires read-only filesystem access
# search.ast
Search code using AST-aware pattern matching via ast-grep. Patterns must be complete AST nodes. Use meta-variables: $VAR (single node), $$$ (multiple nodes).
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
pattern |
string |
yes | — | AST pattern with meta-variables. Must be a complete AST node. |
lang |
"typescript" | "javascript" | "tsx" | "python" | "rust" | "go" | "java" | "c" | "cpp" | "css" | "html" | "json" | "yaml" |
yes | — | Target language. |
paths |
string[] |
no | — | Directories to search. Default: project root. |
globs |
string[] |
no | — | Include/exclude globs. Prefix ! to exclude. |
context |
integer |
no | — | Context lines around match. Default: 0. [min: 0] |
Enable/disable in project.yaml: tool_overrides: { "search.ast": { enabled: true } }
Requires read-only filesystem access
# lsp.diagnostics
Get errors, warnings, and hints for a file or directory. Language is auto-detected from file extension. Spawns the language server on first call if needed.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | — | File or directory path. For directories, returns diagnostics for all files of the detected language. |
severity |
"error" | "warning" | "information" | "hint" | "all" |
no | — | Filter by severity. Default: "all". |
Enable/disable in project.yaml: tool_overrides: { "lsp.diagnostics": { enabled: true } }
Requires read-only filesystem access
# lsp.definition
Jump to the definition of a symbol. Returns file, line, and a preview of the definition.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | — | File path. |
line |
integer |
yes | — | Line number (1-indexed). [min: 1] |
character |
integer |
yes | — | Column (0-indexed). [min: 0] |
Enable/disable in project.yaml: tool_overrides: { "lsp.definition": { enabled: true } }
Requires read-only filesystem access
# lsp.references
Find all usages of a symbol across the workspace. References outside the caller's cage are included with path only (no preview).
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | — | File path. |
line |
integer |
yes | — | Line number (1-indexed). [min: 1] |
character |
integer |
yes | — | Column (0-indexed). [min: 0] |
include_declaration |
boolean |
no | — | Include the declaration itself. Default: false. |
Enable/disable in project.yaml: tool_overrides: { "lsp.references": { enabled: true } }
Requires read-only filesystem access
# lsp.symbols
Get symbols from a file (document outline) or search across the workspace.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | — | File path (required even for workspace scope, for LSP context). |
scope |
"document" | "workspace" |
no | — | "document" (file outline) or "workspace" (project-wide search). Default: "document". |
query |
string |
no | — | Symbol name to search. Required for workspace scope. |
limit |
integer |
no | — | Max results. Default: 50. [min: 1] |
Enable/disable in project.yaml: tool_overrides: { "lsp.symbols": { enabled: true } }
Requires read-only filesystem access
# lsp.rename
Rename a symbol across the workspace. All edits are applied atomically. If any file falls outside the caller's cage, the rename is rejected.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | — | File path. |
line |
integer |
yes | — | Line number (1-indexed). [min: 1] |
character |
integer |
yes | — | Column (0-indexed). [min: 0] |
new_name |
string |
yes | — | New symbol name. |
Enable/disable in project.yaml: tool_overrides: { "lsp.rename": { enabled: true } }
Requires read-write filesystem access
# lsp.actions
Get available code actions (quick fixes, refactors) for a location. Actions are informational — the agent decides whether to apply them via file.edit.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | — | File path. |
line |
integer |
yes | — | Line number (1-indexed). [min: 1] |
character |
integer |
yes | — | Column (0-indexed). [min: 0] |
diagnostics |
boolean |
no | — | Include diagnostic-associated actions. Default: true. |
Enable/disable in project.yaml: tool_overrides: { "lsp.actions": { enabled: true } }
Requires read-only filesystem access
# lsp.hover
Get hover information (type info, documentation) for a symbol.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
path |
string |
yes | — | File path. |
line |
integer |
yes | — | Line number (1-indexed). [min: 1] |
character |
integer |
yes | — | Column (0-indexed). [min: 0] |
Enable/disable in project.yaml: tool_overrides: { "lsp.hover": { enabled: true } }
Requires read-only filesystem access
# dap.launch
Start a program under the debugger. Creates a debug session scoped to the current kaged run. At most one active debug session per agent.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
runtime |
string |
yes | — | Runtime identifier ("bun", "node", "python", "go", etc.). |
script |
string |
yes | — | Project-relative path to the entry point. |
args |
string[] |
no | — | Arguments to the program. |
env |
object |
no | — | Environment variables (merged with cage env). |
stop_on_entry |
boolean |
no | — | Pause on first line. Default: true. |
cwd |
string |
no | — | Working directory (project-relative). Default: project root. |
Enable/disable in project.yaml: tool_overrides: { "dap.launch": { enabled: true } }
Requires read-only filesystem access
Requires capability: exec
# dap.attach
Attach the debugger to a running process via its debug port.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
runtime |
string |
yes | — | Runtime identifier. |
port |
integer |
yes | — | Debug port. |
host |
string |
no | — | Host to connect to. Default: "localhost". |
Enable/disable in project.yaml: tool_overrides: { "dap.attach": { enabled: true } }
Requires capability: exec
# dap.breakpoint
Set, remove, or list breakpoints. Supports conditional breakpoints, hit counts, and logpoints.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
action |
"set" | "remove" | "list" |
yes | — | Breakpoint action. |
path |
string |
no | — | File path. Required for set and remove. |
line |
integer |
no | — | Line number. Required for set and remove. [min: 1] |
condition |
string |
no | — | Conditional expression (only break when true). |
hit_count |
integer |
no | — | Break after N hits. [min: 1] |
log_message |
string |
no | — | Log message instead of breaking (logpoint). |
Enable/disable in project.yaml: tool_overrides: { "dap.breakpoint": { enabled: true } }
# dap.step
Step through code: into, over, or out of the current function.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
action |
"into" | "over" | "out" |
yes | — | Step direction. |
thread_id |
integer |
no | — | Thread to step. Default: current/main thread. |
Enable/disable in project.yaml: tool_overrides: { "dap.step": { enabled: true } }
# dap.continue
Continue execution until the next breakpoint or program exit.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
thread_id |
integer |
no | — | Thread to continue. Default: all threads. |
Enable/disable in project.yaml: tool_overrides: { "dap.continue": { enabled: true } }
# dap.stack
Get the call stack at the current pause point.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
thread_id |
integer |
no | — | Thread ID. Default: current thread. |
levels |
integer |
no | — | Max stack frames to return. Default: 20. [min: 1] |
Enable/disable in project.yaml: tool_overrides: { "dap.stack": { enabled: true } }
# dap.variables
Inspect variables in the current scope. Supports expanding nested properties.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
frame_id |
integer |
no | — | Stack frame to inspect. Default: top frame (0). |
scope |
"local" | "closure" | "global" |
no | — | Variable scope. Default: "local". |
filter |
string |
no | — | Variable name filter (substring match). |
expand |
string |
no | — | Variable name to expand (show nested properties). |
Enable/disable in project.yaml: tool_overrides: { "dap.variables": { enabled: true } }
# dap.evaluate
Evaluate an expression in the current debug context. Prefer "watch" context for side-effect-free inspection.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
expression |
string |
yes | — | Expression to evaluate. |
frame_id |
integer |
no | — | Stack frame context. Default: top frame. |
context |
"watch" | "repl" |
no | — | "watch" (side-effect-free) or "repl" (may have side effects). Default: "watch". |
Enable/disable in project.yaml: tool_overrides: { "dap.evaluate": { enabled: true } }
# dap.disconnect
End the debug session. Optionally terminates the debugged program.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
terminate_debuggee |
boolean |
no | — | Kill the debugged program. Default: true. |
Enable/disable in project.yaml: tool_overrides: { "dap.disconnect": { enabled: true } }
# kaged.checkpoint
Pause execution and yield control to the operator. Call this when you need human review, approval, or input before proceeding. After calling this tool, produce a brief summary of your current state and stop.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
reason |
string |
no | — | Why the checkpoint is needed. Shown to the operator in the UI. |
Enable/disable in project.yaml: tool_overrides: { "kaged.checkpoint": { enabled: true } }
# kaged.issue.list
List issues in the current project. Returns summaries with number, title, status, assignment, and timestamps. Use status filter to find open, triaged, or in-progress issues.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
status |
"open" | "triaged" | "assigned" | "in_progress" | "resolved" | "rejected" | "reopened" |
no | — | Filter by status. Omit for all. |
limit |
integer |
no | — | Max results. Default: 25. Max: 100. |
cursor |
string |
no | — | Pagination cursor from a previous response. |
Enable/disable in project.yaml: tool_overrides: { "kaged.issue.list": { enabled: true } }
Restricted to root agent only (principal_scope: root-only)
# kaged.issue.get
Get full detail of a single issue by project-scoped number, including its update stream (comments, status changes).
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
number |
integer |
yes | — | Project-scoped issue number (e.g. 42 for #42). |
Enable/disable in project.yaml: tool_overrides: { "kaged.issue.get": { enabled: true } }
Restricted to root agent only (principal_scope: root-only)
# kaged.issue.create
File a new issue in the current project. Returns the auto-assigned issue number. The agent is recorded as the author.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
title |
string |
yes | — | Issue title. Max 200 characters. |
body |
string |
yes | — | Issue body in Markdown. Max 16 KB. |
Enable/disable in project.yaml: tool_overrides: { "kaged.issue.create": { enabled: true } }
Restricted to root agent only (principal_scope: root-only)
# kaged.issue.comment
Add a comment to an issue. Comments are additive only — the agent cannot edit or delete existing comments or issue content.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
number |
integer |
yes | — | Project-scoped issue number. |
body |
string |
yes | — | Comment text in Markdown. Max 16 KB. |
visibility |
"all" | "operator_only" |
no | — | Who can see the comment. Default: all. |
Enable/disable in project.yaml: tool_overrides: { "kaged.issue.comment": { enabled: true } }
Restricted to root agent only (principal_scope: root-only)
# kaged.issue.transition
Change an issue's status. Enforces the status lifecycle — invalid transitions are rejected. A comment is always required when resolving or rejecting an issue.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
number |
integer |
yes | — | Project-scoped issue number. |
to |
"triaged" | "assigned" | "in_progress" | "resolved" | "rejected" | "reopened" |
yes | — | Target status. |
comment |
string |
no | — | Comment attached to the transition. Required for rejected and resolved. |
Enable/disable in project.yaml: tool_overrides: { "kaged.issue.transition": { enabled: true } }
Restricted to root agent only (principal_scope: root-only)
# kaged.ask
Ask the operator one or more structured questions. Each question has a title, description, and a set of predefined options with labels and descriptions. Questions can be single-select or multi-select. The session pauses until the operator responds. Use this when you need operator decisions, preferences, or direction before proceeding.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
summary |
string |
yes | — | Brief context explaining why you are asking. Shown above the questions. |
questions |
object[] |
yes | — | One or more questions to present to the operator. |
Enable/disable in project.yaml: tool_overrides: { "kaged.ask": { enabled: true } }
Restricted to root agent only (principal_scope: root-only)
# kaged.form
Request structured data from the operator via a dynamic form. Each field has a name, label, type, and required flag. Supported types: text, textarea, url, number, boolean, file. File uploads are stored at config:/tmp/ and the path is returned. The session pauses until the operator submits the form. Use this when a workflow or task needs specific input data.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
summary |
string |
yes | — | Brief context explaining what data is needed and why. |
fields |
object[] |
yes | — | Form fields to present to the operator. |
Enable/disable in project.yaml: tool_overrides: { "kaged.form": { enabled: true } }
Restricted to root agent only (principal_scope: root-only)