Wizard flags
| Flag | Effect |
--name / --display / --dir / --owner | Answer the first questions up front |
--public / --private | Repository visibility (default private) |
--no-github / --no-drive / --no-review-app | Skip the repository, the drive or the review gate |
--no-run | Create everything but do not start the app |
--yes | Accept every default (never makes code public) |
--dry-run | Show every step; change nothing |
Everyday commands
| Command | What it does |
bun slot:up | Start the shared Postgres and Redis and this checkout's own databases; worktrees and clones each get their own slot |
bun dev | Run the web app and realtime service |
bun check | Format, lint, boundaries, policy, dead code, duplication, invariants, evidence, types, tests, coverage floors, build |
bun test:integration | Database, Redis and web tests against real services |
bun test:e2e | Playwright against the production build |
bun verify | check + integration + browser tests + migrations applied twice |
bun db:generate | Generate a forward migration from the schema |
bun doctor | Diagnose tools, services, identity and configuration |
Agent and drive commands
| Command | What it does |
bun drive:bootstrap [--check] [--dry-run] [--github] | Create or repair the PageSpace drive; idempotent; --check verifies every page and the agent key |
bun plan:review <id> [--runner codex|claude|opencode] [--model m] | Independent read-only plan review |
bun board:read|status|create|relate|replace | Hash-checked board edits |
bun board:stale | Tasks whose status disagrees with git |
bun decision:record "<decision>" --context <page> --why "…" | Record a decision made on the owner's behalf |
bun adr:next | The next free decision-record number |
bun review:check <recordId> --pr N | Self-check a review record before posting |
bun github:review-app | Create and install the review-record GitHub App (two clicks) |
bun github:rules [--apply] | Diff or apply the repository's merge rules |
project.config.json
The one place for non-secret project identity and drive layout; scripts read every id from it, and secrets stay in .env and GitHub.
{
"name": "widget-app",
"displayName": "Widget App",
"repo": "you/widget-app",
"gates": { "integrationCommand": "bun test:integration", "requiredChecks": ["CI gate", "Playwright E2E"] },
"planReview": { "runner": "claude" },
"pagespace": { "driveId": "…", "pages": { "roadmap": "…", "reviews": "…" }, "channels": { "epicUpdates": "…" } }
}
Your drive
| Page | Holds |
| Roadmap | Epic → Phase → Leaf tasks with criteria and prerequisites |
| Issues | Bugs, Test coverage, Agent tooling, Doc drift, User feedback, Backlog, Pending decisions |
| Plans / Prompts / Reviews | One folder per epic: plans, handoffs, delivery logs, agent prompts, review records |
| Library | Builder and Reviewer contracts, the orchestrator loop, reusable skills |
| Channels | Standup, Sprint Room, Epic Updates, Incidents (CI posts here) |
| Agents | Scrum Master, Builder, Reviewer, Documentation Agent, Agent Memory |
Running two projects on one machine? Each project's Docker stack, database names and ports are its own; set the <APP>_*_PORT variables when defaults collide.