Baseline Studio — Internal Systems
Read it top to bottom, the way a request actually flows: work enters through two surfaces, the surfaces drive the workers, every worker reaches the world through one gateway — and all of it stands on one shared brain.
User surfaces
The only two places work enters: the HQ web app for solo deep work, Slack for the agent team
The Droplet
Everything that runs Baseline HQ, systemd-supervised and always on — the engines that do the work, plus the one gateway they all share to reach outside
The Outside World
The only things the gateway is allowed to reach — each with its own hard limit baked in
| Service | Port / Type | Role |
|---|---|---|
| Caddy | edge | Reverse proxy + automatic TLS for hq.baselinestudio.design |
| oauth2-proxy | edge | Google SSO gate in front of the shell (Slack's webhook path is routed outside this gate) |
| hq-shell.service | :3000 | The Next.js web app |
| hq-ttyd.service | :7681 | Real terminal sessions (tmux) |
| hq-slack-agents.service | :8790 | Slack Events receiver + all 5 agent turn-runners, one process |
| hq-mcp.service | HTTP | Exposes the MCP gateway to remote/authenticated clients |
| hq-shell-reloader | watcher | Zero-downtime deploy on every new build |
| hq-shell-health / hq-watchdog | timers | Self-healing — restart a dead or wedged unit |
| hq-auto-deploy.timer | ~90s | Fast-forwards the live checkout + every session sandbox to main |
| hq-capture-sweep.timer | 30 min | Sweeps quiet sessions/agent runs into inbox/ for filing |
Applies to any harness element — a skill, a Slack persona, an automation prompt. A pass-rate delta on a fixed task set decides whether a change ships; "feels better" is explicitly not allowed to be the reason.
Run the fixed task set against the current version — record the baseline.
Find the earliest point a failing run actually went wrong.
Write one reversible hypothesis before touching anything.
Make the single smallest edit that tests it.
Rerun the same tasks fresh, with no memory of the baseline run.
Retain on a real gain, revise on a partial fix, remove on none.
Host-local, cross-session recall for chats and terminals — who the operator is, standing feedback, live project context.
Each Slack agent has its own git-tracked memory folder, loaded at the start of every thread. Agents propose changes to their own memory only; a human merge gate approves them.
A persisted map from Slack thread → Claude session id, so --resume picks up exactly where a conversation left off, across restarts.
Every meaningful call, with reasoning.
Grouped by product.
Cross-product patterns.
How the company runs.
Go-to-market knowledge.
company · customers · the rest.
ux-design · better-colors · better-typography · better-ui · pick-ui-library · dataviz
brand-voice · content-writing · deep-research
daily-brief · agent-report-card · usage-report · deploy-watch · social-listening
kb-filing · work-capture
verify-before-done · i-have-adhd
harness-improvement — the skill that improves the other skills