README.md

March 19, 2026 · View on GitHub

The CISO Council

The CISO Council

Can't afford a 7-figure CISO? Assemble a 6-member AI security council instead.

Python 3.10+ MIT License Zero Cost 6 Models Inspired by Karpathy

Quick StartHow It WorksThe CouncilModelsSecurityLinkedIn


How It Works

Instead of asking a security question to your favourite LLM, you assemble a council of six AI models, each embodying a distinct cybersecurity leadership persona with their own risk appetite, organisational context, and regulatory lens. Your query goes to all six independently, a scoring engine evaluates each response across five dimensions, and a Chief Arbiter synthesises the final verdict.

Stage 1: Independent Deliberation. Your cybersecurity dilemma is given to all 6 council members individually. Each responds from their persona's perspective: a startup CISO reasons differently from a bank CRO, a DPO prioritises differently from a Head of Internal Audit.

Stage 2: Multi-Dimensional Scoring. Each response is scored by a separate model across five dimensions: Regulatory Defensibility, Practicality, Board-Readiness, Specificity, and Risk Quantification. No self-grading: the scoring model is independent of the council members.

Stage 3: Consensus and Dissent. The Chief Arbiter analyses all scored responses and identifies where the council agrees, where they split, and what those disagreements reveal about the decision's inherent ambiguity.

Stage 4: Board-Ready Report. Export a clean PDF report with the full council deliberation, individual scores, consensus positions, dissenting views, and the Chief Arbiter's recommendation.

This is not a chatbot. It is a cybersecurity advisory board that runs on localhost.


The War Room

The CISO Council War Room

The CISO Council runs as a local web application with a dark, command-centre-style interface. Select a pre-built scenario or type your own cybersecurity dilemma, hit "Convene Council", and watch six AI security leaders deliberate in real time.

Features

FeatureDescription
🎭 6 AI PersonasEach with distinct risk appetite, org context, and regulatory lens
🤖 Multi-ModelUses different AI models from different providers for genuine diversity
📊 5-Dimension ScoringRegulatory Defensibility, Practicality, Board-Readiness, Specificity, Risk Quantification
⚖️ Chief ArbiterIndependent model synthesises the final verdict from all responses
🤝 Consensus/DissentIdentifies where the council agrees and where they split
🔍 Ambiguity AnalysisReveals what disagreements tell you about the decision's complexity
✍️ Custom ScenariosType any cybersecurity dilemma directly into the War Room
📄 PDF ExportBoard-ready report with full deliberation, scores, and recommendations
💰 Zero CostRuns entirely on free-tier API keys
🔒 Fully LocalNothing leaves your machine except API calls to your configured providers

The Council

Six personas, each with a different risk appetite, organisational context, and decision-making style.

NameRoleSectorRisk AppetiteRegulatory Focus
🟣Divya SharmaCISOFintech Startup🟥🟥🟥🟥⬜ TolerantSOC 2, PCI DSS, GDPR, DPDP
🟢Marcus ChenData Protection OfficerHealthtech🟩🟩⬜⬜⬜ ConservativeGDPR, EU AI Act, NIS2, ISO 27701
🔵Sarah Al-RashidChief Risk OfficerBanking🟩⬜⬜⬜⬜ Ultra-ConservativeBasel III, DORA, SOX, ISO 31000
🟡James OkaforHead of Internal AuditManufacturing🟧🟧🟧⬜⬜ ModerateISO 27001, NIST CSF, SOC 2, COBIT
Elena VoronovaCISOEnterprise SaaS🟧🟧🟧⬜⬜ ModerateSOC 2, ISO 27001, FedRAMP, NIST 800-53
🔴Dr. Tomoko NakamuraHead of AI GovernanceTechnology🟩🟩⬜⬜⬜ ConservativeEU AI Act, ISO 42001, NIST AI RMF

Quick Start

1. Clone

git clone https://github.com/KunalCyber/The-CISO-Council.git
cd The-CISO-Council

2. Install

python -m venv venv
source venv/bin/activate        # macOS/Linux
# venv\Scripts\activate         # Windows
pip install -r requirements.txt

3. Get Free API Keys

ProviderFree TierGet Your Key
🔷 Google AI Studio~500 requests/dayaistudio.google.com/apikey
Groq14,400 requests/dayconsole.groq.com/keys
🔶 Mistral1B tokens/monthconsole.mistral.ai/api-keys
🧠 CerebrasGenerous free tiercloud.cerebras.ai

You only need 2 providers minimum to run a council session. Start with Google and Groq.

4. Configure

cp .env.example .env        # Add your API keys
cp config.yaml.example config.yaml

5. Launch the War Room

python -m council serve

Open http://localhost:8000 in your browser. Select a scenario or type your own. Hit "Convene Council".


🏢 Production Setup (Best Results)

For serious decision support, use frontier models. The quality of deliberation is dramatically better.

