Open Council is a Tauri desktop app for personal decision support. It combines:
- long-running chat memory about the user (local markdown profile files),
- structured decision analysis (options, variables, recommendation),
- a multi-agent committee debate that stress-tests a decision from different viewpoints.
- Chat workspace for general conversation and context gathering.
- Decision workspace with:
- decision-specific chat,
- live structured summary panel (
options,variables,pros_cons,recommendation), - status progression through the decision lifecycle.
- Committee workflow:
- 5 debating agents (
rationalist,advocate,contrarian,visionary,pragmatist), - 1 moderator synthesis,
- quick and full debate modes,
- streamed tokens and persisted debate transcript.
- 5 debating agents (
- Outcome logging and reflection:
- user logs what happened after choosing,
- app sends a reflection prompt back through the assistant flow so profile memory can improve.
- Editable local files:
- profile memory markdown files,
- committee agent prompt markdown files,
- optional per-agent model overrides.
- Frontend: React 19, Vite, TypeScript, Tailwind CSS v4, Radix UI
- Desktop + backend: Tauri 2, Rust
- Storage:
- SQLite (
database.sqlite) for conversations, messages, decisions, debate rounds - local markdown files for profile and agent prompts
- local JSON config for API key/model settings
- SQLite (
- LLM routing: OpenRouter Chat Completions API (streaming + tool calls)
- Node.js 20+ and npm
- Rust stable and Cargo
- Tauri system prerequisites for your OS
- Windows: WebView2 runtime
- Install dependencies:
npm install- Start the desktop app:
npm run tauri devThis launches Vite at http://localhost:1420 and opens the Tauri window.
Port 1420 is fixed (strictPort: true).
- First run setup in Settings:
- add your OpenRouter API key (
openrouter.ai/keys), - choose a default model (for example
anthropic/claude-sonnet-4-5), - save.
Decisions move through these statuses:
exploring: decision context is still being collectedanalyzing: structured variables/options are taking shapedebating: committee debate is runningrecommended: recommendation is readydecided: user has made a choicereviewed: user logged the real-world outcome
The app uses Tauri app_data_dir.
On Windows this is typically:
%APPDATA%\com.opencouncil.app\
Key files/folders:
database.sqliteconfig.jsonprofile/*.mdagents/*.md
Notes:
config.jsonstores the OpenRouter API key and model settings locally.- Profile and agent files are editable from the app UI and via your file explorer.
npm run dev: Vite web dev server only (no Tauri backend process)npm run tauri dev: full desktop app dev modenpm run build: frontend production buildnpm run tauri build: desktop production build/bundlenpm run test: all frontend + backend testsnpm run test:all: same as abovenpm run test:frontend: Vitest frontend suitenpm run test:frontend:watch: Vitest watch modenpm run test:frontend:unit: frontend tests matchingunit_npm run test:frontend:integration: frontend tests matchingintegration_npm run test:frontend:e2e: Playwright testsnpm run test:backend: full Cargo test suite (src-tauri/Cargo.toml)npm run test:backend:unit: backend tests matchingunit_npm run test:backend:integration: backend tests matchingintegration_npm run test:backend:e2e: backend tests matchinge2e_
- Frontend integration/e2e tests mock Tauri
invokeso they can run in browser test environments. - Backend tests run against in-memory/temp SQLite and temp filesystem directories.
Release binaries are built by GitHub Actions on published GitHub Releases:
- workflow:
.github/workflows/release.yml - trigger:
release.published - targets: Linux x64, Windows x64, macOS arm64, macOS x64
Current CI config does not include code signing/notarization.