Architecture

Infrastructure and tooling overview — what Core Warden is built on and how the pieces connect.

System diagram

Loading diagram…

Frontend

Three separate apps, each deployed to its own Vercel project. Core Warden (the game) is a Phaser 3 + TypeScript single-page app on corewarden.app — a top-down action RPG playable in the browser, targeting Android tablets and desktop keyboards. Matlu Codex is a static Astro 6 site for players and contributors: lore pages fetched from Notion at build time, a creature gallery, and a community submission form with Supabase Storage for art uploads. Agentic Experiments (this site) is an Astro 6 dev log tracking agent performance, weekly metrics, and architecture decisions; audience is the development team (primary) and curious external developers (secondary).

Data

Supabase hosts all persistent data. The matlu_runs table stores leaderboard entries — each run's score, timestamp, and player identifier — written by the game client and read back for the leaderboard screen. stats_weekly and cognitive_load store aggregated delivery metrics written by the weekly collect-stats.js script and surfaced on this site's metrics dashboard. Supabase Storage holds creature-art uploads submitted through the Codex contribution form (binary blobs; Postgres stores only the URL).

Agents

All agent workflows run as GitHub Actions cron jobs. The Triage Agent (22:00 UTC nightly) sweeps unlabelled Linear backlog issues, assesses each against the codebase, and applies readiness labels (ready, needs-refinement, blocked, too-large) so the implementation agent always has triaged work to pick up. The Nightly Agent (02:00 UTC) selects ready issues, spawns an isolated Claude Code session per issue (max 3 in parallel), and opens a pull request for each completed one. The Error Monitor checks Better Stack daily for unresolved errors and files Linear bugs automatically. Other weekly agents handle lore auto-fill, sprite generation, release notes, architecture review, and the PR grooming / backlog hygiene passes.

Tooling

Two MCP servers are active in the project. PixelLab MCP generates pixel-art sprites on demand — characters, isometric tiles, tilesets — assembled into spritesheets and committed to public/assets/sprites/ via the Sprite Credit Burn workflow. Linear MCP lets agents read and update issue metadata without leaving the Claude Code session. Key scripts: collect-stats.js (weekly metrics aggregation), fetch-agent-issues.js (selects issues for the nightly run), create-labels.js (idempotent label bootstrap), and npm run sprites:assemble (assembles raw frames into spritesheets). CI runs on every push to main and claude/** branches: tsc --noEmit + vite build for the game, and astro check + astro build for both Astro sites.