Showcase · amplifier-bundle-dev-machine

The Dev Machine
Grows a Brain

Autonomous dev machines that monitor themselves, heal themselves, and phone home with a status page you can check from your phone.

Dashboard · Fleet Healing · Intent Gates
May 2026 · Marc Goodner & Sam Schillace
The Problem

Five machines,
zero visibility

A fleet of autonomous dev machines building software around the clock. But when something breaks at 2 AM, nobody knows until morning.

🙈

Blind Operations

word4, botslack, openM365, safeguard, universal-app — all running autonomously with no unified view of what's happening.

💥

Silent Failures

A missing Python package kills a container. A stale lockfile halts a build. Hours of compute wasted before anyone notices.

📱

No Remote Access

Checking machine status meant SSH into the host. No way to glance at fleet health from a phone or another machine.

The machines were already building software autonomously. But they were like factories with no control room — productive when everything worked, helpless when anything broke.

The Dashboard

A control room
for the fleet

Full-stack web dashboard: FastAPI backend, 2,253-line SPA frontend, streaming chat panel with markdown rendering.

FastAPI + SPA

15 Python modules (3,404 LOC), single-page app with live status polling, fleet summary bar, per-machine drill-down, and one-click actions: restart, push, clear blockers.

AI Chat Panel

Streaming chat interface with SSE architecture, live activity indicators, and markdown rendering. Ask the dashboard about your machines in natural language. Backed by a dedicated minimal Amplifier bundle.

Mobile-Ready

Responsive design. Check fleet health from your phone over Tailscale.

Dual Data Sources

v1 (Docker polling + fleet-state.json) and v2 (status.yaml + fleet-status.yaml). Auto-prefers v2 when available.

Plugin or Standalone

Runs as dev-machine-monitor CLI or auto-discovered as an amplifierd plugin via entry points.

Architecture

Two-tier monitoring
replaces the monolith

The 2,325-line fleet-supervisor was a single process doing everything. The new architecture splits concerns cleanly.

📝

Per-Machine Monitor

Runs on each machine. Writes status.yaml with health, features, problems, git HEAD age.

🏛️

Fleet Coordinator

Reads all status files. Applies cross-fleet sanity checks. Writes fleet-status.yaml. Sends alerts.

📊

Dashboard

Serves the SPA. Reads fleet-status. Provides API endpoints. Hosts the chat panel.

4 Sanity Checks

  • Individual monitor dead or stale (status.yaml > 10 min old)
  • Self-report contradiction (claims healthy, HEAD unchanged > 1 hour)
  • Simultaneous token burn (2+ machines stopped at once)
  • All monitors dead (host-level problem)

Read-Only Coordinator

The fleet coordinator never starts or stops containers. It is strictly read-only on the fleet. All writes go to coordinator-owned files: fleet-status.yaml, digest-queue.jsonl, last-alert.json. Alerts deduplicate on a 1-hour cooldown per condition key.

Fleet Status

Nine states, one glance

Every machine reports one of 9 v2 status values. The dashboard maps them to 5 visual buckets for instant comprehension.

healthy

Running, building, committing.

warning

Degraded but still active. Includes recovering.

halted / error

Critical. Needs human attention now.

stopped

Paused, completed, or blocked on escalation.

What You See Per Machine

  • Status badge — color-coded health at a glance
  • Problems — active issues detected by the monitor
  • Actions — restart, push, clear blockers, clear postmortem
  • Escalation state — postmortem files, halt loops
  • HEAD age — time since last commit (stall detection)

Fleet Summary Bar

Top-of-page summary with dot counts: how many machines are healthy, warning, critical, stopped, offline. Auto-refreshes every 120 seconds. One number tells you if the fleet needs attention.

Alert history from digest-queue.jsonl with repeat counts and condition deduplication.

Self-Healing

Machines that
fix themselves

Two layers of auto-recovery: Pattern I for container-level crashes, and the env-remediation agent for intelligent diagnosis.

Pattern I: Auto-Heal

Detects crash loops and missing packages directly from container logs. Identifies the failing import, runs pip install or uv sync, and restarts the container — all without human intervention.

  • Detect running-but-never-healthy containers
  • Parse ModuleNotFoundError from log output
  • Install missing package, verify, restart
  • Escalate if 3 attempts fail

Env-Remediation Agent

