API / Auth / MCP Hard

Agent Skills: a registry of what your agent can do

What an Agent Skills index is, why orchestrators need a machine-readable skills list, an example, right vs wrong, mistakes, and how to verify.

Updated:

What it is

Agent Skills is a machine-readable index of an agent’s concrete skills at /.well-known/agent-skills/index.json. Each skill is a task with a description and a link to a detailed SKILL.md. Unlike OpenAPI (endpoints) and MCP Tools (tools with a JSON Schema), Skills describe tasks in natural language — in terms an LLM orchestrator understands.

Why it matters for AI agents

Before delegating a task, an orchestrator must know what an agent can actually do. Skills are a machine-readable contract: “here’s the list of what I solve.” Without it, agent selection is manual only. It’s a level above an API: not “what handles do you have” but “what tasks do you close.”

Minimal working example

The index /.well-known/agent-skills/index.json:

[
  {
    "name": "scan-url",
    "type": "skill",
    "description": "Scan a public URL and return an agent-readiness score with a per-check breakdown",
    "url": "https://example.com/.well-known/agent-skills/scan-url.md",
    "sha256": "a3f8c2d1..."
  }
]

For each skill, publish a SKILL.md (at url) with inputs, results, and call examples. Content-Type: text/markdown.

Right vs wrong

RightWrong
Index at /.well-known/agent-skills/index.jsonAn arbitrary path
Each skill: name, type, description, url, sha256Missing required fields
url points to a real, reachable SKILL.mdA broken link to the skill file
sha256 matches the SKILL.md contentsA mismatched hash — the client won’t trust it

Common mistakes

  • Not an array at the top level, or invalid JSON.
  • Missing sha256/url — the orchestrator can’t verify/load the skill.
  • The SKILL.md is unreachable (404) at the given url.
  • Skills not mirrored in the A2A Agent Card — some orchestrators read them from there.

How to verify

The scanner GETs /.well-known/agent-skills/index.json, checks it’s an array with name/type/description/url/sha256 fields, and HEAD-checks the first url. Manually:

curl -s https://example.com/.well-known/agent-skills/index.json | jq .

Sources