agentguard — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited agentguard (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Runtime guardrails for coding agents. Stops loops, budget overruns, retry storms, and timeouts mid-run. Zero dependencies. Local-first.
pip install agentguard47Verify the install:
agentguard doctorfrom agentguard import Tracer, BudgetGuard, patch_openai
budget = BudgetGuard(max_cost_usd=5.00, warn_at_pct=0.8)
tracer = Tracer(service="support-agent")
patch_openai(tracer, budget_guard=budget)
# OpenAI chat completions are now tracked. At $4 you get a warning. At $5 the agent stops.| Guard | What it stops | Example |
|---|---|---|
BudgetGuard | Dollar/token/call overruns | BudgetGuard(max_cost_usd=5.00) |
LoopGuard | Exact repeated tool calls | LoopGuard(max_repeats=3) |
FuzzyLoopGuard | Similar calls, A-B-A-B patterns | FuzzyLoopGuard(max_tool_repeats=5) |
TimeoutGuard | Wall-clock time limits | TimeoutGuard(max_seconds=300) |
RateLimitGuard | Calls-per-minute throttling | RateLimitGuard(max_calls_per_minute=60) |
RetryGuard | Retry storms on flaky tools | RetryGuard(max_retries=3) |
Guards raise exceptions (BudgetExceeded, LoopDetected, TimeoutExceeded, RetryLimitExceeded) to kill the agent immediately.
import agentguard
agentguard.init(local_only=True)
# Reads .agentguard.json if present, sets up tracer + budget guard with sensible defaultsOr drop a .agentguard.json in your repo root:
{
"profile": "coding-agent",
"service": "my-agent",
"trace_file": ".agentguard/traces.jsonl",
"budget_usd": 5.0
}from agentguard import Tracer, JsonlFileSink, BudgetGuard
tracer = Tracer(
sink=JsonlFileSink("traces.jsonl"),
guards=[BudgetGuard(max_cost_usd=5.00)],
)
with tracer.trace("agent.run") as span:
span.event("reasoning", data={"thought": "search docs"})
span.cost.add("gpt-4o", input_tokens=1200, output_tokens=450)from agentguard import Tracer, BudgetGuard, patch_openai, patch_anthropic
budget = BudgetGuard(max_cost_usd=5.00)
tracer = Tracer(service="support-agent")
patch_openai(tracer, budget_guard=budget) # tracks ChatCompletion calls
patch_anthropic(tracer, budget_guard=budget) # tracks Messages callsLangChain, LangGraph, and CrewAI are supported as optional extras:
pip install agentguard47[langchain]
pip install agentguard47[langgraph]
pip install agentguard47[crewai]agentguard doctor # verify install, no network calls
agentguard demo # local proof run, no API keys needed
agentguard report traces.jsonl # summarize a trace file
agentguard eval traces.jsonl # assert properties in CI
agentguard incident traces.jsonl --format html # postmortem report~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.