Kimi K3 is Moonshot AI's frontier agent model, an open-weight, native multimodal model with 2.8T total parameters, 104B active parameters, and a 1,048,576-token context window. The API costs $3 per million cache-miss input tokens, $0.30 cached, and $15 output. Token waste is expensive at that tier, but Kimi still undercuts GPT 5.6 Sol on output price. (github.com)
GPT 5.6 Sol is OpenAI's flagship GPT-5.6 tier, shipped across ChatGPT, Codex, and the API. OpenAI's model page positions it for complex professional work, with a 1,050,000-token context window, 128,000 max output tokens, and API pricing at $5 input, $0.50 cached input, and $30 output per million tokens. (developers.openai.com)
The launch question I care about is practical: when an agent has to do exact, multi-step work across live SaaS accounts, which model tracks tool state, and which one makes me babysit it? Price sheets are tidy. Real accounts punish stale assumptions and wrong field values.
I ran both models on the same real tool-use benchmark. The task set, verifiers, and bar for “done” stayed fixed while I swapped the model underneath the agent loop.
I wanted to see whether Sol's premium buys cleaner execution once the work leaves the chat box, and how much Kimi K3 pressures that pricing story.
The two models
At a glance, before the benchmark:
Spec | Kimi K3 | GPT 5.6 Sol |
|---|---|---|
Vendor | Moonshot AI | OpenAI |
Weights | Open weights | Proprietary |
Parameters | 2.8T total / 104B active | not disclosed |
Context window | 1,048,576 | 1,050,000 |
Max output | not published | 128,000 |
Input / 1M | $3.00 | $5.00 |
Cached input / 1M | $0.30 | $0.50 |
Output / 1M | $15.00 | $30.00 |
Long-context surcharge | none | 2× input / 1.5× output above 272K |
Reasoning control | Max thinking effort | Reasoning tokens (max effort) |
Modality | Text + native vision | Text + image input |
Kimi K3
Kimi K3 is Moonshot AI’s large 3T-class release, a 2.8T-parameter, native-vision, open flagship built for long-horizon coding, knowledge work, and reasoning. The 1,048,576-token context window is the standout number, and it makes full-repo prompts feel routine. (kimi.com)
The API price is $3.00 per 1M uncached input tokens, $0.30 per 1M cached input tokens, and $15.00 per 1M output tokens. Moonshot also says K3 uses max thinking effort by default at launch, with low and high effort modes coming later. That matched my expectation going in: an agent model that wants room to work. I’d still keep it on a leash, because Moonshot flags two sharp edges: instability if the harness mishandles thinking history, and excessive proactiveness when the task boundary is vague. (kimi.com)
GPT 5.6 Sol
GPT 5.6 Sol is OpenAI’s flagship tier in the GPT-5.6 family. OpenAI describes Sol as the frontier model for complex professional work, with gpt-5.6 routing to gpt-5.6-sol in the API. Its context window is 1,050,000 tokens, with a 128,000-token max output limit and reasoning token support. (developers.openai.com)
The base API price is $5.00 per 1M input tokens, $0.50 per 1M cached input tokens, and $30.00 per 1M output tokens. There is one pricing gotcha I would not ignore on long-context work: prompts above 272K input tokens are billed at 2x input and 1.5x output for the full request. In Codex CLI, Sol feels like the premium workhorse: built around tool-heavy professional tasks, Programmatic Tool Calling, max effort, and optional multi-agent style execution. (developers.openai.com)
At base API rates, GPT 5.6 Sol is about 1.7x Kimi K3 on uncached input, $5 vs $3 per 1M tokens, and exactly 2x on output, $30 vs $15 per 1M tokens. If the prompt crosses OpenAI’s 272K input threshold, Sol’s effective rate becomes $10 per 1M input tokens and $45 per 1M output tokens for that request, roughly 3.3x Kimi on input and 3x on output. (developers.openai.com)
Related: Kimi K3 vs GLM 5.2
The benchmark

