v0.18.2released View changelog →
Docs Features Supply Chain MCP CI/CD Blog GitHub ↗ mcp-aguara ↗

Local security engine for AI agents
and software supply chains

Your project trusts more than the code you wrote. Aguara checks the rest locally, before install or delegation: package versions, lockfiles, installed dependency trees, CI workflows, MCP configs, skills, AI agent tools.

Local by default · No SaaS account · No LLM calls

~/api-gateway — aguara
$aguara check .
 
Resolving pnpm-lock.yaml · go.sum · Gemfile.lock
Inspecting node_modules · .venv/site-packages
 
CRITICAL pnpm-lock.yaml
known-compromised-package: @antv/g2@5.6.8
ecosystem: npm · SOCKET-2026-05-19-mini-shai-hulud-antv
 
HIGH .mcp.json:12
mcp-config-unpinned-npx
fix: pin version → npx -y @org/server@1.4.2
 
─────────────────────────────────────
Audit complete · 142 files · 0.41s
1 critical · 1 high
 
$
219
Cataloged detections
193 YAML + 26 analyzers
8 ecosystems
npm/pnpm, PyPI, Go, Rust,
PHP, Ruby, Java, and .NET
17 clients
MCP configs auto-detected
across the ecosystem
0 upload
Code, prompts, configs
never leave your machine
Powered by
OSV.dev OpenSSF Malicious Packages Incident-specific local advisories

Three steps. One signed binary.
No SaaS in the loop.

Aguara resolves the local evidence your project is about to trust, matches supported package references and agent surfaces against embedded detections, and emits a deterministic verdict your CI can gate on.

01 RESOLVE

Read lockfiles & installed trees

Aguara discovers every supported lockfile and installed package tree under the path. pnpm-lock.yaml works before install. node_modules and site-packages work after.

$ aguara check .
  ▸ pnpm-lock.yaml
  ▸ go.sum
  ▸ node_modules/
02 MATCH

Compare against embedded intel

Supported package references are normalized and matched against embedded OSV.dev and OpenSSF malicious-package intelligence where exact-version coverage is available. No network call required.

$ aguara status
  snapshot: 2026-05-18
  records: 47,318
  source: OSV + OpenSSF
03 REPORT

Emit a deterministic verdict

SARIF for GitHub Code Scanning. JSON for tooling. Markdown for PR summaries. Terminal for humans. --fail-on high gates CI.

$ aguara audit . --ci
  Audit complete · exit 1
  → security.sarif

Four trust points
worth checking before they bite.

Each pillar maps to one of Aguara's analyzer families. Findings include severity, file location, the matched evidence, and remediation guidance.

Compromised packages

Known malicious versions across npm/pnpm, PyPI, RubyGems, NuGet, Go, crates.io, Packagist, and Maven. Detects them from lockfiles before install where supported, and from installed package trees after install.

CRITICAL pnpm-lock.yaml known-compromised-package: @antv/g2@5.6.8 ecosystem: npm · SOCKET-2026-05-19-mini-shai-hulud-antv

Prompt injection & tool poisoning

Instruction overrides, hidden instructions, authority claims, role switching, and poisoning of tool descriptions and MCP schema fields.

CRITICAL .claude/skills/deploy/SKILL.md:47 prompt-injection-role-switch "Ignore all previous instructions and..."

MCP config risk

Unpinned npx/uvx, shell metacharacters in args, hardcoded secrets, host networking, Docker privileges, capability escalation.

HIGH .mcp.json:12 mcp-config-unpinned-npx fix: pin → npx -y @org/server@1.4.2

CI workflow trust chains

pull_request_target chains, cache poisoning across fork boundaries, OIDC token harvest, mutable action refs, persisted-credentials checkouts on PR head refs.

MEDIUM .github/workflows/ci.yml:31 ci-trust-mutable-ref action uses @main, pin to a SHA

Install in under 30 seconds.
Pin both refs in CI.

Pick the path that matches how you ship security tooling. Every release is signed with Cosign keyless and ships an SPDX SBOM.

$ brew install garagon/tap/aguara
$ aguara check .

Simplest local install on macOS or Linux. Auto-updates via brew upgrade.

$ docker run --rm \
    -v "$PWD:/repo:ro" \
    ghcr.io/garagon/aguara:0.18.2 \
    check /repo

Multi-arch (linux/amd64 + linux/arm64), non-root UID 10001, digest-pinned base, image signed with cosign + SBOM + SLSA provenance.

$ curl -fsSL https://raw.githubusercontent.com/garagon/aguara/main/install.sh \
    | VERSION=v0.18.2 sh
$ aguara check .

Override location for CI / containers with INSTALL_DIR=/usr/local/bin. install.sh verifies SHA256 against the release's checksums.txt.

# .github/workflows/security.yml
- uses: garagon/aguara@v0.18.2
  with:
    path: .
    severity: medium
    fail-on: high
    format: sarif
    version: v0.18.2

Pin both the action ref and the version: input. The action ref pins the workflow wrapper. version: pins the Aguara binary.

$ go install github.com/garagon/aguara/cmd/aguara@v0.18.2
$ aguara version

For developers building from source. Requires Go 1.25+. Source builds report dev metadata; for signed releases use Homebrew, Docker, or the install script.

Eight ecosystems.
One question: am I exposed?

Aguara checks local package evidence: lockfiles before install where supported, and installed dependency trees after install. Strong exact-version malicious-package coverage is available for npm/pnpm, PyPI, RubyGems, and NuGet. Other ecosystems are parser-ready with coverage expanding as range-aware matching lands.

