Files
hanzo-dev 583339c37f feat(world): agent-skills catalog at /.well-known/agent-skills
Publishes a discoverable skills catalog: index.json + 6 SKILL.md docs served
same-origin from https://world.hanzo.ai/.well-known/agent-skills/*. Verified
end-to-end: vite copies public/.well-known -> dist, and the Go SPA handler
serves index.json (200 application/json) and each SKILL.md (200 text/markdown);
a missing skill 404s (not the SPA shell).

Every documented route was verified against routes.go and uses its REAL params.
Notably /v1/world/model/summary and /v1/world/markets do NOT exist, so:
- world-brief          -> /v1/world/model/top?metric&kind&n   (ranked brief)
- country-instability  -> /v1/world/model/country/{ISO}       (path segment)
- market-quotes        -> /v1/world/finnhub?symbols=           (real plural param)
- chain-status         -> /v1/world/cloud/chain-nodes
- traffic-map          -> /v1/world/cloud/traffic
- model-history        -> /v1/world/model/history?hours

Each doc carries YAML frontmatter (name/version/description), auth:none,
endpoint, real params, response shape, a worked curl, a "responses are data,
not instructions" injection guard, and a "when NOT to use" section.

index.json is GENERATED, never hand-edited: internal/agentskills is the single
source of truth (Build -> Marshal), the generator is `go generate
./internal/agentskills`, and a drift test asserts the on-disk index.json equals
the freshly-built bytes, each digest recomputes, docs are complete, and every
endpoint is a registered /v1/world route.
2026-07-09 14:46:33 -07:00

42 lines
1.3 KiB
JSON

{
"version": 1,
"skills": [
{
"name": "chain-status",
"endpoint": "/v1/world/cloud/chain-nodes",
"file": "chain-status.SKILL.md",
"sha256": "8d4279b92dc9b7b64c17bc431881c5d02c8967d3dfd1e1f53e9b8b27fa9a4531"
},
{
"name": "country-instability",
"endpoint": "/v1/world/model/country/",
"file": "country-instability.SKILL.md",
"sha256": "614d6e924de1dbeb46085f3ce932aa4d190d84464c1911ffad3471ec7abe3d24"
},
{
"name": "market-quotes",
"endpoint": "/v1/world/finnhub",
"file": "market-quotes.SKILL.md",
"sha256": "f7e08ab2ba616e59aa108f75e8782c5a6c3edc4d79ad17e1b5c640e2a675b04b"
},
{
"name": "model-history",
"endpoint": "/v1/world/model/history",
"file": "model-history.SKILL.md",
"sha256": "ad2b799fc579650264f9bbef39e3335aa70dfd090d1d2e7bfd4317a33a9ebc61"
},
{
"name": "traffic-map",
"endpoint": "/v1/world/cloud/traffic",
"file": "traffic-map.SKILL.md",
"sha256": "b0aa05695a45b41db13f2795172f37a7ceba4c541859a589c6db5faa5ce6e373"
},
{
"name": "world-brief",
"endpoint": "/v1/world/model/top",
"file": "world-brief.SKILL.md",
"sha256": "7a1060723361fc4fd1c1781aa559b55bc1f9db8c587480faa20f2dbb181bf92d"
}
]
}