Publish for your own site
You do not need us. Serve two files from your own domain and every agent that speaks the standard — Skylark included — can read them directly. We mirror what you publish so people can find it, and verify your domain automatically because only you can serve from it.
Why bother? The alternative is an agent guessing its way through your UI from a screenshot. A skill is you telling it how your site actually works — which of your flows are safe to automate, where it must stop and ask, and what your buttons are called this week.
1. The discovery index
Serve this at /.well-known/agent-skills/index.json. It is fetched before your page renders, so an agent knows what you offer without executing anything.
{
"$schema": "https://schemas.agentskills.io/discovery/0.2.0/schema.json",
"skills": [
{
"name": "cancel-subscription",
"type": "skill-md",
"description": "Cancels a recurring subscription. Drives the cancel flow and stops at the final confirm.",
"url": "/.well-known/agent-skills/cancel-subscription/SKILL.md",
"digest": "sha256:d13d4ad61efcb1fc37bedc9d675a62caa0ea5046757146e9157ef8ce3a31a974",
"runtime": "browser",
"permissions": ["page:read", "page:act", "navigate"],
"scope": ["https://billing.acme.example/account/subscriptions/*"],
"triggers": [
{ "kind": "url_pattern", "pattern": "https://billing.acme.example/account/subscriptions/*" },
{ "kind": "intent", "description": "cancel my subscription" }
]
}
]
}The four fields after the blank line are Skylark extensions. The standard requires clients to ignore fields they do not recognise, so they are safe to include — andruntime is the important one: it defaults to repo, meaning a coding agent, so a browser will ignore your skill unless you saybrowser.
2. The skill itself
Markdown with YAML frontmatter, in the open Agent Skills format. Plain procedural English — the same thing you would write for a new colleague.
---
name: cancel-subscription
description: >-
Cancels a recurring subscription on Acme Billing. Drives the cancel
flow and stops at the final confirm, handing the consequential last
click back to the user.
runtime: browser
permissions:
- page:read
- page:act
- navigate
scope:
- https://billing.acme.example/account/subscriptions/*
version: 1.0.0
---
# Cancel subscription
## Before you start
1. Call `read_page` and confirm you are on a subscriptions page.
## Drive the cancel flow
2. Click the subscription's **Manage** control. Use the interactive-element
`ref` from the snapshot — never a hand-written CSS selector.
## Confirm with the user
3. Summarise what will be cancelled and the effective date, then wait for an
explicit yes before the final click.3. Write instructions, not selectors
The agent reads your page as an accessibility tree and addresses controls by a stable reference, not a CSS selector. So describe the control — “the Manage button on the subscription row” — rather than .sub-row > .btn-2. Your class names change; your labels mostly do not.
Say where to stop. If a step is consequential — a payment, a cancellation, a deletion — write that the agent must summarise and wait for the user. Skylark enforces a confirmation there anyway, but a skill that expects it produces a much better handover.
4. Ask for the least you need
A skill that only explains a page should declare no permissions at all. Skills published by a site are capped at reading the page, acting on it, and navigating — the things your site can already do to itself. Reading raw network traffic or running JavaScript in the page is not available to site-published skills, by design.
5. Digests
The digest is the SHA-256 of your SKILL.md bytes. Clients verify it before use and skip re-downloading when it has not changed, so update it whenever you edit the file.
shasum -a 256 SKILL.mdThen tell us
Submit the URL and we will fetch it, confirm it is served from your domain, and list it here with a verified badge. The copy on your domain stays authoritative — this is a mirror for discovery.