- obsidian-reindex-server.py: HTTP endpoint on port 18810 for
triggering incremental Obsidian vault reindex from n8n
- Updated n8n Implementation Handoff: Obsidian Semantic Index
section, new reindex workflow, updated verification commands
Daily 06:30 PT scheduled workflow that:
- Collects weather (wttr.in/Seattle), swarm health, n8n/litellm health
- Fetches email highlights from IMAP Triage executions
- Attempts Google Calendar (graceful skip if OAuth expired)
- Synthesizes via local LLM (gemma-4-26B on llama.cpp)
- Delivers to Telegram + Obsidian
All data collection nodes have continueOnFail for resilience.
Workflow ID: g3IdGZCK1EtTsv9T, active: true
- docker-health-endpoint.service (systemd user unit)
- swarm-health-watchdog.json with Docker health enrichment
- Calls http://172.19.0.1:18809/health for container state
- Includes docker status/health/restarts in alert messages
- Adds docker field to service check results
Task: t_461f71fe
- Python HTTP server on 0.0.0.0:18809
- GET /health -> all monitored containers (JSON)
- GET /health/<name> -> single container
- Monitors: brave-search, kokoro-tts, litellm, litellm-db, n8n-agent, searxng, whisper-server
- Returns status, health, restart count via docker inspect
- systemd user service for auto-start
Task: t_461f71fe
Adds a custom whisper.cpp Docker image built with CMAKE_CUDA_ARCHITECTURES=120
so it actually initializes on the RTX 5070 Ti — the upstream
ghcr.io/ggml-org/whisper.cpp:main-cuda only ships kernels for sm_75/80/86/90.
Compose changes:
- New whisper-init one-shot service downloads ggml-medium.bin and ggml-small.bin
into the shared volume on first run, fixing the original crash where
whisper-server tried to load a model that was never fetched.
- New whisper-server-gpu service (image whisper.cpp:cuda-blackwell, built
locally from ./whisper-cuda-blackwell/Dockerfile) on port 18801 — the
benchmarked path (~150 ms per short clip, ~93x faster than CPU/medium with
identical WER on JFK + 4 TTS samples).
- Existing whisper-server (CPU/medium) moves to port 18811 as the fallback
for when GPU is unavailable. Container names unchanged so monitoring and
volume bindings keep working.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add Obsidian vault to the swarm-common virtiofs share for access
from zap VM and other VMs. Contains agent memory, notes, and
infrastructure documentation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sync latest runtime state from zap VM: credential rotations,
device registrations, completion scripts, cron jobs, and
telemetry offsets.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add four specialized council agent personas for structured
multi-perspective deliberation:
- council-pragmatist: practical, implementation-focused perspective
- council-referee: neutral arbiter for resolving disagreements
- council-skeptic: critical analysis and risk identification
- council-visionary: long-term strategic and creative thinking
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add hook handler that forwards OpenClaw agent events to the agentmon
ingest endpoint for monitoring and observability.
- ansible/playbooks/files/agentmon-hook/: Ansible-deployable hook
- openclaw/hooks/agentmon/: Hook installed in OpenClaw instance
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>