Skip to content

feat(kiro): add Kiro provider (supersedes #2559) - #6266

Open
NachoFLizaur wants to merge 27 commits into
anomalyco:devfrom
NachoFLizaur:kiro-provider
Open

feat(kiro): add Kiro provider (supersedes #2559)#6266
NachoFLizaur wants to merge 27 commits into
anomalyco:devfrom
NachoFLizaur:kiro-provider

Conversation

@NachoFLizaur

@NachoFLizaur NachoFLizaur commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Supersedes #2559 by @jeffpardy (auto-closed as stale on 2026-09-04). This branch continues that work with the review fixes applied and keeps both authors' commits.

What

  • Adds providers/kiro/ with provider.toml and 19 models: auto, Claude Sonnet 4 / 4.5 / 4.6 / 5, Claude Opus 4.5 / 4.6 / 4.7 / 4.8 / 5, Claude Haiku 4.5, GPT-5.6 Sol / Terra / Luna, DeepSeek 3.2, MiniMax M2.1 / M2.5, GLM-5, Qwen3 Coder Next.
  • Every non-Kiro-native model uses base_model and is override-only; only auto is defined inline.
  • reasoning_options are authored per model against Kiro's actual effort control (low-max for Claude reasoners; none-max for GPT-5.6; [] where Kiro exposes no caller control, e.g. GLM-5, MiniMax, DeepSeek).
  • cost is 0/0 throughout: Kiro bills in credits per request, not per token, so there is no USD/MTok price to publish.
  • Context/output overrides come from kiro-cli chat --list-models --format json (context_window_tokens) and Kiro docs.

Sources:

Review findings

  • Logo: intentionally not added; requesting a maintainer waiver (cc @rekram1-node). The official Kiro mark collapses to a solid square under the currentColor single-color renderer, and a modified mark would violate AWS branding requirements. The generic fallback is used deliberately rather than shipping a non-compliant or altered mark.
  • qwen3-coder-next: was a full inline definition. Upstream now has models/alibaba/qwen3-coder-next.toml, so the Kiro entry is now base_model = "alibaba/qwen3-coder-next" with only cost 0/0 and limit.context = 256_000 (Kiro reports 256000 vs the lab's 262_144).
  • GPT-5.6 limit.context = 272_000 with base_model_omit = ["limit.input"]: this is what Kiro serves ("Experimental preview of OpenAI GPT 5.6 ... with 272k context window" in kiro-cli chat --list-models, confirmed by the docs), not the lab's 1_050_000 / 922_000 input split, hence the omit.
  • Output limits: aligned with Kiro's documented max_tokens table (https://kiro.dev/docs/models/effort/): Opus 4.6 / 4.7 and Sonnet 4.6 are capped at 64000 and carry an override; Opus 4.8 / Opus 5 / Sonnet 5 / GPT-5.6 are 128000 and inherit the lab value; GLM-5, MiniMax and Qwen have no published Kiro cap and inherit the lab value.
  • DeepSeek 3.2: base_model is now deepseek/deepseek-v3.2 (Kiro serves "Experimental preview of DeepSeek V3.2"); only limit.context = 164_000 (from kiro-cli) and reasoning_options = [] are kept.

Consumer

kiro-acp-ai-provider and the opencode-kiro plugin (npm) resolve models through this provider entry.

Validation

  • bun install --frozen-lockfile - no changes
  • bun run validate - exit 0, no warnings; kiro resolves 19 models, all base_model targets exist
  • bun test - 307 pass / 4 fail; the same 4 failures (open-weight weights links, DeepInfra modalities, LLM Gateway case variant, Cloudflare AI Gateway reasoning issue) reproduce on pristine anomalyco/dev and do not touch providers/kiro

Co-authored-by: Jeff Brown 375987+jeffpardy@users.noreply.github.com

jeffpardy and others added 25 commits June 14, 2026 10:22
The kiro provider was accidentally removed via merge f4206f4 and never
restored. This brings back provider.toml plus all 12 models from before
the removal, and adds claude-opus-4.8.
refactor(kiro): inherit canonical base_model metadata; fix opus output and dates
…asoning-fix

fix(kiro): set minimax reasoning false to satisfy reasoning_options validation
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Action items

  • [critical] [violation] providers/kiro/ - Check: New providers must ship a compliant logo.svg (currentColor, no fixed size/hardcoded colors; preferably square viewBox). Why: This PR adds provider kiro with no logo.svg. AGENTS.md and the review policy treat that as a merge blocker; the generic fallback is not a substitute. A maintainer waiver request in the PR body does not remove the requirement until an explicit waiver is granted. Action: Add a compliant providers/kiro/logo.svg, or get an explicit maintainer waiver recorded on the PR before merge.
  • [medium] [possible mistake] providers/kiro/models/gpt-5.6-sol.toml:10 - Check: Provider limit.context must reflect this host’s real context window, not an unrelated pricing threshold. Why: All three GPT-5.6 entries set context = 272_000 while the lab bases use 1_050_000 context / 922_000 input; 272_000 matches the common GPT-5.6 cost-tier boundary, which is a frequent mix-up. Action: Confirm from kiro-cli chat --list-models / Kiro docs that Sol/Terra/Luna are actually capped at 272k on Kiro; if not, set the real context (and keep base_model_omit = ["limit.input"] only if input remains inapplicable).
  • [medium] [possible mistake] providers/kiro/models/claude-opus-4.6.toml:14 - Check: Output limits should be consistent with Kiro’s reported caps across the catalog. Why: Opus 4.6 alone overrides limit.output = 64_000 (lab is 128k), while Opus 4.7/4.8/5 and Sonnet 5 keep inherited 128_000, and GPT-5.6 also inherits 128_000. If Kiro’s CLI/docs apply a shared lower output cap, several models are overstated. Action: Align limit.output (and any missing context overrides) with the same kiro-cli / docs source used for Opus 4.6, model by model.
  • [medium] [possible mistake] providers/kiro/models/deepseek-3.2.toml:1 - Check: Non-lab hosts must base_model the correct underlying lab identity. Why: The file is id/name “DeepSeek 3.2” but points at deepseek/deepseek-chat (non-reasoning chat metadata, 1M context). Lab/peers usually map V3.2 to deepseek/deepseek-v3.2 (reasoning hybrid, different limits). Current overrides (name, description, 164k context) paper over a possible wrong base. Action: Verify which model Kiro serves; use deepseek/deepseek-v3.2 if it is V3.2 (and author reasoning_options if reasoning = true), or keep deepseek-chat only if Kiro’s non-thinking chat endpoint is intentional—and drop redundant fields that then match the base.
  • [low] [possible mistake] providers/kiro/models/claude-haiku-4.5.toml:8 - Check: Modality overrides must be real host deltas. Why: Multiple Claude/GPT entries replace lab input = ["text", "image", "pdf"] with ["text", "image"] only. That is valid only if Kiro actually rejects PDF. Action: Confirm against Kiro image/docs/CLI capabilities; restore pdf (or omit the modalities block) where PDF is supported.

@NachoFLizaur

Copy link
Copy Markdown
Contributor Author

GPT-5.6 context (272_000 + base_model_omit = ["limit.input"])

Verified against the runtime. kiro-cli chat --list-models --format json (kiro-cli 2.21.0) returns:

  • gpt-5.6-sol: "description": "Experimental preview of OpenAI GPT 5.6 Sol with 272k context window", "context_window_tokens": 272000
  • gpt-5.6-terra: "description": "Experimental preview of OpenAI GPT 5.6 Terra with 272k context window", "context_window_tokens": 272000
  • gpt-5.6-luna: "description": "Experimental preview of OpenAI GPT 5.6 Luna with 272k context window", "context_window_tokens": 272000

The Kiro docs say the same: the quick-comparison table at https://kiro.dev/docs/models/ lists all three at 272K, and https://kiro.dev/docs/models/available-models/ states "All three GPT-5.6 tiers have a 272K context window."

272k is the real per-host context on Kiro, not a pricing tier. limit.input is omitted because Kiro reports one window and publishes no separate input cap; the lab's 922_000 input figure does not apply to a 272k host.

Output limits

Kiro publishes output caps, but only for some models. https://kiro.dev/docs/models/effort/ has a "max_tokens limits per model" table (Minimum / Maximum):

  • Claude Opus 4.8: 1024 / 128000
  • Claude Opus 4.7: 1024 / 64000
  • Claude Opus 4.6: 1024 / 64000
  • Claude Sonnet 5: 1024 / 128000
  • Claude Sonnet 4.6: 1024 / 64000
  • GPT-5.6 Terra / Sol / Luna: 1024 / 128000

kiro-cli chat --list-models reports no output field (only context_window_tokens), so the docs table is the only host source. Applied model by model and deferred the models that don't appear to their lab defaults.

  • Auto: not in Kiro's table and has no lab base. It routes to Claude models, so 64_000 is kept as the lowest cap among its targets, now with a source comment.

DeepSeek base

Upstream models/deepseek/deepseek-v3.2.toml exists. Switched base_model to deepseek/deepseek-v3.2. Kept limit.context = 164_000 (Kiro's reported window vs. the lab's 128_000) and reasoning_options = [] (Kiro exposes no caller-side control for this model).

PDF

No change because Kiro rejects PDF input. Evidence:

  • https://kiro.dev/docs/cli/chat/images/ lists the accepted attachment formats as "JPEG/JPG, PNG, GIF, and WebP" only.
  • https://kiro.dev/docs/cli/acp/ documents the ACP agent capabilities as loadSession: true and promptCapabilities.image: true, nothing for documents.
  • Live handshake with kiro-cli 2.21.0 (kiro-cli acp, JSON-RPC initialize) returns "promptCapabilities": {"image": true, "audio": false, "embeddedContext": false}.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Action items

  • [critical] [violation] providers/kiro/logo.svg - Check: New providers must ship a compliant logo.svg (currentColor, no fixed size/hardcoded colors; square viewBox preferred). Why: providers/kiro/ is a new provider with no logo; AGENTS.md treats this as a merge blocker. A maintainer waiver request in the PR body does not satisfy the requirement. Action: Add a compliant providers/kiro/logo.svg, or obtain an explicit maintainer exception recorded in-repo; do not ship without one of those.
  • [high] [violation] providers/kiro/models/claude-opus-4.8.toml:1 - Check: Provider limit.output must reflect this host’s max output, not an inflated lab default. Why: Lab anthropic/claude-opus-4-8 has output = 128_000. Sibling Kiro entries (claude-opus-4.6, claude-opus-4.7) override to 64_000 with comments that Kiro caps Claude max_tokens at 64000, but claude-opus-4.8 never got that override after the base_model refactor, so it would publish 128k. Action: Add [limit] output = 64_000 (and the same source comment) if Kiro caps Opus 4.8 at 64k; otherwise document why this model differs.
  • [high] [violation] providers/kiro/models/claude-opus-5.toml:1 - Check: Same host limit.output rule for Claude reasoners. Why: Lab anthropic/claude-opus-5 is output = 128_000; this file has no output override while the PR’s Kiro max_tokens alignment only fixed 4.6/4.7. Action: Set limit.output to Kiro’s documented cap for Opus 5 (likely 64_000), or cite why inheritance of 128k is correct on this host.
  • [high] [violation] providers/kiro/models/claude-sonnet-5.toml:1 - Check: Same host limit.output rule for Claude reasoners. Why: Lab anthropic/claude-sonnet-5 is output = 128_000 with no Kiro override, so the catalog would overstate max tokens versus the 64k Claude caps applied elsewhere in this PR. Action: Add the Kiro limit.output override (or evidence that Sonnet 5 is uncapped / different on Kiro).
  • [high] [possible mistake] providers/kiro/models/gpt-5.6-sol.toml:12 - Check: limit.context must be the host context window, not another product’s pricing breakpoint. Why: Lab GPT-5.6 context is 1_050_000 (input = 922_000); OpenAI first-party pricing uses a 272_000 tier threshold. Setting Kiro context = 272_000 on sol/terra/luna matches that tier size and is easy to mis-copy from pricing rather than context_window_tokens. Action: Confirm against kiro-cli chat --list-models --format json (or Kiro model docs) and keep 272k only if that is Kiro’s reported window; otherwise use the real context (and keep base_model_omit = ["limit.input"] only if still needed).
  • [medium] [possible mistake] providers/kiro/models/qwen3-coder-next.toml:8 - Check: Output limits must match Kiro’s documented max_tokens and stay consistent with the PR claims. Why: Patch 15 removed limit.output = 64_000 here (and on glm/minimax) while the PR body still says qwen uses limit.output = 64_000. Resolved output now inherits lab 65_536 (glm/minimax inherit 131_072), which may overstate Kiro if a 64k host cap exists. Action: Reconcile each model’s limit.output with Kiro’s max_tokens table / CLI data, restore overrides where the host is lower, and fix the PR body so it matches the files.

@NachoFLizaur

Copy link
Copy Markdown
Contributor Author

PR body fixed. The qwen3-coder-next / GLM-5 / MiniMax entries now inherit the lab limit.output (65_536 / 131_072 / 131_072) because Kiro publishes no cap for them; the body previously still said 64_000.

Logo: unchanged, see the explanation above.

Claude Opus 4.8 / Opus 5 / Sonnet 5 output limits: the reported violations are not correct. Kiro's max_tokens table (https://kiro.dev/docs/models/effort/) lists 128000 for these three models. Only Opus 4.6, Opus 4.7 and Sonnet 4.6 are capped at 64000.

GPT-5.6 context 272_000: already answered in the previous comment with the verbatim kiro-cli chat --list-models output (context_window_tokens: 272000 for Sol, Terra and Luna) and the Kiro docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants