SkillPact · Working draft 0.8
Adoption guides
How to start, by role. Packages are not published yet; install from the repository: git clone https://github.com/kajisho5/skillpact && pip install -e skillpact/ref.
Users#
- Look for
skill.contract.jsonnext toSKILL.md, or a SkillPact badge. - Paste the contract into the checker (runs in your browser, sends nothing). Read the effects list: does the skill touch more than it needs?
- For the full level, run
python3 -m skillpact.cli conformance <skill_dir> --trusted-key <author key>. L3 only means "these files, signed by that key, tests passed". - Keep your harness's own permission prompts on. SkillPact does not enforce anything at run time.
Skill authors#
python3 -m skillpact.cli init <skill_dir> -o skill.contract.jsoncreates a draft. Confirm every item and removeTODO(...)markers andx.init.uncertain(otherwiseUNCONFIRMED_DRAFT).- Narrow scopes (
$WORKDIR/**rather than/**). Declare spend and send honestly. Pin the packages you depend on ("version": "==1.106.2"inrequirements.packages): tests refuse to run against any other installed version. - Add tests that run without network. Run
skillpact test <skill_dir>. Linux: install bubblewrap for the full sandbox (without it tests still run, network isolated only, but no L2 / L3), and strace for the exec audit (a case fails if it starts a program your exec scope does not list). macOS: the built-in Seatbelt (sandbox-exec) is used automatically (experimental). Windows: run inside WSL2 or a Linux container. Cases withnetwork: truereach only the hosts you declare, through an HTTP proxy (HTTPS_PROXY); tools that ignore proxy variables get no network. Tests cannot see your home directory,/tmpor host environment variables; to give askip_unless_envcase a variable, pass--pass-env NAME. - Delete
__pycache__/and*.pyc, thenskillpact hash <skill_dir>(lists every file; re-run it aftermigrate), thenskillpact sign <skill_dir> key.pemorsign-sigstorein CI. Publish your public key. - Add the GitHub Action, pinned to a commit SHA, on
pull_request(notpull_request_target):
- uses: kajisho5/skillpact@<commit-sha>
with: { path: ., min-level: L2 }
- Show the badge from badges that matches the level CI reports.
Harness vendors#
- On install, read
skill.contract.jsonand validate it (Python library or the TypeScriptvalidate). - Match it against the user's policy (
match_policy); showdecisionanddecision_worst_caseper capability. - Turn the result into your permission settings; see
policy-compilefor Claude Code, Cursor, Codex and Gemini CLI, and itslossylist. - Re-verify integrity right before running (TOCTOU) and ask again when permissions widen between versions.
- Run the conformance suite against your validator:
python3 conformance/run.py --cmd '<your validator> {dir}'.
Enterprises and CI#
- Write one policy: defaults per effect, rules,
trusted_keys,require_signature: true,min_contract_version: "0.8". - In CI, run
conformanceon every skill and fail below the level you require. - Distribute compiled harness settings from that policy; review the
lossylist for each harness. - Use runtime policy (HushSpec, Rego for APS / ACS) for enforcement during execution.
- Keep the signed contract as the review record for each approved skill version.