Skip to content
This repository was archived by the owner on May 20, 2026. It is now read-only.
This repository was archived by the owner on May 20, 2026. It is now read-only.

Add capability declaration fields to SKILL.md frontmatter (tools, mcp-servers, hooks, model) #5101

@zahalzel

Description

@zahalzel

Summary

Custom agents (.agent.md) declare their capabilities in frontmatter — tools, mcp-servers, hooks, model. Skills (SKILL.md) cannot. Today SKILL.md frontmatter supports only name, description, argument-hint, user-invocable, disable-model-invocation. The asymmetry forces every consuming agent to know and re-declare a skill''s capability requirements, which leads to silent under-capability and ecosystem-specific workarounds.

Problem

If a skill needs a tool, an MCP server, a companion hook, or a specific model, that requirement is currently expressible only on the consuming .agent.md. Practical consequences:

  • Tool drift. A kusto-query skill expects runCommand. Every agent loading it must list runCommand in tools:. Forget → the skill loads but its scripts can''t run. Silent failure.
  • MCP drift. A teams-search skill expects the microsoft-teams MCP. Same problem. Forget → tool calls 404.
  • Hooks can''t travel with the skill. A session-context-primer skill that wants to fire a SessionStart hook has no way to declare it; the hook must live at workspace or user scope (over-broad) or in the consuming agent (duplicated across consumers).
  • Model preference can''t be expressed. A skill that''s known to work better with a specific model can''t say so — even as a hint.

Proposal

Extend SKILL.md frontmatter with the same optional capability fields available on .agent.md:

---
name: kusto-query
description: ...
tools: [readFile, runCommand]
mcp-servers: [kusto]
hooks: ./hooks.json
model: claude-sonnet-4
---

Inheritance semantics (proposed):

  • tools and mcp-servers declared by a skill union with the consuming agent''s declarations. Skill needs become an additive contract.
  • hooks declared by a skill activate only when the skill is invoked, scoping naturally with skill lifecycle.
  • model is advisory — consuming agent''s model wins on conflict.

Backward compatibility

All new fields are optional. Existing SKILL.md files unchanged. Implementations that don''t recognize the fields ignore them.

Use cases

  • A kusto-query skill declares mcp-servers: [kusto] so any agent loading it gets Kusto access automatically
  • A session-context-primer skill declares hooks: ./session-start.json so the priming hook travels with the skill
  • A code-review skill declares tools: [readFile, applyPatch] so it can edit code without per-agent reconfiguration
  • A react-component-author skill declares model: claude-sonnet-4-high for nuanced UI work, as a hint

Why this matters

Today, ecosystems building shared skill libraries — internal teams, awesome-copilot, dobby — work around this gap with vendor-specific manifests, plugin-level bundling (whole plugin enables together, coarse), or convention-based docs. All of these are workarounds for the platform gap. Closing it natively makes skills truly composable as the unit of capability.

Related platform surfaces

  • .agent.md already supports the proposed fields → reduces inconsistency between agents and skills
  • Plugin bundling provides a coarser grouping (whole plugin enables/disables together) but doesn''t replace per-skill capability declaration
  • Cross-tool relevance: the same gap exists in GitHub Copilot CLI''s SKILL.md handling (cross-filed for awareness)

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions