README.md

March 22, 2026 ยท View on GitHub

๐Ÿšง Work in Progress (WIP)

Project Status: WIP - Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.

โš”๏ธ Strategy Council

AI-powered strategic advisory council โ€” offline, private, multi-agent simulation

License: AGPL-3.0 Python 3.11+ Vue.js 3 FastAPI Docker Tauri 2.0
Offline First No Cloud Required Ollama Neo4j


Strategy Council runs a structured war-game simulation entirely on your machine. You describe a scenario; a council of autonomous AI agents โ€” each embodying a distinct strategic doctrine from history's greatest thinkers โ€” debates it, challenges each other's positions, and produces synthesized recommendations.

Zero data leaves your machine. Ever.

Key Features

  • 5 AI Strategist Advisors โ€” Sun Tzu, Chanakya, Marcus Aurelius, Machiavelli, and Clausewitz, each reasoning from their embedded source texts
  • Multi-Agent Debate Simulation โ€” Structured multi-round deliberation powered by CAMEL-AI/OASIS multi-agent patterns
  • 100% Offline โ€” Zero Cloud Dependency โ€” All LLM inference runs locally via Ollama on an internal Docker network
  • Knowledge Graph Visualization โ€” Interactive D3.js force-directed graph with Neo4j backend and visual diff after variable injection
  • Red Team Agent โ€” Devil's advocate that stress-tests the emerging consensus in final rounds
  • Voice Interface โ€” Offline Whisper STT + Coqui TTS with distinct voices per strategist
  • Immutable Audit Trail โ€” SHA-256 hash-chained session logs with PDF/JSON/Markdown export
  • 8 Scenario Templates โ€” Pre-built templates for common strategic challenges
  • Tauri Native Desktop App โ€” Lightweight native desktop shell with system tray integration

Quick Start

Prerequisites

  • Docker Desktop (or Docker Engine + Docker Compose)
  • 8 GB RAM minimum (16 GB+ recommended)

1. Clone & Install

git clone https://github.com/gtm-k/strategy-council.git
cd strategy-council

2. Configure Environment

# Copy environment configuration (first time only)
cp .env.example .env

Note: The installer scripts do this automatically. If running Docker Compose manually, copy .env first.

3. Launch

# macOS / Linux
chmod +x installer/install.sh
./installer/install.sh
# Windows (double-click or run from terminal)
installer\install.bat
# Or from PowerShell:
.\installer\install.ps1

Or manually with Docker Compose:

docker compose up -d --build

4. Open

Navigate to http://localhost:3000 โ€” the Council is ready.

On first launch, Ollama will pull the LLM model automatically (this takes a few minutes depending on your hardware tier). Once loaded, create a new session, pick a scenario template or write your own, and start the deliberation.

Hardware Requirements

TierRAMVRAMModelSpeed
Laptop (CPU)8โ€“16 GBNoneQwen3-7B-Q4~8 tok/s
Laptop (GPU)16 GB8 GBQwen3-14B-Q5~18 tok/s
Workstation32 GB16 GBQwen3-32B-Q4~12 tok/s
Power Station64 GB+24 GB+Llama3.1-70B-Q5~10 tok/s

Hardware detection is automatic. Override in Settings or council_config.yaml if needed.

The Council

StrategistSource DoctrineFocus
Sun TzuArt of WarInformation asymmetry, deception, force economy
ChanakyaArthashastraStatecraft, intelligence networks, escalation strategy
Marcus AureliusMeditationsResilience, long-game ethics, adversity response
MachiavelliThe PrinceRealpolitik, power consolidation, coalition management
ClausewitzOn WarCenter of gravity, fog of war, strategic friction

Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Tauri Desktop Shell                    โ”‚
โ”‚                  (Native Window + Menu)                   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                          โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚   Frontend    โ”‚    โ”‚   Backend    โ”‚    โ”‚  Ollama   โ”‚  โ”‚
โ”‚   โ”‚  Vue.js 3     โ”‚โ—„โ”€โ”€โ–บโ”‚  FastAPI     โ”‚โ—„โ”€โ”€โ–บโ”‚  Local    โ”‚  โ”‚
โ”‚   โ”‚  Tailwind CSS โ”‚    โ”‚  Python      โ”‚    โ”‚  LLM +    โ”‚  โ”‚
โ”‚   โ”‚  D3.js Graph  โ”‚    โ”‚              โ”‚    โ”‚  Embed    โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚          โ”‚                    โ”‚                           โ”‚
โ”‚          โ”‚    WebSocket       โ”‚                           โ”‚
โ”‚          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค                           โ”‚
โ”‚                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”               โ”‚
โ”‚                    โ”‚                     โ”‚               โ”‚
โ”‚          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”‚
โ”‚          โ”‚    SQLite DBs    โ”‚  โ”‚     Neo4j CE     โ”‚      โ”‚
โ”‚          โ”‚  Audit + Memory  โ”‚  โ”‚  Knowledge Graph โ”‚      โ”‚
โ”‚          โ”‚  (local fallback)โ”‚  โ”‚  + Vector Index  โ”‚      โ”‚
โ”‚          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚
โ”‚                                                          โ”‚
โ”‚          Docker Compose (council_net bridge)              โ”‚
โ”‚          internal: true โ€” zero cloud dependency          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
LayerTechnology
Desktop ShellTauri 2.0 (Rust)
FrontendVue.js 3 + Vite + Tailwind CSS + D3.js
BackendFastAPI (Python 3.11+)
LLM InferenceOllama (local, OpenAI-compatible API)
Knowledge GraphNeo4j Community Edition + APOC
Embeddingsnomic-embed-text (768-dim, via Ollama)
Audit TrailSQLite + SHA-256 hash chain
VoiceWhisper (STT) + Coqui TTS
OrchestrationDocker Compose (internal bridge network)

Data Sovereignty

All services communicate over a Docker bridge network configured with internal: true. This means:

  • No DNS resolution outside the container network
  • No HTTP/HTTPS egress to the internet
  • All LLM inference happens locally via Ollama
  • Verified with tcpdump before each release โ€” zero external packets

Scenario Templates

TemplateDescription
Competitive EntryA funded competitor enters your core market โ€” defend your position
Market ExpansionEvaluate entry into a new geography, vertical, or customer segment
Crisis ResponseManage an acute crisis threatening reputation, operations, or survival
M&A DefenseRespond to an unsolicited acquisition or hostile takeover bid
Product LaunchPlan the strategic launch of a major new product or platform
Coalition BuildingForm alliances, partnerships, or industry coalitions for shared objectives
Regulatory ChallengeNavigate new regulations or compliance requirements impacting your business
Talent WarCompete for critical human capital in a tight labor market

Configuration

The main configuration file is council_config.yaml:

council:
  default_advisors: [sun_tzu, chanakya, marcus_aurelius, machiavelli, clausewitz]
  default_rounds: 8
  red_team: enabled

hardware:
  tier: workstation       # auto-detected
  model: qwen3-32b-q4    # auto-selected

voice:
  enabled: true
  activation: push_to_talk

See .env.example for all environment variables. Copy to .env and adjust for your setup.

Development

Backend

cd backend
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 5001 --reload

Frontend

cd frontend
npm install
npm run dev

Docker (Full Stack)

docker compose up -d --build

Running Tests

cd backend
python -m pytest tests/ -v

Adding a New Doctrine Pack

No code changes required โ€” the system auto-discovers new personas:

  1. Create a YAML persona file in backend/council/personas/
  2. Create a doctrine pack directory in backend/council/doctrine_packs/
  3. Add the source text as source.txt

API Reference

MethodEndpointDescription
POST/api/sessionsCreate new council session
GET/api/sessionsList all sessions
GET/api/sessions/{id}Get session details
POST/api/sessions/{id}/startStart deliberation
POST/api/sessions/{id}/injectVariable injection
GET/api/sessions/{id}/reportGet council report
GET/api/sessions/{id}/auditGet audit trail
POST/api/sessions/{id}/exportExport (PDF/JSON/MD)
GET/api/personasList strategists
GET/api/templatesList scenario templates
GET/api/configGet configuration
PUT/api/configUpdate configuration
POST/api/voice/sttSpeech to text
POST/api/voice/ttsText to speech
WS/ws/sessions/{id}Real-time simulation stream

Contributing

Contributions welcome! See CONTRIBUTING.md for development guidelines, code style, and pull request expectations.

Security

Strategy Council is designed as an offline-first application with zero external network dependencies. See SECURITY.md for our full security policy, data sovereignty guarantees, and vulnerability reporting process.

To report a vulnerability, email security@strategycouncil.dev or use GitHub's private security advisory feature.

License

This project is licensed under the GNU Affero General Public License v3.0.

Acknowledgments

  • MiroFish-Offline by nikmcfly โ€” Production utilities layer (LLM client, Neo4j storage, embeddings, NER, hybrid search, retry logic, file parser, D3.js graph visualization). Licensed under AGPL-3.0.
  • MiroFish โ€” Original social simulation engine
  • CAMEL-AI โ€” Multi-agent simulation patterns
  • Ollama โ€” Local LLM inference
  • Neo4j Community Edition โ€” Knowledge graph storage
  • Tauri โ€” Native desktop application framework
  • Doctrine texts sourced from public domain translations