Alle wesentlichen Änderungen an clutch werden hier dokumentiert.
Das Format orientiert sich an Keep a Changelog.
- GitHub Actions CI Workflow (
.github/workflows/tests.yml) um Python 3.13 Matrix-Unterstützung (["3.10", "3.11", "3.12", "3.13"]) und automatisiertenruff check .Linter-Schritt gehärtet. - Python 3.13 Classifier (
"Programming Language :: Python :: 3.13") inpyproject.tomlergänzt. - Direkte Sicherheitskontakt-E-Mail (
security@ellmos.ai/support@lukasgeiger.com) inSECURITY.md(deutsch und englisch) integriert. - Automatisierte Metadaten- & Manifest-Paritätstestsuite in
tests/test_metadata.pyum CI-Matrix-, Ruff-Linting-, Pyproject-Klassifizierungs- und Sicherheitskontakt-Tests auf 7 Tests erweitert (338 Tests in Gesamt-Suite inkl. GPT-5.6 Cost-Routing-Suite).
llms.txt: Last-checked Timestamp auf2026-08-21und Test-Suite auf 338 Tests synchronisiert.- Shields.io-Badges in
README.md&README_de.mdauf 338 passed Tests aktualisiert. - Verifikation: 338/338 Pytest-Tests 100% grün,
compileall&ruff checkfehlerfrei.
- Automatisierte Metadaten- & Manifest-Paritätstestsuite in
tests/test_metadata.py(4/4 passed). - Shields.io-Badges für Local-First-Sicherheit, Version (0.4.0), Discovery (
llms.txt) und synchronisierte Pytest-Suite (314 passed, 100% grün) inREADME.mdundREADME_de.md. - Geschwisterwerkzeuge-Matrix für das gesamte
ellmos-ai-,dev-bricks- undopen-bricks-Ökosystem (coma,swarm-ai,system-explorer,policy-registry,sqlite-transit-sync,workflowhooker,memoryhooker,DevCenter,CodeBox) zweisprachig integriert. - Standardisierte bilingual-strukturierte
SECURITY.mdmit Local-First-Routing, Keyring-Credential-Speicherung, Null-Telemetrie und privater Schwachstellenmeldung. - Ruff-Linter-Konfiguration (
[tool.ruff]und[tool.ruff.lint], line-length 120, py310) inpyproject.toml.
llms.txt: Last-checked Timestamp auf2026-08-16und Test-Suite auf 314 Tests synchronisiert.tests/test_m4_cli.py,tests/test_m5a_session_store.py,tests/test_m5b_prompt_library.py: Unbenutzte Test-Variablen bereinigt;ruff check .100% sauber.- Verifikation: 314/314 Pytest-Tests 100% grün,
compileall&ruff checkfehlerfrei.
- GPT-5.6 Luna, Terra und Sol mit sechs Effort-Stufen, aktuellen Input-/Cached-Input-/Output-Preisen, Quellen, Preisversion und Frische-Signal katalogisiert.
- OpenAI-Motor auf die Responses API umgestellt; angeforderter und effektiver
Effort werden getrennt protokolliert.
max-delegatebleibt ein Orchestrierungshinweis und gelangt nie als API-Wert nach außen. - Zentrale Kostenberechnung für Cached Input, Cache-Schreibvorgänge, Langkontext oberhalb von 272.000 Input-Tokens, Standard/Fast, Tool-Gebühren und einmalig berechnete Reasoning-Tokens ergänzt. Fehlende Usage bleibt ausdrücklich unbekannt und ungemessen.
- SQLite-Telemetrie, Tankuhr, CLI-/Web-JSON und Statistik auf dieselbe Kostenquelle verdrahtet; bestehende Datenbanken werden additiv migriert.
- Empirisches Aufgabenklassen-Routing mit externen Qualitätslabels, erwarteten Kosten pro Erfolg einschließlich Retry/Fallback, Qualitäts- und Latenz-Gates, Pareto-Frontier sowie belegfreiem Cold-Start ergänzt.
- Zweisprachige Dokumentation, versionierte Eval-Profile, Kostenrechner und deterministisch generierte Preisgrafik ergänzt. Verifikation: 335 Pytests, Ruff, Compileall und Diff-Check grün.
- Discoverability & Marketing Audit (2026-08-04): Synchronized
llms.txtverification timestamp (2026-08-04) and pytest status (306 passed). Addedellmos-aiecosystem andopen-bricksumbrella badges toREADME.mdandREADME_de.md. Verified 306/306 Pytest unit tests (100% green).
- Gemini 3.7 Flash als bevorzugter Flash-Gang (2026-08-13). Neuer Gang
gemini-3.7-flash(Providergoogle, Modell-IDgemini-3.7-flash, G2, 1.048.576 Token Kontext,effortslow/medium/high). Anlass: Laut Nutzer ist die 3.7er-Generation stabiler und besser als die vorige [U 2026-08-13]; Modell-ID, Kontextfenster und Denkstufen sind gegen die Google-Doku verifiziert (catalog_source, geprüft am 2026-08-13).- Bevorzugung über die Katalogreihenfolge: Der Eintrag steht bewusst vor
gemini-flash(3.5). Bei gleicher Stufe gewinnt der zuerst eingetragene Gang, daher laufen Up- und Downshift in die Flash-Stufe jetzt auf 3.7.gemini-flash(3.5) wurde nicht entfernt und bleibt als Fallback erreichbar. Die Reihenfolge-Abhängigkeit ist im_docdes Gangs vermerkt und durch Tests abgesichert. - Keine Umgewichtung: Stufe (G2) und
staerkensind identisch zugemini-flash, damit sich Budget-Downshift und Zweck-Auswahl unbeteiligter Modelle (z.B.ollama-mistral,claude-sonnet) nicht verschieben; ein Regressionstest hält das fest. - Nur auf dem Google-Weg: Eine Live-Probe der installierten agy-CLI
(invalid-model-probe, 2026-08-13) listet weiterhin nur bis
gemini-3.6-flash. Einagy-gemini-3.7-flash-Gang wäre dort nicht ausführbar und wurde deshalb bewusst nicht angelegt; die agy-Familie bleibt unverändert. - Denkstufen:
effortsdokumentiert diethinking_level-Stufen des Modells. DerGeminiMotorreicht sie noch nicht an die API durch — die Reasoning-Tiefe steuert clutch weiterhin über das Gaspedal. - Preise: Eingetragen ist der Einführungspreis (0,75/3,75 USD je 1M
Token), der damit unter dem 3.5-Flash-Eintrag liegt. Ab 2027-01-01 gilt laut
Google 1,50/7,50 — dann in
getriebe.jsonnachziehen.
- Bevorzugung über die Katalogreihenfolge: Der Eintrag steht bewusst vor
- agy model registry and motor (2026-07-28): Six models live-verified against agy 1.1.8 are registered with effort variants and catalog provenance.
AgyCompanionMotorexecutes them throughcompanion-for-agy, maps Clutch effort levels to supported agy efforts, and keeps agy classified as an agentic CLI provider. - Aktueller Modellkatalog (2026-07-28): Claude Fable 5 ist als höchster
G5-Gang registriert. Die direkten Gemini-Gänge nutzen
gemini-3.5-flashundgemini-3.1-pro-preview; die nicht existente IDgemini-3.5-prowird nicht verwendet. - OpenAI-/Codex-Provider (2026-07-28):
OpenAIMotorerweitert den konfigurierbarenOpenAICompatibleMotor, nutztOPENAI_API_KEYundmax_completion_tokens. Registriert sind GPT-5.6 Sol, GPT-5.6 Terra und GPT-5.3-Codex mit aktuellen Katalogdaten. - Vollständiges Web-Settings-Panel (2026-07-28): Das einklappbare Panel
spiegelt nun sowohl
clutch keysals auchclutch config, zeigt erkannte Env-Key-Namen samt Quelle, zeigt niemals Credential-Werte und meldet Speicher-/Löschfehler sichtbar in der Oberfläche. Laufende API-Motoren lösen nicht explizit injizierte Credentials pro Verfügbarkeitscheck/Aufruf neu auf, sodass gespeicherte Keys ohne Serverneustart wirksam werden.
- README language parity (2026-08-01): Synchronized
README_de.mdwith the canonical English structure and restored byte-identical code and Mermaid blocks across the maintained EN/DE pair. - Discoverability & Mermaid Architecture (2026-07-26): Embedded Mermaid system architecture flowchart diagram, LLM-ready discovery badges, and GFM
> [!NOTE]callouts forllms.txtmachine-readable metadata in both English and German documentation. Updatedllms.txtverification timestamp to 2026-07-26 and verified 286 passing unit tests (100% green). - Discoverability & Marketing Refresh (2026-07-25):
llms.txtLast-checked Datum auf2026-07-25und 286 passing unit tests verifiziert. Visual Shields.io Badges (Pytest 286 passed, Multi-Provider, LLM-Readyllms.txt), KI/LLM-Integrationshinweise und Mermaid Systemarchitektur- & Datenfluss-Diagramm inREADME.mdundREADME_de.mdintegriert. - AI/LLM-Indexierung & Metadaten-Sync (2026-07-25):
llms.txtHeader aufLast-checked: 2026-07-25aktualisiert; Referenzhinweis aufllms.txtinREADME.mdundREADME_de.mdergänzt.
- Web-Token Auto-Generierung bei Loopback-Start (2026-07-28): Beim Aufruf von
serve()auf Loopback-Hosts (z. B.127.0.0.1) ohne gesetztesCLUTCH_WEB_TOKENwird nun automatisch ein sicheres Zufalls-Token (secrets.token_urlsafe(32)) generiert und in die UI (index.html) injiziert. Dadurch ist die Web-API auch im reinen Loopback-Betrieb vor unbefugten Zugriffen anderer lokaler Prozesse geschützt. - Web-API härtung (Code-Review 2026-07-04). Die FastAPI-Web-UI war ohne
jede Zugriffskontrolle erreichbar — inkl. Credential-CRUD (
POST/DELETE /api/credentials) und Config-Schreiben (POST /api/config).- DNS-Rebinding-Schutz:
TrustedHostMiddlewareakzeptiert nur noch Loopback-Host-Header (localhost/127.0.0.1/::1, plus den Bind-Host bei absichtlichem Netzwerk-Bind). Eine bösartige Webseite kann die lokale API nicht mehr per Rebinding auslesen. - Optionales Token-Gate: Ist
CLUTCH_WEB_TOKENgesetzt, erfordert jeder/api/*-ZugriffAuthorization: Bearer <token>(oderX-Clutch-Token); die UI-Seite selbst bleibt ungeschützt erreichbar. - Bind-Schutz:
serve()verweigert den Start an einem nicht-loopback-Host (z. B.--host 0.0.0.0) ohne gesetztesCLUTCH_WEB_TOKENund warnt beim Netzwerk-Bind. - CORS:
allow_credentialsaufFalse(keine Cookie-Auth), Origins auf die tatsächliche UI-Origin (mit Port) beschränkt.
- DNS-Rebinding-Schutz:
- credentials.json wird atomar mit 0600 angelegt (
os.openmit engem Modus stattwrite_text+ nachträglichemchmod) — kein Zeitfenster mehr mit zu weiten Rechten bei Neuanlage; das Elternverzeichnis wird auf 0700 gesetzt.
- Circuit-Breaker:
consecutive_failureswird jetzt tatsächlich ausgewertet. Die aus der Fitness-Config geladene Schwelle (max_fehler_serie, Default 3) war nie referenziert; nur das Stundenlimit (5/h) löste aus. Fällt ein Modell bei niedriger Anfragefrequenz mit 3–4 Fehlern in Folge aus, öffnet der Breaker nun, statt weiter blind auf das kaputte Modell zu routen. - SQLite unter dem Web-Server: WAL-Modus + 15 s Busy-Timeout. Gleichzeitige
/api/chat-Requests schrieben ohne WAL in dieselbe DB (DELETE-Journal sperrt exklusiv) und konnten sporadischdatabase is lockedauslösen.
- PyPI-Vorbereitung (noch nicht veröffentlicht): Distributionsname
clutch-router(Import bleibtclutch;clutchauf PyPI vergeben). package-data erweitert umlocales/*.json+web/*.html(sonst fehlten i18n + Web-UI im pip-Paket). Classifiers/ keywords/URLs ergänzt. GitHub-Actionpublish.yml(PyPI Trusted Publishing/OIDC, triggert aufv*-Tags) — Release erfolgt erst nach der Testphase + einmaliger PyPI-Publisher-Einrichtung.
- Web-UI: CLI-/Env-Spiegel (M6+): Endpunkte
GET/POST /api/credentials+DELETE /api/credentials/{name}undGET/POST /api/config; die vollständige Oberfläche ist im aktuellen Unreleased-Abschnitt dokumentiert. Tests intest_m12_web_settings.py(inkl. Wert-Leak-Schutz).
- Changelog-Hygiene: Die historische
0.3.0-rc1-Sektion steht jetzt vor dem finalen0.3.0-Release, und die initiale Testreferenz nennt die tatsächliche Dateitests/test_clutch.py. - Ollama-Remote-Host wurde ignoriert:
OllamaMotorlief bei Ausführung und Verfügbarkeitscheck stets gegen die bei Konstruktion gesetzte Basis-URL (Defaultlocalhost:11434) und ignorierte den per Discovery gesetztenGang.endpoint. Dadurch war ein entdeckter Remote-Ollama-Host (z. B. im VPN) nie erreichbar. Jetzt bevorzugt der MotorGang.endpointund fällt nur ohne Endpoint auf die Basis-URL zurück;MotorBlock.ausfuehrenprüft die Ollama-Verfügbarkeit gegen denselben Ziel-Host. Regressionstests intest_ollama_endpoint.py.
- Ollama-Timeout konfigurierbar: Der bisher fest auf 60 s gesetzte Basis-Timeout
des
OllamaMotorist jetzt über den Konstruktor-Parametertimeout_basisbzw. die Env-VariableCLUTCH_OLLAMA_TIMEOUT(Sekunden) einstellbar. Grosse lokale Modelle (30B+) brauchen beim Kaltstart länger als der Cloud-orientierte Default; ohne Override bleibt das Verhalten unverändert (60 s). Tests intest_ollama_endpoint.py.
Großer Ausbau von der Library zur Routing-Anwendung (CLI + Web + API), Kimi-Anbindung, Zweck-/bildbewusstes Routing, Modell-Discovery, Service-Layer, Credential-Store und i18n (en/de/es/zh/ja/ru). 270 Tests grün.
- App-Ausbau (DEVELOPMENT_PLAN.md M0–M7): clutch wird von der Library zur Routing-Anwendung.
- M0 Engine:
scorer.py(Komplexitäts-Score 0–100 + Zweck-/Modalitätserkennung),partner.py(Cross-Agent-Delegation mit Budget-Zonen + Mensch-Eskalation), Tankuhr/Token-Fluss im Fahrer verdrahtet, Budget-Zonen-SSOT (orange=G1–G2), DB-Pfad nach~/.clutch(nicht ins Repo). - M1 Kimi-API:
OpenAICompatibleMotor+KimiApiMotor(api.moonshot.ai/v1,MOONSHOT_API_KEY), Gängekimi-api-code/kimi-api-visionmit voller Usage. - M2 Zweck-Routing: Gang-Auswahl nach
staerken-Tags (coding/vision/...), bildbewusst (Bild-Anhang → Vision-Modell), respektiert Budget-Limit. - M3 Discovery:
discovery.py(Ollama/api/tagslokal+remote,/v1/models,custom_models.txt). - M4 CLI:
cli.py+[project.scripts] clutch(route/models/config/stats/run/chat). - M5 Service-Layer:
session_store.py(Sessions+Verlauf),prompt_library.py(+PromptBoard-Import),profile_manager.py(user/zweck/toolset-Profile + Systemprompt-Toggle),chat_runtime.py(Konversation über dem Router) +CLUTCH.md(mitlieferbarer Systemprompt). - M7 Toolsets:
toolsets.py(Tool-Permissions default-deny, ControlCenter-Katalog-Bridge, versendbares Toolset-Paket). - M6 Web-UI:
webapp.py(FastAPI, optionale Dependencyclutch[web]),web/index.html(Vanilla-JS-Chat mit Bild-Upload, Sessions, Stats, Systemprompt-Toggle),clutch serve --web. - M8: Migrationsanleitung „BACH übernimmt clutch" (
docs/BACH_MIGRATION.md, gegatet). - Phase 9 /bugsweep: 3 Reviewer-Agenten (Security/Routing/Robustheit) → Fixes:
zone_nummer fail-safe (unbekannt→restriktivste Zone), untrusted Web/API schließt agentische
CLI-Motoren mit Auto-Approve aus, Vision-Warnung wenn kein Vision-Modell, webapp generische
500-Fehler + Upload-Limit (10 MB),
loesche()cursor-in-with, import_promptboard robust gegen kaputtes/fehlendes JSON, LIKE-Escape in Prompt-Suche. Regressionstests intest_m9_bugsweep_fixes.py. - Credentials-Store:
credentials.py— lokaler API-Key-Speicher~/.clutch/credentials.json(zero-dep, 0600-Rechte). Auflösung Env → clutch-Store → BACH-~/.credentials/<name>(Interop). Motoren (Anthropic/Gemini/Kimi-API) nutzen den Resolver; CLIclutch keys set|list|remove(Werte nie angezeigt). Kimi-API live verifiziert (kimi-k2.7-code → PONG, Usage erfasst). - Tests: +~160 (test_m0..m10), Gesamtsuite 236 passed (
py -m pytest).
- M0 Engine:
- Kimi-Anbindung: Drei Gänge für Moonshots Kimi ergänzt. (1)
kimi-cliundkimi-codeals agentische CLI-Motoren (KimiCliMotor/KimiCodeMotorinmotorblock.py) — Subprozess im Print-Modus, Login via Moonshot-Account (kein API-Key), ohne Token-/Usage-Tracking. (2)ollama-kimi-k2(kimi-k2.7-code:cloud) als Rohmodell über den vorhandenenOllamaMotor— Token-Usage wird erfasst; läuft über Ollama Cloud (nicht lokal). Neue Tests intests/test_kimi_motoren.py(Gang-Registrierung, Factory-Mapping, argv/Output-Parsing per gemocktem Subprozess, Fehlerpfad). GLOSSARY.mdfür die deutschen Code-Begriffe der Auto-Metapher.- GitHub Actions Test-Workflow für Python 3.10 bis 3.12.
- README-Quickstart, Projektstruktur und Testanleitung an das tatsächliche Paket
clutchangepasst. - Community-Workflows auf aktuelle Actions-Versionen aktualisiert.
- Default-Konfiguration in
clutch/config/paketiert, damit Wheel-Installationen die Routing-Defaults enthalten. - Pytest-Konfiguration auf
tests/begrenzt, damit manuelle Provider-Smokes im Repo-Root nicht als Unit-Tests gesammelt werden. TODO.mdum einen aktuellen Public-Readiness-Status ergänzt und.gitignoreum ein explizites*.pyc-Muster erweitert.llms.txtumLast-checked, Audience und Suchphrasen für LLM-/Crawler-Discovery ergänzt.
- Repo-Referenzen auf
ellmos-ai/clutchaktualisiert - BACH-interne Dokumente (BACH_EINHAENGEPUNKTE.md, BACH_INTEGRATION.md) entfernt
- Personenbezogene Daten bereinigt
.gitignoreum BACH-Dateien ergänzt
Erster öffentlicher Release als ellmos-ai/clutch.
- Provider-neutrale LLM-Orchestration mit Auto-Metapher (Fahrer, Getriebe, Kupplung, etc.)
- Multi-Provider-Support: Anthropic (Claude), Google (Gemini), Ollama (lokal), Claude Code
- Streckenanalyse (Task-Klassifikation) mit 10 Streckentypen (Feldweg bis Langstrecke)
- Getriebe: Modell-Registry mit 8 vordefinierten Gängen (G1--G5)
- Kupplung: Automatischer Modellwechsel basierend auf Strecke, Budget und Health
- Gas/Bremse: Reasoning-Level-Steuerung (0%--100%)
- Tankuhr: Budget-Tracking mit 4-Zonen-System (green/yellow/orange/red)
- Bordcomputer: Health-Monitor mit Circuit-Breaker pro Modell
- Fahrtenbuch: SQLite-basierte Metrik-Speicherung
- Fahrschule: Lernengine mit Epsilon-Greedy Exploration und Fitness-Scoring
- Tacho: Metriken-Erfassung während der Laufzeit
- Execution Patterns: Einzelfahrt, Kolonne (Chain), Team (Parallel), Schwarm (Bulk), Hybrid
- JSON-basierte Konfiguration (getriebe.json, strecken.json, kupplung.json, fitness_criteria.json)
- 13 initiale Unit-Tests (
tests/test_clutch.py) - README mit Architektur-Diagramm und Quick Start
- MIT-Lizenz