Build log · 2026-04-25

Case study: 19 agents, one sprint, one founder

How we shipped Sprint 1 — a corporate-shaped AI workforce — in a single Cowork session, then survived a mid-sprint scheduler dormancy by pivoting to bridge-mode delivery.

If you’re reading this and wondering whether the audit-log-driven pattern actually works in practice, this is the test data. VoidAi’s first case study is itself.

The setup

April 25, 2026. One founder. Eight working agents. A v0.6 dashboard. A vault. A goal: graduate the operation from “eight working agents” into a corporate-shaped autonomous workforce with a public surface, a media-gen pipeline, and a generic revenue framework — in seven days.

The catch: by mid-Day-1, the host scheduler went dormant. A long-running PowerShell process that fired the JSON-defined cron tasks had hung on an Anthropic API call, and MultipleInstances IgnoreNew quietly suppressed every subsequent fire. The void went quiet. Nothing else on the founder’s plate.

What we did instead

We pivoted to bridge-mode delivery: instead of waiting hours for the host runner to recover, the work happened in-Cowork-session via the Obsidian REST API. Twelve inbox items got read, classified, and turned into proposal sidecars. Thirty-nine audit rows landed with playbook_version: "0.1.0-bridge" so the delivery would be traceable forever as a non-runner pass. Zero failure outcomes.

Then we built the replacement for the failed infrastructure. A Void-native scheduler that ticks every 60 seconds, runs the same five probes the old void-pulse agent ran, fires due cron jobs as Start-Job, and self-supervises with per-step try/catch. A “12-minute death pattern” emerged on the first two versions. We patched three suspected root causes (SSL callback growing unbounded via +=, JSON state-file non-atomic writes, missing PID lock) in one session. Each fix shipped with a version bump (v0.1.0 → v0.1.1 → v0.1.2 → v0.2.0 → v0.2.1) so the audit log preserves which version produced which row.

The numbers

In one ~14-hour Cowork session:

  • 11 new agents scaffolded across 5 C-suite functions (COO, CTO, CFO, CMO, CRO).
  • 4 media-gen shims wired (Imagen, GPT Image, ElevenLabs, Hedra) with hard 90-second timeouts and structured-JSON failure paths so no agent ever silently hangs on a stuck HTTP connection.
  • 6 new agent runners scaffolded.
  • 1 Astro brand site (this one) — pages for home, about, agents, services, contact, build-log. Pulls live from agents/<name>/worker.md frontmatter so the public roster is always in sync with the charters.
  • 3 productized service offers wired in model.json.
  • 1 brand voice guide.
  • 39 zero-failure audit rows from the bridge pass.
  • 0 unreviewed runner exceptions at session end.

Plus the architecture pivot: killing the Windows Task Scheduler dependency in favor of a Void-native long-running process. The audit log goes quiet ⇒ that IS the alert. No dead-man’s switch required.

What this actually proves

Three things.

One: the agent’s “soul” is portable. We classified twelve inbox items in-Cowork-session because the agent’s classification logic isn’t the runner — it’s the prompt + the brand guide + the shadow log. When the runner died, the bridge picked up the work using the same logic, because the logic isn’t where the runner lives.

Two: the audit log is the corporate ledger. We can prove every row. We can show you exactly which version of the scheduler wrote each heartbeat. When the 12-minute death pattern emerged, the audit log told us EXACTLY where to look (it’s all there in scheduler.heartbeat rows, ticking 1 through 13, then nothing).

Three: silent failures are preventable. The original claude-call.ps1 v1.0 used Write-Error + $ErrorActionPreference = "Stop", which propagated terminating exceptions across script boundaries and killed the runner before any audit row was written. The v1.1.0 rewrite uses Start-Job + Wait-Job -Timeout 90 for hard cancellation, structured JSON for every failure path, and an inline audit row when invoked directly. Same script, completely different failure mode.

What we’d hire ourselves to install on your stack

If you’re at a 10-100 person company drowning in ops drudgery, or a solo AI founder who needs the boring governance infrastructure without owning a SaaS, the Void-as-a-Template install is what we’d recommend. 7 business days. We bring the entire pattern — the vault, the agents, the Guardian gate, the dashboard, the audit log, the runners — and tune it to your intake.

You don’t get a chatbot. You get a corporate-shaped AI workforce with the same disciplined writing, the same kill criteria, the same audit log we use ourselves.

The full Sprint 1 archive

Every file, every audit row, every decision is preserved. Want to see what 14 hours of agent-shaped work looks like? The Sprint 1 master plan is at 06-Knowledge/architecture/ai-company-master-sprint-2026-04-25.md in our internal vault. The session archive that captures the delivery is 06-Knowledge/sessions/2026-04/session-2026-04-25-8c0d2336.md.

If you’d like to see the actual artifacts before we work together, ask. We’ll set up a 30-minute walk-through.

— Jeff Hicks (founder) + Claude (in-session)

Authored by founder + claude (in-session) · reviewed by brand-steward