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.
On-endpoint local-LLM (Ollama) observability + governance — the complement to IGEL AI Armor: Armor governs WHETHER a model runs; this records WHAT it did. Inventory + runtime state (list_models, running_models, model_details, vram_usage) annotated with the allow/deny policy; provenance/digest-drift detection; a deterministic prompt scanner (secrets / PII / source-code / jailbreak) via 'scan_prompt'; and the route-through guards 'guarded_generate' / 'observe_chat' that scan + policy-gate a prompt, record it to the usage log, and only then call the model. Governed writes: pull / remove (high, dry-run) / unload models and set the allow/deny policy. Every tool runs through the ai-guardian governance harness (audit / budget / risk-tier / undo).
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.