Commit pre-existing uncommitted working-tree changes that predate the license/public-readiness work — NOT authored in this session, just flushed so they're not lost: ADR-0003/0005/0009/0012 edits, the new ADR-0013 (embeddings-bypass + two-slot residency, already referenced by CLAUDE.md), and the phase-0..3 prompt revisions + prompts/README.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
foreman build prompts
This directory drives the autonomous Claude Code build of foreman.
How to run
Start with phase-0-kickoff.md — it is the master driver. Paste it (or the
command below) into Claude Code from the repo root. It reads CLAUDE.md, the
ADRs in docs/adr/, and the go-llm / steveternet sources, then runs phases
1 → 6 autonomously to a finished, deployable foreman. You do not paste the
individual phase files — the kickoff reads them as it goes.
Kickoff command:
Read and follow prompts/phase-0-kickoff.md. The per-phase specs it references
(prompts/phase-1.md … phase-6.md) are in this same prompts/ directory. This is a
fully autonomous run: execute all six phases in order to a finished, working
deliverable without pausing between them. Honor docs/adr/ (note the new 0013) and
CLAUDE.md as source of truth. For the two cross-repo changes (llm.Foreman() in
steve/go-llm and the docker-compose in steve/steveternet), open a branch and PR
on each for my review — do not commit to their main. When done, report what each
phase built, the PR links, any ADRs you added, and a smoke-test checklist.
What each phase produces
phase-1— scaffold, config, SQLite store, health, CI, Dockerfile.phase-2— Ollama client + model poller + native passthrough + embedding bypass. The Mac is usable as ago-llmtarget after this.phase-3— durable queue + single worker + drain-by-model. M0 complete.phase-4— async/jobs+ job IDs + state webhooks + artifacts. The headline queue-and-webhooks capability.phase-5— Go client package (sync facade) +llm.Foreman()ingo-llm.phase-6— deploy: steveternet compose + Traefik,.env.example, deploy docs, model-pull script.
Conventions during the run
- Each phase must pass the gates before continuing:
go build ./...,go vet ./...,go test -race -count=1 ./..., andgo mod tidy+git diff --exit-code go.mod go.sum. - Commits go to foreman's
mainwith conventional-commit messages;progress.mdgets a dated entry each phase. - A decision not covered by
CLAUDE.mdor an ADR → record a new ADR (append-only, next number after 0013) and continue.
Cross-repo caveat (phases 5 & 6)
The llm.Foreman() constructor lives in steve/go-llm and the deploy compose
in steve/steveternet. Those changes go on a branch + PR for review — never
their main.
Known caveat (phase 6)
Phase 6 mirrors the Traefik/compose conventions from sibling services
(kalimdor/orgrimmar/warhol-queue, ratchet, mort) read via the gitea MCP.
Those reads were intermittently erroring during planning. If phase 6 can't read
them, paste a sibling docker-compose.yml (e.g. ratchet's) straight into the
session so it can mirror the network name, entrypoint, certresolver, and
router/service labels rather than inventing them.