I used the Composio Golden Eval because toy tool-call demos hide the failures I care about. It covers 12 SaaS scenarios, 24 total trials, run against live accounts through the hosted Composio MCP router. The agent is doing actual multi-step work in business apps, then the grader checks app state.
Grades come from deterministic API readback of real account state. No LLM transcript judge gets a vote. A Sheet task is checked by reading the Sheet; a Gmail reply task is checked inside Gmail. Writes are uniquely tagged and cleaned up after grading, so the live accounts do not turn into a trash fire.
The app mix is standard office-ops work: Gmail, Slack, Google Sheets, Calendar, Drive, Salesforce, HubSpot, GitHub, Linear. These are the apps where tool agents usually look good in demos, right up until they have to carry state across three of them and obey some annoying exclusion rule.
The suite splits into two bands. Seven are historical Golden Eval cases a competent tool-use model should clear, including CRM identity dedup across Salesforce and HubSpot, calendar free/busy checks, recurring-event repair, Drive external-share audit, Gmail label batching, GitHub access audit, and GitHub/Linear reconciliation. The other five are the frontier-kill cases: invoice, refund, roster, ticket, and vendor workflows where the agent has to read Gmail threads, apply disqualifying rules, append exactly the surviving rows to a Sheet ledger, reply per item, and write one ops-thread tally.
These cases hinge on exactness: a disqualified row in the ledger, a missing valid item, or a reply attached to the wrong item fails the case. This benchmark is mostly exact-set reconciliation, dedup, cross-app joins, and audits where “close enough” is still wrong.
What the tasks actually look like
One task asks the agent to dedup CRM identities across Salesforce, HubSpot, and Gmail. That means the model has to decide which records refer to the same person or company, use email evidence, and avoid creating a clean-looking mess across two CRMs.
Another has it repair a recurring calendar event. That sounds small until you remember recurring events are where agents can accidentally edit the whole series, miss the intended instance, or leave the calendar in a state that looks fine in prose and fails on readback.
The Drive audit is closer to what an ops person would actually ask for: find external shares and report or fix the exact exposure. If the agent audits the wrong files or misses one shared item, the final account state exposes it.
The GitHub and Linear reconciliation case forces the model to line up engineering work across two systems. A GitHub item and a Linear issue can be semantically related without matching cleanly by title, so the agent has to reconcile them rather than do a dumb string match.
In the invoice, refund, roster, ticket, and vendor cases, the agent reads Gmail threads, filters out specific disqualified items, writes only the surviving rows into a Sheet, sends the right per-item replies, then posts one tally to the ops thread. The grader reads the accounts afterward, so a confident explanation does not help if the Sheet has one wrong row.
How I ran it
I ran both models on the same 12 Golden Eval cases with identical deterministic verifiers and denominators. Kimi K3 ran under the pi agent harness at max reasoning. GPT 5.6 on the Sol tier ran under Codex CLI. CRM identity dedup passed for both because Salesforce and HubSpot were connected in the tool-router session.
Grading was pass/fail off deterministic final-state checks. A case only passed when every verifier check reached the required state, and the check fractions on failed rows are diagnostic partial credit.
Frontier-kill task | Kimi K3 checks | GPT 5.6 checks | Kimi tool calls | GPT tool calls | Kimi runtime tokens | GPT input tokens | Kimi agent time | GPT agent time |
|---|---|---|---|---|---|---|---|---|
Invoice sync | 8/13 | 8/13 | 16 | 16 | 896,094 | 594,665 | 389.8s | 140.2s |
Refund ledger | 8/13 | 8/13 | 21 | 32 | 1,309,483 | 1,817,351 | 685.8s | 294.5s |
Roster sync | 8/13 | 7/13 | 13 | 22 | 609,233 | 1,119,664 | 505.1s | 201.8s |
Vendor directory | 11/13 | 12/13 | 16 | 25 | 820,613 | 1,242,645 | 788.5s | 231.5s |
Ticket sync | 17/24 | 20/24 | 23 | 26 | 1,745,612 | 1,277,059 | 713.5s | 247.7s |
Both models ran as the agent over the hosted Composio MCP router: Kimi K3 under the pi agent harness at max reasoning, GPT 5.6 (Sol tier) under Codex CLI. Kimi counts are total runtime tokens (input + output); GPT’s column is input tokens, with output at 5.9K to 10.3K per task. GPT 5.6 was faster on wall-clock and finished Ticket sync at 20/24 where Kimi took 713.5s to reach 17/24.
On pass/fail, they tied. Kimi K3 scored 7/12, 58%. GPT 5.6 scored 7/12, 58%. The pass rate was the same. Both cleared the historical seven and both went 0/5 on the frontier-kill workflows.
Runtime separated them. GPT 5.6 was faster on every frontier-kill task in the table: 140.2s vs 389.8s on Invoice sync, 294.5s vs 685.8s on Refund ledger, 201.8s vs 505.1s on Roster sync, 231.5s vs 788.5s on Vendor directory, and 247.7s vs 713.5s on Ticket sync. Tool calls were messier: Kimi used fewer calls on Refund, Roster, Vendor, and Ticket, while Invoice was dead even at 16 each. Token columns use different accounting: Kimi is listed as runtime tokens and GPT as input tokens. On wall clock, GPT reached the same 7/12 much faster.
Findings
Task for task, this is how the shared 12 scenarios shook out.
Task | Band | Kimi K3 | GPT 5.6 |
|---|---|---|---|
CRM identity dedup | Historical | ✅ | ✅ |
Calendar free/busy | Historical | ✅ | ✅ |
Recurring instance repair | Historical | ✅ | ✅ |
Drive external-share audit | Historical | ✅ | ✅ |
Gmail label batch | Historical | ✅ | ✅ |
GitHub access audit | Historical | ✅ | ✅ |
GitHub / Linear reconciliation | Historical | ✅ | ✅ |
Invoice sync | Frontier kill | ❌ 8/13 | ❌ 8/13 |
Refund ledger | Frontier kill | ❌ 8/13 | ❌ 8/13 |
Roster sync | Frontier kill | ❌ 8/13 | ❌ 7/13 |
Ticket sync | Frontier kill | ❌ 17/24 | ❌ 20/24 |
Vendor directory | Frontier kill | ❌ 11/13 | ❌ 12/13 |
Solved | 7/12 | 7/12 |
Fractions on the failed rows are partial-credit verifier checks passed before the exact-final-state bar. Both models cleared the historical band 7/7 once Salesforce and HubSpot were connected in the tool-router session so CRM identity dedup could be attempted.
The pass/fail tie held across the suite: Kimi K3 solved 7/12, GPT 5.6 solved 7/12, so both land at 58%. The split was identical: both went 7/7 on the historical band and 0/5 on the frontier-kill band. The failed frontier rows show where exactness broke.

