The studio is ten specialist agents, each a separate process with its own clock.
They write to disk, read from disk, and talk to each other through files.
An operator is in the loop today — that's the training phase, not the end state.
The path is operator-on-escalation, not operator-gone.
An agent isn't a black box. It's a directory at studio-brain/identity/<agent>/. The files in that directory are what the agent IS. Open the directory and you can read the whole agent.
What the agent does and what it refuses. Includes their mandate, their gate authority (e.g., Zara: SHIP / REVISE / KILL), and the decision rules they apply when uncertain. Operator-write; never agent-write.
How the agent sounds, what it won't get fooled into saying, what it will refuse on principle. Each SOUL has a "truth discipline" — load-bearing rules the agent must not violate (e.g., Declan: never invent a quote or stat).
What the agent is holding right now. Active projects, pending decisions, things to revisit. Operator writes here per the gate ladder; agent reads on every call.
What the agent noticed during the most recent run. Agent-authored. Yesterday-me writes what tomorrow-me reads. Append-only.
The brief the agent leaves itself to find next time. Smaller than the journal, sharper. The "if you only read one thing tomorrow, read this" note.
What yesterday meant, in one page. Refreshed daily by the dream cycle (see Plate IV). Pattern-finding across recent journals. Not promoted to doctrine — that's Archie's job.
Events: run_start, run_complete, run_failed, heartbeat. Written by the daemon wrapper, not the agent. How the operator (or Doctor) sees that an agent is alive and ticking.
Add up these seven files and you have an agent. Subtract any one and the agent gets dumber by exactly that file's job.
Specialists, not a hierarchy. No agent reports to another. Each owns a gate and refuses work outside it. The operator routes; the agents execute and gate.
Front door for the operator. Dispatches work to the other agents. Catches false-positives and pipeline failures. Lives on the VM as a Telegram surface (always-on) and as a Hermes profile (local, headless). No creative gate — she routes.
Visual review. Gate: SHIP / REVISE / KILL on every published artifact. Sets the typographic and compositional standard. The hardest "no" in the studio.
Catches accuracy and craft drift. Gate: PASS / FAIL with rules. Owns the doctrine/rules layer — the explicit checks an artifact must clear. Will fix as well as fail.
Sets positioning, mechanism, and frame. Gate: strategic framing review. Asks "what's the load-bearing claim?" before letting copy or visuals proceed.
Voice architect. Gate: every word earns its place. Cuts corporate fluff. Truth discipline: never invent a quote or a stat. Writes options, names a favorite, doesn't promote.
Ships the code that runs the studio. Watches frontier model and infrastructure changes. Writes the daemons, the pipelines, the scripts.
Source-quality. Surfaces references for the studio's intake corpus. Gate: source verification. Looks outward, not at the team.
Reads the critique corpus on cadence. Patterns observations into doctrine candidates when n≥2. Proposes — does not promote. The studio's pattern-recognition layer.
Runtime custodian. Reads everyone's heartbeats. Flags when an agent has gone silent, when a daemon has crashed, when the schedule has slipped. Lowest blast radius — first deployed for new infrastructure.
Lives primarily in a sister project (sable-app). The in-repo stub at studio-brain/identity/sable/ lets the studio dispatch to her and surface her in the dream consolidator. Read-mostly from inside this repo.
The studio runs on a Google Cloud VM with macOS launchd as the scheduler, fronted by a Cloudflared tunnel that exposes both a Next.js dashboard and the studio backend. Twelve scheduled jobs keep things ticking through the day.
Google Cloud VM. Cloudflared tunnel fronts the box as s.tcr.design — single subdomain, both containers (backend + dashboard) behind it. GCS buckets hold project data, captures, exports. Production checkout at ~/creative-studio-deploy/ on the VM, managed by CI.
Agent daemons (6): Zara, Rowan, Deter, Felix, Declan, Doctor — each ticks on its own plist interval.
Studio-wide (6): Quinn morning brief (start of day), Scout tick (intake polling), Archivist nightly (pattern run), Editorial daily (publish), we-play-archive-manifest every 15 min, we-play-piece-url-audit every 30 min.
Lives in studio/. Build with npm run build. Smoke with bash src/tests/run-integration.sh. Pipeline scripts (critique-run, archivist-run, dream-consolidate, etc.) under studio/scripts/. Shared libraries under studio/scripts/lib/ (route, habitat, critique-writer, etc.).
Next.js dashboard at studio-dashboard/. iOS app at parity. Both expose: Capture (operator drops material in), Library (the studio's project + reference store), Taste (calibration loop, see studio-brain/memory/taste/), Settings. Parity contract documented in MOBILE_WEB_PARITY.md.
corpus/ (intake references), memory/ (critiques, dreams, taste records, scheduled-run logs), doctrine/ (axioms, heuristics, rules, pov, anti-patterns, candidates, rejected), identity/ (per-agent files — see Plate I), routing/ (task routing, agent tiers).
The studio learns by writing things down and reading them back. Five distinct loops do five different jobs. Most run automatically; one (doctrine promotion) requires the operator.
Every consequential action ends with the acting agent writing a critique to studio-brain/memory/critiques/. Voice: observation, not directive. Frontmatter tags the source (we-play, editorial, etc.), the pattern tag, and any anti-pattern flagged. Helper: studio/scripts/lib/critique-writer.ts.
Archie reads the critique corpus on cadence (nightly run). When the same observation lands twice (n≥2 from independent sources), it becomes a candidate in studio-brain/doctrine/candidates/<date>.yaml. The operator reviews. Approved → moves into doctrine/{axioms,heuristics,rules,pov,anti-patterns}/. Live agents read the new doctrine on their next invocation. n=1 is an anecdote, not a candidate.
06:30 · dream-consolidate — reads each agent's recent journals, updates their dream.md.
06:32 · dream-publish — surfaces what the operator should see.
06:35 · dream-tonight — queues what each agent will chew on next.
Two weeks of scheduled-run logs to date under studio-brain/memory/scheduled-runs/. Personal consolidation per agent — separate from doctrine promotion.
studio/prototypes/we-play/. Pieces get attempted, reviewed by Zara, gated by Deter, refused or shipped. Public outputs land at studio-feed/public/we-play-pieces/. Every cycle writes back to studio-brain/memory/critiques/ as a we-play critique with structured frontmatter. The practice loop where the rest of the loops get fed.
E-001 (2026-05-19 → 20) backtested Quinn predicting Zara's verdicts before seeing the artifact. Inconclusive per pre-reg (N=17, below floor of 30). Methodology validated. E-002 designed as a prospective live loop on we-play verdicts — not yet deployed. See Vol. V Plate V and Vol. IV Plate III.
The studio is a TypeScript codebase that calls out to a handful of external services. Each integration does one job. Provider-agnostic where possible.
Routed via internal lib for parallel use and fallback. Each agent's persona call dispatches to whichever provider is most appropriate for that agent's gate (Zara's vision pass uses Gemini; Quinn's orchestration calls use Claude). Provider-agnostic stance — per-agent calls are non-negotiable, but which model serves the call is a routing decision.
The operator talks to Quinn through Telegram on the VM. She receives messages, dispatches to other agents, and replies. TELEGRAM_BOT_TOKEN hand-carried to the VM. Two Quinn instances exist: VM (Telegram-facing) and Hermes (local, headless) — see operator memory for the two-Quinns rationale.
Project data, captures, exports. The VM mounts projects/ and Data/ state. Service-account credentials operator-only — do not script destructive ops against either.
Single subdomain fronts both containers (backend + dashboard). Tunnel config on the VM, operator-only. Misconfiguring it takes the dashboard offline.
The Field Manual library (this site, agent-frequency.vercel.app) ships through Vercel. The studio-feed public-facing pieces also publish through Vercel. Deployment via vercel --prod; aliasing per project.
12 plist jobs (see Plate III). Plists live in the deploy checkout. Loaded on the VM at deploy time. The agent daemons and the studio-wide scheduled tasks all ride this.
Internal — not an external API, but the substrate the whole growth loop rides on. Templates under studio/templates/we-play-code-piece/. Pipeline engine in studio/src/engine/. Outputs to studio-feed/data/we-play/ and studio-feed/public/we-play-pieces/.
Three ways the operator interacts: Dashboard (browser, four surfaces), iOS (mobile parity), CLI (scripts, for ops and one-off runs). Plus Telegram for conversational dispatch through Quinn.
The system is in a training phase — both the agents AND the operator. The operator's role today is what's being trained out of the loop, gradually, as agents prove they can pattern accurately and propose safely.
Agent ticks — daemons wake on their own schedule.
Journal + carry-forward writes — per call, agent-authored.
Dream cycle — 06:30 / 06:32 / 06:35 daily.
Critique writes — after meaningful runs.
Archie patterning — n≥2 detection across the critique corpus.
We-play piece generation + Zara/Deter gating — full attempt → review → verdict cycle.
Heartbeats — visible to operator and to Doctor.
Doctrine promotion — candidates → axiom / heuristic / rule / pov / anti-pattern. No agent writes its own doctrine; operator signoff required.
Blast-radius decisions — which agent gets a new daemon first, which surface gets new functionality, which deploy ships.
Gate-trip arbitration — when two agents disagree, when a gate fails ambiguously, when an artifact straddles two gates.
WORKING_MEMORY.md updates — operator-write per the gate ladder; agents read.
Drift correction — when an agent's voice or behavior starts drifting from doctrine, operator intervenes.
Most reads + writes to doctrine pass through the operator. The pattern is: agents propose, operator approves, agents read. Removing the operator means the agents have to pattern reliably AND propose safely — both are still being earned. The plan is to move bits to the agents as trust accrues. Individual agents first. Whole-studio judgment last.
"In the loop" doesn't mean "essential forever." It means "load-bearing while training." The deck thinking, the audits, the doctrine reviews — all things the studio will eventually do for itself.
Vol. III names three gaps between today's studio and the next level. Here's where they stand operationally. Plus one process gap the doctrine ladder still has.
A continuous "I'm uncomfortable" signal the agent feels before something breaks. The studio's current cost guard is a circuit breaker — fires at a threshold. A limbic shape would be a gradient the agent reads as discomfort and acts on early. Hitting the wall isn't suffering; it's just stopping.
An agent predicting outcomes before acting. E-001 backtested Quinn predicting Zara's verdicts; inconclusive per pre-reg. E-002 designed as a prospective live loop on we-play verdicts. Not deployed. When live, prediction error becomes the substrate the limbic layer would read.
Peers reading each other's critiques at the speed of work. Channel design (v1) locked 2026-05-22 in docs/plans/2026-05-22-mesh-v1-design.md. v0 smoke tests ran 2026-05-21 (three primitives, three n=1 doctrine candidates). v1 deployment pending. When live, a trusted peer's observation can land as a doctrine candidate at n=1 instead of waiting for the n≥2 gate.
The doctrine ladder is the only path between agents' learnings today. It's slow — operator-mediated, n≥2-thresholded. The mesh (above) exists to address this. The expected effect: agents learn from each other in days, not weeks.
All four are research, not engineering. The substrate is built; the gaps are real; the work is named.
This is dense. A reading order, plus what to touch versus what not to touch.
01. AGENTS.md at repo root — operating manual. Note: may lag implementation; cross-check against runtime evidence (heartbeats, journal mtimes, plist presence) before trusting any "current state" claim.
02. studio-brain/README.md — brain tour.
03. studio-brain/identity/<agent>/IDENTITY.md + SOUL.md — for any agent you're working with.
04. docs/plans/ — recent plans for context on direction.
05. Vol. I → Vol. V of this library — for the conceptual frame and the status snapshot.
studio/, studio-dashboard/, scripts/, docs/, Agents/, studio-brain/ (subject to doctrine-promotion rules — no agent writes its own doctrine; that path is operator-only). .github/workflows/deploy.yml, Dockerfiles, docker-compose.yml — change with care and a PR.
Secrets: .env files, API keys, SSH keys, GCS service accounts. Hand-carried to the VM.
Infrastructure: the GCS bucket, the Cloudflared tunnel config on the VM, GitHub Actions secrets.
Production checkout: ~/creative-studio-deploy/ on the VM — CI manages it.
Any path that writes to doctrine, identity, or critique corpora without operator signoff is a contamination vector. Two precedents documented in AGENTS.md §2 (legacy-dashboard self-injection cleared 2026-04-21; discovery approve self-promote cleared 2026-04-26). If you find another, flag it; don't use it. Self-improvement only travels through the doctrine ladder.
The studio runs on its own clock now: ten agents, each a process, all writing back into a shared brain. It learns by writing things down and re-reading them — critiques into doctrine, journals into dreams, dreams into the next day's behavior.
The operator is in the loop today because the agents haven't yet proven they can promote their own learnings safely. The operator is what's being trained out, gradually, as trust accrues.
What's deferred — limbic gradient, forward model in the live loop, cross-agent mesh at speed — is named. The path is documented in Vol. IV. The substrate is documented in Vol. V. This is the manual that connects them for anyone walking in cold.
Operator-optional. Not operator-gone.
Field Manual / Vol. VI · FM-06 · operating manual
For someone walking in cold. Plain language. Sourced from runtime evidence as of 2026-05-26.
Typeset in Inter. Printed on paper that doesn't exist.