Surface Inputs Current coverage
npm (incl. pnpm)node_modules, pnpm .pnpm store, pnpm-lock.yamlStrong malicious-package coverage. pnpm-lock.yaml works before install.
PyPIsite-packages, .pth, pip/uv cachesStrong malicious-package + persistence coverage
RubyGemsGemfile.lockStrong malicious-package coverage
NuGetpackages.lock.json, *.csproj, *.fsproj, *.vbprojStrong exact-version malicious-package coverage
Gogo.sum, go.modParser ready; limited exact-version embedded matches today
crates.ioCargo.lock (public registry only)Parser ready; range-aware OSV matching deferred
Packagistcomposer.lockParser ready; range-aware OSV matching deferred
Maven / Gradlepom.xml, gradle.lockfile, gradle/dependency-locks/*Parser ready; range-aware OSV matching deferred
npm pnpm PyPI RubyGems NuGet Go Rust Composer Maven

Aguara is not a full SCA.
It complements one.

Aguara stays focused on known compromised packages and high-confidence trust-point failures for AI-agent and supply-chain workflows. General CVE / range matching is a different problem.

Use Aguara when

  • You want a deterministic check that runs locally and in CI without uploading source, prompts, or dependency data.
  • You need to gate before an install-time script or an AI agent trusts third-party content.
  • You ship pnpm / Go / Rust / Ruby / .NET projects and want pre-install lockfile checks against known compromised versions.
  • You want a single signed binary you can verify with Cosign, with SBOM and SLSA provenance.

Reach for a full SCA platform when

  • You need range-aware vulnerability matching across every CVE in every ecosystem.
  • You want a hosted dashboard with cross-repo aggregation and SLA-driven triage workflows.
  • You need policy enforcement at the registry layer or license-compliance reporting.
  • You want managed remediation PRs across hundreds of repos.

Give your agent
a local security scanner.

mcp-aguara exposes the same Aguara scanner as an MCP server, so a compatible agent can request a local check before it trusts a third-party tool, a pasted config, or skill content. No network, no LLM, fast local scans.

step 1 · agent AI agent tool_call: scan_content
arg: ./untrusted-skill.md
MCP
step 2 · server mcp-aguara imports aguara as a
Go library. No shell-out
scan
step 3 · verdict Finding HIGH prompt-injection
at line 47 · do not trust

Or run it as a CLI without an agent

aguara scan --auto

Discovers and scans every MCP config on this machine across 17 supported clients in one pass.

aguara scan .claude/skills --ci

Scan skill files for prompt injection, hidden instructions, and command execution.

go install github.com/garagon/mcp-aguara@latest

Install the MCP server, then claude mcp add aguara -- mcp-aguara wires it into the agent.

17 MCP clients auto-detected Claude Desktop · Cursor · VS Code · Cline · Windsurf · OpenClaw · OpenCode · Zed · Amp · Gemini CLI · Copilot CLI · Amazon Q · Claude Code · Roo Code · Kilo Code · BoltAI · JetBrains

View mcp-aguara on GitHub →

One workflow.
Deterministic exit code.

SARIF lands directly in GitHub Code Scanning. JSON for custom tooling. Markdown for PR summaries. Terminal for humans. Pin both the action ref and the binary version.

GitHub Action

# .github/workflows/security.yml
name: Aguara
on:
  pull_request:
  push:
    branches: [main]

jobs:
  aguara:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      security-events: write
    steps:
      - uses: actions/checkout@v4
      - uses: garagon/aguara@v0.18.2
        with:
          path: .
          severity: medium
          fail-on: high
          format: sarif
          version: v0.18.2

Inputs: path, severity, fail-on, format (sarif default), upload-sarif, version. SARIF upload requires security-events: write and is free for public repositories.

Verifiable from binary
to bill of materials.

A security scanner that you cannot verify is just code you trust on faith. Every Aguara release ships with three things you can check.

Cosign keyless signature

Every release archive and Docker image is signed at the digest with Cosign. Verify the signer is the release GitHub Actions workflow at the tagged ref.

SPDX SBOM per archive

Every release ships a complete SPDX 2.3 software bill of materials. Container images carry the SBOM as a BuildKit attestation on the OCI index.

SLSA build provenance

Container images include SLSA build provenance attestations so you can verify which workflow, which commit, and which runner produced the bits you ran.

Verify a release archive

$ VERSION=v0.18.2
$ ARCHIVE=aguara_${VERSION#v}_linux_amd64.tar.gz

$ curl -fsSLO https://github.com/garagon/aguara/releases/download/${VERSION}/${ARCHIVE}
$ curl -fsSLO https://github.com/garagon/aguara/releases/download/${VERSION}/checksums.txt
$ curl -fsSLO https://github.com/garagon/aguara/releases/download/${VERSION}/checksums.txt.bundle

$ cosign verify-blob \
    --bundle checksums.txt.bundle \
    --certificate-identity "https://github.com/garagon/aguara/.github/workflows/release.yml@refs/tags/${VERSION}" \
    --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
    checksums.txt

$ sha256sum --check --ignore-missing checksums.txt

For the container image: cosign verify ghcr.io/garagon/aguara:0.18.2 with the matching --certificate-identity for docker.yml.

219 detections, versioned with the binary.

193 YAML pattern rules plus 26 analyzer-emitted detections for cases that need structure or correlation. CI results stay reproducible when the binary version is pinned.

supply-chain prompt-injection credential-leak exfiltration mcp-config github-actions-trust command-execution unicode-evasion toxic-flow
Browse rules on GitHub →

One binary between you and a malicious package.

Apache-2.0. Signed releases. Pin it in CI.