Invoice sync was the first shared miss. The job was to skip two expired invoices, Larkspur Beacon and Kestrelbarge Metals, append only the survivors, reply, and tally. Kimi K3 got 8/13 and recorded both expired invoices. GPT 5.6 also got 8/13 and missed the identical five checks: the two expired exclusions, exact ledger rows, exact ops-thread tally, and leaving excluded threads untouched. The failure shape matched across models: an exclusion slip cascaded into ledger and tally failures.
Refund ledger repeated the same failure pattern with different nouns. The task was to skip the camera and mattress chargebacks, append the valid refunds, reply, and tally. Kimi K3 missed both chargeback exclusions, exact ledger rows, exact ops-thread tally, and excluded-threads-untouched. GPT 5.6 missed the exact same five checks. Both landed at 8/13. That failure pattern pointed to disqualified-record discipline more than ledger mechanics.
Roster sync is the one frontier row where Kimi K3 beat GPT 5.6. Kimi still failed the task at 8/13, missing the two stale-request exclusions, the exact assignment rows, the exact ops-thread tally, and excluded-threads-untouched. But it did post the per-cover replies. GPT 5.6 got 7/13 because it missed the same exclusion and exact-set checks and also dropped the required per-cover replies. On that workflow, Kimi handled a required messaging step GPT skipped.
Ticket sync is where GPT 5.6 put the most distance between them. Kimi K3 got 17/24 after letting through three tickets blocked by registration, domain, initials, or lapsed-account rules, plus a setup request near the eligibility boundary. It also missed exact ledger rows and the exact ops-thread tally. GPT 5.6 got 20/24 because it enforced those registration-gated exclusions. It still let the setup request through, missed exact ledger rows and exact ops-thread tally, and touched at least one excluded thread, so it did not clear the final-state bar. But 20/24 was the highest frontier partial here, and the difference was concrete: GPT held the registration-gated line, Kimi did not.
Vendor directory was closer, but GPT 5.6 still edged it. Here the agent had to append vendor payouts, skip the phantom Northbay vendor, reply per notice, and tally. Kimi K3 got 11/13. It correctly excluded the phantom Northbay vendor, then missed the exact payout-row set and the ops-thread tally. GPT 5.6 got 12/13. It also excluded the phantom vendor, got the tally right, and only missed the exact payout-row append.
The efficiency gap was wider than the score gap. GPT 5.6 finished its cases in 140s to 295s. Kimi K3, running pi agent at max reasoning, took 390s to 789s. The largest outlier was Ticket sync: GPT reached 20/24 in 247.7s, while Kimi took 713.5s and 1.75M runtime tokens to reach 17/24. That is more than 11 minutes and a 1.75M-token runtime, with the registration-gated tickets still slipping through.
GPT was faster even though Kimi K3 used fewer tool calls on several cases. Kimi used 13 tool calls on Roster sync and 16 on Invoice sync and Vendor directory, even while losing badly on wall-clock. I’d call GPT faster, with tool-call load depending on the case.
Cost is the next sanity check, because that 713.5s, 1.75M-token Ticket sync run is only useful if the extra thinking is cheap enough.
What it costs

