Convert Kiro accounts to OpenAI / Anthropic compatible API service.
- π Anthropic Claude API - Full support for
/v1/messagesendpoint - π€ OpenAI Chat API - Compatible with
/v1/chat/completions - βοΈ Multi-Account Pool - Round-robin load balancing
- π Auto Token Refresh - Seamless token management
- π‘ Streaming - Real-time SSE responses
- ποΈ Web Admin Panel - Easy account management
- π Multiple Auth Methods - AWS Builder ID, IAM Identity Center (Enterprise SSO), SSO Token, Local Cache, Credentials
- π Usage Tracking - Monitor requests, tokens, and credits
- π¦ Account Export/Import - Compatible with Kiro Account Manager format
- π Dynamic Model List - Auto-synced from Kiro API with caching
- π Version Update Check - Automatic new version notification
- π i18n - Chinese / English admin panel
git clone https://github.com/Quorinex/Kiro-Go.git
cd Kiro-Go
# Create data directory for persistence
mkdir -p data
docker-compose up -d# Create data directory
mkdir -p /path/to/data
docker run -d \
--name kiro-go \
-p 8080:8080 \
-e ADMIN_PASSWORD=your_secure_password \
-v /path/to/data:/app/data \
--restart unless-stopped \
ghcr.io/quorinex/kiro-go:latestπ The
/app/datavolume storesconfig.jsonwith accounts and settings. Mount it for data persistence.
git clone https://github.com/Quorinex/Kiro-Go.git
cd Kiro-Go
go build -o kiro-go .
./kiro-goConfig file is auto-created at data/config.json on first run:
{
"password": "changeme",
"port": 8080,
"host": "127.0.0.1",
"requireApiKey": false,
"apiKey": "",
"accounts": []
}
β οΈ Change the default password before production use!
| Variable | Description | Default |
|---|---|---|
CONFIG_PATH |
Config file path | data/config.json |
ADMIN_PASSWORD |
Admin panel password (overrides config) | - |
Open http://localhost:8080/admin and login with your password.
Multiple methods available:
| Method | Description |
|---|---|
| AWS Builder ID | Login with AWS Builder ID (personal accounts) |
| IAM Identity Center (Enterprise SSO) | Login with IAM Identity Center (enterprise accounts) |
| SSO Token | Import x-amz-sso_authn token from browser |
| Kiro Local Cache | Import from local Kiro IDE cache files |
| Credentials JSON | Import JSON from Kiro Account Manager |
{
"refreshToken": "eyJ...",
"accessToken": "eyJ...",
"clientId": "xxx",
"clientSecret": "xxx"
}curl http://localhost:8080/v1/messages \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello!"}]
}'curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer any" \
-d '{
"model": "gpt-4o",
"messages": [{"role": "user", "content": "Hello!"}]
}'| Request Model | Actual Model |
|---|---|
claude-sonnet-4-20250514 |
claude-sonnet-4-20250514 |
claude-sonnet-4.5 |
claude-sonnet-4.5 |
claude-haiku-4.5 |
claude-haiku-4.5 |
claude-opus-4.5 |
claude-opus-4.5 |
claude-opus-4.6 |
claude-opus-4.6 |
gpt-4o, gpt-4 |
claude-sonnet-4-20250514 |
gpt-3.5-turbo |
claude-sonnet-4-20250514 |
Enable extended thinking by adding a suffix to the model name (default: -thinking).
# OpenAI API with thinking
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4.5-thinking",
"messages": [{"role": "user", "content": "Solve this step by step: 15 * 23"}],
"stream": true
}'
# Claude API with thinking
curl http://localhost:8080/v1/messages \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4.5-thinking",
"max_tokens": 4096,
"messages": [{"role": "user", "content": "Analyze this problem"}]
}'Configure thinking mode in the Admin Panel under Settings > Thinking Mode Settings:
| Setting | Description | Options |
|---|---|---|
| Trigger Suffix | Model name suffix to enable thinking | Default: -thinking (customizable, e.g., -think, -reason) |
| OpenAI Output Format | How thinking content is returned in OpenAI API | reasoning_content (DeepSeek compatible), <thinking> tag, <think> tag |
| Claude Output Format | How thinking content is returned in Claude API | <thinking> tag (default), <think> tag, plain text |
OpenAI API (/v1/chat/completions):
reasoning_content- Thinking in separatereasoning_contentfield (DeepSeek compatible)thinking- Thinking wrapped in<thinking>...</thinking>tags in contentthink- Thinking wrapped in<think>...</think>tags in content
Claude API (/v1/messages):
thinking- Thinking wrapped in<thinking>...</thinking>tags (default)think- Thinking wrapped in<think>...</think>tagsreasoning_content- Plain text output
| Endpoint | Description |
|---|---|
GET /health |
Health check |
GET /v1/models |
List models |
GET /v1/stats |
Statistics |
POST /v1/messages |
Claude Messages API |
POST /v1/messages/count_tokens |
Token counting |
POST /v1/chat/completions |
OpenAI Chat API |
GET /admin |
Admin panel |
Kiro-Go/
βββ main.go # Entry point
βββ version.json # Version info for update check
βββ config/ # Configuration management
βββ pool/ # Account pool & load balancing
βββ proxy/ # API handlers & Kiro client
β βββ handler.go # HTTP routing & admin API
β βββ kiro.go # Kiro API client
β βββ kiro_api.go # Kiro REST API (usage, models)
β βββ translator.go # Request/response conversion
βββ auth/ # Authentication
β βββ builderid.go # AWS Builder ID login
β βββ iam_sso.go # IAM SSO login
β βββ oidc.go # OIDC token refresh
β βββ sso_token.go # SSO token import
βββ web/ # Admin panel frontend
βββ Dockerfile
βββ docker-compose.yml
This project is provided for educational and research purposes only.
- This software is not affiliated with, endorsed by, or associated with Amazon, AWS, or Kiro in any way
- Users are solely responsible for ensuring their use complies with all applicable terms of service and laws
- The authors assume no liability for any misuse or violations arising from the use of this software
- Use at your own risk
By using this software, you acknowledge that you have read and understood this disclaimer.