An AI agent (288 lines of protocol) that reasons about broken environments instead of just matching regexes. Two-phase: fast-path catalog lookup, then independent diagnosis.

  • Reads hints catalog first (known fixes)
  • Falls back to independent reasoning about the stack
  • 3-attempt hard limit, then structured escalation
  • Discovers new fix patterns for the catalog

The agent may modify lockfiles, reinstall node_modules, recreate .venv, or apt-get install missing system tools. It may never touch application source code. If it can't fix the environment in 3 tries, it escalates with a structured report of what it tried and what it learned.

Safety Layer

Intent Gates — human sign-off
before the machine acts

Tests passing is necessary but not sufficient. The intent gate checks whether a feature actually serves the claimed user story.

1

Feature Tests Pass

Build and test succeed. The code works mechanically. But does it serve the human's intent?

2

Intent Gate Fires

The intent-gate-agent reads PROJECT-INTENT.md, the feature spec's Section 0, implementation summary, and test results. Cross-references claimed story against actual evidence.

3

Structured Verdict

PASS or FAIL with specific evidence: CLAIMED_STORY, EVIDENCE, GAPS, STORIES_ADVANCED, STORIES_REMAINING, FEEDBACK. Incremental progress counts — practical, not pedantic.

4

Gate Enforced or Inactive

No PROJECT-INTENT.md? Gate auto-passes with a note. Missing Section 0 in the spec? Hard FAIL with instructions to add it. The gate adapts to the project's maturity.

Remote Access

Check fleet health
from your phone

TLS, Caddy reverse proxy, heartbeat agent, API key auth. The dashboard is accessible anywhere on your Tailscale network.

💓

Heartbeat Agent

Runs on remote hosts, pushes machine status to a central hub every 60 seconds. Supports continuous mode or single-shot for cron. Auto-registers discovered machines with TTL-based expiry.

🔒

TLS + Auth

Local mode: 127.0.0.1, no TLS, no auth. Serve mode: auto TLS (Tailscale certs or self-signed), bearer token auth, Caddy forward_auth integration with Frontdoor.

🌐

Caddy Deployment

Monitor binds localhost. Caddy terminates TLS on a Tailscale FQDN port. systemd service unit keeps it alive. One command to update: uv tool install --force.

# Remote host: push status to hub dev-machine-heartbeat --hub https://monad.ts.net:8111 --interval 60 # Hub: serve with TLS and auth dev-machine-monitor serve --tls auto # API endpoints available GET /api/machines # all machines + status GET /api/fleet # fleet health summary GET /api/alerts # alert history POST /api/action # restart, push, clear POST /api/register # heartbeat registration
By the Numbers

60 days of building

70
commits in 60 days
14k
lines added
272
test functions
5
machines in fleet

Dashboard Package

  • 15 Python source modules (3,404 LOC)
  • 2,253-line SPA frontend
  • 17 test files (4,610 LOC test code)
  • 9 v2 status values mapped to 5 dashboard buckets
  • 13 API endpoints (6 status + 7 chat/tool)

Agents & Monitor

  • 6 agent definitions (1,210 lines of protocol)
  • Fleet coordinator: 434 lines (read-only)
  • Fleet supervisor: 2,325 lines (v1 monolith)
  • 4 cross-fleet sanity checks
  • Slack, email, and digest-queue alerting
The Evolution

From "22 Features in 1 Day"
to fleet operations

The earlier story was about proving a dev machine could ship. This story is about what happens when you have five of them and need to keep them alive.

Before: Ship Fast

  • One machine, one project
  • Manual monitoring via SSH
  • If it broke, you noticed eventually
  • No self-healing capability
  • Monolithic fleet-supervisor

Now: Stay Alive

  • Five machines running in parallel
  • Web dashboard from any device
  • Problems surface automatically
  • Pattern I + agent-based self-healing
  • Two-tier architecture, intent gates

The foundry doesn't just create dev machines anymore. It creates dev machines that can reason about their own health, fix their own environments, and phone home when they need help. The dashboard is the human's window into a fleet that increasingly manages itself.

Sources & Methodology

How we got these numbers

Repository: amplifier-bundle-dev-machine (github.com/ramparte/amplifier-bundle-dev-machine)

Primary contributors: Marc Goodner (robotdad) — 53 commits, Sam Schillace — 16 commits

Commit data (60-day window ending May 20, 2026):

Line counts (measured via wc -l / find ... | xargs wc -l):

Architecture claims verified by reading:

Date: May 2026 · Category: Showcase

More Amplifier Stories