I estimated dollars from token counts, without cache-hit assumptions. I priced every counted token at the uncached list input rate. Because I ignored cache hits, the dollar numbers below are rough ceilings; the ratio is the part I’d use.
Model | Total suite tokens | Est. cost for 12 scenarios | Est. cost per scenario |
|---|---|---|---|
Kimi K3 | ~5.6M | ~$17 | ~$1.39 |
GPT 5.6 | ~6.5M | ~$32 | ~$2.69 |
The estimate uses the current list input rates: Kimi K3 at $3 per 1M input tokens, and GPT 5.6 Sol at $5 per 1M input tokens. Kimi’s cached input rate is lower, but I ignored caching here on purpose to keep the comparison conservative. (kimi.com)
Across the suite, GPT 5.6 cost about 1.9x as much and still did not buy extra passes. Both landed at 7/12. GPT did buy speed, and it had two closer frontier-case misses. Kimi’s max-reasoning run lined up with its one frontier-row edge, Roster sync.
At 1,000 runs, this estimate turns into roughly $1,390 for Kimi K3 versus $2,690 for GPT 5.6. I’d still rerun the math against your own cache hit rate before shipping anything expensive, but that is a roughly $1,300 spread before cache behavior.
Verdict

Tied at 7/12. Each model cleared the historical 7/7 and missed all five frontier-band tasks. GPT 5.6 was the faster pick, with a wide wall-clock gap: 140s to 295s versus Kimi in the 390s to 789s range at max reasoning.
Kimi K3 has the better case for workflows that care about getting every outbound reply posted, even when the ledger state is messy. Roster sync is the clearest example: Kimi hit 8/13 because it posted the per-cover replies GPT dropped, while GPT landed at 7/13. It also used fewer tool calls on several cases, including 13 on roster and 16 on invoice and vendor. If your bottleneck is tool-call count rather than wall-clock time, Kimi belongs in the comparison.
For GPT 5.6, the case is speed and closer frontier partials. Ticket sync was the widest gap: GPT hit 20/24 in 247.7s, while Kimi took 713.5s and 1.75M runtime tokens to reach 17/24. The registration-gated exclusions decided that one. Vendor directory also went GPT’s way, 12/13 vs 11/13, because it got the tally right after excluding the phantom Northbay vendor.
This was one run across 12 scenarios, so I would treat the result as directional. On normal app-agent work, the historical band here is a useful reference point: both models cleared it. These tasks were built to stress exclusion discipline, exact row sets, and tallies. The recurring failure pattern was simple: a disqualified item sneaks in, then the exact-rows check and tally fall with it.
For my own workflow, I’d use GPT 5.6 when latency and frontier partial credit matter, especially on routing and exclusion-heavy jobs. I’d still keep Kimi K3 in the mix for reply-heavy workflows where missing a required response is worse than taking longer.