Capability manifest

The capabilities block in a SKILL.md frontmatter is the skill's self-declaration of what it's allowed to do. In v0, it's an honor system — SkillOx compares the declared capabilities against what the markdown looks like it's actually doing, and flags mismatches. Later, the WebAssembly sandbox enforces it at runtime.

Shape

capabilities:
  filesystem:
    read:  ["./src/**", "~/.config/myapp/**"]
    write: ["./src/**"]
  network:
    egress: ["api.acme.io:443", "cdn.acme.io:443"]
  process:
    exec: ["prettier", "biome"]
  secrets:
    env: ["ACME_API_KEY"]      # explicitly declared, not harvested
  agent_tools:
    use: ["read_file", "write_file", "run_command"]

Sections

Why declare?

Three reasons, scaling with milestone:

  1. Today (v0) — declared capabilities are how SkillOx tells whether a network reference is a legitimate operational dependency or an undeclared exfil endpoint. Skills with manifests grade better.
  2. Planned sandbox — the WASM runtime reads the manifest and enforces every syscall against it. Anything undeclared is killed + audit-logged.
  3. Planned Team tier — org policies can require minimum capability declarations (“no skills without a manifest”, “no skills with process.exec”).
Tip: if you author a skill, ship a manifest from day one. It costs five minutes, it's the difference between an A and a B at v0, and it's a hard requirement once the sandbox lands.