Council SeatProviderModelWhy
Divya SharmaAnthropicclaude-opus-4Deepest reasoning, most nuanced analysis
Marcus ChenOpenAIgpt-4oStrong regulatory knowledge, structured output
Sarah Al-RashidGooglegemini-2.5-proExcellent quantitative reasoning, large context
James OkaforAnthropicclaude-sonnet-4.6Fast, high-quality, cost-effective
Elena VoronovaxAIgrok-3Independent reasoning, contrarian perspectives
Dr. NakamuraOpenAIo3Superior reasoning for complex governance questions
Scoring ModelAnthropicclaude-sonnet-4.6Best balance of reasoning depth and speed for evaluation

💡 The scoring model is the most important model choice. It evaluates every council member's response and generates the consensus/dissent analysis. A stronger scoring model produces dramatically more accurate and useful verdicts.

🆓 Free Tier Setup (Getting Started)

Start here. Zero cost, works out of the box.

Council SeatProviderModelCost
Divya SharmaGooglegemini-2.5-flashFree
Marcus ChenGroqllama-3.3-70b-versatileFree
Sarah Al-RashidMistralmistral-small-latestFree
James OkaforGroqmixtral-8x7b-32768Free
Elena VoronovaGooglegemini-2.5-flash-liteFree
Dr. NakamuraCerebrasllama3.1-8bFree
Scoring ModelGooglegemini-2.5-flashFree

🔄 Switching to Production

  1. Get API keys from the providers you need:
ProviderWhat You GetSign Up
AnthropicClaude Opus 4, Claude Sonnet 4.6console.anthropic.com
OpenAIGPT-4o, o3platform.openai.com/api-keys
xAIGrok-3console.x.ai
GoogleGemini 2.5 Pro (same key from free tier)Already set up
  1. Add the new keys to your .env:
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
XAI_API_KEY=xai-...
GOOGLE_API_KEY=already set from free tier
  1. Edit config.yaml: comment out the free tier section and uncomment the production section. Both blocks are ready in the file, just swap which one is active.

  2. Restart: python -m council serve

💡 You can mix and match. Use frontier models for 3 seats and free models for the other 3. Use a paid scoring model with free council members. Any combination works.


Scoring Dimensions

Every council response is evaluated independently on five dimensions:

DimensionWhat It MeasuresScore Range
📋 Regulatory DefensibilityWould this position hold up under regulatory scrutiny?1-10
🔧 PracticalityCan this be implemented with realistic resources?1-10
🏛️ Board-ReadinessCould you present this to a board without caveats?1-10
🎯 SpecificityConcrete actions or just "conduct a risk assessment"?1-10
📈 Risk QuantificationDoes it frame risk in business terms?1-10

Built-in Scenarios

DomainScenarioWhat It Tests
🚨 Incident ResponseThird-party vendor breach with customer data exposureNotification timing, vendor management, board communication
⚖️ Risk AcceptanceAccepting residual risk in accelerated cloud migrationRisk thresholds, compensating controls, audit implications
🤖 AI GovernanceDeploying AI credit scoring model with known demographic biasEU AI Act compliance, bias thresholds, phased deployment

Plus: type any cybersecurity dilemma directly into the War Room's custom scenario input.


Security

PrincipleImplementation
🔑 Keys stay localAll API keys in .env only, never committed, never logged, never exported
🏠 Runs on localhostNo public server, no external access
📡 No telemetryZero analytics, zero data collection, zero tracking
📄 Clean exportsPDF reports contain only scenario text and model responses, never credentials
🛡️ Sanitised errorsAPI keys are redacted from all error messages and logs
🚫 Gitignored.env, config.yaml, outputs/, .claude/ are all blocked from git

Project Structure

The-CISO-Council/
├── council/
│   ├── cli.py              # CLI with serve command
│   ├── config.py           # Configuration loader
│   ├── models.py           # Pydantic data models
│   ├── personas.py         # 6 council member definitions
│   ├── prompts.py          # System prompts and scoring rubrics
│   ├── providers.py        # Multi-provider LLM abstraction
│   ├── scoring.py          # 5-dimension scoring engine
│   ├── session.py          # Council session orchestrator
│   ├── report.py           # Report generator
│   ├── pdf_report.py       # Board-ready PDF export
│   └── server.py           # FastAPI server (War Room backend)
├── static/
│   ├── index.html          # War Room frontend
│   └── council-hero.png    # Landing page hero image
├── scenarios/              # YAML scenario bank
├── outputs/                # Generated reports (gitignored)
├── docs/                   # Write-up and documentation
├── .env.example            # API key template
├── config.yaml.example     # Council configuration template
├── requirements.txt
└── CLAUDE.md               # Project context for Claude Code

Contributing

We welcome contributions, particularly new scenarios, new personas, and provider integrations. See CONTRIBUTING.md for guidelines.


Inspired By

Andrej Karpathy's LLM Council for the original concept of assembling multiple LLMs to deliberate on hard questions. The CISO Council takes that idea and builds it into a complete cybersecurity decision-support tool with personas, scoring, consensus analysis, and board-ready exports.


Star this repo

Stars     Forks     Watchers

LinkedIn    GitHub

Built by Kunal RK
Taking the hardest security decisions and making them a council vote.