How you can contribute
AgentGuardian is an open red-teaming framework for LLM agents. There are six on-ramps for contributors — pick the one that matches what you want to ship.Add a new attack (probe)
A YAML file under
src/agent_guardian/probes/asiNN/ plus a golden test.Add a target adapter
Wrap a new framework, transport, or hosted endpoint as a
TargetAdapter.Improve evaluations
Sharpen an
AsiAgent judge rubric or add a strategy under strategies/.Add a vulnerable demo agent
Drop a deliberately-weak agent under
examples/ or the testbench.Improve documentation
Edit the Mintlify site under
docs/ and open a PR.Report a security issue
Use a private GitHub Security Advisory — never a public issue.
When to use which path
Set up local dev
Clone and sync
Clones the repo and creates a
.venv plus a pinned uv.lock with every extra installed.Install pre-commit hooks
Runs the ruff + ruff-format + mypy + secret-detection hooks on every
git commit. The hook config lives in .pre-commit-config.yaml.Run the full local gate
Mirrors the CI gate that runs on every PR across Python 3.11, 3.12, and 3.13 (3.14 not yet supported).
Expected output of the local test suite
A clean checkout passes all four gates. The shape ofuv run pytest -q looks like:
uv run ruff check . and uv run mypy src/ both exit zero with no output. uv run pre-commit run --all-files ends with Passed for ruff, ruff-format, trailing-whitespace, end-of-file-fixer, check-yaml, check-toml, check-merge-conflict, check-added-large-files, detect-private-key, and mypy.
Add a new attack (probe)
Probes are YAML files undersrc/agent_guardian/probes/asiNN/, one directory per OWASP ASI 2026 category. The loader at src/agent_guardian/probes/loader.py (load_all_probes) walks every asiNN/*.yaml at scan time — drop a new file in the right directory and it’s picked up automatically. The corpus version is stamped in src/agent_guardian/probes/_meta/version.yaml; bump it whenever you add or remove a probe.
The YAML schema
Every probe carries the fields validated byagent_guardian.models.probe.Probe:
idis unique across the corpus and stable for the life of the probe.asiis one ofASI01–ASI10.mitre_atlasis a list of MITRE ATLAS v5.4.0 technique IDs.csa_categoryreferences the CSA Agentic-RT taxonomy.severityis one oflow | medium | high | critical.tier_flooris the minimum target tier (1–4) at which the probe should run.seedsis the list of adversarial inputs to use as starting prompts.expected_evidenceis what the judge agent looks for to confirm the attack succeeded.
Required: a golden test
Every new probe must ship with a golden test undertests/golden/ that locks in the expected verdict for a deterministic mock target. This keeps the corpus reproducible across PRs and across model providers.
Run
uv run agent-guardian list-probes after dropping in your YAML — your probe ID must appear in the output. If it doesn’t, the loader rejected it; check the schema error in the CLI output.Add a target adapter
Adapters wrap a target framework or transport so AgentGuardian can scan it. They live undersrc/agent_guardian/adapters/ and subclass the TargetAdapter ABC at src/agent_guardian/adapters/base.py. The existing adapters (prompt.py, code.py, http.py, framework/) are the reference implementations.
The contract is two members:
callis the only abstract method — single user turn in, single text reply out.sessionis an opaque conversation-state token; agents pass distinct IDs for parallel attacks so per-session histories never cross-contaminate._fingerprintMUST be set in__init__—TargetAdapter.fingerprint()raises if it’s stillNone.- Override
profile_evidence()if you can expose system prompt / source / framework introspection (white-box) — the default is black-box (call-only). - Override
aclose()if you hold HTTP clients or sockets.
tests/integration/ that runs your adapter end-to-end against a mock target.
Improve evaluations
Evaluations are split between the specialist agents undersrc/agent_guardian/agents/ and the attack strategies they compose under src/agent_guardian/strategies/.
Agents subclass agent_guardian.agents.base.AsiAgent and own one OWASP ASI category each. Every concrete agent sets the class-level taxonomy (asi_category, name, default_mitre_techniques, default_csa_category, default_severity) and overrides seeds_for_category(), plus optionally is_applicable() and strategy_stack(). The run() loop is provided by the base class — don’t override it. See src/agent_guardian/agents/goal_hijack.py, tool_abuse.py, and memory_poison.py for reference implementations.
Every finding an agent emits MUST be tagged with asi, mitre_atlas, and csa_category so the AIVSS scorer and the SARIF / JSON / Markdown report writers attribute it correctly.
Strategies are reusable attack patterns the agents stack — crescendo.py, pair.py, tap.py, pretext.py, indirect.py, tool_exfil.py, mad_max.py, evasion.py, fuzz.py, race_strategies.py. Add a new strategy under src/agent_guardian/strategies/ if you have a published attack pattern that the existing ones don’t cover; subclass strategies/base.py.
Judge rubrics
Every agent ships a versioned judge rubric (YAML) describing how its judge LLM decides whether an attempt counts as a successful exploit. Sharpening a rubric to cut false positives is one of the highest-value contributions — pair it with atests/golden/ case that pins the verdict.
Add a vulnerable demo agent
Demo agents give the community a reproducible target to scan against. Two homes:- Bundled examples at examples/ ship with the package. The current set is
examples/langgraph/{simple_chatbot,support_with_tool,personal_assistant_pii}.pyandexamples/openai_agents/{simple_chatbot,support_with_tool,personal_assistant_pii}.py. Add a new file under the matching framework directory and reference it via--framework-ref agent_guardian.examples.<framework>.<module>:graphon a scan. - Testbench at
/Users/mobionix/workspace/glacien/agent_guardian_testbench/(private; Cloud Run service) hosts longer-lived deliberately-vulnerable agents (finbot,support_bot,coding_assistant,travel_concierge) plus the defendedclean_controlbaseline. Use the testbench for agents that need real tool surface, multi-turn memory, or hosted HTTP endpoints.
clean_control sibling that the same probe MUST NOT false-positive on.
Improve documentation
This site is built with Mintlify from.mdx files under docs/. The navigation tree is docs/docs.json. Every page follows the six-section style: one-line explanation → when to use → runnable command → expected output → how to interpret → next step.
To preview locally:
.mdx, add its slug to the matching group in docs/docs.json, and open a PR. Mintlify’s GitHub App auto-deploys main to docs.agentguardian.io — there is no separate docs CI on the AgentGuardian side.
Report a security issue
If you believe you’ve found a vulnerability inagent-guardian itself, do not file a public GitHub issue. The canonical channel is a private GitHub Security Advisory.
Open a draft advisory
Use github.com/glacien-technologies/agent-guardian/security/advisories/new. GitHub encrypts the report at rest and scopes visibility to the maintainers.
Email fallback
If you cannot use the GitHub channel, email
security@glacien.ai. Plain email is acceptable.Expect coordinated disclosure
Glacien acknowledges within 5 business days, triages within 10, and ships a fix or documented mitigation within 90 days. Crediting in the published advisory is opt-in.
How to interpret a contributor checklist
Every PR must clear these gates before merge:DCO sign-off
Every commit MUST carry aSigned-off-by: trailer asserting the Developer Certificate of Origin 1.1. Pass -s to git commit:
git config user.name and git config user.email. Anonymous or untraceable sign-offs (e.g. the bare noreply@github.com) are rejected. GitHub’s per-user privacy email of the form <numeric-id>+<username>@users.noreply.github.com is permitted because it remains uniquely tied to your account — matching the Linux kernel and Kubernetes DCO policies.
If you forget the trailer, rebase to add it across every commit on the branch:
Branch and commit prefixes
Example:
feat/asi04-tool-poisoning-langchain with the first commit feat(probes): add ASI-04 chained tool poisoning probe.
Next step
Installation
Pip / pipx / uv / Docker — pick the install path that matches your dev setup.
How AgentGuardian works
The six-phase swarm, so you know what your probe / adapter / agent plugs into.
Attack library
The 96 existing probes across ASI01–ASI10 — see where your contribution fits.
CONTRIBUTING.md
The canonical contributor spec in the repo, including the long-form DCO policy.