{
  "version": 1,
  "tools": [
    {
      "name": "scaffold_managed_skill",
      "description": "Create or update a managed skill in {workspaceDir}/skills. The skill becomes available for skill_load when a valid top-level SKILL.md is written under the skill directory. Never persist a skill without explicit user consent. Before persisting, test the snippet: write to a temp file with bash and run with `bun run /tmp/vellum-eval/snippet.ts`. Iterate up to 3 attempts, then ask the user. Clean up temp files after. Do not use file_write for temp files outside the working directory. After a skill is written, the next turn may run in a recreated conversation due to file-watcher eviction - continue normally.",
      "category": "skills",
      "risk": "high",
      "input_schema": {
        "type": "object",
        "properties": {
          "skill_id": {
            "type": "string",
            "description": "Unique identifier for the skill (lowercase slug, e.g. \"my-skill\")."
          },
          "name": {
            "type": "string",
            "description": "Human-readable name for the skill."
          },
          "description": {
            "type": "string",
            "description": "Short description of what the skill does."
          },
          "body_markdown": {
            "type": "string",
            "description": "The full skill body in markdown - instructions, prompts, templates, etc."
          },
          "emoji": {
            "type": "string",
            "description": "Optional emoji icon for the skill."
          },
          "category": {
            "type": "string",
            "description": "Optional single lowercase category for grouping the skill in the Skills UI sidebar. Must be one of the published categories — a value outside this list shows under All with no sidebar bucket, so always pick the closest fit: browsing, calendar, commerce, content, development, email, health, integrations, messaging, productivity, system, voice."
          },
          "overwrite": {
            "type": "boolean",
            "description": "Whether to overwrite an existing skill with the same ID (default: false)."
          },
          "includes": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Optional list of child skill IDs this skill composes. When this skill is loaded via skill_load, each child's body is inlined after the parent's and the child's tools are projected, so the parent can rely on the child's procedure without re-stating it. Does not affect which skills get selected for a turn."
          },
          "activation_hints": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Required. 1-4 short trigger phrases describing the situations where this skill should activate, phrased as the observed intent (e.g. \"user asks to deploy staging\"). Surfaced in memory as a \"Use when: …\" clause so the skill is retrievable by intent, not just by name. Scaffolding rewrites the whole SKILL.md, so an overwrite must pass the hints the skill should keep, revised if the procedure changed."
          },
          "avoid_when": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Optional situations where this skill should NOT be used. Surfaced in memory as an \"Avoid when: …\" clause to steer retrieval away from the wrong contexts."
          },
          "files": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "path": {
                  "type": "string",
                  "description": "Path relative to the skill directory (e.g. \"references/failure-modes.md\" or \"scripts/export-report.py\"). Absolute paths and \"..\" segments are rejected."
                },
                "content": {
                  "type": "string",
                  "description": "Inline file contents. Set exactly one of content or copy_from."
                },
                "copy_from": {
                  "type": "string",
                  "description": "Absolute path of an existing file to copy into the skill instead of re-emitting its contents — prefer this when the file is still on disk. The source must live under the workspace or the system temp dir and be at most 1 MiB. Set exactly one of content or copy_from."
                }
              },
              "required": ["path"]
            },
            "description": "Optional companion files written under the skill directory, referenced from SKILL.md: references/*.md for gotchas and cached values, scripts/* for reusable code that already ran successfully. Each entry is {path, content} or {path, copy_from}: exactly one of content or copy_from. Prefer copy_from (the absolute path of an existing on-disk file, under the workspace or system temp dir, at most 1 MiB) over re-emitting file bytes inline. Have the body invoke scripts via the {baseDir} placeholder (e.g. `python3 {baseDir}/scripts/export-report.py`); it resolves to the skill folder on load. Paths must resolve inside the skill folder."
          },
          "add_to_index": {
            "type": "boolean",
            "description": "Deprecated no-op compatibility field. Skills are discovered from top-level SKILL.md files."
          }
        },
        "required": [
          "skill_id",
          "name",
          "description",
          "body_markdown",
          "activation_hints"
        ]
      },
      "executor": "tools/scaffold-managed.ts",
      "execution_target": "host"
    },
    {
      "name": "delete_managed_skill",
      "description": "Delete a managed skill directory from {workspaceDir}/skills. Never delete a skill without explicit user confirmation. After deletion, the next turn may run in a recreated conversation due to file-watcher eviction - continue normally.",
      "category": "skills",
      "risk": "high",
      "input_schema": {
        "type": "object",
        "properties": {
          "skill_id": {
            "type": "string",
            "description": "The ID of the managed skill to delete."
          },
          "remove_from_index": {
            "type": "boolean",
            "description": "Deprecated no-op compatibility field. Skill deletion does not edit SKILLS.md."
          }
        },
        "required": ["skill_id"]
      },
      "executor": "tools/delete-managed.ts",
      "execution_target": "host"
    },
    {
      "name": "find_similar_skills",
      "description": "Find the existing skills most similar to a goal. Scores the goal against the skill catalog's capability pages and returns a ranked shortlist of nearest skills, each with its name, description, source (bundled, managed, plugin, workspace, or extra), and similarity score. For a managed hit it also returns `author` — \"assistant\" if the assistant authored that skill (so it may be overwritten) or \"user\" if a person did (off-limits); `author` is omitted for non-managed sources and for managed skills with no recorded author. Read-only — it never creates, edits, or deletes anything.",
      "category": "skills",
      "risk": "low",
      "input_schema": {
        "type": "object",
        "properties": {
          "goal": {
            "type": "string",
            "description": "The goal or intent to match against existing skills."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "description": "Maximum number of nearest skills to return (default: 5)."
          }
        },
        "required": ["goal"]
      },
      "executor": "tools/find-similar.ts",
      "execution_target": "host"
    }
  ]
}
