Contracts for Agent Skills
SkillPact is a small open standard for a skill.contract.json that sits next to an unchanged SKILL.md. The author declares every side effect, ships tests that run without network, and signs the files. Harnesses read it before install.
Read the specification →Why it existsChecker
- Status
- Working draft 0.8. Not yet 1.0; breaking changes are possible.
- Contract schema
- v0.8.json
- Policy schema
- policy-v0.8.json
- Editor
- Shogo Kajiyama (SEVENTHWELL)
- License
- Text CC BY 4.0 · code Apache-2.0
{
"contract_version": "0.8",
"skill": { "name": "thumbnail-skill", "version": "0.1.0" },
"permissions": {
"read": { "level": "scoped", "scope": ["$INPUT", "$SKILL_DIR/**"] },
"write": { "level": "scoped", "scope": ["$OUTPUT"] },
"network": { "level": "none" },
"exec": { "level": "scoped", "scope": ["python3", "ffmpeg"] },
"spend": { "level": "none" },
"send": { "level": "none" }
},
"capabilities": [ … 5 tools … ],
"tests": { … },
"integrity": { … }
}Six effect classes
Every tool in a skill declares what it may do, in these six classes, each with a level (none, scoped, any) and a scope.
| Class | Meaning | Scope syntax |
|---|---|---|
| read | Read files or data | path glob |
| write | Create, change, delete | path glob, remote:<host>/<path> |
| network | Talk to other hosts | host glob, @local |
| exec | Run other programs | command name |
| spend | Cost money | service name |
| send | Reach a person (message, post, mail) | recipient kind / service name |
Three levels
A level is a statement about evidence, not about safety. L3 means the files are the ones the author signed; it does not mean the skill is harmless.
- L1DeclaredA schema-valid contractWhat the author says it does
- L2TestedL1 + conformance tests pass in a sandbox: read-only files, no network but declared hosts, only declared programsThe declaration was exercised
- L3SignedL2 + file hashes and a trusted ed25519 or Sigstore signatureWho vouches, and that nothing changed since
Where it sits
SkillPact covers the moment before install: a harness reads the contract, compares it with your policy and decides allow, ask or deny. The same policy compiles to Claude Code, Cursor, Codex and Gemini CLI permission settings. Enforcement while the skill runs is left to runtime systems such as APS, ACS and HushSpec; an export to HushSpec and Rego is provided.
$ skillpact conformance ./my-skill
$ skillpact policy-compile ./my-skill policy.json --target claude-code
$ skillpact convert ./my-skill --to mdaDocuments
- SpecificationThe normative text: MUST, SHOULD, MAY.
- WhyThe problem, who benefits, what it does not guarantee.
- GuidesAdopting SkillPact as an author, harness or organisation.
- CompositionRisks that appear only when skills are installed together.
- SchemaEvery field, type and allowed value; JSON Schema files.
- CheckerCheck a contract in your browser. Nothing is uploaded.
- BadgesL1, L2 and L3 badges for a README.
- RationaleWhy each design decision was made.
- AboutGovernance, licensing, citation and contact.
- GitHubkajisho5/skillpact