{
  "schemaVersion": "1.0",
  "humanReadableId": "sigil.sigilsec.ai",
  "agentVersion": "1.0.5",
  "name": "Sigil",
  "description": "AI agent supply chain security scanner. Quarantines and scans repos, packages, and MCP servers before they run. Eight-phase static analysis with quarantine-first workflow. Runs as a CLI, MCP server with 12 tools, Claude Code plugin, or CI/CD step.",
  "url": "https://sigilsec.ai",
  "provider": {
    "name": "NOMARK Pty Ltd",
    "url": "https://nomark.ai",
    "support_contact": "support@sigilsec.ai"
  },
  "iconUrl": "https://sigilsec.ai/icon0.svg",
  "capabilities": {
    "a2aVersion": "1.0",
    "supportedMessageParts": [
      "text",
      "data"
    ],
    "supportsPushNotifications": false
  },
  "authSchemes": [
    {
      "scheme": "none",
      "description": "CLI and MCP server run locally without authentication. Pro/Team API keys optional for cloud threat intelligence."
    }
  ],
  "skills": [
    {
      "id": "sigil_scan",
      "name": "Scan File or Directory",
      "description": "Scan a local file or directory for supply chain security threats. Runs eight-phase static analysis: install hooks, code patterns, network exfiltration, credentials, obfuscation, provenance, prompt injection, and skill security.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Scan this directory for security threats",
        "Check src/lib for malicious patterns"
      ],
      "input_schema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "File or directory path to scan"
          },
          "phases": {
            "type": "string",
            "description": "Comma-separated phases to run (e.g. 'install_hooks,code_patterns'). Omit for all phases."
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ],
            "description": "Minimum severity threshold for reported findings"
          }
        },
        "required": [
          "path"
        ]
      }
    },
    {
      "id": "sigil_scan_package",
      "name": "Scan Package from Registry",
      "description": "Download and scan a package from npm or PyPI. The package is downloaded into quarantine and scanned across all eight phases before anything is installed.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Scan the npm package express before installing",
        "Check if langchain-toolkit on PyPI is safe"
      ],
      "input_schema": {
        "type": "object",
        "properties": {
          "manager": {
            "type": "string",
            "enum": [
              "npm",
              "pip"
            ],
            "description": "Package manager: 'npm' or 'pip'"
          },
          "package_name": {
            "type": "string",
            "description": "Package name to download and scan"
          },
          "version": {
            "type": "string",
            "description": "Specific version to scan (defaults to latest)"
          }
        },
        "required": [
          "manager",
          "package_name"
        ]
      }
    },
    {
      "id": "sigil_clone",
      "name": "Clone and Scan Repository",
      "description": "Clone a git repository into quarantine and scan it. The repo is held in quarantine until explicitly approved or rejected.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Clone and scan this GitHub repo before using it",
        "Check this repository for supply chain threats"
      ],
      "input_schema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "Git repository URL to clone"
          },
          "branch": {
            "type": "string",
            "description": "Branch to clone (defaults to default branch)"
          }
        },
        "required": [
          "url"
        ]
      }
    },
    {
      "id": "sigil_quarantine",
      "name": "List Quarantined Items",
      "description": "List all items currently held in quarantine with their status, source, risk score, and quarantine ID.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Show what's in quarantine",
        "List all quarantined packages"
      ],
      "input_schema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "id": "sigil_approve",
      "name": "Approve Quarantined Item",
      "description": "Release a quarantined item from quarantine for installation or use. Moves the item out of the quarantine directory.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Approve this quarantined package for installation",
        "Release express from quarantine"
      ],
      "input_schema": {
        "type": "object",
        "properties": {
          "quarantine_id": {
            "type": "string",
            "description": "ID of the quarantined item to approve"
          }
        },
        "required": [
          "quarantine_id"
        ]
      }
    },
    {
      "id": "sigil_reject",
      "name": "Reject Quarantined Item",
      "description": "Permanently delete a quarantined item. The downloaded files are removed from the quarantine directory.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Reject and delete this quarantined package",
        "Remove the flagged package from quarantine"
      ],
      "input_schema": {
        "type": "object",
        "properties": {
          "quarantine_id": {
            "type": "string",
            "description": "ID of the quarantined item to reject and delete"
          }
        },
        "required": [
          "quarantine_id"
        ]
      }
    },
    {
      "id": "sigil_grade",
      "name": "Grade Path",
      "description": "Letter grade (A-F), recommendation, behaviour profile and key risks for a path. Cheaper to read than sigil_scan when only the verdict matters.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Grade this repository",
        "What grade does src/ get?"
      ],
      "input_schema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "File or directory path to grade"
          }
        },
        "required": [
          "path"
        ]
      }
    },
    {
      "id": "sigil_residue_scan",
      "name": "Scan Host for Agent-Tooling Residue",
      "description": "Read-only scan of this machine for what installed agent tooling left behind: shell rc edits, cron/launchd/systemd persistence, git hooks, world-readable credential files, leftover tool directories, /etc/hosts redirects, global agent packages. Nothing is changed.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "What did that agent tool leave on my machine?",
        "Scan this host for residue"
      ],
      "input_schema": {
        "type": "object",
        "properties": {
          "repo": {
            "type": "string",
            "description": "Path to a git repository whose hooks to include (default: the current directory when it is a repository)"
          }
        }
      }
    },
    {
      "id": "sigil_residue_plan",
      "name": "Plan Residue Cleanup",
      "description": "Show the reversible fixes Sigil would make for host residue, without applying them. Apply and rollback are not exposed as tools; a human runs them in a terminal.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Show me what Sigil would clean up",
        "Plan the residue cleanup"
      ],
      "input_schema": {
        "type": "object",
        "properties": {
          "repo": {
            "type": "string",
            "description": "Path to a git repository whose hooks to include (default: the current directory when it is a repository)"
          }
        }
      }
    },
    {
      "id": "sigil_check_package",
      "name": "Check Package in Scan Database",
      "description": "Look up a package or skill's risk assessment in the Sigil public scan database. Works for ClawHub skills, PyPI packages, npm packages, GitHub repos, and MCP servers. Does not require the Sigil CLI.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Has the npm package express been scanned?",
        "Check the todoist-cli skill on ClawHub"
      ],
      "input_schema": {
        "type": "object",
        "properties": {
          "ecosystem": {
            "type": "string",
            "enum": [
              "clawhub",
              "pypi",
              "npm",
              "github",
              "mcp"
            ],
            "description": "Package ecosystem"
          },
          "package_name": {
            "type": "string",
            "description": "Package name, skill slug, or repo path (e.g. 'todoist-cli')"
          }
        },
        "required": [
          "ecosystem",
          "package_name"
        ]
      }
    },
    {
      "id": "sigil_search_database",
      "name": "Search Scan Database",
      "description": "Search the Sigil public scan database for packages by name or keyword. Returns scanned packages with their verdicts and risk scores. Does not require the Sigil CLI.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Search the scan database for langchain",
        "Find scanned MCP servers matching 'github'"
      ],
      "input_schema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Search query (package name or keyword)"
          },
          "ecosystem": {
            "type": "string",
            "enum": [
              "clawhub",
              "pypi",
              "npm",
              "github",
              "mcp"
            ],
            "description": "Filter by ecosystem"
          }
        },
        "required": [
          "query"
        ]
      }
    },
    {
      "id": "sigil_report_threat",
      "name": "Report Threat",
      "description": "Report a malicious file to the Sigil threat intelligence database by its SHA256 hash. Requires the Sigil CLI and an authenticated session (sigil login). Reports are reviewed by the security team.",
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "examples": [
        "Report this file hash as malware"
      ],
      "input_schema": {
        "type": "object",
        "properties": {
          "sha256": {
            "type": "string",
            "pattern": "^[a-fA-F0-9]{64}$",
            "description": "SHA256 hash of the malicious file"
          },
          "threat_type": {
            "type": "string",
            "description": "Type of threat (e.g. malware, backdoor, exfil)"
          },
          "description": {
            "type": "string",
            "description": "Description of the threat"
          }
        },
        "required": [
          "sha256",
          "threat_type",
          "description"
        ]
      }
    }
  ],
  "tags": [
    "security",
    "ai-agent",
    "supply-chain",
    "mcp-server",
    "static-analysis",
    "quarantine",
    "cli",
    "npm",
    "pypi",
    "open-source",
    "attestation",
    "in-toto",
    "sigstore"
  ],
  "privacyPolicyUrl": "https://sigilsec.ai/privacy",
  "termsOfServiceUrl": "https://sigilsec.ai/terms",
  "lastUpdated": "2026-09-03T00:00:00Z",
  "_links": {
    "documentation": "https://sigilsec.ai/docs",
    "mcpDocs": "https://sigilsec.ai/docs/mcp",
    "quickstart": "https://sigilsec.ai/docs/quickstart",
    "github": "https://github.com/NOMARJ/sigil",
    "scanDatabase": "https://sigilsec.ai/scans",
    "scanFeedApi": "https://sigilsec.ai/api/v1/feed",
    "badgeApi": "https://sigilsec.ai/badge/{ecosystem}/{package}",
    "llmsTxt": "https://sigilsec.ai/llms.txt",
    "llmsFullTxt": "https://sigilsec.ai/llms-full.txt",
    "installScript": "https://sigilsec.ai/install.sh",
    "changelog": "https://sigilsec.ai/changelog",
    "attestationApi": "https://sigilsec.ai/api/v1/attestation/{scan_id}",
    "verifyApi": "https://sigilsec.ai/api/v1/verify",
    "verifyKeys": "https://sigilsec.ai/.well-known/sigil-verify.json"
  }
}
