Case Studies
Personal Infrastructure

The Automation Stack
33 Jobs Running Before You Wake Up

Thirty-three processes. Nine AI agent profiles. One Mac Mini.

By the time I make coffee, the morning briefing has been written, the grid intelligence snapshot is done, and the content flywheel has already seeded today's ideas.

This is what a one-person media operation looks like when the automation layer actually works.

Act I — What Was Built

From one chat model to a 33-process automation stack. About four months, built incrementally.

2025

First Local Model Running

Hermes 3 Llama 3.1 8B via llama.cpp. Chat only. The first proof that a local server process could stay alive unattended on a Mac Mini.

Late 2025

First Scheduled Job: Morning Briefing

morning_briefing.py fires at 07:00 daily. 27 RSS sources, BMRS grid data, synthesised into a structured briefing pushed to Obsidian and Telegram. The template for everything that followed.

Early 2026

Grid Intelligence Added (5× Daily)

grid_intelligence.py fires at 06:00, 10:00, 14:00, 18:00, and 22:00. GB electricity grid state captured five times per day into the vault. Five jobs, one script, zero manual effort.

Early 2026

The Env Var Crisis

All scheduled jobs were silently failing. launchd (macOS’s job scheduler) doesn’t load shell profiles — API keys weren’t being injected. The fix: a shared env file and a wrapper script that every job now runs through. All 19 Python plists rebuilt.

2026

Agent Stack Comes Online

Nine Hermes profiles deployed — each a specialist with a different model, system prompt, and cost tier. The Telegram gateway goes live: agent output delivered directly to phone.

2026

Content Flywheel Operational

Five-stage pipeline: Seeds → Propagation → Harvest → Review → Publish. The content_reviewer.py auto-approves items scoring ≥22, surfaces up to 5 per day for manual review. First run: 298 stale backlog items processed in one pass.

2026

Full Stack: 33 Processes, 9 Profiles

The current state. 22 scheduled automation jobs + 11 always-on services. One Mac Mini. One operator.

The Numbers

Current operational state. Verified counts.

33
Total launchd jobs running
22
Daily scheduled automation jobs
11
Always-on services
9
Hermes AI agent profiles
5
Content flywheel stages
27
Morning briefing RSS sources
Grid intelligence snapshots per day
20+
Python scripts in automation stack

The Full Job Inventory

