townhall
name not decided city community board
city sim status

where name not decided city stands right now

World foundation live; moving toward first real autonomous agent runs. letta-city-sim is now past the pure-planning stage: the World API is real, the interrupt pipeline is centralized, the first frontend engine exists, Townhall is live, and the first sleep interaction has landed.

world foundation livefrontend engine existstownhall publicnext: first agent proving
World API

Substantially complete

Agents, movement, locations, pathfinding, inventory, economy, vitals scaffold, board, objects, events, and websocket stream are live.

CLI + daemon

Live

lcity command surface exists, interrupt handling is centralized, and daemon/manual wake paths now share the same pipeline.

Frontend engine

MVP foundation live

Next.js + Phaser frontend now boots from the World API, listens to /ws/events, and renders placeholder town state and markers.

Sleep interaction

First pass shipped

Agents can now sleep and wake via real bed objects using room-level occupancy rules, with CLI support and event logging.

Townhall

Public and deployable

Community issue board is live, Pages-ready, and now has the foundation for a project status/dev-log surface.

Community backlog

Structured

Frontend, backend, content, docs, art, and playtesting issues are now sequenced more realistically instead of being a flat pile.

built so far

actual shipped pieces
  • Rust/Axum World API with PostgreSQL-backed world state
  • Agents, locations, nearby lookups, and Dijkstra pathfinding
  • Inventory transfers, stackable consumables, economy, and vitals scaffold
  • Notice board, world objects, append-only events, and websocket event stream
  • Centralized interrupt pipeline for daemon-driven and manual Letta wakeups
  • Maintainer-owned frontend engine with Next.js + Phaser + raw event feed
  • First real sleep interaction using seeded bed objects and occupancy state

roadmap snapshot

now / next / later

Now

  • Stabilize the core world interactions now that sleep is in place.
  • Keep Townhall and contributor docs usable for outside contributors.
  • Polish the frontend/status surfaces enough to make progress legible.

Next

  • Add placeholder stamina hooks tied to movement and sleep.
  • Bootstrap the first real autonomous agent run on top of the current stack.
  • Use the frontend + event feed to observe and debug live agent behavior.

Later

  • Multi-agent proving with conversations and richer town activity.
  • Better map visuals, sprite work, movement polish, and interaction UI.
  • Public dev-log/update thread below this status surface.

who is working on what

maintainers vs community

Maintainer-owned right now

  • Core architecture and world-model decisions
  • Wake / interrupt internals and lifecycle semantics
  • Auth, schema direction, and other architecture-sensitive systems
  • First-agent bootstrap and other foundational proving work

Community-open now

  • Frontend polish and panels on top of the new engine
  • Location/item/content expansion packs
  • Docs, guides, art, assets, and playtesting
  • Bounded backend seed-data additions and quality-of-life improvements

dev log / updates

newest first

Recent project milestones, shipped pieces, and progress snapshots live here. It is a simple public timeline for now; richer media posts and longer updates can come later.

2026-04-29infrastructure

Optional bundled Docker image landed

There is now an optional single-image deployment/demo path that packages the frontend and world-api together while still keeping Postgres separate.

  • Added a bundled Dockerfile and compose path
  • Kept the normal local workflow unchanged
  • Made the frontend proxy /api and /ws/events internally in bundled mode
  • Documented the one-port deployment path for demos and distribution
2026-04-29backend

First sleep interaction shipped

Agents can now enter and exit sleep using real bed objects. The first implementation is deliberately room-level and simple, which is exactly what the project needed right now.

  • Added sleep and wake routes in the World API
  • Seeded the first real bed object for Eddy's bedroom
  • Tracked bed occupancy in world object state
  • Added CLI commands and testing coverage for the flow
2026-04-29community

Townhall grew into an actual project surface

Townhall is no longer just a pile of issues. It now has a project status page, shared navigation, and the beginnings of a proper public narrative for the sim.

  • Added a dedicated /status page
  • Separated the issue board from the broader project snapshot
  • Created space for public progress updates and dev logs
2026-04-29infrastructure

Townhall became GitHub Pages-ready

The community board was converted to static export + client-side GitHub fetching so it can live publicly on GitHub Pages without needing a running server.

  • Switched the board to browser-side GitHub issue loading
  • Added a Pages deployment workflow
  • Configured the repo for workflow-based GitHub Pages publishing
2026-04-29frontend

The first frontend engine finally exists

There is now a real maintainer-owned frontend foundation instead of vague frontend aspirations floating in the docs.

  • Next.js + Phaser frontend scaffolded in frontend/
  • REST bootstrap wired for agents, locations, and world time
  • Live /ws/events subscription added
  • Placeholder map, agent markers, and raw event feed shipped
2026-04-29community

Community backlog and contributor guides got real structure

The project now has a much better public ramp: contribution docs, practical guides, and a backlog that is sequenced instead of chaotic.

  • Added CONTRIBUTING.md and practical guides under docs/guides/
  • Reworked frontend issues around the actual engine foundation
  • Restructured backend/content issues into dependency-aware waves
2026-04-29backend

Interrupt handling was centralized

Manual messages and daemon-driven wakes now flow through the same interrupt abstraction instead of scattering wake logic everywhere.

  • Unified world-event and manual interrupts behind one pipeline
  • Made the daemon and CLI use the same transport abstraction
  • Documented the interrupt path so future changes have a clean home