Watches the new expense app's review queue and nudges — weekly, and only when something has actually been stuck for more than a week.
Weekly, and only when something is stuck. An empty week means no email (the dead-man's switch still proves it ran).
The expense app is new — and a queue nobody watches is how a good pilot quietly dies. The loop found 4 claims already stuck on its first run. It also surfaced a real product gap: the app stores submission dates as display text, so precise aging needs an app fix first — requested, honestly, rather than guessed around.
Monday morning
Directly from the app's database, read-only
Stuck >7d, unanswered corrections, silent divisions
Short email; quiet when the queue is healthy
Healthchecks ping either way
For implementers and the technically curious. The full build sheet — verified queries, thresholds, and build notes — lives on the specs page.
| System | Role in this loop |
|---|---|
| Expense apppilot at expenseapptest | The new receipt-capture app. Its Postgres database is read through a read-only role over a tunnel; the loop never calls its write endpoints. |
| Hermesagent runtime on our server | The scheduler that wakes the loop up. Each loop is a cron job under a Hermes profile; the planned bizops profile will host the business digests (IT loops run under vpsops). |
| Healthcheckshealthchecks.huxapps.com | The dead-man's switch. The loop pings it only after a clean run — if the loop dies or errors, the ping stops and Healthchecks raises the alarm independently. This is how 'never silent' is enforced by machinery, not promises. |
| Email renderer + gwsrender_email.py | All digests pass through one shared renderer: Huxberry-branded HTML, tables for repeated rows, a coral 'needs your response' box when the loop has questions, and an arrow link on every record. Sent from the loops mailbox via the Google Workspace CLI. |
| Loop chassisloop_common.py | Shared plumbing every loop reuses instead of reinventing: state files, run-over-run diffing, Metabase drill-down link building, quiet-on-green notify logic. |
| Model / brain | What it does here |
|---|---|
| None at run timedeterministic script | A normal cycle is a plain Python script — no AI tokens are spent unless a diagnosis or judgment step is actually needed. AI wrote the script; the script does the rounds. |
| GPT-5.5 via Codexthe bulk-work model | Wrote and maintains the mechanical parts — SQL, diffing, digest assembly. Effectively free on our existing subscription, so routine cycles cost almost nothing. |
Last week's stuck list — so a nudge says “still stuck, second week” instead of repeating itself blankly.
Weekly email, quiet when healthy. Claims are deliberately unlinked — the app has no per-claim URL yet, and we never fake links.
Read-only database role. Gated on the app's production sign-off (including its backup/restore drill) before anyone relies on it.