llm-council-setup 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Alexander Deja
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,228 @@
1
+ Metadata-Version: 2.4
2
+ Name: llm-council-setup
3
+ Version: 0.1.0
4
+ Summary: Local MCP server for the LLM Council workflow
5
+ Author: Alexander Deja
6
+ License: MIT
7
+ Project-URL: Repository, https://github.com/salutaris91/llm-council-mcp
8
+ Project-URL: Original idea, https://github.com/karpathy/llm-council
9
+ Requires-Python: >=3.10
10
+ Description-Content-Type: text/markdown
11
+ License-File: LICENSE
12
+ Requires-Dist: mcp>=1.2.0
13
+ Requires-Dist: httpx>=0.27.0
14
+ Requires-Dist: flask>=3.0.0
15
+ Requires-Dist: pydantic>=2.0.0
16
+ Requires-Dist: platformdirs>=4.0.0
17
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11"
18
+ Requires-Dist: tomli_w>=1.0.0
19
+ Dynamic: license-file
20
+
21
+ # LLM Council MCP (lokal, ohne Docker)
22
+
23
+ Ein schlanker, lokaler MCP-Server für deinen Mac, der den 3-Stufen-Workflow
24
+ von [llm-council-plus](https://github.com/DmitryBMsk/llm-council-plus)
25
+ nachbildet — mit den **exakten Original-Prompts**, direkt gegen OpenRouter,
26
+ ohne Docker/NAS-Abhängigkeit. Nutzbar aus Claude Code, Codex CLI und
27
+ Antigravity über MCP.
28
+
29
+ ## Was das ist (und was nicht)
30
+
31
+ `council_core.py` ist eine eigenständige Python-Portierung der 3 Stufen aus
32
+ `backend/council.py` und `backend/runtime_settings.py` des echten
33
+ llm-council-plus-Repos:
34
+
35
+ 1. **Stufe 1** — jedes Council-Modell beantwortet deine Frage unabhängig, parallel.
36
+ 2. **Stufe 2** — jedes Modell bewertet/rankt die anonymisierten Antworten der
37
+ anderen ("Response A", "Response B", ...), damit kein Modell seine eigene
38
+ Antwort erkennen und bevorzugen kann.
39
+ 3. **Stufe 3** — ein Chairman-Modell liest Stufe 1 + 2 und schreibt eine
40
+ finale, synthetisierte Antwort. Schlägt der Chairman fehl, probiert der
41
+ Code automatisch die anderen Council-Modelle als Ersatz-Chairman durch
42
+ (Fallback-Logik, 1:1 aus dem Original übernommen).
43
+
44
+ Die Prompt-Templates für alle 3 Stufen sind **wortwörtlich** aus
45
+ `backend/runtime_settings.py` kopiert (siehe `STAGE1_PROMPT_TEMPLATE`,
46
+ `STAGE2_PROMPT_TEMPLATE`, `STAGE3_PROMPT_TEMPLATE` in `council_core.py`),
47
+ ebenso die Default-Temperaturen (Stufe 1: 0.5, Stufe 2: 0.3, Stufe 3: 0.4)
48
+ und das OpenRouter-Aufruf-Schema (Retry mit Backoff bei 429).
49
+
50
+ **Bewusst weggelassen** (für ein schlankes, persönliches Tool nicht nötig):
51
+
52
+ - TOON-Encoding der Stufe-1/2-Daten (im Original nur eine
53
+ Token-Effizienz-Optimierung, ändert das Ergebnis nicht)
54
+ - Web-Suche / Tool-Ergebnisse in Stufe 1
55
+ - Editierbare Prompts/Temperaturen über die UI (siehe unten) — die bleiben
56
+ bewusst Konstanten in `council_core.py`, um die geprüfte Prompt-Treue zum
57
+ Original nicht versehentlich zu gefährden. Wer sie ändern will, editiert
58
+ die Datei direkt.
59
+ - Konversationsverlauf / Multi-Turn-Memory
60
+
61
+ Der Server hat **keinen eigenen Dateizugriff**. Das ist Absicht: das
62
+ aufrufende Tool (Claude Code, Codex, Antigravity) hat bereits Zugriff auf
63
+ deinen lokalen Code und übergibt relevanten Code/Kontext direkt als
64
+ Parameter (`code_context`) beim Tool-Aufruf — kein separater "Scout-Agent",
65
+ kein Ordner-Mounting nötig.
66
+
67
+ ## Setup auf dem MacBook
68
+
69
+ ```bash
70
+ cd llm-council-mcp
71
+ python3 -m venv venv
72
+ source venv/bin/activate
73
+ pip install -r requirements.txt
74
+
75
+ cp .env.example .env
76
+ # Öffne .env in einem Editor und trage deinen echten OPENROUTER_API_KEY ein.
77
+ # Nie den Key in einen Chat einfügen - nur lokal in die .env-Datei.
78
+ ```
79
+
80
+ Schneller Funktionstest ohne MCP-Client (optional):
81
+
82
+ ```bash
83
+ python3 -c "
84
+ import asyncio, council_core
85
+ async def main():
86
+ r = await council_core.run_full_council('Sage in einem Satz: 2+2?')
87
+ print(r['stage3']['response'])
88
+ asyncio.run(main())
89
+ "
90
+ ```
91
+
92
+ ## Setup-UI (empfohlen)
93
+
94
+ Statt `.env` von Hand zu editieren und die Registrierungsbefehle unten manuell
95
+ auszuführen, gibt es eine kleine lokale Weboberfläche dafür:
96
+
97
+ ```bash
98
+ python3 setup_ui.py
99
+ ```
100
+
101
+ Öffnet automatisch `http://127.0.0.1:5151` im Browser. Dort kannst du:
102
+
103
+ - OpenRouter-Key, Council-Modelle und Chairman-Modell setzen (schreibt in `.env`)
104
+ - pro Tool (Claude Code, Codex, Antigravity) per Knopfdruck installieren/entfernen,
105
+ mit Status-Anzeige, ob aktuell installiert
106
+
107
+ Läuft **nur lokal** (127.0.0.1, kein Netzwerkzugriff von außen) und **nur
108
+ solange das Terminal offen ist** — kein Hintergrunddienst. Mit Strg+C beenden,
109
+ wenn fertig. Der eigentliche `ask_council`-MCP-Server (`server.py`) ist davon
110
+ komplett unabhängig und läuft separat on-demand, wenn Claude Code/Codex/
111
+ Antigravity ihn brauchen.
112
+
113
+ **Wie die Buttons technisch funktionieren** (siehe `installer.py`), pro Tool
114
+ unterschiedlich, bewusst so gewählt:
115
+
116
+ - **Claude Code**: über die offizielle `claude mcp add`/`remove`-CLI — die
117
+ stabile, dokumentierte Schnittstelle. Setup-UI ruft diese Befehle für dich auf.
118
+ - **Codex**: direktes Schreiben in `~/.codex/config.toml` (Format laut aktueller
119
+ offizieller Doku verifiziert). **Achtung:** Beim Speichern wird die gesamte
120
+ Datei neu geschrieben — eigene Kommentare in dieser Datei gehen dabei verloren,
121
+ andere `[mcp_servers.*]`-Einträge bleiben aber erhalten.
122
+ - **Antigravity**: direktes Schreiben in `mcp_config.json`, da kein offizielles
123
+ CLI dafür existiert. Pfad ist im UI editierbar, falls der Standardpfad bei dir
124
+ abweicht (siehe Unsicherheiten unten).
125
+
126
+ Die manuellen Befehle unten funktionieren weiterhin identisch — die UI ist nur
127
+ eine Komfortschicht darüber, kein zweiter Mechanismus.
128
+
129
+ ## Registrierung in deinen 3 Tools (manuell, alternativ zur Setup-UI)
130
+
131
+ Bei allen drei brauchst du den **absoluten Pfad** zu `server.py` und idealerweise
132
+ zum `python3` aus deinem venv (`which python3` nach `source venv/bin/activate`).
133
+
134
+ ### Claude Code
135
+
136
+ ```bash
137
+ claude mcp add llm-council --scope user -- /absoluter/pfad/zu/venv/bin/python3 /absoluter/pfad/zu/llm-council-mcp/server.py
138
+ ```
139
+
140
+ `--scope user` macht den Server in allen Projekten verfügbar (nicht nur im
141
+ aktuellen). Mit `claude mcp list` prüfst du, ob er registriert ist.
142
+
143
+ ### Codex CLI
144
+
145
+ Codex unterstützt MCP-Server seit einiger Zeit offiziell (geprüft gegen die
146
+ aktuelle Doku auf developers.openai.com/codex/mcp). Zwei Wege, gleiches Ergebnis:
147
+
148
+ **Per CLI:**
149
+ ```bash
150
+ codex mcp add llm-council -- /absoluter/pfad/zu/venv/bin/python3 /absoluter/pfad/zu/llm-council-mcp/server.py
151
+ ```
152
+
153
+ **Oder manuell in `~/.codex/config.toml`:**
154
+ ```toml
155
+ [mcp_servers.llm-council]
156
+ command = "/absoluter/pfad/zu/venv/bin/python3"
157
+ args = ["/absoluter/pfad/zu/llm-council-mcp/server.py"]
158
+ ```
159
+
160
+ Mit `/mcp` in der Codex-TUI siehst du die aktiven Server.
161
+
162
+ ### Antigravity
163
+
164
+ Antigravity legt MCP-Server in einer `mcp_config.json` ab (laut aktueller
165
+ Doku/Community-Quellen typischerweise unter `~/.gemini/antigravity/mcp_config.json`,
166
+ erreichbar auch über Settings → Customizations → MCP Servers in der App).
167
+ **Unsicherheit:** Antigravity ist noch jung und der genaue Pfad kann sich je
168
+ Version/Update unterscheiden — schau im Zweifel direkt im Settings-Menü nach
169
+ dem Punkt "MCP Servers" / "Customizations", statt blind dem Pfad zu folgen.
170
+
171
+ ```json
172
+ {
173
+ "mcpServers": {
174
+ "llm-council": {
175
+ "command": "/absoluter/pfad/zu/venv/bin/python3",
176
+ "args": ["/absoluter/pfad/zu/llm-council-mcp/server.py"]
177
+ }
178
+ }
179
+ }
180
+ ```
181
+
182
+ ## Nutzung
183
+
184
+ Sobald registriert, kannst du in jedem der drei Tools sinngemäß sagen:
185
+
186
+ > Frag den Council: Sollten wir für den Cache Redis oder eine In-Memory-Lösung
187
+ > nehmen? Hier ist der relevante Code: [...]
188
+
189
+ Das Tool ruft `ask_council` mit `question` und `code_context` auf. Die Antwort
190
+ ist ein Markdown-Report: zuerst das Chairman-Fazit, danach die einzelnen
191
+ Stufe-1-Antworten zur Transparenz, danach (falls vorhanden) die Stufe-2-Rankings.
192
+
193
+ Ein Aufruf macht mehrere parallele + sequenzielle LLM-Calls und kann
194
+ **gut über eine Minute** dauern — bewusst gedacht für wichtige Einzel-
195
+ Entscheidungen, nicht für ständige Nutzung.
196
+
197
+ ## Bekannte Unsicherheiten / was du selbst prüfen solltest
198
+
199
+ - Die exakten OpenRouter-Modell-IDs (`openai/gpt-5.1`,
200
+ `google/gemini-3-pro-preview`, `anthropic/claude-sonnet-4.5`) stammen aus
201
+ den Defaults von llm-council-plus zum Zeitpunkt der Recherche. Falls
202
+ OpenRouter eine ID umbenennt oder ein Modell deprecated, schlägt der
203
+ jeweilige Call mit einer Fehlermeldung fehl (wird im Report angezeigt,
204
+ blockiert aber nicht die anderen Modelle) — einfach `COUNCIL_MODELS` in
205
+ `.env` anpassen.
206
+ - Die `codex mcp add`-Syntax wurde gegen die aktuelle Doku geprüft; sollte sie
207
+ sich geändert haben, hilft `codex mcp --help`.
208
+ - Antigravitys Config-Pfad/-Format wurde über Community-Quellen verifiziert,
209
+ nicht über eine offizielle, vollständig geladene Doku-Seite (die Seite ist
210
+ clientseitig gerendert und lieferte beim Abruf keinen Textinhalt) — im
211
+ Zweifel das Settings-Menü in der App selbst prüfen.
212
+ - Die Setup-UI schreibt `config.toml` (Codex) und `mcp_config.json`
213
+ (Antigravity) jeweils komplett neu. Bestehende Einträge anderer MCP-Server
214
+ bleiben erhalten, aber eigene Kommentare/Formatierung in `config.toml`
215
+ gehen beim Speichern verloren (TOML-Bibliotheken kennen keine Kommentare).
216
+ Falls dir das wichtig ist: Codex lieber weiterhin manuell editieren.
217
+ - Die `claude mcp remove ... --scope user`-Syntax wurde nicht live gegen eine
218
+ echte Installation getestet (kein `claude`-Binary in dieser Sandbox
219
+ verfügbar) — die UI zeigt die rohe Kommandozeilen-Ausgabe an, falls etwas
220
+ nicht wie erwartet läuft.
221
+
222
+ ## Credits
223
+
224
+ - **Originalidee:** Andrej Karpathy — [karpathy/llm-council](https://github.com/karpathy/llm-council)
225
+ - **Prompt-/Workflow-Vorlage:** portiert aus [DmitryBMsk/llm-council-plus](https://github.com/DmitryBMsk/llm-council-plus), einem Fork des Originals
226
+ - **Dieser MCP-Server:** Alexander Deja — [anderzlabs.de](https://www.anderzlabs.de/)
227
+
228
+ Die Prompts sind dem Original treu nachgebildet (Stage 1 & 2 wortgleich; Stage 3 auf Karpathys Original-Wortlaut zurückgeführt).
@@ -0,0 +1,208 @@
1
+ # LLM Council MCP (lokal, ohne Docker)
2
+
3
+ Ein schlanker, lokaler MCP-Server für deinen Mac, der den 3-Stufen-Workflow
4
+ von [llm-council-plus](https://github.com/DmitryBMsk/llm-council-plus)
5
+ nachbildet — mit den **exakten Original-Prompts**, direkt gegen OpenRouter,
6
+ ohne Docker/NAS-Abhängigkeit. Nutzbar aus Claude Code, Codex CLI und
7
+ Antigravity über MCP.
8
+
9
+ ## Was das ist (und was nicht)
10
+
11
+ `council_core.py` ist eine eigenständige Python-Portierung der 3 Stufen aus
12
+ `backend/council.py` und `backend/runtime_settings.py` des echten
13
+ llm-council-plus-Repos:
14
+
15
+ 1. **Stufe 1** — jedes Council-Modell beantwortet deine Frage unabhängig, parallel.
16
+ 2. **Stufe 2** — jedes Modell bewertet/rankt die anonymisierten Antworten der
17
+ anderen ("Response A", "Response B", ...), damit kein Modell seine eigene
18
+ Antwort erkennen und bevorzugen kann.
19
+ 3. **Stufe 3** — ein Chairman-Modell liest Stufe 1 + 2 und schreibt eine
20
+ finale, synthetisierte Antwort. Schlägt der Chairman fehl, probiert der
21
+ Code automatisch die anderen Council-Modelle als Ersatz-Chairman durch
22
+ (Fallback-Logik, 1:1 aus dem Original übernommen).
23
+
24
+ Die Prompt-Templates für alle 3 Stufen sind **wortwörtlich** aus
25
+ `backend/runtime_settings.py` kopiert (siehe `STAGE1_PROMPT_TEMPLATE`,
26
+ `STAGE2_PROMPT_TEMPLATE`, `STAGE3_PROMPT_TEMPLATE` in `council_core.py`),
27
+ ebenso die Default-Temperaturen (Stufe 1: 0.5, Stufe 2: 0.3, Stufe 3: 0.4)
28
+ und das OpenRouter-Aufruf-Schema (Retry mit Backoff bei 429).
29
+
30
+ **Bewusst weggelassen** (für ein schlankes, persönliches Tool nicht nötig):
31
+
32
+ - TOON-Encoding der Stufe-1/2-Daten (im Original nur eine
33
+ Token-Effizienz-Optimierung, ändert das Ergebnis nicht)
34
+ - Web-Suche / Tool-Ergebnisse in Stufe 1
35
+ - Editierbare Prompts/Temperaturen über die UI (siehe unten) — die bleiben
36
+ bewusst Konstanten in `council_core.py`, um die geprüfte Prompt-Treue zum
37
+ Original nicht versehentlich zu gefährden. Wer sie ändern will, editiert
38
+ die Datei direkt.
39
+ - Konversationsverlauf / Multi-Turn-Memory
40
+
41
+ Der Server hat **keinen eigenen Dateizugriff**. Das ist Absicht: das
42
+ aufrufende Tool (Claude Code, Codex, Antigravity) hat bereits Zugriff auf
43
+ deinen lokalen Code und übergibt relevanten Code/Kontext direkt als
44
+ Parameter (`code_context`) beim Tool-Aufruf — kein separater "Scout-Agent",
45
+ kein Ordner-Mounting nötig.
46
+
47
+ ## Setup auf dem MacBook
48
+
49
+ ```bash
50
+ cd llm-council-mcp
51
+ python3 -m venv venv
52
+ source venv/bin/activate
53
+ pip install -r requirements.txt
54
+
55
+ cp .env.example .env
56
+ # Öffne .env in einem Editor und trage deinen echten OPENROUTER_API_KEY ein.
57
+ # Nie den Key in einen Chat einfügen - nur lokal in die .env-Datei.
58
+ ```
59
+
60
+ Schneller Funktionstest ohne MCP-Client (optional):
61
+
62
+ ```bash
63
+ python3 -c "
64
+ import asyncio, council_core
65
+ async def main():
66
+ r = await council_core.run_full_council('Sage in einem Satz: 2+2?')
67
+ print(r['stage3']['response'])
68
+ asyncio.run(main())
69
+ "
70
+ ```
71
+
72
+ ## Setup-UI (empfohlen)
73
+
74
+ Statt `.env` von Hand zu editieren und die Registrierungsbefehle unten manuell
75
+ auszuführen, gibt es eine kleine lokale Weboberfläche dafür:
76
+
77
+ ```bash
78
+ python3 setup_ui.py
79
+ ```
80
+
81
+ Öffnet automatisch `http://127.0.0.1:5151` im Browser. Dort kannst du:
82
+
83
+ - OpenRouter-Key, Council-Modelle und Chairman-Modell setzen (schreibt in `.env`)
84
+ - pro Tool (Claude Code, Codex, Antigravity) per Knopfdruck installieren/entfernen,
85
+ mit Status-Anzeige, ob aktuell installiert
86
+
87
+ Läuft **nur lokal** (127.0.0.1, kein Netzwerkzugriff von außen) und **nur
88
+ solange das Terminal offen ist** — kein Hintergrunddienst. Mit Strg+C beenden,
89
+ wenn fertig. Der eigentliche `ask_council`-MCP-Server (`server.py`) ist davon
90
+ komplett unabhängig und läuft separat on-demand, wenn Claude Code/Codex/
91
+ Antigravity ihn brauchen.
92
+
93
+ **Wie die Buttons technisch funktionieren** (siehe `installer.py`), pro Tool
94
+ unterschiedlich, bewusst so gewählt:
95
+
96
+ - **Claude Code**: über die offizielle `claude mcp add`/`remove`-CLI — die
97
+ stabile, dokumentierte Schnittstelle. Setup-UI ruft diese Befehle für dich auf.
98
+ - **Codex**: direktes Schreiben in `~/.codex/config.toml` (Format laut aktueller
99
+ offizieller Doku verifiziert). **Achtung:** Beim Speichern wird die gesamte
100
+ Datei neu geschrieben — eigene Kommentare in dieser Datei gehen dabei verloren,
101
+ andere `[mcp_servers.*]`-Einträge bleiben aber erhalten.
102
+ - **Antigravity**: direktes Schreiben in `mcp_config.json`, da kein offizielles
103
+ CLI dafür existiert. Pfad ist im UI editierbar, falls der Standardpfad bei dir
104
+ abweicht (siehe Unsicherheiten unten).
105
+
106
+ Die manuellen Befehle unten funktionieren weiterhin identisch — die UI ist nur
107
+ eine Komfortschicht darüber, kein zweiter Mechanismus.
108
+
109
+ ## Registrierung in deinen 3 Tools (manuell, alternativ zur Setup-UI)
110
+
111
+ Bei allen drei brauchst du den **absoluten Pfad** zu `server.py` und idealerweise
112
+ zum `python3` aus deinem venv (`which python3` nach `source venv/bin/activate`).
113
+
114
+ ### Claude Code
115
+
116
+ ```bash
117
+ claude mcp add llm-council --scope user -- /absoluter/pfad/zu/venv/bin/python3 /absoluter/pfad/zu/llm-council-mcp/server.py
118
+ ```
119
+
120
+ `--scope user` macht den Server in allen Projekten verfügbar (nicht nur im
121
+ aktuellen). Mit `claude mcp list` prüfst du, ob er registriert ist.
122
+
123
+ ### Codex CLI
124
+
125
+ Codex unterstützt MCP-Server seit einiger Zeit offiziell (geprüft gegen die
126
+ aktuelle Doku auf developers.openai.com/codex/mcp). Zwei Wege, gleiches Ergebnis:
127
+
128
+ **Per CLI:**
129
+ ```bash
130
+ codex mcp add llm-council -- /absoluter/pfad/zu/venv/bin/python3 /absoluter/pfad/zu/llm-council-mcp/server.py
131
+ ```
132
+
133
+ **Oder manuell in `~/.codex/config.toml`:**
134
+ ```toml
135
+ [mcp_servers.llm-council]
136
+ command = "/absoluter/pfad/zu/venv/bin/python3"
137
+ args = ["/absoluter/pfad/zu/llm-council-mcp/server.py"]
138
+ ```
139
+
140
+ Mit `/mcp` in der Codex-TUI siehst du die aktiven Server.
141
+
142
+ ### Antigravity
143
+
144
+ Antigravity legt MCP-Server in einer `mcp_config.json` ab (laut aktueller
145
+ Doku/Community-Quellen typischerweise unter `~/.gemini/antigravity/mcp_config.json`,
146
+ erreichbar auch über Settings → Customizations → MCP Servers in der App).
147
+ **Unsicherheit:** Antigravity ist noch jung und der genaue Pfad kann sich je
148
+ Version/Update unterscheiden — schau im Zweifel direkt im Settings-Menü nach
149
+ dem Punkt "MCP Servers" / "Customizations", statt blind dem Pfad zu folgen.
150
+
151
+ ```json
152
+ {
153
+ "mcpServers": {
154
+ "llm-council": {
155
+ "command": "/absoluter/pfad/zu/venv/bin/python3",
156
+ "args": ["/absoluter/pfad/zu/llm-council-mcp/server.py"]
157
+ }
158
+ }
159
+ }
160
+ ```
161
+
162
+ ## Nutzung
163
+
164
+ Sobald registriert, kannst du in jedem der drei Tools sinngemäß sagen:
165
+
166
+ > Frag den Council: Sollten wir für den Cache Redis oder eine In-Memory-Lösung
167
+ > nehmen? Hier ist der relevante Code: [...]
168
+
169
+ Das Tool ruft `ask_council` mit `question` und `code_context` auf. Die Antwort
170
+ ist ein Markdown-Report: zuerst das Chairman-Fazit, danach die einzelnen
171
+ Stufe-1-Antworten zur Transparenz, danach (falls vorhanden) die Stufe-2-Rankings.
172
+
173
+ Ein Aufruf macht mehrere parallele + sequenzielle LLM-Calls und kann
174
+ **gut über eine Minute** dauern — bewusst gedacht für wichtige Einzel-
175
+ Entscheidungen, nicht für ständige Nutzung.
176
+
177
+ ## Bekannte Unsicherheiten / was du selbst prüfen solltest
178
+
179
+ - Die exakten OpenRouter-Modell-IDs (`openai/gpt-5.1`,
180
+ `google/gemini-3-pro-preview`, `anthropic/claude-sonnet-4.5`) stammen aus
181
+ den Defaults von llm-council-plus zum Zeitpunkt der Recherche. Falls
182
+ OpenRouter eine ID umbenennt oder ein Modell deprecated, schlägt der
183
+ jeweilige Call mit einer Fehlermeldung fehl (wird im Report angezeigt,
184
+ blockiert aber nicht die anderen Modelle) — einfach `COUNCIL_MODELS` in
185
+ `.env` anpassen.
186
+ - Die `codex mcp add`-Syntax wurde gegen die aktuelle Doku geprüft; sollte sie
187
+ sich geändert haben, hilft `codex mcp --help`.
188
+ - Antigravitys Config-Pfad/-Format wurde über Community-Quellen verifiziert,
189
+ nicht über eine offizielle, vollständig geladene Doku-Seite (die Seite ist
190
+ clientseitig gerendert und lieferte beim Abruf keinen Textinhalt) — im
191
+ Zweifel das Settings-Menü in der App selbst prüfen.
192
+ - Die Setup-UI schreibt `config.toml` (Codex) und `mcp_config.json`
193
+ (Antigravity) jeweils komplett neu. Bestehende Einträge anderer MCP-Server
194
+ bleiben erhalten, aber eigene Kommentare/Formatierung in `config.toml`
195
+ gehen beim Speichern verloren (TOML-Bibliotheken kennen keine Kommentare).
196
+ Falls dir das wichtig ist: Codex lieber weiterhin manuell editieren.
197
+ - Die `claude mcp remove ... --scope user`-Syntax wurde nicht live gegen eine
198
+ echte Installation getestet (kein `claude`-Binary in dieser Sandbox
199
+ verfügbar) — die UI zeigt die rohe Kommandozeilen-Ausgabe an, falls etwas
200
+ nicht wie erwartet läuft.
201
+
202
+ ## Credits
203
+
204
+ - **Originalidee:** Andrej Karpathy — [karpathy/llm-council](https://github.com/karpathy/llm-council)
205
+ - **Prompt-/Workflow-Vorlage:** portiert aus [DmitryBMsk/llm-council-plus](https://github.com/DmitryBMsk/llm-council-plus), einem Fork des Originals
206
+ - **Dieser MCP-Server:** Alexander Deja — [anderzlabs.de](https://www.anderzlabs.de/)
207
+
208
+ Die Prompts sind dem Original treu nachgebildet (Stage 1 & 2 wortgleich; Stage 3 auf Karpathys Original-Wortlaut zurückgeführt).