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 onTimeout

tools/bash.js

Run a Bash command in the working folder; return output and any exit code. Use read to inspect folders.

Input schema
{
  "type": "object",
  "properties": {
    "command": {
      "type": "string",
      "description": "The bash command line to run (no cd, ln, or ls; use read for folder listing; every visible path argument must stay inside the working folder)"
    },
    "timeout": {
      "type": "integer",
      "description": "Requested milliseconds timeout (default: 120000; capped at 1200000)"
    },
    "env": {
      "type": "object",
      "description": "Extra environment variables for the command."
    }
  },
  "required": [
    "command"
  ]
}

edit

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: true to replace every occurrence of each oldText. To reverse an edit, pass the edit id returned after it as rollback.

Input schema
{
  "type": "object",
  "properties": {
    "path": {
      "type": "string",
      "description": "Path to the file to edit (relative to the working folder)"
    },
    "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 in the file and never overlap another edit’s oldText."
          },
          "newText": {
            "type": "string",
            "description": "The replacement text."
          }
        },
        "required": [
          "oldText",
          "newText"
        ]
      }
    },
    "ask": {
      "type": "boolean",
      "description": "Ask the user for permission, showing the offending lines, when a newText names a path outside the working folder. Omit it to refuse such edits outright."
    },
    "matchAll": {
      "type": "boolean",
      "description": "Replace every occurrence of each oldText. Omit it to require a unique match."
    },
    "rollback": {
      "type": "string",
      "description": "Reverse a recent edit by passing the edit id returned after it succeeded. Pass the same path the edit targeted. The file must still hold the replacement text at the edited positions; if it does not, read the file and make a new targeted edit instead."
    }
  },
  "anyOf": [
    {
      "required": [
        "path",
        "edits"
      ]
    },
    {
      "required": [
        "path",
        "rollback"
      ]
    }
  ]
}

job-schedule trusted

tools/job-schedule.js

List, read, create, replace, or remove scheduled Markdown tasks in an operational project. Pause with enabled: false. New/changed tasks wait for a later scan; removal never cancels running work. Task-local schedules determine admission; the optional daemon is not required. Cannot initialize, enable, disable, repair, run, control a daemon, or access secrets. Unavailable to read-only Agents.

Input schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "action"
  ],
  "properties": {
    "action": {
      "type": "string",
      "enum": [
        "list",
        "read",
        "create",
        "update",
        "remove"
      ],
      "description": "Task operation. update replaces complete Markdown; remove leaves history and running work intact."
    },
    "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. Omitted on update to preserve it. Use once, every <duration>, or one structured at/every schedule with optional days.",
      "oneOf": [
        {
          "type": "string",
          "pattern": "^(once|every [1-9][0-9]*[mhdw])$"
        },
        {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "at": {
              "type": "array",
              "minItems": 1,
              "items": {
                "type": "string",
                "pattern": "^(?:[01][0-9]|2[0-3]):[0-5][0-9](?: GMT)?$"
              }
            },
            "every": {
              "type": "string",
              "pattern": "^[1-9][0-9]*[mhdw]$"
            },
            "days": {
              "oneOf": [
                {
                  "type": "string",
                  "enum": [
                    "weekdays",
                    "weekends"
                  ]
                },
                {
                  "type": "array",
                  "minItems": 1,
                  "uniqueItems": true,
                  "items": {
                    "type": "string",
                    "enum": [
                      "sun",
                      "mon",
                      "tue",
                      "wed",
                      "thu",
                      "fri",
                      "sat"
                    ]
                  }
                }
              ]
            }
          },
          "oneOf": [
            {
              "required": [
                "at"
              ]
            },
            {
              "required": [
                "every"
              ]
            }
          ]
        }
      ]
    }
  }
}

mcp safe

tools/mcp.js

Use an MCP server in three steps: call servers to discover names, call tools with a server to discover its tools, then call with that server, tool, and arguments. Server responses are returned as tool results.

Input schema
{
  "type": "object",
  "properties": {
    "action": {
      "type": "string",
      "enum": [
        "servers",
        "tools",
        "call"
      ],
      "description": "What to do"
    },
    "server": {
      "type": "string",
      "description": "The configured server name (tools/call)"
    },
    "tool": {
      "type": "string",
      "description": "The remote tool's name (call)"
    },
    "arguments": {
      "type": "object",
      "description": "The remote tool's arguments (call)"
    }
  },
  "required": [
    "action"
  ]
}

note-set safe

tools/note.js

Create or update scratchpad notes; set one note or a batch.

Input schema
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "description": "The note's title (its key)."
    },
    "type": {
      "type": "string",
      "enum": [
        "todo",
        "active",
        "done",
        "info",
        "secret"
      ],
      "description": "todo / active / done / info / secret (secret is hidden from the on-screen display)."
    },
    "summary": {
      "type": "string"
    },
    "content": {
      "type": "string"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "The note's title (its key)."
          },
          "type": {
            "type": "string",
            "enum": [
              "todo",
              "active",
              "done",
              "info",
              "secret"
            ],
            "description": "todo / active / done / info / secret (secret is hidden from the on-screen display)."
          },
          "summary": {
            "type": "string"
          },
          "content": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "title"
        ]
      },
      "description": "Set several notes in one call instead of the top-level fields."
    }
  },
  "additionalProperties": true
}

note-done safe

tools/note.js

Mark notes done without changing their content.

Input schema
{
  "type": "object",
  "properties": {
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Titles to mark done."
    }
  },
  "required": [
    "notes"
  ]
}

note-remove safe

tools/note.js

Delete a note by title — "*" deletes every note.

