Skip to content

kiro-providerKiro accounts for the agents you already use

A gateway on your own machine. It signs in to AWS Kiro and serves your accounts as OpenAI Responses and Anthropic Messages, so Codex CLI, Claude Code and other agents need only a base URL and a key.

Runs on
Linux, macOS and Windows, as one executable or a Bun package, listening on 127.0.0.1.
Your accounts
Signed in with AWS Builder ID or IAM Identity Center. Tokens stay in a local database and go only to AWS and Kiro.
export KP=http://127.0.0.1:8787/v1 KEY=$KIRO_GATEWAY_API_KEYcurl -s $KP/responses -H "Authorization: Bearer $KEY" --json '{    "model": "gpt-5.6-sol", "store": false,    "input": "Reply with exactly: KIRO_OK"}' |  jq -r '.output[-1].content[0].text'KIRO_OKcurl -s $KP/messages -H "x-api-key: $KEY" --json '{    "model": "claude-opus-5-5", "max_tokens": 1024,    "messages": [{"role": "user",      "content": "Reply with exactly: KIRO_OK"}]}' |  jq -r '.content[0].text'KIRO_OK

What kiro-provider does

Web search and the Chat Completions route ship switched off. Everything else works once an account is signed in.

Serve

  • Streaming and non-streaming responses with tools, images and reasoning effort, plus stored responses you can retrieve, list and continue.

  • Messages with thinking, tools and images, and a token estimate on /v1/messages/count_tokens.

  • The hosted web search tool of both APIs, run by kiro-provider through the account serving the request, with citations in the answer.

  • The older OpenAI route, for clients that have nothing newer. It answers only when enable_legacy_chat_completions is on.

Accounts

  • Device-code login for AWS Builder ID and IAM Identity Center. kiro-provider finds the Kiro profile itself, so Kiro CLI is not involved.

  • Requests go to the least busy eligible account. An exhausted account sits out until Kiro reports new quota.

  • Access tokens are renewed before they expire and usage is refreshed in the background. accounts list shows each account's state.

Clients

  • Codex CLIAvailable

    A custom model_provider with wire_api = "responses", including model and effort switching in /model.

  • Claude CodeAvailable

    The kiroclaude launcher points Claude Code at the gateway without editing your Claude settings.

  • One provider entry in each agent's own config file, with the few settings each of them needs.

  • ZunoAvailable

    Zuno's own Responses transport, with session routing from its metadata.

  • Model listAvailable

    GET /v1/models lists the models your signed-in accounts can use, with the effort levels Codex's model picker reads.

Operate

  • A systemd user service on Linux or a scheduled task on Windows, with health and readiness checks for automation.

  • GET /health and GET /ready for service managers, and a JSON log of counts, enums and hashes with no prompts or credentials.

  • UpdatesAvailable

    self-update replaces a standalone binary only after it matches the release's SHA256SUMS.

From install to the first answer

  1. Install

    curl -fsSL https://raw.githubusercontent.com/sunerpy/kiro-provider/main/scripts/install.sh | sh

    Or the PowerShell script on Windows, or bun add -g @sunerpy/kiro-provider.

  2. Sign in

    kiro-provider login

    Opens a device-code sign-in for AWS Builder ID. Add --start-url for IAM Identity Center.

  3. Start the gateway

    kiro-provider serve

    Put a private key in api_keys in config.json first; the gateway refuses to start without one.

  4. Point a client at it

    http://127.0.0.1:8787/v1

    That is the base URL for Codex CLI, OpenCode, Pi, Zuno and the OpenAI SDKs. Claude Code, Crush and the Anthropic SDKs take http://127.0.0.1:8787, without /v1.

Two APIs, one gateway ​

Responses and Messages are served by one process from one pool of accounts. A Responses request that Kiro's own Responses operation can take unchanged goes there; anything else, store: false included, is converted by kiro-provider itself. When neither path can keep a field, the request fails with an error that names it instead of quietly dropping it.

