CiscoCiscoDefenseClaw
Observability

Observability

Every prompt, tool call, scan finding, and HITL decision lands in your SIEM and your dashboards. DefenseClaw ships local Grafana/Loki/Tempo and local Splunk stacks you can stand up with one command.

The DefenseClaw gateway is observable by design. Every decision — admission, guardrail verdict, judge call, scanner finding, HITL approval — is structured, correlated by trace_id/span_id, and emitted on three independent rails:

OTLP
HEC JSON
JSONL
DefenseClaw Gatewayadmission · guardrail ·judge · scan decisions
OpenTelemetryCollector
Splunk HEC
Local JSONL~/.defenseclaw/gateway.jsonl
Loki · Tempo ·Prometheus
Splunk app
Grafana
DefenseClaw TUI
Three independent sinks fanned out below the gateway. Failure on one rail does not affect the others.

You can use any combination of those — they're independent sinks, not exclusive backends. Most teams start with one of the bundled local stacks while they're building policy, then add their production SIEM as a second sink without rewriting anything.

The two bundled stacks

What lands in observability

Every event has the same envelope so you can correlate across rails:

{
  "ts": "2026-05-08T12:00:01.234Z",
  "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
  "span_id": "00f067aa0ba902b7",
  "agent": "claudecode",
  "session_id": "...",
  "kind": "guardrail.verdict",
  "decision": "deny",
  "rule": "secrets/aws_access_key",
  "severity": "high",
  "actor": { "operator": "vineeth", "host": "..." },
  "payload": { "matched": "AKIA****", "tool": "fs.write" }
}

The kind field is your top-level taxonomy:

kindEmitted when
admission.scanSkill or MCP scanner finishes a scan
admission.decisionWatcher applies an OPA verdict
guardrail.verdictA regex / LLM judge / inspector resolves
judge.callThe LLM judge is invoked (with model + token usage)
hitl.promptOperator is asked for approval
hitl.decisionOperator answered allow/deny
tool.call / tool.resultThe agent invoked an MCP/native tool
proxy.request / proxy.responseGateway-proxied LLM call
gateway.lifecycleStart / reload / shutdown

You don't pick the schema in setup — you pick the destinations. Sinks are configured in audit_sinks: of ~/.defenseclaw/config.yaml and the bundled commands maintain that block for you.

Pick a starting point

The fastest way to see what DefenseClaw is doing. One command brings up Grafana on :3000 with pre-built dashboards.

defenseclaw setup local-observability up

Local observability stack

You already have Splunk in the org. Point HEC at the gateway and you're done — no extra infra to operate.

defenseclaw setup splunk --enterprise \
  --hec-endpoint https://splunk.example.com:8088 \
  --hec-token "$DEFENSECLAW_SPLUNK_HEC_TOKEN"

Splunk integration

Run the local Grafana stack for engineering teams and forward the same events to Splunk for SOC. Each sink is independent — failures don't cascade.

defenseclaw setup local-observability up
defenseclaw setup splunk --enterprise --hec-endpoint ... --hec-token ...

The gateway will fan out every event to both rails. Verify with defenseclaw tui (audit panel) or tail -f ~/.defenseclaw/gateway.jsonl | jq.

Common questions