Chat-agent CMS for Astro sites. An AI agent manages a target Astro repository
through git branches: every draft branch gets a live dev-server preview at
<branch>.your-domain.tld (behind a Rust reverse proxy this app controls),
and every change cycles through plan → execute → publish (reviewing is
part of execute) with
explicit approvals, one self-contained commit per execution, visual page
diffs, and pluggable deployment flows.
- Chat-first: the whole workflow is driven from a chat sidebar (multiple chats per branch, shared between all users, persistent, streaming).
- Safe by construction: the plan phase is read-only (enforced server-side,
not just prompted), publishing binds the exact reviewed commit, undo is a
git revert, and validators block secrets/binaries/symlinks before any commit. - Bring your own model: any OpenAI-compatible endpoint
(
OPENAI_BASE_URL+OPENAI_API_KEY+OPENAI_MODEL).
cp .env.example .env # fill in DATABASE_URL, OPENAI_*, …
scripts/setup-dev-site.sh # real git-inited site copy at ./local/dev-site
nix develop --command overmind s # after starting the PostgreSQL in DATABASE_URLThe start command reconciles dependencies and the generated Prisma client only
when their inputs changed, applies pending committed migrations, then starts
the CMS and embedded proxy. ./scripts/update-local.sh is an optional prewarm
after a pull; starting remains sufficient on its own.
The running app serves it all at /architecture — a public page with the
whole design as diagrams (topology, every state machine, the git model, the
sandbox, the data model), plus the guides. The same files read fine on disk:
docs/ is a symlink to src/pages/architecture/.
- docs/setup.md — every environment variable, DNS, first admin
- docs/walkthrough.md — end-to-end tour with
examples/blog-site - docs/phases.md — the workflow phases and what each one allows
- docs/runbooks.md — operations, failure runbooks, go-live checklist
- docs/nixos.md — the NixOS module
pnpm test # self-contained: throwaway SQLite, no services
pnpm test:integration # boots real astro dev servers + deploy flows;
# the live agent-loop test runs only with a real OPENAI_API_KEY
cargo test --manifest-path proxy/Cargo.tomlsrc/lib/agent/ session loop (OpenAI streaming), tools + in-process MCP,
workflow phases, locks, persistence
src/lib/git/ branches, worktrees, single-commit executions, revert/restore
src/lib/preview/ on-demand astro dev instances + native proxy routes
src/lib/diff/ changed-page mapping + Playwright/pixelmatch screenshot diffs
src/lib/publish/ DeployFlow registry (git-push, web-agency, github-ci,
cloudflare-pages) + sealed artifacts
src/lib/content/ ContentAdapter port (collections + JobPosting adapters)
src/lib/validate/ pre-commit + pre-publish validators
src/components/ vanilla-TS UI (chat extracted from plan.ai-chat + workspace)
proxy/ complete Rust Pingora server exposed through N-API
examples/ sample target sites used by tests and docs