Browser Extension Setup¶
The CivicOS browser extension is the primary user interface. It runs as a Chrome side panel showing civic data for your jurisdiction.
Install (End Users)¶
Chrome Web Store listing coming soon.
For now, install from source:
-
Clone the repository and build:
-
Open Chrome and go to
chrome://extensions - Enable Developer mode (top right toggle)
- Click Load unpacked and select
apps/civicos-extension/dist - Click the CivicOS icon in your toolbar, then Open City Pulse
What You'll See¶
The side panel shows collapsible sections:
- Meetings — Upcoming council meetings with dates, locations, and agendas
- Agenda Items — Current items with AI-enriched summaries, voice counts, and stance buttons
- Decisions — Past decisions with outcomes and vote records
- Issue Map — Community issues (311/SeeClickFix) plotted geographically
- Budget — Municipal budget breakdown by department
- Initiatives — Community-submitted initiatives with attestation badges
Identity¶
The extension manages a local Nostr identity (secp256k1 Schnorr keys):
- Click the extension icon and go to Settings
- Under Identity, create a new identity or import from a recovery phrase (BIP-39 mnemonic)
- Set a password to encrypt the key (stored in
chrome.storage.local, never leaves your device) - Unlock at the start of each session — lock state clears when the browser closes
The extension also acts as a NIP-07 provider, injecting window.nostr for compatible websites.
Voice (Stances)¶
On any agenda item, you can express: - Support — you're in favor - Oppose — you're against - Watching — you're tracking but not taking a position
Stances are stored locally and submitted to the CivicOS relay with your Nostr signature.
Settings¶
Access via the extension icon > Settings:
- Jurisdiction — Select your active city
- AI Provider — Choose from: CivicOS proxy (default, no key needed), Claude, OpenAI, Gemini, Ollama (local), or Chrome Nano (on-device)
- Theme — Light, dark, or auto
- Civic Journal — Local markdown notes that feed into AI context
- Profile — Name, neighborhood, interests (stored locally only)
- Endpoints — API server, relay URL, personal MCP server URL
Attestation¶
If you receive a single-use attestation code from an administrator:
- Go to Settings > Identity
- Enter the code and click Redeem
- The extension signs a Nostr attestation event and submits it to the relay
- Your voice submissions will include the attestation proof