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.1.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.1.0
File Size Uploaded Provenance
skillfuse-0.1.0.tar.gz 147.2 kB With provenance Details

Built distribution (wheel)

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

Total release size: 273.5 kB

Release files / skillfuse-0.1.0.tar.gz

Download URL skillfuse-0.1.0.tar.gz
Size 147.2 kB
Tags Source
SHA-256 checksum
How to use checksums
f366a235038eefa790cde73357534a0fbf5015e8dac86034a1c296b0e9b45db4
BLAKE2b-256 checksum
How to use checksums
3b5ac4eac4c1f28be3555831656806161bae104a01fba8c969b871ca86e47b02
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.1.0-py3-none-any.whl

Download URL skillfuse-0.1.0-py3-none-any.whl
Size 126.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cec602916995842746161c4b1d81e52147e90ceda7d95dc0398e33648b41a60d
BLAKE2b-256 checksum
How to use checksums
2317177fe1d9603a7729bfb02055e320de5f73f3e52453579f72e43338bbf951
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.1.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.1.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.1.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