Modellzugang auf Self-hosted Runnern
Lass das Coding-Werkzeug auf deinem Self-hosted Runner dein eigenes Cloud-Konto für Modelle nutzen, etwa Amazon Bedrock, Google Vertex AI oder Microsoft Foundry, damit Modellschlüssel nie über kanman laufen.
Auf einem Self-hosted Runner kann das Coding-Werkzeug den Modellzugang nutzen, den du auf dem Runner selbst einrichtest. kanman gibt dem Run dann überhaupt keine Zugangsdaten für Modelle: keinen eigenen Schlüssel und keinen in kanman gespeicherten. Was die Umgebung des Runners bereitstellt, nutzt das Coding-Werkzeug.
Wir empfehlen dafür dein eigenes Cloud-Konto: Amazon Bedrock, Google Vertex AI oder Microsoft Foundry für Claude Code und Azure OpenAI für Codex. Die Zugangsdaten bleiben in deiner Infrastruktur, Modellaufrufe laufen unter deinem Cloud-Vertrag und in der Region deiner Wahl, und du nutzt die Identitätsmechanismen, die du schon hast (IAM-Rollen, Workload Identity, Managed Identity).
Betreiber sind dafür verantwortlich, beim Einrichten der Runner-Umgebung die Bedingungen ihres Modellanbieters einzuhalten.
Für ein Team einschalten
Die Einstellung gibt es nur für Workspaces, deren Runs auf eigenen Runnern laufen (Workspace-Einstellungen > Runs und Runner, Unsere Runner oder Alles auf unseren unter Wo Runs laufen).
- Öffne Team > Modelle und klicke auf Modellzugang.
- Wähle Zugang deines Runners. Bei der Einrichtung des Teams steht dieselbe Auswahl im Executor-Schritt.
- Leg die Budgets in Minuten und Runs (siehe unten) unter Ausgabengrenzen unter Team > Budget und Grenzen fest. Jede Änderung wird sofort gespeichert.
kanman sieht in diesem Modus keine Modellkosten. Statt Euro zählen die Budgets des Teams Zeit und Runs:
| Einstellung | Bedeutung |
|---|---|
| Minuten pro Run | Höchstdauer eines Versuchs, 1 bis 1440 Minuten (Standard 60). Ist sie erreicht, stoppt kanman den Run; es entsteht kein Pull Request. |
| Runs pro Tag | Wie viele Runs das Team pro Tag starten darf. Leer heißt kein Limit. |
| Runs pro Monat | Wie viele Runs das Team pro Monat starten darf. Leer heißt kein Limit. |
Expedite- und Störungsarbeit startet auch dann, wenn ein Run-Limit erreicht ist. Deine Modellkosten werden nicht erfasst. In der kanman Cloud wird diese Einstellung abgelehnt: Runs dort nutzen nie die Umgebung eines Runners.
Die Run-Seite zeigt die verbrauchte Zeit eines Runs im Verhältnis zu Minuten pro Run statt Kosten in Euro. Dasselbe gilt für die Run-Karten in der Unterhaltung, die Run-Liste und den Wochenbericht: Sie sagen “Kosten nicht erfasst (Runner-Umgebung)” und zeigen Minuten, nie “0,00 € von 2,00 €”.
Modellzugang pro Team
Ein Runner kann mehrere Teams mit verschiedenen Konten bedienen. Der eigene Modellzugang eines Teams steht in seinem Modell-Login (Reiter Team > Umgebung > Modell-Login; ist Zugang deines Runners gewählt, verlinkt die Zeile Modellzugang dorthin). Bleiben sie leer, nutzt das Team, was der Runner bereitstellt. Mit Variablen dort bekommt das Team einen eigenen Zugang, einzeln oder per Aus .env einfügen, zum Beispiel:
| Zugang | Variablen |
|---|---|
| Anthropic API | ANTHROPIC_API_KEY |
| Amazon Bedrock mit API-Schlüssel | CLAUDE_CODE_USE_BEDROCK = 1, AWS_REGION, AWS_BEARER_TOKEN_BEDROCK |
| Google Vertex AI | CLAUDE_CODE_USE_VERTEX = 1, CLOUD_ML_REGION, ANTHROPIC_VERTEX_PROJECT_ID (Zugangsdaten aus der Workload Identity des Runners) |
| Microsoft Foundry | CLAUDE_CODE_USE_FOUNDRY = 1, ANTHROPIC_FOUNDRY_BASE_URL, ANTHROPIC_FOUNDRY_API_KEY |
| Codex | OPENAI_API_KEY, oder AZURE_OPENAI_API_KEY, AZURE_OPENAI_BASE_URL, AZURE_OPENAI_DEPLOYMENT |
| Ein anderes Modell für kanmans eigene Schritte | die KANMAN_ASSISTANT_-Variablen unten |
Der Modellzugang des Teams ersetzt den des Runners für dieses Team als Ganzes: Keine Modellvariable des Runners wird genutzt, damit sich zwei Konten nie mischen. kanman speichert die Werte verschlüsselt und gibt sie nur mit den Runs und Schritten des Teams an den Runner; der Runner speichert sie nie, und das Coding-Werkzeug erreicht das Modell über den Zugangs-Proxy des Runners mit einem Platzhalter statt des Werts. Teamleitungen, Owner und Admins ändern sie; alle sehen die Namen, wer sie gesetzt hat und wann. Jede Änderung steht ohne den Wert im Audit-Log. Code-Host-Tokens und andere Variablen des Teams stehen in derselben Liste, nach Zweck gruppiert; siehe Mehrere Teams auf einem Runner.
Modellzugang prüfen über der Liste bittet einen deiner Runner um einen winzigen Modellaufruf mit den aktuellen Einstellungen des Teams. Die Prüfung meldet Modellzugang funktioniert und welches Modell geantwortet hat, oder was zu ändern ist: noch kein Modellzugang eingerichtet, Zugangsdaten vom Anbieter abgelehnt, ein Nutzungslimit erreicht oder der Runner erreicht das Modell nicht. Wer eine Modellvariable speichert, startet die Prüfung automatisch.
Erreicht der Modellzugang des Teams ein Nutzungslimit, sagt der Team-Chat, wann die Arbeit weitergeht. Endet das Limit früher, etwa weil die Nutzung im Konto des Anbieters zurückgesetzt wurde, bemerkt kanman das von selbst: Es prüft den Zugang mit demselben winzigen Aufruf, zuerst nach 15 Minuten und dann höchstens stündlich, und die Arbeit geht weiter, sobald der Zugang antwortet. Jetzt erneut versuchen am Hinweis im Chat prüft sofort. Eine erfolgreiche Prüfung mit Modellzugang prüfen oder eine geänderte Modellvariable beendet das Warten sofort.
Das unabhängige Review
Auch der unabhängige Reviewer nutzt ein Modell. In diesem Modus hat kanman keinen Modellzugang, den es dafür aus seiner Cloud nutzen könnte, und weicht nie auf einen eigenen aus. Schalte Alles auf deinen Runnern ausführen ein, damit er mit genau diesem Modellzugang auf deinem Runner läuft. Ohne diese Einstellung wird ein Run, dessen Änderungen bereit für das Review sind, mit dem Hinweis Wartet auf deinen Runner auf seiner Run-Seite geparkt. Dabei schlägt nichts fehl, und es werden keine Versuche verbraucht.
Eine Konfiguration für jeden Schritt
Mit Alles auf unseren läuft jeder Schritt, der ein Modell nutzt, auf deinem Runner mit dem Zugang, den du dort einrichtest: das Coding-Werkzeug, das Entwerfen von Stories aus einer Anforderung, der unabhängige Reviewer, kanmans Antworten in der Unterhaltung, Antworten aus dem Teamkontext und die Wartungs-Reviewer. Mit Amazon Bedrock, Google Vertex AI, Microsoft Foundry oder einem Anthropic-Schlüssel nutzen alle diese Schritte denselben Claude-Client wie das Coding-Werkzeug. Amazon Bedrock über die IAM-Rolle des Runners deckt zum Beispiel auch Entwürfe und Review ab; dafür ist kein zusätzlicher Schlüssel nötig. Die unten beschriebenen Modell-Festlegungen (ANTHROPIC_DEFAULT_SONNET_MODEL und so weiter) gelten auch für diese Schritte.
Ein Runner, der nur Azure OpenAI oder einen OpenAI-Schlüssel hat, beantwortet diese Schritte mit diesem Anbieter. Für ein anderes Modell in diesen Schritten siehe Verschiedene Modelle für das Coding und die übrigen Schritte.
Für jeden dieser Schritte meldet der Runner kanman die Tokens und die geschätzten Modellkosten. In diesem Modus werden sie beim Eintrag des Schritts im Audit-Log festgehalten und zählen nicht gegen die Budgets des Teams, die Minuten und Runs zählen.
Was der Runner weitergibt
In diesem Modus sehen das Coding-Werkzeug und kanmans übrige Modellschritte die Umgebung des Runners, außer den Tokens von kanman selbst. Setz die Variablen deines Anbieters am Runner-Container. Beim Start nennt das Log des Runners die gefundenen Anbieter (zum Beispiel bedrock), nie deren Werte.
Für Befehle aus deinem Repository gilt das nicht: Die Builds und Tests, die das Coding-Werkzeug ausführt, sehen nie die Umgebung des Runners, sondern nur eine minimale Umgebung. Siehe Secrets des Runners.
Die folgenden Variablen lesen Claude Code und Codex. Um Modellversionen auf Bedrock, Vertex AI oder Foundry festzulegen, setz ANTHROPIC_DEFAULT_SONNET_MODEL, ANTHROPIC_DEFAULT_OPUS_MODEL und ANTHROPIC_DEFAULT_HAIKU_MODEL auf die in deinem Konto freigeschalteten Modell-IDs; kanmans Modellwahl pro Story löst sich dann auf diese auf.
Amazon Bedrock
| Variable | Wert |
|---|---|
CLAUDE_CODE_USE_BEDROCK |
1 |
AWS_REGION |
Region mit Bedrock-Modellzugang, zum Beispiel eu-central-1 |
| Zugangsdaten | Eine IAM-Rolle (Instance Profile, ECS-Task-Rolle, EKS Pod Identity) oder AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY und optional AWS_SESSION_TOKEN oder ein Bedrock-API-Schlüssel in AWS_BEARER_TOKEN_BEDROCK |
Google Vertex AI
| Variable | Wert |
|---|---|
CLAUDE_CODE_USE_VERTEX |
1 |
CLOUD_ML_REGION |
Region mit freigeschalteten Claude-Modellen, zum Beispiel europe-west1 |
ANTHROPIC_VERTEX_PROJECT_ID |
ID deines Google-Cloud-Projekts |
GOOGLE_APPLICATION_CREDENTIALS |
Pfad zu einer eingebundenen Schlüsseldatei eines Dienstkontos. Mit Workload Identity auf GKE nicht nötig. |
Microsoft Foundry
| Variable | Wert |
|---|---|
CLAUDE_CODE_USE_FOUNDRY |
1 |
ANTHROPIC_FOUNDRY_RESOURCE |
Name deiner Foundry-Ressource, oder stattdessen ANTHROPIC_FOUNDRY_BASE_URL mit der vollständigen Adresse |
| Zugangsdaten | ANTHROPIC_FOUNDRY_API_KEY oder Azure-Zugangsdaten wie eine Managed Identity |
Codex mit Azure OpenAI
| Variable | Wert |
|---|---|
AZURE_OPENAI_API_KEY |
Schlüssel deiner Azure-OpenAI-Ressource |
AZURE_OPENAI_BASE_URL |
https://<resource>.openai.azure.com/openai/v1 |
AZURE_OPENAI_DEPLOYMENT |
Name deines Modell-Deployments |
KI-Gateways in der Runner-Umgebung
Leitet dein Unternehmen den Modellverkehr über ein KI-Gateway, das nur in deinem Netz erreichbar ist, richte den Runner mit den Variablen darauf aus, die die Coding-Werkzeuge lesen. Das gilt für das Coding-Werkzeug und, sofern du kein eigenes Assistenzmodell einrichtest (nächster Abschnitt), auch für kanmans eigene Schritte.
OpenAI-kompatibles Gateway (kanmans eigene Schritte und Codex, wenn das Gateway die OpenAI Responses API anbietet):
| Variable | Wert |
|---|---|
OPENAI_BASE_URL |
Die OpenAI-kompatible Basis-URL des Gateways, zum Beispiel https://ai-gateway.corp.example/v1 |
OPENAI_API_KEY |
Der Schlüssel des Gateways |
AI_GATEWAY_AUTH_HEADER |
Optional. Der Header, der den Schlüssel trägt, zum Beispiel api-key. Standard: Authorization: Bearer |
AI_GATEWAY_HEADERS |
Optional. Zusätzliche Header als JSON-Objekt, zum Beispiel {"x-tenant-id":"acme"} |
AI_GATEWAY_MODEL |
Der Modellname für Entwürfe und Unterhaltung, so wie das Gateway ihn nennt, zum Beispiel openai/gpt-5 |
AI_GATEWAY_REVIEW_MODEL |
Optional. Das Modell für den Reviewer (Standard: AI_GATEWAY_MODEL) |
AI_GATEWAY_CODING_MODEL |
Optional. Das Modell für Codex (Standard: AI_GATEWAY_MODEL) |
AI_GATEWAY_REASONING_EFFORT |
Optional. Wie viel ein Reasoning-Modell nachdenkt, bevor es entwirft oder antwortet: low (Standard), medium oder high; ein leerer Wert lässt die Einstellung weg |
Anthropic-kompatibles Gateway (Claude Code und kanmans eigene Schritte über denselben Client):
| Variable | Wert |
|---|---|
ANTHROPIC_BASE_URL |
Die Anthropic-kompatible Adresse des Gateways, zum Beispiel https://ai-gateway.corp.example/anthropic |
ANTHROPIC_AUTH_TOKEN |
Der Schlüssel des Gateways, gesendet als Authorization: Bearer. Oder ANTHROPIC_API_KEY, wenn dein Gateway x-api-key erwartet. |
ANTHROPIC_MODEL |
Der Modellname, so wie das Gateway ihn nennt |
ANTHROPIC_CUSTOM_HEADERS |
Optional. Zusätzliche Header, ein Name: Wert pro Zeile |
Claude Code braucht den Anthropic-kompatiblen Endpunkt, Codex die OpenAI Responses API des Gateways (/responses); aktuelle Codex-Versionen unterstützen Chat Completions nicht. Ein Gateway nur mit Chat Completions kann kanmans eigene Schritte bedienen, aber kein Coding-Werkzeug. Siehe Welches Coding-Werkzeug mit welchem Gateway funktioniert.
Ein Team, das seinen Gateway-Schlüssel in kanman hinterlegt (Stattdessen ein Gateway oder einen Proxy nutzen unter Workspace-Einstellungen > Modellzugang), braucht diese Variablen nicht: Der Runner erhält Schlüssel, Header und Modellnamen für jeden Run und jeden Schritt dieses Teams und speichert sie nie.
Beispiel: Codex und kanmans eigene Schritte über ein internes Gateway, das den Schlüssel im Header api-key erwartet:
docker run -d --name kanman-runner --restart unless-stopped \
-e KANMAN_API_KEY=km_your_runner_token \
-e RUNNER_EXECUTORS=codex \
-e OPENAI_BASE_URL=https://ai-gateway.corp.example/v1 \
-e OPENAI_API_KEY=your_gateway_key \
-e AI_GATEWAY_AUTH_HEADER=api-key \
-e 'AI_GATEWAY_HEADERS={"x-tenant-id":"acme"}' \
-e AI_GATEWAY_MODEL=openai/gpt-5 \
ghcr.io/kanman-ai/executor-host
Verschiedene Modelle für das Coding und die übrigen Schritte
Du kannst kanmans eigenen Schritten (Stories entwerfen, der Reviewer, Antworten in der Unterhaltung, Antworten aus dem Teamkontext, die Wartungs-Reviewer) ein anderes Modell geben als dem Coding-Werkzeug, zum Beispiel das KI-Gateway deines Unternehmens, während das Coding-Werkzeug weiter Claude nutzt. Alles wird auf dem Runner eingerichtet:
| Variable | Bedeutung |
|---|---|
KANMAN_ASSISTANT_BASE_URL |
Basisadresse des Gateways, zum Beispiel https://aigateway.eu/core/v1 |
KANMAN_ASSISTANT_API_KEY |
Der Schlüssel des Gateways. Lass ihn weg, wenn dein Gateway keinen braucht. |
KANMAN_ASSISTANT_AUTH_HEADER |
Optional. Der Header, der den Schlüssel trägt. Standard Authorization: Bearer; zum Beispiel api-key oder x-api-key sendet den Schlüssel unverändert. |
KANMAN_ASSISTANT_MODEL |
Der Modellname, den das Gateway erwartet, zum Beispiel mistral/mistral-large-2411 |
KANMAN_ASSISTANT_MODEL_DRAFTING, _REVIEW, _CONVERSATION |
Optional. Ein anderes Modell für Entwürfe, für den Reviewer und die Wartungs-Reviews oder für Antworten in der Unterhaltung |
KANMAN_ASSISTANT_FORMAT |
Optional. openai (Standard) für Gateways mit einem OpenAI-kompatiblen Chat-Completions-Endpunkt, anthropic für Gateways mit einem Anthropic-Messages-Endpunkt (/v1/messages) |
KANMAN_ASSISTANT_REASONING_EFFORT |
Optional, nur im Format openai. Wie viel ein Reasoning-Modell (zum Beispiel GPT-5) nachdenkt, bevor es Stories entwirft oder im Gespräch antwortet: low (Standard), medium oder high. Setz einen leeren Wert, wenn dein Gateway oder Modell die Einstellung nicht annimmt. |
KANMAN_ASSISTANT_MAX_OUTPUT_TOKENS |
Optional, nur im Format openai. Wie viele Ausgabe-Tokens, Nachdenken eingeschlossen, ein Schritt beim ersten Versuch höchstens nutzen darf. Standard 32000. |
Reasoning-Modelle verwenden einen Teil ihrer Ausgabe auf das Nachdenken, bevor sie antworten. kanman lässt dafür Platz, und wenn eine Antwort trotzdem am Limit endet, fragt kanman einmal mit doppelt so viel Platz nach. Ist auch diese Antwort abgeschnitten, sagt dir kanman, dass dem Modell die Ausgabe-Tokens ausgegangen sind, statt einen kaputten Entwurf zu zeigen. Schick die Anfrage dann in kleineren Teilen oder erhöhe KANMAN_ASSISTANT_MAX_OUTPUT_TOKENS. Lehnt dein Gateway die Reasoning-Einstellung ab, wiederholt kanman den Aufruf von selbst einmal ohne sie; mit einem leeren Wert für KANMAN_ASSISTANT_REASONING_EFFORT sparst du dir diesen zusätzlichen Aufruf.
Welchen Modellzugang ein Schritt nutzt:
- Den eigenen Schlüssel des Teams, wenn das Team in kanman einen nutzt.
- Sonst das Assistenzmodell oben: das eigene des Teams (
KANMAN_ASSISTANT_-Variablen im Modellzugang des Teams), sonst das des Runners, außer das Team bringt einen eigenen Modellzugang mit. - Sonst den Modellzugang des Coding-Werkzeugs: den eigenen des Teams auf deinen Runnern, sonst den des Runners.
Das Coding-Werkzeug sieht die KANMAN_ASSISTANT_-Variablen nie. Beim Start nennt das Log des Runners Host, Format und Modelle des Gateways, nie den Schlüssel. Der Eintrag jedes Schritts im Audit-Log sagt, welche der drei Quellen ihn beantwortet hat, mit seinen Tokens.
Beispiel: Claude auf Amazon Bedrock für das Coding und das Unternehmens-Gateway für alles andere:
services:
kanman-runner:
image: ghcr.io/kanman-ai/executor-host
restart: unless-stopped
environment:
KANMAN_API_KEY: ${KANMAN_API_KEY}
RUNNER_EXECUTORS: claude-code
CLAUDE_CODE_USE_BEDROCK: "1"
AWS_REGION: eu-central-1
KANMAN_ASSISTANT_BASE_URL: https://aigateway.eu/core/v1
KANMAN_ASSISTANT_API_KEY: ${GATEWAY_KEY}
KANMAN_ASSISTANT_MODEL: mistral/mistral-large-2411
KANMAN_ASSISTANT_MODEL_REVIEW: openai/gpt-5
Schritte über ein Gateway melden Tokens, aber keine Kosten, weil kanman die Preise des Gateways nicht kennt.
Beispiel mit Docker Compose
Ein Runner, der Claude Code über Amazon Bedrock mit der IAM-Rolle des Hosts anbietet:
services:
kanman-runner:
image: ghcr.io/kanman-ai/executor-host
restart: unless-stopped
environment:
KANMAN_API_KEY: ${KANMAN_API_KEY}
RUNNER_NAME: runner-fra-1
RUNNER_EXECUTORS: claude-code
CLAUDE_CODE_USE_BEDROCK: "1"
AWS_REGION: eu-central-1
ANTHROPIC_DEFAULT_SONNET_MODEL: eu.anthropic.claude-sonnet-4-5-20250929-v1:0
Derselbe Runner über Google Vertex AI mit eingebundenem Dienstkonto-Schlüssel:
services:
kanman-runner:
image: ghcr.io/kanman-ai/executor-host
restart: unless-stopped
environment:
KANMAN_API_KEY: ${KANMAN_API_KEY}
RUNNER_EXECUTORS: claude-code
CLAUDE_CODE_USE_VERTEX: "1"
CLOUD_ML_REGION: europe-west1
ANTHROPIC_VERTEX_PROJECT_ID: acme-ai-prod
GOOGLE_APPLICATION_CREDENTIALS: /secrets/gcp-key.json
volumes:
- ./gcp-key.json:/secrets/gcp-key.json:ro
Beispiel mit Kubernetes
Ein Runner mit Microsoft Foundry für Claude Code und Azure OpenAI für Codex. Die Schlüssel liegen in einem Kubernetes-Secret:
apiVersion: v1
kind: Secret
metadata:
name: kanman-runner
type: Opaque
stringData:
KANMAN_API_KEY: km_your_runner_token
ANTHROPIC_FOUNDRY_API_KEY: your_foundry_key
AZURE_OPENAI_API_KEY: your_azure_openai_key
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kanman-runner
spec:
replicas: 1
selector:
matchLabels:
app: kanman-runner
template:
metadata:
labels:
app: kanman-runner
spec:
containers:
- name: runner
image: ghcr.io/kanman-ai/executor-host
envFrom:
- secretRef:
name: kanman-runner
env:
- name: RUNNER_EXECUTORS
value: claude-code,codex
- name: CLAUDE_CODE_USE_FOUNDRY
value: "1"
- name: ANTHROPIC_FOUNDRY_RESOURCE
value: acme-foundry
- name: AZURE_OPENAI_BASE_URL
value: https://acme-openai.openai.azure.com/openai/v1
- name: AZURE_OPENAI_DEPLOYMENT
value: gpt-5
Mit Workload Identity (Vertex AI auf GKE) oder einer Managed Identity (Foundry auf AKS) lässt du den Schlüssel aus dem Secret weg und hängst die Identität an das Dienstkonto des Pods.
Verwandte Seiten
Zuletzt aktualisiert: January 1, 0001
kanman öffnen