AUTO-DETECTED FROM tools/*.js — LIVE SCHEMAS
Tool catalog
Tool catalog — the package tools' live schemas (auto-detected). Harness metadata flags (sandbox, secret, …) are shown here but stripped from the schemas a model ever sees.
bash sandbox
tools/bash.js
Run a Bash command in the working folder; return output and any exit code. Prefer read to inspect folders.
Input schema
{
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "The Bash command to run within a weak sandbox (no cd or ln). `\\` is often rejected unless it matches known allowed path within this folder tree (save temporary scripts files before running them)."
},
"timeout": {
"type": "integer",
"description": "Requested milliseconds timeout (default: 120000; capped at 1200000)"
},
"env": {
"type": "object",
"description": "Extra environment variables for the command."
},
"background": {
"type": "boolean",
"description": "Use for processes intended to keep running (servers, daemons, etc'); not a timeout extension. Returns process id. Inspect with process-list/process-output or stop with process-stop."
}
},
"required": [
"command"
]
}edit trusted
tools/edit.js
Replace exact text in one file. Read the file first, then send oldText/newText pairs from its current content. Merge nearby or overlapping changes into one edit. Set matchAll on an item to replace every occurrence of that item's oldText. Use edit-undo with the returned edit id to reverse it.
Input schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "File inside the Agent folder; use a relative or contained absolute path."
},
"edits": {
"type": "array",
"description": "The replacements to make. Match each oldText against the file as it is now, not against earlier edits in the same call. Never send overlapping or nested edits; merge them into one edit.",
"items": {
"type": "object",
"properties": {
"oldText": {
"type": "string",
"description": "The exact text to replace. Make it unique unless matchAll is true; never overlap another edit’s oldText."
},
"newText": {
"type": "string",
"description": "The replacement text."
},
"matchAll": {
"type": "boolean",
"description": "Replace every occurrence of this oldText. Omit to require a unique match."
}
},
"required": [
"oldText",
"newText"
]
}
},
"ask": {
"type": "boolean",
"description": "Ask the user for permission, showing the offending lines, when a newText names an existing outside path or an existing absolute project path. Omit it to refuse such edits outright."
}
},
"required": [
"path",
"edits"
]
}edit-undo trusted
tools/edit.js
Reverse a recent edit using its returned edit id and the same file path. The file must still hold the replacement text at the edited positions; otherwise read the file and make a new targeted edit. Undo itself returns an edit id for redo.
Input schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "The file path used for the original edit, inside the Agent folder."
},
"editId": {
"type": "string",
"description": "The edit id returned by a recent successful edit or edit-undo."
}
},
"required": [
"path",
"editId"
]
}job-schedule trusted
tools/job-schedule.js
Manage scheduled project tasks: list, read, create, update, or remove. Use enabled: false to pause a task. Updates preserve omitted fields and take effect on a later scan; removing a task does not stop a running job. This tool does not run tasks or configure the scheduler.
Input schema
{
"type": "object",
"additionalProperties": false,
"required": [
"action"
],
"properties": {
"action": {
"type": "string",
"enum": [
"list",
"read",
"create",
"update",
"remove"
],
"description": "Choose the task operation. For update, supply only fields to change; remove keeps history and running work."
},
"filename": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9 ._-]*\\.md$",
"maxLength": 120,
"description": "Leaf .md filename for read/create/update/remove; never a path or opaque task ID."
},
"prompt": {
"type": "string",
"minLength": 1,
"description": "Task instructions. Required for create; omitted on update to preserve the current prompt."
},
"enabled": {
"type": "boolean",
"description": "Whether the task may run. Omitted on update to preserve the current value."
},
"schedule": {
"description": "Task schedule: a string (once or every <duration>, e.g. every 1h), or an object with exactly one of at/every and optional days. Omit on update to preserve it.",
"additionalProperties": false,
"properties": {
"at": {
"type": "array",
"minItems": 1,
"description": "Run at these HH:MM times; append GMT for UTC, otherwise use local time. Do not combine with every.",
"items": {
"type": "string",
"pattern": "^(?:[01][0-9]|2[0-3]):[0-5][0-9](?: GMT)?$"
}
},
"every": {
"type": "string",
"pattern": "^[1-9][0-9]*[mhdw]$",
"description": "Run at this interval: a positive number followed by m, h, d, or w. Do not combine with at."
},
"days": {
"description": "Restrict runs with the string weekdays/weekends, or an array of day abbreviations (sun, mon, tue, wed, thu, fri, sat).",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "string",
"enum": [
"sun",
"mon",
"tue",
"wed",
"thu",
"fri",
"sat"
]
}
}
}
}
}
}note safe
tools/note.js
Keep scratchpad notes for the current context. Use set with a title-to-patch map, get/remove with an array of titles, list for open notes, or search with a regex pattern. Use ["*"] to select all notes. Prefer content, summary, and type fields; add other JSON fields as needed. Null deletes a field or a whole note.
Input schema
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"set",
"get",
"list",
"remove",
"search"
],
"description": "The operation to perform."
},
"notes": {
"description": "set: a map of title → patch object. get/remove: an array of titles ([\"*\"] = every note).",
"items": {
"type": "string",
"description": "A note title; applies when `notes` is an array."
},
"additionalProperties": {
"description": "Patch for the note whose title is this key: fields you set are merged in (nested objects merge field-by-field, arrays and scalars replace), a null field deletes that field, and a null patch deletes the whole note.",
"properties": {
"content": {
"description": "The full note body as a string; null deletes this field."
},
"summary": {
"description": "A one-line gist as a string; null deletes this field."
},
"type": {
"description": "Use the string todo, active, done, or info; null deletes this field."
}
},
"additionalProperties": true
}
},
"only": {
"type": "array",
"items": {
"type": "string"
},
"description": "get: return only these fields (default: every field)."
},
"pattern": {
"type": "string",
"description": "search: a regular expression (case-insensitive)."
},
"field": {
"type": "string",
"description": "search: limit the search to one field (default: the title and all fields)."
},
"max": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "search: maximum matches to return (1–50)."
}
},
"required": [
"action"
]
}process-join trusted onTimeout
tools/process.js
Wait for this Agent's background Bash process; return its output and exit code like bash. Timeout starts on join and stops the process group.
Input schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Process id returned by background Bash."
},
"timeout": {
"type": "integer",
"minimum": 0,
"description": "Milliseconds to wait from this call (default: 120000; capped at 1200000). Stops the process on timeout."
}
},
"required": [
"id"
]
}process-list safe
tools/process.js
List this Agent's background Bash processes.
Input schema
{
"type": "object",
"properties": {}
}process-output safe
tools/process.js
Read buffered output from this Agent's background Bash process.
Input schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Process id returned by background Bash."
},
"from": {
"type": "integer",
"minimum": 0,
"description": "Byte offset (default 0); pass the returned next offset on subsequent calls."
}
},
"required": [
"id"
]
}process-stop trusted
tools/process.js
Stop this Agent's background Bash process group. Unavailable in safe mode.
Input schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Process id returned by background Bash."
}
},
"required": [
"id"
]
}question safe sandbox
tools/question.js
Ask the user to resolve a decision or provide missing information. Send 1–4 clear questions with distinct options; users can also give custom answers.
Input schema
{
"type": "object",
"properties": {
"questions": {
"type": "array",
"description": "Questions to ask the user (1-4 questions)",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "The complete question to ask the user. Clear, specific, ending with a question mark."
},
"header": {
"type": "string",
"description": "Very short chip/tag shown next to the question (max 16 characters)."
},
"details": {
"type": "string",
"description": "Optional supporting context, constraints, or consequences shown under the question."
},
"multiSelect": {
"type": "boolean",
"description": "Allow selecting multiple options instead of just one."
},
"options": {
"type": "array",
"description": "The available choices (2-16 options).",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "The display text for this option (max 60 characters)."
},
"description": {
"type": "string",
"description": "What this option means or what happens if chosen."
},
"preview": {
"description": "Optional focused preview: a plain string, or an object with type (text/code) and content. Add title or language when useful.",
"properties": {
"type": {
"type": "string",
"enum": [
"text",
"code"
],
"description": "Display the preview as plain text or code."
},
"content": {
"type": "string",
"description": "Preview text or code to show for this option."
},
"language": {
"type": "string",
"description": "Code language for syntax highlighting; omit for plain text."
},
"title": {
"type": "string",
"description": "Short title for the preview."
}
}
}
},
"required": [
"label",
"description"
]
}
}
},
"required": [
"question",
"header",
"options"
]
}
}
},
"required": [
"questions"
]
}read safe
tools/read.js
Read files, list folders, or search contents. Heed skip and incomplete notices before assuming full coverage.
Input schema
{
"type": "object",
"additionalProperties": false,
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"maxLength": 4096,
"description": "File or folder, relative to the Agent folder or absolute inside the project. . is the current folder; ../ reaches project siblings."
},
"recursive": {
"type": "boolean",
"default": false,
"description": "Include subfolders."
},
"ignore": {
"type": "boolean",
"default": false,
"description": "Skip .gitignore/.ignore matches and system files in folder scans."
},
"glob": {
"minLength": 1,
"maxLength": 4096,
"maxItems": 128,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 4096
},
"description": "Only files matching a glob string or array, e.g. *.md, src/**/*.js, {a,b}. Slashless patterns match filenames."
},
"exclude": {
"minLength": 1,
"maxLength": 4096,
"maxItems": 128,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 4096
},
"description": "Skip files or subtrees matching a glob string or array; overrides glob."
},
"lines": {
"type": "object",
"additionalProperties": false,
"properties": {
"from": {
"type": "integer",
"description": "Start."
},
"to": {
"type": "integer",
"description": "End."
},
"last": {
"type": "integer",
"minimum": 0,
"description": "Last N lines instead of from/to."
}
},
"description": "1-based inclusive line range; negative counts from the end (-1 is last)."
},
"characters": {
"type": "object",
"additionalProperties": false,
"properties": {
"from": {
"type": "integer",
"description": "Start."
},
"to": {
"type": "integer",
"description": "End."
}
},
"description": "0-based, end-exclusive character slice of the selected lines; negative counts from the end."
},
"bytes": {
"type": "object",
"additionalProperties": false,
"properties": {
"from": {
"type": "integer",
"description": "Start."
},
"to": {
"type": "integer",
"description": "End."
}
},
"description": "0-based, end-exclusive byte slice; negative counts from the end. Requires binary."
},
"search": {
"type": "object",
"additionalProperties": false,
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"description": "Literal substring."
},
"regex": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"description": "JavaScript regex, without / delimiters."
},
"ignoreCase": {
"type": "boolean",
"default": false,
"description": "Case-insensitive."
},
"invert": {
"type": "boolean",
"default": false,
"description": "Select non-matching lines."
},
"before": {
"type": "integer",
"minimum": 0,
"maximum": 1000,
"default": 0,
"description": "Context lines before each match."
},
"after": {
"type": "integer",
"minimum": 0,
"maximum": 1000,
"default": 0,
"description": "Context lines after each match."
}
},
"description": "Select lines matching text or regex (either)."
},
"limit": {
"type": "integer",
"minimum": 0,
"default": 100,
"description": "Maximum listing entries or matching lines (matching paths with info); context lines are extra. Omit with target to save all results within host budgets."
},
"offset": {
"type": "integer",
"minimum": 0,
"default": 0,
"description": "Skip this many entries or matches."
},
"info": {
"type": "boolean",
"default": false,
"description": "Return metadata, counts, or matching paths with per-file match counts instead of content."
},
"annotate": {
"type": "boolean",
"default": true,
"description": "Include MIME types, ranges, and locations; false gives plain text or paths."
},
"binary": {
"type": "boolean",
"default": false,
"description": "Read raw bytes; search then returns a match report."
},
"base64": {
"type": "boolean",
"default": false,
"description": "Base64-encode the selected data. Not with info."
},
"target": {
"type": "string",
"description": "Save the complete selected result to this project file instead of returning it; refuse incomplete output. Available only if `write` is available."
}
}
}request trusted
tools/request.js
List Projects. Exchange requests / replies with external agents (not your worker/parent). Use to collaborate on complex tasks that require a number of teams to complete, or to file bug reports or ask questions in other projects. Not for delegating tasks to workers. Not for copying resources from other projects (user resource). Start an agent with to: "new:<role-name>@<project>"; later use the <name>@<project> from the result or from a received request's label. The receiver may refuse. Replies arrive as messages; finish your turn to wait. Projects: this (your own project).
Input schema
{
"type": "object",
"additionalProperties": false,
"required": [
"to",
"prompt"
],
"properties": {
"to": {
"type": "string",
"minLength": 3,
"description": "<name>@<project>, or new:<role-name>@<project> (e.g. new:api-reviewer@this) to start an agent."
},
"prompt": {
"type": "string",
"minLength": 1,
"description": "Self-contained: include context and expected outcome. Use skill when available."
},
"model": {
"type": "string",
"description": "Model for a new agent; omit unless critical. Matching a contact's current model is ignored."
},
"safe": {
"type": "boolean",
"description": "Start the new agent read-only; false on an existing contact is ignored."
}
}
}resource safe trusted
tools/resource.js
List, read or copy files of a skill or a project. A path missing from a skill is looked up in the project of the same name. Copies never overwrite: an existing destination is saved as "<name> 002.<ext>". Symbolic links are never followed: searches and listings skip them; copies refuse them. Projects: this (your own project).
Input schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Skill or project name."
},
"path": {
"type": "string",
"description": "File, folder or glob relative to the skill or project root. Omit for the root. Folders and glob matches list automatically without target."
},
"list": {
"type": "boolean",
"default": false,
"description": "List names instead of reading file content. With target, copy the selected resources."
},
"target": {
"type": "string",
"description": "Copy selected resources to this file or folder in your folder, with or without list; an existing folder receives the copy. Multiple matches use a folder, numbered if a file occupies target."
}
},
"required": [
"name"
]
}skill safe
tools/skill.js
Load relevant skills before starting a task and follow their instructions. Omit names to list available skills; pass an array of catalog names to load them.
Input schema
{
"type": "object",
"additionalProperties": false,
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "Skill names to load, e.g. [\"api-design\"]. Omit to list the catalog."
}
}
}splice trusted
tools/splice.js
Copy source lines into target lines; source stays unchanged. Write a temporary source and use this tool for large edits. Use edit-undo with the returned edit id.
Input schema
{
"type": "object",
"required": [
"source",
"target"
],
"properties": {
"source": {
"type": "object",
"description": "Existing file and 1-based inclusive lines to copy.",
"required": [
"path",
"from",
"to"
],
"properties": {
"path": {
"type": "string",
"description": "Source file inside the Agent folder."
},
"from": {
"type": "integer",
"description": "First source line."
},
"to": {
"type": "integer",
"description": "Last source line."
}
}
},
"target": {
"type": "object",
"description": "Existing file and 1-based inclusive lines to replace; at inserts before a line (or appends at line count + 1). If given with at, from and to must both equal at.",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"description": "Target file inside the Agent folder."
},
"from": {
"type": "integer",
"description": "First line to replace."
},
"to": {
"type": "integer",
"description": "Last line to replace."
},
"at": {
"type": "integer",
"description": "Insert before this line; line count + 1 appends."
}
}
}
}
}web-fetch safe trusted
tools/web.js
Read one HTTP(S) page or API response as Markdown, text, or JSON text. Supply the direct URL; check truncation notices before assuming the response is complete.
Same provider → MCP → package routing as web-search. The package backend converts HTML to Markdown (using the optional @mozilla/readability when installed — settings.web.readability: false forces the built-in converter), returning text and JSON bodies as-is. Redirects, size, timeouts, caching, and rate limits are all bounded.
Input schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "HTTP(S) URL without embedded credentials"
}
},
"required": [
"url"
]
}web-search safe trusted
tools/web.js
Search the internet for relevant pages. Use a focused query and limit the number of results; use web-fetch to read a result's full page.
Each call routes provider web backend → MCP mapping (settings.web.mcp) → package backend. The package backend tries configured SearXNG (opens in new tab) instances first (auto-detected from SEARXNG_URL/SEARXNG_BASE, or web.search.backends), then aggregates the enabled engines — DuckDuckGo and Mojeek by default, Brave when BRAVE_API_KEY is set, optional Swisscows — with reciprocal-rank fusion, de-duplication, and tracking-parameter removal. Results are bounded, cached briefly, and rate-limited; settings.web.debug prefixes the taken code path.
Input schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query, including any engine syntax"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 40,
"default": 40,
"description": "Maximum number of results to return (1–40)."
}
},
"required": [
"query"
]
}worker-close trusted
tools/worker-close.js
Close named workers, /regex/ matches, or all with ["*"]. Busy workers are asked to hand off their work first.
Input schema
{
"type": "object",
"additionalProperties": false,
"required": [
"workers"
],
"properties": {
"workers": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
},
"description": "Worker names, /regex/ patterns, or [\"*\"] for all workers. Use * alone."
}
}
}worker-create trusted
tools/worker-create.js
Create named workers and optionally send the same self-contained first prompt to each. Omit or empty prompt creates idle workers. State role, task, context, constraints, deliverable, and acceptance checks. Replies arrive as messages; finish your turn rather than waiting.
Input schema
{
"type": "object",
"additionalProperties": false,
"required": [
"workers"
],
"properties": {
"prompt": {
"type": "string",
"description": "Self-contained first prompt sent unchanged to each worker; omit or use an empty string to create idle workers."
},
"workers": {
"type": "array",
"minItems": 1,
"description": "Workers to create. Give each a unique name and any model, role, or scope options it needs.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Short unique role name, e.g. reviewer."
},
"model": {
"type": "string",
"description": "Model for the worker; omit to use yours."
},
"thinking": {
"type": "string",
"enum": [
"none",
"low",
"medium",
"high",
"xhigh",
"max"
],
"description": "Thinking level; omit unless critical. Default to empty or medium."
},
"description": {
"type": "string",
"description": "Worker's role description."
},
"safe": {
"type": "boolean",
"description": "Start the worker read-only."
},
"subfolder": {
"type": "string",
"description": "Existing subfolder of your folder that limits the worker's writes; omit for your folder."
}
}
}
}
}
}worker-message trusted
tools/worker-message.js
Send one prompt to named workers, /regex/ matches, or all with ["*"]. Replies arrive as messages; finish your turn rather than waiting.
Input schema
{
"type": "object",
"additionalProperties": false,
"required": [
"to",
"prompt"
],
"properties": {
"to": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
},
"description": "Worker names, /regex/ patterns, or [\"*\"] for all workers. Use * alone."
},
"prompt": {
"type": "string",
"minLength": 1,
"description": "Self-contained message sent unchanged to each worker. A leading /compact or /<prompt> runs that command (see worker-status)."
}
}
}worker-status safe trusted
tools/worker-status.js
Show workers (busy/idle), models with free capacity, and the commands a message may start with (/compact, /<prompt>). Omit flags for all sections. Not for worker polling / busy waiting (just finish your turn and they will update you when they're done).
Input schema
{
"type": "object",
"additionalProperties": false,
"properties": {
"workers": {
"type": "boolean",
"description": "Include workers and their models."
},
"models": {
"type": "boolean",
"description": "Include models and their free capacity."
},
"commands": {
"type": "boolean",
"description": "Include message commands."
}
}
}write trusted
tools/write.js
Create or overwrite a text file in the Agent folder. Use edit for targeted changes; use read with target to copy files or save read results.
Input schema
{
"type": "object",
"additionalProperties": false,
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string",
"description": "Destination path inside the Agent folder, relative to it or an absolute contained path."
},
"content": {
"type": "string",
"description": "Full file text; an empty string creates or clears the file."
},
"ask": {
"type": "boolean",
"description": "Ask permission if the text references an existing outside path or an existing absolute project path; without permission, the write is refused."
}
}
}