Back to articles

Cursor Shipped Composer 2. One API Call Told the Real Story.

Mar 22, 2026Dishant Sharma7 min read
Cursor Shipped Composer 2. One API Call Told the Real Story.

A developer named Fynn was debugging an API response. Not hunting for drama. Just testing Cursor's OpenAI-compatible endpoint on March 20, 2026.

The response came back with:

accounts/anysphere/models/kimi-k2p5-rl-0317-s515-fast

That's not a Cursor model name. That's Kimi. From Moonshot AI. A Chinese lab backed by Alibaba.

Fynn posted one line: "at least rename the model ID."

444,000 views. In one day.

This was one day after Cursor launched Composer 2 with a polished blog, custom benchmarks, and a pricing strategy that undercut everyone. "Frontier-level coding intelligence." Big claims. Zero mention of Kimi.

You've seen this before. A company ships something and calls it theirs. Someone pokes the API. The real answer shows up in a string nobody thought to rename before shipping.

i've done it too. Built things on top of other things and glossed over that detail because the work on top felt like the real story. It's a bad habit. But usually the stakes aren't $29.3 billion.

This wasn't just a PR miss. It touched open-source licensing, US-China geopolitics, and a valuation most companies would kill for. All from one unrenamed string.


What Cursor actually launched

The engineering was real. That part matters first.

Eight days before Composer 2 shipped, Cursor published CursorBench. A real internal evaluation framework built from actual developer sessions. Not synthetic problems. Not overly specific GitHub-style issues. Real queries, ambiguous prompts, multi-file tasks.

The numbers were solid. Composer 2 hit 61.7% on Terminal-Bench 2.0. That beat Claude Opus 4.6's 58.0. The price came in at $0.50 per million input tokens, 86% cheaper than Composer 1.5.

They also built compaction-in-the-loop RL. When the model hits a token limit, it pauses and compresses its own context to roughly 1,000 tokens. The RL reward covers the summarization steps too. So the model learns what to keep.

50% fewer compaction errors. 5x more token-efficient summaries. That's real work.

But the blog said "our first continued pretraining run" and stopped there. No base model named.


What the string decoded to

Here's what kimi-k2p5-rl-0317-s515-fast actually says:

  • kimi-k2p5: Kimi K2.5, Moonshot AI's open-weight model

  • rl: reinforcement learning post-training

  • 0317: March 17 training date

  • s515: internal experiment ID

  • fast: the optimized serving variant

The entire origin story. In a string. Shipped to production.

The first time i left an unintended trace in production, it was a debug variable named after the tutorial i'd copied from. A coworker found it in code review. That was embarrassing for a side project. This was a $29 billion company.

Cursor's VP Lee Robinson responded. First: "Yep, Composer 2 started from an open-source base!" Then under more pressure: "Only ~1/4 of the compute spent on the final model came from the base." And then, only when people pushed harder: "KIMI K2.5!!"

The exclamation marks made it worse.


The license nobody mentioned

Kimi K2.5 uses a Modified MIT License. One added clause:

If your product makes more than $20 million per month in revenue, you must prominently display "Kimi K2.5" in the UI.

Cursor's estimated monthly revenue: around $167 million. That's 8x over the threshold.

"Kimi K2.5" shown in Cursor's UI: nowhere.

Moonshot AI's head of pretraining, Yulun Du, posted publicly. Tagged Cursor's co-founder. Asked why they weren't respecting the license.

Two other Moonshot employees confirmed the issue on social media. Then both deleted their posts.

And then, within 24 hours, Kimi's official account posted a congratulatory message.

"Congrats to the @cursor_ai team on the launch of Composer 2!"

Same news cycle. Accusation to congratulations. The commercial partnership had existed the whole time through Fireworks AI. Moonshot's pretraining lead just didn't know about it when he posted.


Nobody wants to say "Chinese model"

Here's what i mean when i say this is an industry pattern and not a Cursor problem.

Windsurf is fine-tuning GLM-4.6 from Zhipu AI. Vercel integrated GLM-4.6 into its API services. Together AI deployed Alibaba's Qwen-3-Coder. On OpenRouter, four of the five most-used models globally are Chinese. Chinese model usage exceeded US model usage for two straight weeks in early March 2026.

The reason is boring and practical. These models are competitive. And they're cheaper.

Chamath Palihapitiya said it plainly: "Although the models of OpenAI and Anthropic perform well, they are simply too expensive."

But no US company wants "powered by Chinese AI" on its homepage right now. The DeepSeek moment in early 2025 scared enough people to make this politically uncomfortable. So the model IDs stay vague. The blogs don't name the base. And developers find out anyway when they poke the API on a random Wednesday night.


A brief tangent about model names

i've noticed AI model names are getting increasingly abstract. Kimi K2.5. Qwen-3-Coder. GLM-4.6. Composer 2.

Compare that to older software. MySQL. PostgreSQL. Linux. Those names told you something. Where it came from. What it was for.

Now everything gets a sleek name that reveals nothing. Partly marketing. But mostly anxiety. Nobody wants their product to sound like "another model." They want it to sound like a category.

i worked on a team where we spent two full days naming an internal tool. Two days. It was a Slack reminder bot. We called it something like "FlowSync." It sent reminders. That was it.

AI model naming has reached FlowSync levels across the whole industry. Cursor trained for months. Built genuinely useful infrastructure. Called the output "Composer 2." Because "Kimi RL fine-tune with Fireworks inference, March 17 build" wasn't going to trend on X.

Fair. But that's how you end up with an unnamed string doing the press release for you.


Who this actually hurts

The real damage here isn't Cursor's reputation. They'll be fine. Aman Sanger, Cursor's co-founder, said "It was a miss to not mention the Kimi base in our blog from the start." Honest. Probably enough.

But here's the part that doesn't resolve cleanly.

Kimi K2.5's license clause was written specifically for this scenario. Large commercial users above $20 million per month must display attribution. Moonshot wrote that clause knowing big companies would fine-tune their model and ship it without credit.

Cursor was 8x over the threshold. And Moonshot ultimately congratulated them.

Most people using Cursor don't need to care about any of this. The model quality is real. The RL work is genuine. Your code still compiles. But if you're an open-source model creator hoping your license terms mean something? This was not a good week. When a company at this revenue scale can skip attribution and get a congratulatory tweet instead of enforcement, the clause becomes decoration.

The enforcement gap is larger than the disclosure gap.


Final thought

The irony is that the real story would have been a good one.

"We took the best open-weight coding model in the world, ran 75% additional compute through continued pretraining and RL, and built something that beats Claude Opus 4.6 at a fraction of the cost." That's a story worth telling. It positions the engineering as the value, not the base weights.

Instead, Fynn's API debugger did the press release.

i keep thinking about him sitting there. Not looking for a scoop. Just testing an endpoint. Reading that string back. Probably double-checking it. Then posting anyway.

Good call, Fynn.

Recent posts

View all posts