An AI Roomba for Your Digital Cruft

Michael Pedersen (baocin) · 15-minute talk

Hermes Agent handles the digital chores you'd otherwise forget. Backups, security monitoring, research digests, blog deploys, NAS health checks, kanban dispatch — 24 cron jobs that run whether you're awake or not.

24 cron jobs 23 profiles 16 DapStack teams 100+ skills 3 MCP servers
The House It Manages
Hermes Agent CORE ENGINE 23 profiles · 100+ skills · 3 MCP servers SQLite sessions · Mem0 embeddings · Obsidian KB CLI + Signal + Webhook (port 8644) Omarchy Linux · Ryzen 9 3900X · 62 GB · RTX 2070 SUPER DeepSeek API · OpenAI API · 5x llama.cpp embed servers Gitea localhost:3001 · Syncthing Docker · TrueNAS via Tailscale Security & Health CVE monitor → email alerts trufflehog + opengrep scanning cron-health meta checker self-introspection nightly Landlock sandboxing morning report @ 10 AM Storage & Backup Hermes daily backup → NAS SNAC: 42GB NAS consolidation TimeMachine Viewer health Syncthing phone ingest 8 NFS mounts monitored Log backups nightly @ 2 AM TrueNAS @ 10.0.0.87 Tailscale Content & Research steele.red auto-deploy arXiv digest @ 8 AM Titan chapter study (Sat) Aschenbrenner monitor Claude OTEL summaries S3 + CloudFront CDN Project Automation DapStack dispatcher Gitea issue auto-fixer Nullvec graph worker Weekly report (Mon 6 AM) Timeline Agent health Landgrid email monitor CAP sleep DB download DapStack Kanban — 16 teams timeline ptiles snac preperc whimper nullvec steele.red landsearch gitvet gitkracked meta life hermes dst conduit simple_timemachine_viewer Dispatcher every 10 min: scans Ready tickets, routes to correct Hermes profile via dapstack_profiles.yaml Outputs: Signal chat · steele.red · Gitea commits · Email alerts · NAS files · pgvector graph · Timeline APK All cron jobs deliver back to the user via Signal or local session Key profiles: developer (default) · mdt (Timeline) · ptiles · snac · preperc · nullvec · steele-red · reviewer · orchestrator · simple_timemachine_viewer Provider profiles: deepseek (v4-flash default / v4-pro) · local (llama.cpp GGUF) · qwen-local · All routed via dapstack_profiles.yaml MCP servers: dapstack (SSE) · timeline (stdio) · marimo (HTTP) · Timeline app: Android APK, sensors, photo OCR, FTS, mydatatimeline.com
The 24 Cron Jobs — AI Housekeeping Chores

CVE Daily Monitor

Every day @ 8 AM · script-only

Queries NVD API. CVSS >= 9.0 triggers email alert to bijanrazavi15@gmail.com CC cve@steele.red. No agent — script-only, zero token cost.

Cron Health Meta-Checker

Every day @ 6 AM

Runs health check on every Hermes cron job. Escalates failures. Uses subagents to diagnose. The cron that watches the crons.

Self-Introspection

Every day @ 3 AM

Audits system state, pattern analysis, identifies degradation. Writes findings. Feeds into the 10 AM morning report.

Nullvec Issues Scan

Every day @ 6 AM · script-only

Scans nullvec repo for stale issues, dependency rot, and broken links. Script-only — no LLM cost.

Hermes Daily Backup

Every 24 hours · script-only

Backs up entire ~/.hermes/ directory (config, state, sessions, skills, profiles) to NAS. No agent — bash script.

Log Backups

Every day @ 2 AM · script-only

Rotates and archives system and application logs to NAS. Keeps last 7 days locally, archives older.

TimeMachine Viewer Health

Every 15 min · script-only

Health-check ping on the simple_timemachine_viewer SMB connection. Alerts on mount failure or stale data. Script-only.

DeepSeek Balance Check

Every 60 min · script-only

Runs deepseek_balance.py — checks API credit balance. Alerts when below threshold. Avoids surprise outages.

arXiv Digest

Every day @ 8 AM · arxiv skill

Searches arXiv for new papers matching configured topics. Formats summary, delivers to user. Uses the arxiv skill for structured queries.

steele.red Auto-Deploy

Every 30 min · script-only

SHA-256 hashes content/posts/*.md. On change: builds static HTML, syncs to S3, invalidates CloudFront. No change: exits immediately. Zero LLM cost for mechanical ticks.

Claude OTEL Daily Summary

Every day @ 9 AM · script-only

Aggregates Claude Code OpenTelemetry traces from the previous day. Usage patterns, tool calls, session counts.

Morning Report

Every day @ 10 AM

Synthesizes 3 AM introspection report + overnight events into a concise morning briefing. Delivered to user via Signal.

Weekly Report

Every Monday @ 6 AM · weekly_report.py

Comprehensive weekly summary: system health, DapStack ticket progress, project milestones, cron job reliability, upcoming deadlines.

DapStack Dispatcher

Every 10 min · deepseek-v4-pro

Scans 16 DapStack teams for Ready tickets with auto-dispatch label. Routes each to the correct Hermes profile. The core orchestration loop.

Gitea Issue Auto-Fixer

Every 2 min · deepseek-v4-flash

Polls Gitea for new issues in gitkracked. Auto-fixes them: reads code, writes patch, commits, pushes, closes issue. Zero human touch.

Nullvec Graph Worker

Every 30 min · script-only

Entity extraction pipeline: reads sources, extracts entities, builds pgvector knowledge graph. Reinforcement loop for graph quality.

Dashboard Update

Every 2 min · script-only

Regenerates the Hermes web dashboard from live state. Kanban board status, cron health, active sessions.

How It's Wired

DapStack → Profiles

16 DapStack teams map to Hermes profiles via dapstack_profiles.yaml. Dispatcher scans every 10 min. Ticket flow: Todo → Ready → Running → Done. Workers run as subagents with isolated context.

MCP Integration

Three MCP servers: dapstack (SSE remote — kanban/CRM), timeline (stdio local — sensor data/photos/OCR), marimo (HTTP local — live notebook kernels). Agents call these directly for structured data access.

Delivery Model

Two delivery modes: agent-driven (LLM reasons, decides, acts) and script-only/no_agent (deterministic, zero LLM cost). Scripts exit early on no-op. Both deliver via Signal, email, or local session.

Projects Managed

Timeline (Android MCP) · preperc.com (soil ML) · Nullvec (knowledge graph) · SNAC (NAS consolidation) · ptiles (geo format) · steele.red (blog) · gitkracked (auto-fix bot) · simple_timemachine_viewer