Set up 29 July 2026

CARE

An always-on work system living on your homelab. Here is what it does, how to drive it, and what is still coming.

What it is

A second machine that works when your laptop is shut.

Until now every agent session lived on your MacBook. Close the lid and the work stopped. CARE is a small always-on container on the Beelink — CT105, hostname care — running its own Claude Code, its own Codex, and a terminal multiplexer that keeps agents alive between visits. Your laptop becomes a window onto it rather than the place the work happens.

The brain

care-system — one portable folder of instructions, 24 skills and config. Clone it anywhere and that machine becomes a full seat.

The knowledge

care-vault — notes, projects, strategy, briefings. Synced to your Mac, versioned by git on the server.

The herd

herdr keeps agents running in named sessions. Detach, close the laptop, reattach later from anywhere.

The watchtower

Hermes on CT103 stays your Telegram front door, and can now see what the CARE agents are doing.

How to use it

Four things worth knowing. The first one covers most days.

1

Start working — type care

From any terminal on your Mac. It opens an SSH session into the container and drops you straight into herdr, where your agents live.

care

To leave without stopping anything, press Ctrl+B then Q. The agents keep running. Come back later with care and they are exactly where you left them, mid-task if need be.

2

Keep work separate with named sessions

One session per project keeps context clean and lets several agents run without tripping over each other.

herdr session attach campaign-94
3

Ask what the agents are doing

The flock-check skill reports every agent's status, what it produced, and whether it is waiting on you. It is strictly read-only, so it never nudges an agent by accident.

/flock-check
4

Your notes, on the Mac

The vault syncs both ways within seconds. On your laptop it is at ~/care-vault, and it is already registered in Obsidian's vault switcher as a separate, deliberately plain vault.

Edit on either side; both stay current. The server owns the git history, so you never think about committing.

One thing to do: open the CARE vault in Obsidian once, so the two plugins activate and granola-sync signs in to Granola. After that it runs itself, filing meetings into meetings/ and transcripts alongside them.

Why it's better than what you had

The old setup was bloated, forgetful and tied to one lid being open.

BeforeNow
Work stopped when the laptop closedAgents run on the homelab and survive detach, reboot and travel
Memory accumulated wrong facts you didn't trustNothing enters core memory without your approval; cached data carries its source and date
Every session re-derived the same product factsA verified docs/ layer is read first, so expensive thinking goes on decisions instead of lookups
48 skills, a third never used once24 curated skills, each with real usage behind it
No way to check on a long-running jobAsk from the terminal, or ask Hermes from Telegram while away from the desk
Notes in one bloated vault on one machineClean vault, synced device to device over your own network
The economic point. Fable is your scarce resource. Cheap scheduled jobs keep a verified fact layer fresh overnight; Fable reads it instantly and spends its intelligence on judgement. That is the whole design in one sentence.

What's inside

Where everything lives, if you ever need to look.

ThingWhere
ContainerCT105 "care", 192.168.4.198, 2 cores / 4GB / 40GB, starts on boot
System repo/opt/care — CLAUDE.md, skills, jobs, docs, scripts
Vault/opt/care/vault on the server, ~/care-vault on the Mac
Verified facts/opt/care/docs/ — pricing, features, team roles, brand, voice
Jobs/opt/care/jobs/, scheduled in /etc/cron.d/care-jobs, logs in /var/log/care-jobs/
Secrets/opt/care/.env, permissions 600, never committed
Agent toolingClaude Code 2.1.220, Codex CLI, herdr 0.7.5, Tailscale, Syncthing 1.30

Running today

The morning briefing fires weekdays at 07:15 Melbourne time and lands in Telegram and vault/briefings/. It covers what is due today, what has slipped, what changed since yesterday, and any facts an agent wants to add to memory. If a data source is unavailable it says so outright rather than quietly leaving a gap.

Alongside it, the vault auto-commits hourly, and any job that fails alerts you on Telegram — silence never means "fine".

What's next

Two of these need something from you; the rest I can do.

ItemStatus
Morning briefingLive
Vault sync + ObsidianLive
Verified docs layerLive
Metrics job + reporting siteNeeds a PostHog personal API key
Customer.io state docNeeds the CIO app API key
Hermes work profileNext
Phone push when an agent blocksNext — Collie over Tailscale
Agent sandboxingDesign decision before daily use
Codebase accessSend Nanz the message

The two keys are only needed because those jobs run unattended at 06:30 with no browser. The Customer.io and PostHog tools you and I use interactively are signed in to your laptop session and cannot run headless.

If something breaks

The three things most likely to go wrong, and what to do.

An agent looks stuck

Run /flock-check, or ask Hermes on Telegram. It distinguishes genuinely blocked from merely idle, and tells you what it is waiting for.

The vault stops syncing

Check both ends are running: brew services list is not it any more — Syncthing now runs from a LaunchAgent. Restart the Mac side with the command below. Never use Syncthing's own restart button: it wedges the process and leaves a stale lock.

launchctl kickstart -k gui/$(id -u)/com.carlosmccoy.syncthing

A morning briefing never arrived

A failure would have alerted you on Telegram, so no alert plus no briefing usually means cron or the container. Check the last run:

ssh care 'ls -t /var/log/care-jobs | head -3'
Two traps worth remembering. Never put a Syncthing folder inside ~/Documents — macOS blocks background access and Syncthing hangs silently rather than erroring. And the vault on your Mac is ~/care-vault, deliberately outside Documents for that reason.