filesystem.md, spec 3.0.0-draft, and the CLI made to match:
- Paths: absolute in every answer except a result's bracket (context.md),
which keeps the call's path. glob and grep now give full paths.
- A missing file is `No such file or directory: {path}` for every tool
that needs it, with no hint after it: in a chat a hidden file must read
as a missing one. The CLI's "does not exist. Use write to create it." and
"Write it first." are gone; an edit of a directory is `Is a directory`,
glob over a file `Not a directory`.
- write/edit refusals, exactly: "{path} exists and has not been read in
this session. Read it first." and "{path} changed since you last read
it. Read it again before changing it." (no "on disk"), absolute path.
- A listing sorts names in code-point order; `list` with a depth is a
tree indented two spaces a level, marks as in a single listing, cut at
400 lines with a line saying so.
- Skills: where they are found and in what order on each side (the
session's own place first, the person's next, what is shared last), and
the name rule ^[a-z0-9][a-z0-9-]{0,63}$ that skill_manage checks. The
CLI no longer makes names with _ or .; such skills still load.
README's 3.0.0 notes say so; CHANGELOG [Unreleased].
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
123 lines
4.5 KiB
JSON
123 lines
4.5 KiB
JSON
{
|
|
"name": "skill_manage",
|
|
"scope": "shared",
|
|
"sessions": "both",
|
|
"risk": "write",
|
|
"exclusive": false,
|
|
"block": "tool",
|
|
"purpose": "purpose",
|
|
"aliases": {
|
|
"cli": [],
|
|
"llembas": [
|
|
"skill_create",
|
|
"skill_edit"
|
|
]
|
|
},
|
|
"variables": {
|
|
"create_where": "where a new skill goes (\" Global unless where: project.\"), or empty",
|
|
"files": "the supporting-file actions (\"write_file / remove_file: supporting files under references/, templates/, scripts/ or assets/.\"), or empty — the line goes",
|
|
"revert_deleted": "\" (a deleted one too)\" where a deleted skill can be reverted, or empty",
|
|
"index_cut": "why the description is kept short (\" — only that much shows in the skills list\"), or empty"
|
|
},
|
|
"description": "Create, change or delete skills — your procedural memory for kinds of task that come back. Send a list of operations; they apply together, and if one fails none is kept.\n\n- create: a new skill from description + instructions (or content: a whole SKILL.md).{{create_where}}\n- patch: fix part of a skill with old_string/new_string (read it with skill_view first) — preferred over rewriting.\n- {{files}}\n- delete: remove a skill (alone in its call).\n- revert: put back the skill as it was before its last change{{revert_deleted}}; the version it replaces is kept, so a second revert undoes the first. Alone in its call.\n\nWrite the description as its trigger, in about 60 characters{{index_cut}}: \"Use when <situation>. <what it does>.\" Write lessons, not logs: an instruction and why, no dates or incident stories.",
|
|
"parameters": {
|
|
"type": "object",
|
|
"properties": {
|
|
"operations": {
|
|
"minItems": 1,
|
|
"maxItems": 20,
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"action": {
|
|
"type": "string",
|
|
"enum": [
|
|
"create",
|
|
"patch",
|
|
"write_file",
|
|
"remove_file",
|
|
"delete",
|
|
"revert"
|
|
]
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "The skill (lowercase letters, digits and -, starting with a letter or digit; up to 64)"
|
|
},
|
|
"description": {
|
|
"description": "create: when to use the skill, one sentence, the trigger first: \"Use when …\"",
|
|
"type": "string"
|
|
},
|
|
"instructions": {
|
|
"description": "create: the skill's instructions (markdown)",
|
|
"type": "string"
|
|
},
|
|
"content": {
|
|
"description": "create, instead of description + instructions: the whole SKILL.md. patch: a whole new SKILL.md — last resort; prefer old_string/new_string.",
|
|
"type": "string"
|
|
},
|
|
"category": {
|
|
"description": "create: an optional category directory, e.g. devops",
|
|
"type": "string"
|
|
},
|
|
"where": {
|
|
"description": "create: global (every project, the default) or this project's .agent/skills",
|
|
"type": "string",
|
|
"enum": [
|
|
"global",
|
|
"project"
|
|
]
|
|
},
|
|
"old_string": {
|
|
"description": "patch: the exact text to replace (read the skill first)",
|
|
"type": "string"
|
|
},
|
|
"new_string": {
|
|
"description": "patch: its replacement; empty deletes it",
|
|
"type": "string"
|
|
},
|
|
"replace_all": {
|
|
"description": "patch: every occurrence",
|
|
"type": "boolean"
|
|
},
|
|
"file_path": {
|
|
"description": "write_file/remove_file, or patch of a supporting file: a path inside the skill starting with references/, templates/, scripts/ or assets/",
|
|
"type": "string"
|
|
},
|
|
"file_content": {
|
|
"description": "write_file: the file's whole text",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"action",
|
|
"name"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"operations"
|
|
]
|
|
},
|
|
"narrow": {
|
|
"llembas": {
|
|
"drop": [
|
|
"operations[].category",
|
|
"operations[].where",
|
|
"operations[].file_path",
|
|
"operations[].file_content"
|
|
],
|
|
"enum": {
|
|
"operations[].action": [
|
|
"create",
|
|
"patch",
|
|
"delete",
|
|
"revert"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|