From 950525880b9234616949780e2a0e449e061c220b Mon Sep 17 00:00:00 2001 From: Harlan Wilton Date: Wed, 7 Oct 2026 13:08:31 +1100 Subject: [PATCH] feat(mcp): tell chat agents to follow a Skill without a shell get_skill already returns the SKILL.md text, but every instruction led with runCommand, which a chat app cannot run. The tool description, the MCP section of /agent.md, and the skilld-registry Skill now say how to use a Skill without a shell: follow the markdown field for the session. --- layers/mcp/shared/mcp-tools.ts | 2 +- shared/agent-setup.ts | 4 +++- skills/skilld-registry/SKILL.md | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/layers/mcp/shared/mcp-tools.ts b/layers/mcp/shared/mcp-tools.ts index 4b1e3802..afaf0a6a 100644 --- a/layers/mcp/shared/mcp-tools.ts +++ b/layers/mcp/shared/mcp-tools.ts @@ -162,7 +162,7 @@ const GetSkillArgs = z.object({ const getSkill: McpTool = { name: 'get_skill', title: 'Get Skill details', - description: 'Look up one skill by GitHub owner, repository, and skill name. Returns its provenance: the publisher, the exact SKILL.md file and commit on GitHub, and freshness (the last repository push and the last skill change). Also returns the SKILL.md text, the skilld.dev page, runCommand, and installCommand. runCommand gives the skill to a coding agent for one session and writes no files. installCommand writes the skill into the project for every session.', + description: 'Look up one skill by GitHub owner, repository, and skill name. Returns its provenance: the publisher, the exact SKILL.md file and commit on GitHub, and freshness (the last repository push and the last skill change). Also returns the SKILL.md text, the skilld.dev page, runCommand, and installCommand. runCommand gives the skill to a coding agent for one session and writes no files. installCommand writes the skill into the project for every session. Without a shell, such as in a chat app, follow the SKILL.md text in markdown for this session. Tell the user the skill name and source repository first. Files beside SKILL.md are listed in files, not included.', inputSchema: GetSkillArgs.shape, annotations: { readOnlyHint: true, diff --git a/shared/agent-setup.ts b/shared/agent-setup.ts index 455a249f..f0f20b7b 100644 --- a/shared/agent-setup.ts +++ b/shared/agent-setup.ts @@ -58,12 +58,14 @@ Use the first section that fits your environment. Then tell the user what you se ## If you cannot run shell commands but your app supports MCP -Ask the user to add this MCP server. It searches the registry: +Ask the user to add this MCP server. It searches the registry and returns each Skill's SKILL.md: ${REGISTRY_MCP_URL} Setup steps for ChatGPT, Claude, Claude Code, Codex, Cursor, and VS Code: ${SITE_ORIGIN}/developers?setup=mcp +To use a Skill in this chat, call \`get_skill\` and follow its \`markdown\` field. It is the SKILL.md at \`sourceCommit\`. The \`files\` beside it are listed, not included. + ## If you can only fetch URLs 1. Search: ${SITE_ORIGIN}/api/v1/skills?q=tailwind diff --git a/skills/skilld-registry/SKILL.md b/skills/skilld-registry/SKILL.md index 2d64154e..695f33ee 100644 --- a/skills/skilld-registry/SKILL.md +++ b/skills/skilld-registry/SKILL.md @@ -18,6 +18,8 @@ Running is the default. `skilld run` hands you the skill for this session and wr `search_skills` and `get_skill` return `runCommand` beside `installCommand`. Lead with `runCommand`. Offer `installCommand` only when the user asks to keep the skill. +Without a shell, such as in a chat app, follow the `markdown` field from `get_skill` for this session. It is the skill's SKILL.md at `sourceCommit`. Tell the user the skill name and source repository first. The `files` beside it are listed, not included. + `install_command` returns `runCommand` for a single-skill ref and `command` for the install. A collection, curator, repository, or npm ref has no run command yet, so `runCommand` is `null` there. Every tool is read only. Running and installing both stay separate actions in the user's own environment.