An always-on work system living on your homelab. Here is what it does, how to drive it, and what is still coming.
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.
care-system — one portable folder of instructions, 24 skills and config. Clone it anywhere and that machine becomes a full seat.
care-vault — notes, projects, strategy, briefings. Synced to your Mac, versioned by git on the server.
herdr keeps agents running in named sessions. Detach, close the laptop, reattach later from anywhere.
Hermes on CT103 stays your Telegram front door, and can now see what the CARE agents are doing.
Four things worth knowing. The first one covers most days.
careFrom any terminal on your Mac. It opens an SSH session into the container and drops you straight into herdr, where your agents live.
careTo 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.
One session per project keeps context clean and lets several agents run without tripping over each other.
herdr session attach campaign-94The 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-checkThe 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.
meetings/ and transcripts alongside them.The old setup was bloated, forgetful and tied to one lid being open.
| Before | Now |
|---|---|
| Work stopped when the laptop closed | Agents run on the homelab and survive detach, reboot and travel |
| Memory accumulated wrong facts you didn't trust | Nothing enters core memory without your approval; cached data carries its source and date |
| Every session re-derived the same product facts | A verified docs/ layer is read first, so expensive thinking goes on decisions instead of lookups |
| 48 skills, a third never used once | 24 curated skills, each with real usage behind it |
| No way to check on a long-running job | Ask from the terminal, or ask Hermes from Telegram while away from the desk |
| Notes in one bloated vault on one machine | Clean vault, synced device to device over your own network |
Where everything lives, if you ever need to look.
| Thing | Where |
|---|---|
| Container | CT105 "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 tooling | Claude Code 2.1.220, Codex CLI, herdr 0.7.5, Tailscale, Syncthing 1.30 |
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".
Two of these need something from you; the rest I can do.
| Item | Status |
|---|---|
| Morning briefing | Live |
| Vault sync + Obsidian | Live |
| Verified docs layer | Live |
| Metrics job + reporting site | Needs a PostHog personal API key |
| Customer.io state doc | Needs the CIO app API key |
| Hermes work profile | Next |
| Phone push when an agent blocks | Next — Collie over Tailscale |
| Agent sandboxing | Design decision before daily use |
| Codebase access | Send 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.
The three things most likely to go wrong, and what to do.
Run /flock-check, or ask Hermes on Telegram. It distinguishes genuinely blocked from merely idle, and tells you what it is waiting for.
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.syncthingA 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'~/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.