feat(skill): add skill discovery from URLs via well-known RFC

Implement the Agent Skills Discovery RFC to allow fetching skills from URLs:
- Add 'urls' field to config.skills for specifying skill registry URLs
- Create Discovery namespace in skill/discovery.ts with pull() function
- Download skills from /.well-known/skills/index.json endpoints
- Cache downloaded skills to ~/.cache/opencode/skills/
- Skip re-downloading existing files for efficiency

Users can now configure:
{
  "skills": {
    "urls": ["https://example.com/.well-known/skills/"]
  }
}

Implements: https://github.com/cloudflare/agent-skills-discovery-rfc
This commit is contained in:
Dax Raad
2026-02-06 00:29:43 -05:00
parent 0f1fdeceda
commit 266de27a0b
3 changed files with 101 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ import { Filesystem } from "@/util/filesystem"
import { Flag } from "@/flag/flag"
import { Bus } from "@/bus"
import { Session } from "@/session"
import { Discovery } from "./discovery"
export namespace Skill {
const log = Log.create({ service: "skill" })
@@ -151,6 +152,22 @@ export namespace Skill {
}
}
// Download and load skills from URLs
for (const skillUrl of config.skills?.urls ?? []) {
const downloadedDirs = await Discovery.pull(skillUrl)
for (const dir of downloadedDirs) {
dirs.add(dir)
for await (const match of SKILL_GLOB.scan({
cwd: dir,
absolute: true,
onlyFiles: true,
followSymlinks: true,
})) {
await addSkill(match)
}
}
}
return {
skills,
dirs: Array.from(dirs),