AI Guardian
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AI_GUARDIAN_AIOPS_HOME | No | Override the home directory for audit.db and usage.db | |
| AI_GUARDIAN_AUDIT_RATIONALE | No | Rationale for high-risk operations | |
| AI_GUARDIAN_AUDIT_APPROVED_BY | No | Name of the approver for high-risk operations | |
| AI_GUARDIAN_AIOPS_MASTER_PASSWORD | No | Only if a target has a stored token |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_modelsA | [READ] Installed models, each annotated with the allow/deny policy verdict. Shadow (unsanctioned) models show Args: target: Ollama target name from config; omit for the default (local). |
| running_modelsA | [READ] Currently loaded models: VRAM footprint + residency expiry. Args: target: Ollama target name from config; omit for the default. |
| model_detailsB | [READ] License / parameters / capabilities for one model. Args: model: Model name (e.g. "llama3.2:3b"). target: Ollama target name from config; omit for the default. |
| server_statusA | [READ] Ollama reachability + version. Args: target: Ollama target name from config; omit for the default. |
| vram_usageB | [READ] Total VRAM used by loaded models; flag over-budget. Args: budget_bytes: Optional VRAM budget; models over it are flagged. target: Ollama target name from config; omit for the default. |
| pull_modelA | [WRITE][risk=medium] Pull a model — refused if it violates the deny/allow policy. Args: model: Model name to pull. target: Ollama target name from config; omit for the default. |
| remove_modelA | [WRITE][risk=high] Delete a local model. Destructive — pass dry_run=True to preview. Captures the model's manifest so the harness records an undo (re-pull). An undo is recorded only when the allow/deny policy would permit re-pulling the model. For a denied one the result says reversible=false and explains why, rather than recording a re-pull that undo_apply is bound to refuse. The dry-run preview carries the same verdict, so the caller learns it before the deletion rather than after. Args: model: Model name to delete. dry_run: If True, return what WOULD be deleted without deleting. target: Ollama target name from config; omit for the default. |
| unload_modelA | [WRITE][risk=medium] Evict a model from VRAM (keep_alive:0). Args: model: Model name to unload. target: Ollama target name from config; omit for the default. |
| scan_promptA | [READ] Pure content scan of a text for secrets / PII / code / jailbreak. No Ollama call — a deterministic scan returning findings + a weighted risk band. Use it to pre-check anything before sending it to a local model. Args: text: The text to scan. |
| usage_eventsA | [READ] Query the observed-usage log (route-through prompts + their findings). Args: model: Filter by model name. risk_level: Filter by risk band (none/low/medium/high/critical). allowed: True = only allowed calls; False = only blocked. since: ISO start timestamp. limit: Max rows. Returns |
| anomaly_reportB | [READ] Rollup: shadow models, digest drift, high-risk prompts, blocked count. Args: target: Ollama target name from config; omit for the default. |
| guarded_generateA | [WRITE][risk=medium] Scan + policy-gate a prompt, record it, then run if allowed. The route-through guard: scans the prompt (secrets/PII/code/jailbreak), checks the model against policy, blocks if the risk band >= block_threshold or the model is disallowed, records the interaction to the usage log, and only calls Ollama if allowed. The raw prompt is never stored. Args: model: Model to run. prompt: The prompt text (scanned before any model call). agent / user: Actor attribution recorded in the usage log. block_threshold: Block when risk band >= this (none/low/medium/high/critical). target: Ollama target name from config; omit for the default. |
| observe_chatA | [WRITE][risk=medium] Scan + policy-gate a chat exchange, record it, then run if allowed. Args: model: Model to run. messages: OpenAI-style [{"role","content"}] messages (contents are scanned). agent / user: Actor attribution recorded in the usage log. block_threshold: Block when risk band >= this. target: Ollama target name from config; omit for the default. |
| policy_viewB | [READ] The current model allow/deny policy + provenance digest pins. |
| model_provenanceA | [READ] Compare each installed model's digest against its pin; flag drift. Args: target: Ollama target name from config; omit for the default. |
| set_model_allowlistA | [WRITE][risk=medium] Replace the model allowlist (glob patterns; empty = allow-all). Args: models: Shell-glob patterns of permitted model names (e.g. ["llama3.", "qwen"]). |
| set_model_denylistB | [WRITE][risk=medium] Replace the model denylist (deny patterns always win). Args: models: Shell-glob patterns of forbidden model names. |
| pin_model_digestA | [WRITE][risk=medium] Pin a model's expected provenance digest (drift detection). Args: model: Model name. digest: The expected digest to pin (from list_models / model_details). |
| proxy_guidanceA | [READ] How to run the transparent capture proxy, and what it does NOT guarantee. WRITES NOTHING and starts no listener — it composes the Requests are scanned before forwarding; responses stream through uninspected, because buffering them would turn every streaming client into a blocking one. A governed request whose body cannot be parsed is refused, not forwarded. Args: listen_host: Address the proxy would bind. listen_port: Port the proxy would bind (default 11435). target: Runtime target from config; omit for the default. |
| undo_listA | [READ] List recorded, not-yet-applied undo tokens (most recent first). Each entry names the original tool, the inverse tool that Returns {"undos": [...], "returned": N, "limit": L, "truncated": bool}.
Each entry carries Args: limit: Max rows to return (default 50, capped at 500). target: Unused (undo state is host-local); accepted for CLI uniformity. |
| undo_applyA | [WRITE][risk=medium] Apply a recorded undo by dispatching its inverse tool. The inverse runs through its own governed tool, so its real risk tier is recorded there. Pass dry_run=True to preview the inverse call without executing it. A token can only be applied once. Args:
undo_id: The undoId from undo_list (or an |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
Most tools target clearly distinct actions/resources: scanning (scan_prompt), generation (guarded_generate), chat (observe_chat), policy (allowlist/denylist), and state reads (server_status, policy_view). The one soft cluster is model introspection—list_models, running_models, model_details, and vram_usage—but their descriptions clearly separate installed, loaded, single-model, and aggregate-VRAM views.
There is a loose but not reliable pattern: action tools are verb_noun (pull_model, remove_model, unload_model, scan_prompt, set_model_allowlist, pin_model_digest, undo_apply) while many state tools are noun phrases (server_status, policy_view, vram_usage, usage_events, anomaly_report, model_provenance). The mix is readable and grep-able, but not predictable enough to be a clean convention.
At 21 tools this is on the heavy side for the rubric's 3-15 sweet spot, spanning model introspection, model lifecycle, policy/provenance, scanning/governance, usage analytics, undo, and proxy guidance. Most tools appear justified by a genuinely broad domain, but the surface is large enough that count is borderline rather than well-scoped.
Coverage is strong: model lifecycle (list/pull/remove/unload/details), policy management (view/allow/deny/pin/provenance), governance (scan, guarded_generate, observe_chat, usage_events, anomaly_report), and an undo mechanism (undo_list/undo_apply). Minor gaps remain—allowlist/denylist can only be replaced wholesale (no per-model toggle), and there is no persistent block-threshold configuration tool—but core workflows are covered without dead ends.