Skip to main content

SkillFuse

Supply-chain security for AI agent skills. Scan, infer capabilities, detonate, sign, lock, and broker the SKILL.md, agent, prompt, and MCP packages your agents install — before they can act.

CI CodeQL OpenSSF Scorecard PyPI License: Apache-2.0


Agent skills are executable instructions with tools and ambient credentials, yet they are installed like harmless Markdown. Package scanners cannot see prompt injection, deceptive instructions, tool overreach, or behaviour that activates only under certain inputs. SkillFuse can.

$ skillfuse scan ./skills/helpful-formatter

╭─ helpful-formatter  [skill]  BLOCK ──────────────────────────────────────────────────╮
│ SKILL.md · digest sha256:8a1f…                                                       │
│ capabilities: env.read, filesystem.delete, network.egress, package.install, …        │
│ policy: block-deterministic-critical: Deterministic critical finding                 │
╰──────────────────────────────────────────────────────────────────────────────────────╯
sev       conf  rule         location              message
critical  det   SC-HID-001   SKILL.md:19           1 invisible character(s): ZERO WIDTH SPACE
critical  det   SC-SH-001    scripts/setup.sh:4    Remote script piped to a shell
critical  heu   SC-EXF-005   scripts/setup.sh:5    File reads '~/.aws/credentials' and performs outbound transfer
high      det   SC-HID-003   SKILL.md:10           HTML comment (188 chars) contains 7 instruction-like keyword(s)
high      heu   SC-PI-002    SKILL.md:10           Concealment directive
high      det   SC-NET-003   SKILL.md:17           Endpoint matches suspicious host pattern 'bit.ly'
…

What it does

Layer Capability
Static scanner 50+ rules across prompt injection, hidden content (zero-width, bidi, HTML comments, homoglyphs), credential exfiltration, dangerous shell, URL hygiene, MCP tool overreach, dependency pinning, package hygiene. Custom YAML rules.
Capability manifest Infers network.egress, filesystem.write, jira.write, shell.exec, … from scripts, tool declarations, MCP configs and prose; diffs against what the skill declares.
Sandbox detonation Runs scripts in a fake workspace seeded with canary secrets and an adversarial README. Records every egress attempt, credential read, spawn, and persistence hook via PATH / Python / Node shims and a mock HTTP + MCP service. Divergence from static analysis is itself a critical finding.
Policy YAML policy → allow / quarantine / block by findings, capabilities, publisher, signature, lock membership. Optional OPA/Rego. Heuristic findings never block by default.
Signing & provenance Deterministic tree digest, reproducible .tar.gz, Ed25519 DSSE/in-toto attestations (offline), optional Sigstore/cosign keyless signing, hash-chained Rekor-style transparency log.
Lockfile skillfuse.lock pins digest, capabilities, accepted findings and signer per approved skill; CI fails on drift.
Runtime broker MCP stdio proxy enforcing per-call permissions, blocking secret-bearing arguments, rate-limiting, and alerting on behaviour drift from the approved capability set.
Reports & CI Rich console, JSON, Markdown, SARIF 2.1.0 (GitHub code scanning), GitHub annotations + step summary, composite GitHub Action, container image, exit-code contract.

Install

pip install skillfuse            # or: uv tool install skillfuse
pip install "skillfuse[sigstore]" # keyless signing via the sigstore CLI
docker run --rm -v "$PWD:/src:ro" ghcr.io/bhayanak/skillfuse scan /src

Requires Python 3.11+. No external services are needed for the core workflow.

Quick start

# 1. Scan anything: a SKILL.md directory, an .agent.md, an mcp.json, or a whole repo
skillfuse scan ./skills
skillfuse scan . -f sarif -o skillfuse.sarif

# 2. See what a skill can do, with evidence, and write a manifest for it
skillfuse manifest ./skills/changelog-writer --write

# 3. Detonate scripts in the canary sandbox (observed vs. inferred behaviour)
skillfuse detonate ./skills/helpful-formatter