Every process running on the Mac Mini. launchd (macOS's built-in job scheduler) manages all of them.

Scheduled Automation (22 jobs)

morning-briefing
07:00 daily
27 RSS sources + BMRS grid data → structured briefing → Obsidian + Telegram
grid-intelligence
5× daily
GB electricity grid state snapshots → vault
knowledge-synthesiser
02:00 daily
Vault content → LLM synthesis → wiki and content briefs
content-flywheel
10:00 daily
Seeds → Propagation → Harvest pipeline via Hermes orchestrator
content-reviewer
11:00 daily
AI review: auto-approve ≥22, surface top 5, park the rest
hermes-orchestrator
08:00 daily
Hermes orchestrator profile — content flywheel orchestration
thread-reviewer
22:00 daily
Scans X thread candidates, selects next day’s post
x-publisher
08:00 daily
Publishes approved content to X
x-publisher-adhoc
18:00 daily
Ad-hoc X publishing for time-sensitive content
dropstackers-publisher
08:00 daily
Publishes to Dropstackers
bookmark-sync
08:00 daily
X bookmarks → vault
telegram-export
01:30 daily
Incremental Telegram channel export → vault
telegram-full-export
23:00 daily
Full Telegram channel export
daily-health-report
07:30 daily
System health check → Telegram
gb-tariff-tracker
07:30 daily
GB energy tariff tracking
ure-tariffs
08:30 daily
Polish URE tariff data download
polish-energy-scraper
06:30 daily
Polish energy market data → EnergiaProsto pipeline
lumen-db-sync
01:00 daily
Mirror Abacus PostgreSQL → local database
free-model-monitor
09:00 daily
Monitors free model tier availability
bookmark-miner-weekly
03:30 weekly
Deep X bookmark mining and analysis
bookmark-miner-monthly
03:00 monthly
Full monthly bookmark analysis
monthly-tech-watch
09:00 monthly
Technology landscape report

Always-On Services (11)

hermes-telegram
Telegram bot gateway — all agent output delivered to phone
hermes-ui
Chat UI for Hermes Agent (port 8002)
hermes-miniapp-proxy
Telegram Mini App proxy layer
hermes-miniapp-tunnel
Tunnel for Mini App external access
hermes-workspace
Hermes persistent workspace service
mlx-local
Qwen3.5-9B-MLX-4bit at localhost:8888 — primary local model
mlx-fast
Fast MLX model server
mlx-deep
Deep MLX model server
mlx-gemma4
Gemma 4 MLX model server
ollama
Ollama model server (available, not used in scheduled jobs)
open-webui
Open WebUI at localhost:3000 — 5 exec team personas

The Hermes Agent Stack

Nine profiles. Each one is a specialist with a different model, system prompt, and cost tier.

The key design principle: separation of concerns across model tiers. The orchestrator doesn't do research. The researcher doesn't run the flywheel.

orchestrator

Content flywheel orchestration

Abacus RouteLLM
local

Zero-cost drafts, research, brainstorming

Qwen3.5-9B MLX
researcher

Deep competitor analysis, market research

Abacus RouteLLM
strategist

Roadmap, GTM, high-stakes decisions

Abacus RouteLLM
fast

Fast responses, quick tasks

Anthropic
deep

Deep reasoning, complex analysis

Anthropic
qwen-cloud

Qwen cloud model tasks

Qwen Cloud
qwen-free

Free-tier Qwen tasks

Qwen Free
nvidia

NVIDIA GPU model tasks

NVIDIA

The Content Flywheel

Five stages from raw idea to published post. The content_reviewer.py handles the bottleneck: auto-approve what's good, surface only what needs judgment.

Stage 1

Seeds Planted

Raw ideas captured automatically: morning briefing output, grid intelligence anomalies, X bookmarks, source scrapes. Nothing curated yet — everything goes in.

Stage 2

Propagation Topics

Seeds expanded by the orchestrator into developed topics and angles. A seed (“Octopus Energy Q1 results”) becomes a topic (“Why Octopus’s gross margin improvement matters for the market — three angles”).

Stage 3

Ready to Harvest

Topics fully developed and ready to draft. The queue is maintained by the content-flywheel job at 10:00 daily.

Stage 4

Ready for Review

Drafted content waiting for review. content_reviewer.py (11:00 daily) auto-approves items scoring ≥22, surfaces a maximum of 5 per day for manual review, and parks everything else.

Stage 5

Published

Approved content published to pickingsolutions.tech, X, and Dropstackers via the publisher jobs.

Act II — What I Learned

Four lessons from building and running a fully automated content and intelligence operation.

1. The boring infrastructure failure is the real failure.

The stack had been building for months before I discovered that every single scheduled job was silently failing. launchd — macOS's job scheduler — doesn't load your shell profile. API keys set in your shell profile don't exist to launchd. Jobs would fire, get no credentials, fail silently, log nothing useful. The fix required rebuilding the infrastructure layer: a single shared environment file, a wrapper script that every job runs through, and updating every plist. Not glamorous. But until this was fixed, 33 jobs meant 33 scheduled failures. The lesson: distributed automation systems have a single point of failure at the credential layer. Fix that first.

2. Separation of concerns across model tiers is non-negotiable.

Nine profiles exist because nine different roles need nine different cost/capability trade-offs. Routing everything through the most capable model wastes money. Routing everything through the cheapest model degrades quality where it matters. The orchestrator handles flywheel coordination. The local profile handles all zero-cost volume work. The researcher and strategist profiles engage Sonnet-class reasoning only when the task justifies it. The routing logic is the product. Getting it right is what makes the stack economically viable.

3. An autonomous review layer changes everything.

Before content_reviewer.py existed, the flywheel seeded content into a growing queue with no exit. 298 items accumulated. The bottleneck was human review — one person can only review so much per day. The solution: an autonomous reviewer that makes the easy calls (auto-approve ≥22, park the obvious misses) and only surfaces the genuinely ambiguous items. Maximum 5 per day for manual review. This pattern generalises: wherever human review is the bottleneck, build an autonomous pre-filter that handles the clear cases and escalates only what needs judgment.

4. The Telegram layer makes it real.

You can build the most sophisticated automation stack in the world and still not use it if the output is buried in a log file. The Telegram gateway changed the relationship between the system and its operator. Morning briefing arrives at 07:00 on the phone — read it like a newspaper. Health report at 07:30 — is everything running? Content ready for review surfaces as a message — approve or park from the phone. The stack is real because the output is present.

“Build the automation layer first. Then build the product. The automation layer is the part that runs when you're not watching — and that's when most of the value gets created.”

Supporting Evidence

Blog posts documenting the automation stack in detail.

Coming Soon

How I Built a 33-Job Automation Stack on a Mac Mini

launchd, env vars, wrapper scripts, and the infrastructure that makes it all work.

Coming Soon

The launchd Credential Failure That Broke Every Scheduled Job

The boring infrastructure failure that nearly killed the automation stack.

Coming Soon

Nine AI Agents, One Operator — How the Hermes Stack Works

Nine profiles, nine specialists, one routing layer.

Coming Soon

The Content Flywheel: From Seed to Published Post, Zero Manual Steps

Five stages, autonomous review, and what happens when you stop being the bottleneck.