Terminal game about surviving AI acceleration.
npx --yes permanent-underclass@latestTitle screen:
Character select:
Live turn UI:
You pick a character, live through a collapsing job market, and try to make it to an ending without going broke or burning out.
- Short, replayable runs (
simple: 12 turns,standard: 32 turns) - Character-specific event pools with different pressure profiles
- No single correct path; tradeoffs are the point
- You are not locked to the three presented choices.
Press 4 and type your own move:
start a podcastcry in the bathroomgo on a meditation retreatshort nvidia
With LLM mode enabled, your local codex or claude CLI resolves that action into real in-game consequences.
# stable
npx --yes permanent-underclass@latest
# beta
npx --yes permanent-underclass@betacargo runCLI help:
cargo run -- --helpCtrl+C: quitEnter: confirm / continue- Arrow keys: navigate cards, menus, settings
1/2/3: choose a card4: enter freeform mode (Entersubmit,Esccancel)s: manage subscription (Free/Pro/Ultra/Giga)m: open in-run settingsEsc: back/cancel
simple: 12 turns (default)standard: 32 turns
Use --tempo simple|standard in --cli, --headless, and --llm-bench modes.
# auto provider (default): prefers Claude if installed, else Codex
cargo run -- --llm
# Codex
codex login
cargo run -- --llm --llm-provider codex
# Claude
claude auth
cargo run -- --llm --llm-provider claudeOptional flags: --llm-model, --llm-reasoning low|medium|high|xhigh, --llm-profile.
Advanced Local Modes
cargo run -- --cli --character junior-dev --seed 1
cargo run -- --cli --character junior-dev --seed 1 --tempo standardcargo run -- --headless --character junior-dev --seed 1
cargo run -- --headless --character junior-dev --seed 1 --tempo standardcargo run -- --headless --llm --save-file run.snapshot.json --character junior-dev --seed 1
cargo run -- --headless --llm --resume-file run.snapshot.jsoncargo run -- --llm-bench --llm-provider auto --llm-bench-iters 1
cargo run -- --llm-bench --llm-provider auto --llm-bench-iters 1 --tempo standardcargo run --bin balance_sim -- --seeds 20
cargo run --bin balance_sim -- --seeds 400 --character all --tempo standard --output-jsonl data/sim/ending_sweep_latest.jsonlnpm run devOpens http://localhost:5173/command-center to browse events, endings, characters, flags, and sprites.
If data/sim/ending_sweep_latest.jsonl exists, the Sim tab renders ending/policy/character outcome summaries.
Source lives in apps/command-center/.
# full release gate (single pass/fail summary)
./scripts/release_preflight.sh
# individual checks
cargo test --lib
cargo test --test sim
# one-time: cargo install cargo-audit
cargo audit
# one-time: cargo install cargo-deny
cargo deny check advisories
# one-time: brew install gitleaks # or install from https://github.com/gitleaks/gitleaks
gitleaks detect --source . --no-git --redact --exit-code 1- Code license:
LICENSE(MIT) - Non-code asset licensing and attribution status:
ASSET_LICENSES.md