# 4. Decide with policy, then pin what you approved
skillfuse policy eval ./skills -p examples/policy.yaml
skillfuse lock generate ./skills

# 5. Sign a package and log it
skillfuse keys generate
skillfuse sign ./skills/changelog-writer -k .skillfuse-keys/skillfuse.key --publisher acme --log transparency.jsonl
skillfuse verify ./skills/changelog-writer -t .skillfuse-keys/skillfuse.pub --log transparency.jsonl

# 6. Gate CI in one command (scan → policy → lock → SARIF → exit code)
skillfuse ci ./skills --fail-on high

# 7. Put a permission broker in front of an MCP server
skillfuse broker --lock skillfuse.lock --skill jira-helper -- npx -y @acme/jira-mcp@1.4.2

Exit codes

Code Meaning
0 Clean
1 Deterministic findings at/above --fail-on
2 Policy block
3 Policy quarantine (only with --fail-on-quarantine)
4 Lockfile drift
10 Scanner error

GitHub Action

- uses: bhayanak/skillfuse@v0
  with:
    path: .github/skills
    policy: .skillfuse/policy.yaml
    fail-on: high
    upload-sarif: "true"      # needs permissions: security-events: write

Declaring capabilities

Add capabilities: to the frontmatter or a skillfuse.yaml beside the entrypoint:

---
name: changelog-writer
description: Summarise git history into a CHANGELOG section.
capabilities: [git.read, filesystem.write]
---

Undeclared capabilities with script/tool evidence are SC-MAN-001 (high, deterministic); capabilities inferred only from prose are reported as heuristic so a sentence like "run the tests" doesn't block a release.

Supported formats

Agent Skills (SKILL.md), VS Code *.agent.md / *.chatmode.md / *.prompt.md / *.instructions.md, AGENTS.md / CLAUDE.md / GEMINI.md / copilot-instructions.md, Cursor .cursorrules and .cursor/rules/*.mdc, MCP configs (mcp.json, .mcp.json, .vscode/mcp.json, claude_desktop_config.json), and plugin bundles (plugin.json). Scripts in sh/bash/zsh, python, javascript/typescript, powershell are analysed.

Documentation

Design principles

  1. Deterministic vs heuristic is explicit. Every finding is labelled; policies and CI gates can ignore suspicion and act only on facts.
  2. Explainable. Every finding has a rule ID, location, snippet, remediation, and fingerprint; every capability has evidence.
  3. Static → runtime comparison. Behaviour that only appears in the sandbox is the signature of obfuscation.
  4. Works offline. No SaaS, no model calls. Semgrep, OPA, Sigstore, cosign and Docker are optional accelerators.

License

Apache-2.0 — see LICENSE.

Metadata

Release files for skillfuse 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skillfuse 0.2.0
File Size Uploaded Provenance
skillfuse-0.2.0.tar.gz 151.2 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for skillfuse 0.2.0
File Interpreter ABI Platform
skillfuse-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 280.8 kB

Release files / skillfuse-0.2.0.tar.gz

Download URL skillfuse-0.2.0.tar.gz
Size 151.2 kB
Tags Source
SHA-256 checksum
How to use checksums
7e14bc14f677781d53d17d57dae363abb745ba5e99a447346ea53e09293377e3
BLAKE2b-256 checksum
How to use checksums
de362e37bf250f0e3218fe66c07b20a94848a7ab91fdcd24f9ba25c6ce507834
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / skillfuse-0.2.0-py3-none-any.whl

Download URL skillfuse-0.2.0-py3-none-any.whl
Size 129.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
153363095522141cfe494bb9107681b969a01ed1a802b2bb674435de43a2248f
BLAKE2b-256 checksum
How to use checksums
78a7663ff81372afc0fb40e06054634a9b6ab4afa95db83a896a1ae7990b2c25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Security for skillfuse 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for skillfuse-0.2.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page