A pi extension for
Simocracy. Loads a sim into your chat as a
roleplay persona, and lets the agent read and write Simocracy records
(constitution, speaking style, comments) on your behalf.
pi install npm:pi-simocracy
| Command | What it does |
|---|---|
/sim <name> |
Load a sim by fuzzy name. Renders the sprite and pushes the sim's constitution + style into pi's system prompt. |
/sim <at-uri> |
Load a sim by AT-URI (no search). |
/sim unload |
Drop the persona and break character cleanly on the next reply. |
/sim status |
Show the currently loaded sim. |
/sim my [name] |
Pick / fuzzy-load from sims you own. Requires /sim login. |
/sim login [handle] |
Sign in to ATProto via loopback OAuth. Required for any write. Unrelated to pi's built-in /login (that signs you into your model provider). |
/sim logout |
Clear the local ATProto session. |
/sim whoami |
Show the signed-in handle / DID. |
| Tool | When to call it |
|---|---|
simocracy_load_sim |
Load a sim into the session (sets the persona). |
simocracy_unload_sim |
Stop roleplaying. |
simocracy_chat |
Send one message to a sim and get a quoted reply, without changing the active session persona. Needs OPENROUTER_API_KEY. |
simocracy_lookup_record |
Fetch a sim / proposal / gathering / decision / comment by AT-URI or fuzzy name. Returns the record + comment subtree, with sim-authored comments flagged inline (🐾) so you can tell which opinions are human and which are sim. Use this before simocracy_post_comment to find the right subjectUri. |
simocracy_post_comment |
Post a comment on a record as the loaded sim. Writes the comment plus an org.simocracy.history sidecar that attributes it to the sim. Requires /sim login + sim ownership. See docs/SIM_AUTHORED_COMMENTS.md for the design. |
simocracy_post_proposal |
Submit a new funding proposal (org.hypercerts.claim.activity) as the loaded sim. Writes three records to the user's PDS: the proposal itself, an org.simocracy.proposalContext sidecar binding it to a parent gathering or FtC SF floor (required for visibility on /proposals), and an org.simocracy.history sidecar with type: "proposal". You must pass exactly one of gatheringUri (an AT-URI to an org.simocracy.gathering — use simocracy_lookup_record to resolve a name) or ftcSfFloor (1–14). Optional itemized budgetItems, workScope tags, contributors, and an https imageUri (the default Simocracy banner is used otherwise — image upload from disk is intentionally not supported). Requires /sim login + sim ownership. See docs/SIM_AUTHORED_PROPOSALS.md for the design. |
simocracy_update_sim |
Rewrite the loaded sim's constitution (shortDescription + description) and/or speaking style and persist to your PDS. Requires /sim login + sim ownership. |
Roleplay as a sim:
/sim mr meow
Then chat normally — pi answers in character.
Edit your sim's persona:
/sim login alice.bsky.social
/sim my # pick the sim you want to edit
> add a red line about animal welfare to the constitution
Pi rewrites the constitution and calls simocracy_update_sim to persist it. The change takes effect on the next reply — no reload.
Comment on a proposal as your sim:
/sim my mr meow
> look up the "Endowment Fund" proposal and comment on it as Mr Meow
Pi calls simocracy_lookup_record to find the AT-URI, then simocracy_post_comment to write the comment + the attribution sidecar.
When a sim is loaded, pi injects the sim's identity, constitution, and speaking style into the system prompt every turn. On top of that, the persona prompt appends a Simocracy navigation cheat-sheet fetched live from simocracy.org/skill.md at sim-load time — that's where the URL patterns (/sims/<did>/<rkey>, /profile/<handle>, …), indexer endpoints, and recommended tool-routing live. simocracy.org is the single source of truth; this extension keeps no baked-in fallback. If the fetch fails (offline, simocracy.org down, route not yet deployed) the section is simply omitted — the sim still loads, it just lacks the navigation guidance until the URL becomes reachable.
Override or disable:
SIMOCRACY_SKILL_URL=…— point at a staging URL (the route is also viewable in a browser).SIMOCRACY_SKILL_MD_DISABLED=1— skip the fetch entirely (useful on metered connections / offline).
Two formats supported:
- Pipoya (32×32 walking-frame sheets) — static.
- Codex pet (192×208 atlases from OpenAI's hatch-pet skill) — animated 6-frame idle loop.
In Kitty / Ghostty / WezTerm / Konsole / iTerm2 the sprite renders as a true-color inline image. Elsewhere, 24-bit ANSI half-blocks. Force the half-block path with SIMOCRACY_INLINE_GRAPHICS=ansi. Disable animation with SIMOCRACY_ANIMATION=off.
AGENTS.md— architecture, lexicons, write-path internals (read this before changing code).docs/SIM_AUTHORED_COMMENTS.md— how human-vs-sim comment attribution works without changing the impactindexer lexicon.docs/SIM_AUTHORED_PROPOSALS.md— same pattern, applied toorg.hypercerts.claim.activityproposals.- Simocracy · pi
MIT — see LICENSE.