Protocol compatibility · Configuration

RouteSpeaksDefault
POST /v1/responsesOpenAI ResponsesOn
POST /v1/messagesAnthropic MessagesOn
POST /v1/messages/count_tokensAnthropic token estimateOn
GET /v1/modelsModel listOn
POST /v1/chat/completionsOpenAI Chat CompletionsOff until enabled

Every route except /health asks for one of your api_keys, sent as Authorization Bearer or x-api-key.

Your agent stays as it is ​

Codex CLI, Pi and Zuno speak Responses; Claude Code, OpenCode and Crush speak Messages. Each is configured with a base URL and one of your keys, with no plugin and no patched client. The launchers add a separate command, kirocodex or kiroclaude, next to the one you already have.

Choose a client · Client launchers

ClientAPISet up with
Codex CLIResponsesA model_provider in config.toml
Claude CodeMessagesThe kiroclaude launcher
OpenCodeMessagesA provider in opencode.json
PiResponsesA provider in models.json
CrushMessagesA provider in crush.json
ZunoResponsesA provider in Zuno's config
OpenAI and Anthropic SDKsResponses or MessagesA base URL and an API key

Web search through your own account ​

With web_search_enabled on, kiro-provider runs each API's hosted search tool itself, through Kiro's search and the account that serves the request. The answer comes back in the shape that API defines, with the search results and citations a client expects. It is off by default.

Web search

APIToolThe answer carries
Responsesweb_searchweb_search_call items and url_citation annotations
Messagesweb_search_20250305web_search_tool_result blocks and cited text

Searches run with gpt-5.6-sol or claude-opus-5.5, on accounts whose Kiro profile is in us-east-1. Other models are refused before anything runs.

Platforms

Every release has a standalone binary for each platform below, a SHA256SUMS file and a build attestation.

PlatformRelease assetInstaller
Linux x64Availablekiro-provider-linux-x64install.sh
Linux ARM64Availablekiro-provider-linux-arm64install.sh
macOS IntelAvailablekiro-provider-darwin-x64install.sh
macOS Apple SiliconAvailablekiro-provider-darwin-arm64install.sh
Windows x64Availablekiro-provider-windows-x64.exeinstall.ps1

The npm package @sunerpy/kiro-provider uses Bun's APIs. Install it with Bun; it does not run under Node.js or npx.

What stays on your machine

kiro-provider talks to AWS for your accounts and to GitHub when you ask it about updates.

Model requests

Goes toKiro, with your prompts

Each request goes to Kiro with the account that serves it. The log records counts, lengths and hashes, never prompts, tool arguments or credentials.

Accounts

Goes toAWS sign-in and Kiro

Sign-in, token renewal and usage checks. Tokens stay in accounts.db in your config directory, readable by your user only.

Updates

Goes toGitHub Releases

Only kiro-provider --version --check and self-update contact GitHub. The gateway itself never does.

Install ​

sh
curl -fsSL https://raw.githubusercontent.com/sunerpy/kiro-provider/main/scripts/install.sh | sh
powershell
irm https://raw.githubusercontent.com/sunerpy/kiro-provider/main/scripts/install.ps1 | iex
sh
bun add -g @sunerpy/kiro-provider

The scripts check the binary against the release's SHA256SUMS before installing it. The install guide covers pinning a version, building from source and removing kiro-provider.

What it does not do

  • It does not share or resell access. Use it only with Kiro accounts you control.
  • It does not work around usage limits. An exhausted account waits for Kiro to report new quota.
  • It does not pretend. Hosted tools other than web search, background responses and conversation objects are refused with a typed error, never imitated.
  • It does not listen on the network unless you set host to something other than 127.0.0.1.

Feedback ​

Bug reports and feature requests go to GitHub Issues. kiro-provider is MIT-licensed and is not an AWS product.

kiro-provider is released under the MIT License and is one of the FirLab projects. Content from kiro-provider@ce8a7fb.