Input schema
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "description": "The note's title — \"*\" removes every note."
    }
  },
  "required": [
    "title"
  ]
}

note-get safe

tools/note.js

Read selected note fields; request keys only when needed.

Input schema
{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "description": "The note's title (its key)."
    },
    "only": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The fields to read (default [\"content\"]; [\"*\"] reads every field)."
    },
    "keys": {
      "type": "boolean",
      "description": "Return just the selected field names that exist."
    }
  },
  "required": [
    "title"
  ]
}

note-list safe

tools/note.js

List open note titles and types.

Input schema
{
  "type": "object",
  "properties": {}
}

question safe sandbox

tools/question.js

Ask structured user questions with selectable options and 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 typed text/code with optional title and language.",
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "type": {
                          "type": "string",
                          "enum": [
                            "text",
                            "code"
                          ]
                        },
                        "content": {
                          "type": "string"
                        },
                        "language": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "type",
                        "content"
                      ]
                    }
                  ]
                }
              },
              "required": [
                "label",
                "description"
              ]
            }
          }
        },
        "required": [
          "question",
          "header",
          "options"
        ]
      }
    }
  },
  "required": [
    "questions"
  ]
}

read safe

tools/read.js

Use read to read a file (cat), grep it, list a folder (ls), or filter folder files (find).

Input schema
{
  "type": "object",
  "properties": {
    "path": {
      "type": "string",
      "description": "relative path to folder or file."
    },
    "startLine": {
      "type": "integer",
      "description": "first line to include (1-based, inclusive); default 1. On a folder: with endLine, an entry/match cap (an initial maxMatches — an explicit maxMatches wins)"
    },
    "endLine": {
      "type": "integer",
      "description": "last line to include (1-based, inclusive); default: end of file. On a folder: the cap's upper line"
    },
    "startChar": {
      "type": "integer",
      "description": "first character to include (0-based, inclusive); with binary:true, first BYTE. Combines with a line range: the line range selects first, the character range caps the selection"
    },
    "endChar": {
      "type": "integer",
      "description": "character offset to stop at (0-based, exclusive); with binary:true, a byte offset. A character CAP alongside a line range is valid (e.g. 200 lines but at most 4K characters)"
    },
    "binary": {
      "type": "boolean",
      "description": "treat the file as bytes: startChar/endChar become byte offsets and the range is returned as BINARY content (mime-detected) for models that accept binary input, e.g. vision"
    },
    "base64": {
      "type": "boolean",
      "description": "encode the result as base64 TEXT (with binary:true, the byte range; otherwise the text result) for models without binary support"
    },
    "pattern": {
      "type": "string",
      "description": "grep-like regular expression: return matching lines with line numbers instead of file content; on a folder, searches matching files and prefixes each match with its file path"
    },
    "glob": {
      "type": "string",
      "description": "optional glob filtering file names (for example '*.ts') or relative paths (for example 'src/**/*.ts'); applies to folder listings/searches and verifies a file path matches"
    },
    "ignoreCase": {
      "type": "boolean",
      "description": "case-insensitive pattern matching"
    },
    "maxMatches": {
      "type": "integer",
      "description": "cap on grep matches (default 100); on a folder also caps ls/find output (overrides a line range's cap)"
    },
    "recursive": {
      "type": "boolean",
      "description": "on a folder: include sub-folders — grep descends into them and ls/find output nests their entries"
    },
    "info": {
      "type": "boolean",
      "description": "return information about the file/query instead of the content: metadata (type, size, created, modified — for a file, also its WHOLE character and line counts) and how many bytes (or matches/entries) the requested read would return"
    }
  },
  "required": [
    "path"
  ]
}

skill safe

tools/skill.js

List available skills or load skills for the current task.

Input schema
{
  "type": "object",
  "properties": {
    "names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "skill names to load (one or more); omit to list the catalog"
    }
  }
}

worker trusted

tools/worker.js

Create or control direct child agents by name. For a new worker, make the first prompt self-contained: state its role, concrete task, relevant context, constraints, deliverable, and acceptance checks. Omit model to inherit your own model, or choose a provider/model value from the model field. Prompts fan out to every same-name child; responses return as attributed user messages.

Input schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Child Agent(s) name. Omit to create an automatically named worker."
    },
    "prompt": {
      "type": "string",
      "description": "Message queued to named agent(s); required for new workers. First prompt: role, task, context, constraints, deliverable, and acceptance checks. Delegate tasks, not reasoning."
    },
    "description": {
      "type": "string",
      "description": "Description used only when creating a worker."
    },
    "model": {
      "type": "string",
      "description": "Endpoint/model used only when creating a worker. Omit to use your own model."
    },
    "reset": {
      "type": "boolean",
      "description": "Replace every idle match while preserving identity and endpoint settings."
    },
    "close": {
      "type": "boolean",
      "description": "Request handoff from busy matches, then close every match."
    },
    "info": {
      "type": "boolean",
      "description": "Include name, model, context usage, state, and description."
    },
    "list": {
      "type": "boolean",
      "description": "Include every direct child individually, including duplicate names."
    }
  }
}

write trusted

tools/write.js

Create or overwrite a working-folder file; create parent folders as needed.

Input schema
{
  "type": "object",
  "properties": {
    "path": {
      "type": "string",
      "description": "Path relative to the working folder."
    },
    "content": {
      "type": "string",
      "description": "Content to write."
    },
    "ask": {
      "type": "boolean",
      "description": "Ask for permission with surrounding context when the content names an existing path outside the working folder."
    }
  },
  "required": [
    "path",
    "content"
  ]
}