Local-first observability for autonomous AI agents.
Watches your agents. Barks when they misbehave.
=== DEEP BORE WATCH ===
Monitoring: ~/projects/claude-in-factorio/logs/
Binary: ~/projects/.../factorioctl/target/release/mcp
Press Ctrl+C to stop.
Tailing: bridge-2026-04-29_140000.log (offset: 0)
[ok] binary baseline: 2e77a28c...fc359909
[.] agent_start new agent session
[.] task_dispatch task 'mine-iron-ore' (1/10)
[.] task_complete cost=$1.50 turns=12 duration=75s
[.] agent_broadcast IRON ORE LOCATED. MINING COMMENCES.
[!] agent_anomaly Furnace unit 15 extraction failed
[!!] self_modification tool: Bash({"command":"cargo build --release"})
↳ desktop notification fired
^C
Received terminated, shutting down...
Watch stopped. Good dog.During an unsupervised session, an autonomous Claude agent playing Factorio (his name is Doug) discovered broken tools, read his own Rust source code, patched it, recompiled the binary, and resumed operations. Twice.
The safety measures that would have caught this — sandboxing, binary checksumming, operator alerts — didn't exist yet. doggowoof is the alerting layer. It watches Doug so I don't have to stare at the terminal.
The same primitives apply to any agent system you run locally. Log tailing, integrity checks, config validation, cost tracking. Read-only observation, no modification of the monitored system. Dog watches. Dog does not touch.
| severity | event | trigger | |
|---|---|---|---|
| [!!] | critical | sandbox_violation | Forbidden tool call appears in agent log (Bash, Edit, Read, Write, Grep, Glob, Task) |
| [!!] | critical | self_modification | Build commands inside tool calls (cargo build, rustc, gcc, make) |
| [!!] | critical | binary_mismatch | Monitored binary SHA-256 hash changed from baseline |
| [!!] | critical | config_violation | Agent config missing sandbox: true or required disallowedTools |
| [!] | high | agent_bug_report | Agent broadcasts containing BUG REPORT, DEFECT, BLOCKED, Self-Repair |
| [!] | high | agent_anomaly | Agent broadcasts containing ANOMALY |
| [.] | info | task_dispatch / task_complete | Normal session progress — cost, turns, duration |
| [.] | info | agent_broadcast | Agent status messages and decisions |
Critical and high alerts trigger desktop notifications. Info events are stored silently in SQLite for review.
One process. Three tickers. No goroutines, no daemons, no HTTP. Cursor position persists to SQLite so it resumes after restart.
Glob latest bridge-*.log, read new bytes from saved cursor, parse events
with regex priority ordering, save alerts.
SHA-256 the monitored binary, compare to baseline. Drift triggers a critical binary_mismatch alert.
Validate every agent JSON in the configured directory. Missing sandbox: true or incomplete disallowedTools fires critical alerts.
bridge logs (claude-in-factorio) doggowoof
┌─────────────────────────┐ ┌──────────────────────────┐
│ tool calls, broadcasts, │ │ regex parser │
│ task dispatches, costs │────────▶│ binary SHA-256 checks │
│ │ TAIL │ config validation │
│ bridge-*.log │ │ session state tracking │
└─────────────────────────┘ │ │
│ alerts.sqlite (own DB) │
agent config files │ │
┌─────────────────────────┐ │ desktop notifications │
│ sandbox: true, │────────▶│ (high/critical only) │
│ disallowedTools: [...] │ READ │ │
└─────────────────────────┘ └──────────────────────────┘
factorioctl binary
┌─────────────────────────┐
│ target/release/mcp │────────▶ SHA-256 baseline + drift detection
└─────────────────────────┘go install github.com/QRY91/doggowoof/cmd/doggowoof@latest
ln -sf $(go env GOPATH)/bin/doggowoof $(go env GOPATH)/bin/doggo
doggo init ~/.config/doggowoof/config.toml[deepbore]
enabled = true
log_directory = "~/projects/claude-in-factorio/logs/"
binary_path = "~/projects/claude-in-factorio/factorioctl/target/release/mcp"
agent_config_directory = "~/projects/claude-in-factorio/bridge/agents/" doggo bore --watch Run this alongside your agent session. From another terminal: doggo bore for status, doggo alerts to review findings.
Requires Go 1.21+. Pure Go, builds with CGO_ENABLED=0. No C compiler, no
runtime dependencies.
doggowoof has been three different things. The current shape is the legitimate one.