fai-agent-governance — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited fai-agent-governance (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
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.
Review agent implementations before they ship. This skill covers tool allowlists, approval boundaries, token budgets, audit trails, escalation paths, and the evidence needed to sign off a production agent.
A governed agent should answer five questions clearly:
| Question | What to Verify | Evidence |
|---|---|---|
| What can the agent do? | Tool list, write permissions, network reach | .agent.md frontmatter, hooks, MCP config |
| What can it spend? | Token ceilings, retries, concurrency | config/*.json, routing rules |
| When must it stop? | Iteration caps, timeout, escalation | prompt instructions, orchestration code |
| Who can approve sensitive actions? | Human-in-the-loop for deploy, delete, secrets, prod access | approval workflow, hook policy |
| How is it observed? | Logs, traces, evaluation, incident trail | App Insights, audit logs, eval reports |
Start by collecting the files that define agent behavior.
Get-ChildItem .github/agents -Filter *.agent.md | Select-Object Name
Get-ChildItem .github/hooks -Filter *.json | Select-Object Name
Get-ChildItem config -Filter *.json | Select-Object NameRead the agent file and capture:
Every high-risk action needs a hard boundary, not just a polite instruction.
| High-risk action | Required control |
|---|---|
| Deploying to production | explicit approval or gated workflow |
| Editing infra or security policy | reviewer or tuner approval |
| Reading secrets | Managed Identity plus scoped data-plane role |
| Calling destructive tools | hook blocklist or human confirmation |
| Opening network egress | allowlist at runtime or MCP scope restriction |
Example agent frontmatter with bounded tools:
---
description: "Builds and validates a solution play implementation"
model: ["gpt-4o", "gpt-4o-mini"]
tools: ["codebase", "terminal"]
---If an agent asks for broad tools such as unrestricted shell plus deployment plus secret access, treat that as a governance finding until the boundaries are narrowed.
Agents fail operationally when they can loop forever, retry endlessly, or silently route all work to expensive models.
{
"agentGovernance": {
"maxIterations": 6,
"maxRetriesPerTool": 3,
"requestTimeoutSeconds": 90,
"tokenBudget": {
"builder": 60000,
"reviewer": 25000,
"tuner": 15000
},
"requiresApprovalFor": ["production-deploy", "delete-resource", "read-secret"]
}
}Audit checks:
Use a lightweight policy file when the agent crosses trust boundaries.
{
"approvalPolicy": {
"humanRequired": [
"deploy:prod",
"rotate:key-vault-secret",
"delete:resource-group",
"disable:guardrail"
],
"notify": ["security-team", "platform-team"],
"recordAuditEvent": true
}
}Your governance review should fail if the agent can perform these operations directly with no approval checkpoint.
Use a repeatable scorecard so every agent is judged the same way.
from dataclasses import dataclass
@dataclass
class GovernanceFinding:
category: str
severity: str
message: str
remediation: str
def review_agent(agent_text: str) -> list[GovernanceFinding]:
findings = []
if "tools:" not in agent_text:
findings.append(GovernanceFinding(
category="tool-boundary",
severity="high",
message="Agent does not declare an explicit tool list.",
remediation="Add a minimal tools allowlist in the frontmatter.",
))
if "gpt-4o" in agent_text and "gpt-4o-mini" not in agent_text:
findings.append(GovernanceFinding(
category="cost-control",
severity="medium",
message="Primary model has no cheaper fallback.",
remediation="Add a fallback model or routing policy for low-risk tasks.",
))
if "approval" not in agent_text.lower():
findings.append(GovernanceFinding(
category="human-in-the-loop",
severity="high",
message="No approval or escalation language found for sensitive actions.",
remediation="Add approval boundaries and hook enforcement for risky operations.",
))
return findings# Agent Governance Review
## Summary
- Agent: fai-example-builder
- Verdict: CONDITIONAL_PASS
- High findings: 1
- Medium findings: 2
## Findings
1. High - No human approval path for production deploy.
2. Medium - No cheaper fallback model defined.
3. Medium - Retry limits missing for external API calls.
## Required Remediation
- Add approval gate for prod deploy.
- Add `gpt-4o-mini` fallback.
- Bound retries to 3 with exponential backoff.A governed agent should emit auditable events for:
import json
from datetime import datetime, timezone
def audit_event(action: str, agent: str, detail: dict) -> str:
payload = {
"timestamp": datetime.now(timezone.utc).isoformat(),
"agent": agent,
"action": action,
"detail": detail,
}
return json.dumps(payload)Fail governance review if any of these are true:
| Symptom | Likely cause | Fix |
|---|---|---|
| Agent keeps looping | no max iteration setting | add an explicit loop ceiling |
| Costs spike during review | no model routing or budget caps | define per-role budgets and fallbacks |
| Reviewer cannot prove actions taken | no audit trail | emit structured events for approvals and tool use |
| Agent can deploy directly to prod | approvals are advisory only | enforce with hooks or workflow gates |
Use these release outcomes:
| Verdict | Meaning | Action |
|---|---|---|
PASS | Boundaries, budgets, approvals, and audit trail are all present | allow rollout |
CONDITIONAL_PASS | Core controls exist, but one or two non-blocking gaps remain | fix before next release |
FAIL | Sensitive actions are unbounded or unobservable | block release |
A governance review is complete only when the verdict, findings, owner, and remediation due dates are recorded in the play or repo audit trail.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.