Skip to content

RobSchilderr/pitown

Repository files navigation

Pi Town

pitown

Multi-agent orchestration layer built on top of Pi.

Pi is the single-agent coding CLI. Pi Town adds multi-agent coordination, persistent sessions, autonomous loops, and durable state.

Credits

Pi Town is built on top of Pi. Credit to Mario Zechner and the Pi project for the underlying coding agent runtime Pi Town orchestrates.

Pi Town was also inspired by Gastown. Credit to Steve Yegge for pushing on multi-agent orchestration ideas that made this project worth exploring.

Experimental: Pi Town is in early development. Not yet recommended for unattended usage without close oversight.

Pi Town vs Pi

Pi Pi Town
Agents Single Multi-agent (mayor, workers, reviewers, etc.)
Sessions Ephemeral or manual Persistent per agent, auto-resumed
Coordination None — one agent, one task Mayor delegates to workers/reviewers via board
Loops Single invocation Autonomous loop runner with stop conditions
State No durable orchestration state Durable board, mailbox, tasks, agent state under ~/.pi-town
Planning Inline /plan mode (read-only), /todos (captured steps)

Install

Pi is a prerequisite:

npm install -g @mariozechner/pi-coding-agent

Then install Pi Town:

npm install -g @schilderlabs/pitown

Quick start

Verify Pi is installed and authenticated:

pitown doctor

Start the mayor inside a repo:

cd /path/to/repo
pitown mayor

Or send a one-off message:

pitown mayor "plan the next milestones for this repository"

Packages

Pi Town ships as three npm packages:

  • @schilderlabs/pitown — CLI. The thing users install. All commands.
  • @schilderlabs/pitown-core — Runtime engine. Agent state, controller, loop runner, repo identity, metrics, leases.
  • @schilderlabs/pitown-package — Pi integration layer. Extensions + agent prompts that give Pi sessions "Pi Town awareness."

Extensions & Agent Roles

Pi Town ships a Pi extension (@schilderlabs/pitown-package) that registers:

5 orchestration tools

Given to the mayor automatically:

Tool Description
pitown_board Show agent statuses
pitown_delegate Spawn a worker/reviewer with a bounded task
pitown_message_agent Send durable messages between agents
pitown_peek_agent Inspect agent state and mailbox
pitown_update_status Update own status on the board

2 interactive commands

Command Description
/plan Toggle read-only planning mode
/todos Show captured plan steps

7 bundled agent roles

Role Description
mayor (leader) Human-facing coordinator, owns planning & delegation
worker Implements one bounded task
reviewer Reviews changes against intent and quality
planner Turns a task into a concrete plan
scout Fast codebase recon with handoff
supervisor Selects next unit of overnight work
docs-keeper Summarizes outcomes into human-readable updates

1 test enforcement extension

  • require-tests — Enforces test presence before task completion.

Loop runner

pitown loop runs the mayor repeatedly with automatic stop conditions. This is the key differentiator from plain Pi — it enables autonomous overnight work.

pitown loop
pitown loop --max-iterations 20 --max-time 7200

Stop conditions

The loop exits when any of these triggers:

  • Max iterations reached (default: 10)
  • Max wall time exceeded (default: 1 hour)
  • All tasks completed
  • Leader blocked
  • All remaining tasks blocked
  • Pi exits non-zero
  • High interrupt rate

Each iteration writes durable artifacts (manifest, events, stdout/stderr, agent state) under ~/.pi-town/repos/<repo-slug>/runs/.

Golden signals / KPIs

Pi Town tracks five metrics per run, inspired by Structure Dictates Behavior: Golden Signals for Agentic Development Teams. These are the KPIs the mayor reports on to help you iterate on your repo's agent-readiness.

KPI What it measures Goal
Interrupt Rate Interrupts per agent-task ↓ Lower is better
Autonomous Completion Rate Tasks completed with zero interrupts ↑ Higher is better
Mean Time to Correct (MTTC) Time from interrupt to human response ↓ Lower is better
Context Coverage Score % of interrupt categories with a structural fix ↑ Higher is better
Feedback-to-Demo Cycle Time Time from feedback to working demo ↓ Lower is better

Every run writes metrics to ~/.pi-town/repos/<repo-slug>/latest/metrics.json. The loop runner aggregates metrics across iterations. The idea: each morning the mayor shows you the previous day's results and what to iterate on — which interrupt categories need structural fixes, which tasks ran autonomously, and where agents got stuck.

Command guide

Core workflow

pitown                                  # alias for pitown mayor
pitown mayor                            # start the mayor session
pitown mayor "plan the next milestones" # mayor with an initial message

Planning (inside a mayor session)

/plan                                   # toggle read-only planning mode
/todos                                  # show captured plan steps

Agent management

pitown board                            # show what the town is doing
pitown peek mayor                       # inspect mayor state and mailbox
pitown attach mayor                     # reopen interactive mayor session
pitown continue mayor "follow up"       # resume mayor session with a message
pitown msg mayor "focus on auth"        # send one non-interactive message
pitown delegate --task "fix regression" # delegate a task to a new agent

Autonomous loop

pitown loop                             # run the mayor loop with defaults

Diagnostics

pitown doctor                           # verify Pi install and auth
pitown status                           # check latest local run
pitown status --repo /path/to/repo      # status for a specific repo

Architecture snapshot

You
 └─ pitown mayor
     ├─ resolves the current repo or --repo override
     ├─ opens the persisted mayor Pi session for that repo
     ├─ gives the mayor Pi Town orchestration tools
     ├─ lets the mayor delegate to workers/reviewers
     └─ persists board, mailbox, session, and task state under ~/.pi-town/repos/<repo-slug>/

Local-first runtime layout

~/.pi-town/
  config.json
  latest-run.json
  plans/
    <repo-slug>/
  repos/
    <repo-slug>/
      agents/
        leader/
          state.json
          session.json
          inbox.jsonl
          outbox.jsonl
          sessions/
        worker-001/
          state.json
          session.json
          inbox.jsonl
          outbox.jsonl
          sessions/
      tasks/
      latest/
      latest-run.json
      runs/
        <run-id>/
          manifest.json
          run-summary.json
          pi-invocation.json
          events.jsonl
          stdout.txt
          stderr.txt
          questions.jsonl
          interventions.jsonl
          agent-state.json

Current status

v0.2.1 is published on npm.

Pi Town is in the early local-first orchestration phase. It should be understood as an experimental scaffold, not yet a mature production workflow system.

Current focus:

  • Mayor-first orchestration
  • Persistent Pi sessions per agent
  • Durable board, mailbox, and task artifacts
  • Autonomous loop runner with stop conditions
  • Explicit repo and plan targeting

Planned:

  • Supervision and intervention workflows
  • Richer Pi package integration
  • Homebrew install

Notes

  • Detailed working plans are intentionally kept outside the repo
  • Runtime state defaults to ~/.pi-town
  • Target repos do not need to install Pi Town
  • Private plan contents should not be copied into public-safe artifacts by default

About

Pi-native local-first coding orchestration CLI

Resources

License

Stars

Watchers

Forks

Packages