Compare

Cursor is where one developer codes with AI. Coshell is where the whole team does.

Cursor is an excellent AI editor for one person, and since March its cloud agents can run their tool calls on machines you own. Coshell is a different thing: the shared live session your whole team and its agents work in together, with the whole agent running on a machine you control. Here is the honest comparison.

Cursor is one of the best AI editors there is, and we are not trying to beat it.

Coshell is not an editor. It is the shared session the whole team works in, with the agent, at the same time, on machines you control.

AOrders dashboard for acme-webARate limiter rolloutADev server on the VMDProject pending statusOCount to 120
Open
Who can access
Openeveryone on the drive
SharedTom, Lena
Privatejust me
Orders dashboard for acme-web
feat/orders TRLF
Add the orders overview to the dashboard: revenue today, order count, and average order value, then the recent orders table.Priya Nair
Explored4 reads
EditOrdersDashboard.jsx /src/pages/+77−0
Editindex.css /src/+33−0

Overview is in with the three stat cards and the recent orders table. Live on http://localhost:5173.

2 Changed files+110 −0
src/pages/OrdersDashboard.jsx+77−0
src/index.css+33−0
Can the stat cards stretch to equal height? The average order card is shorter than the others.Lena Fischer
Editindex.css /src/+4−1

Cards stretch now. The grid uses align-items: stretch and each delta line is pinned to the bottom with margin-top: auto.

Add a 7 day / 30 day toggle above the chart. Default to 7 days.Tom Reyes
EditOrdersDashboard.jsx /src/pages/+31−4
Shellbun test

Added the toggle. 30 days aggregates by week and the axis relabels. 8 tests pass.

Move the delta onto the card’s top row, right aligned against the label.Priya Nair
Editindex.css /src/+6−2

Delta sits on the top row now, right aligned, so the numbers line up down the column.

Use var(--brand) for the Export button, not a hardcoded hex.Tom Reyes
EditOrdersDashboard.jsx /src/pages/+1−1
1 prompt queuedClear queue
Lena FischerMake the Refunded pill amber. Red reads like an error.
Claude Sonnet 5
Model
Claude Sonnet 5
Claude Opus 5
GPT-5.5
Gemini 3.5 Pro
Muse Spark 1.3 Free
Big Pickle
Rate limiter rollout
feat/rate-limit TR
Start the rate limiter plan. Token bucket per API key, 100 a minute.Priya Nair
Explored6 reads
EditrateLimit.ts /src/middleware/+64−0
Shellbun test

Token bucket middleware is in with 12 tests. Step 1 verified.

Keep the bucket in Redis, we run three replicas.Tom Reyes
EditrateLimit.ts /src/middleware/+22−9

Moved the bucket to Redis with a Lua script so the check is atomic across replicas. 14 passing. Steps 2 and 3 verified.

Execute step 4. Start with the webhooks route, I already reviewed the limiter.Lena Fischer
ReadrateLimit.ts
Editwebhooks.ts /src/routes/+14−2
Shellbun test

Webhooks now share the limiter. 16 passing. Marking step 4 verified and moving to the flag rollout.

Thinking
Claude Sonnet 5
Model
Claude Sonnet 5
Claude Opus 5
GPT-5.5
Gemini 3.5 Pro
Muse Spark 1.3 Free
Big Pickle
Dev server on the VM
main TRLF
Start the dev server on this VM so the team can preview the orders dashboard.Priya Nair
Shellwhich node npm bun

Node.js isn’t installed on this VM, so I can’t start the dev server yet. I can install it with the system package manager and then run it. Want me to?

Yes, but use the LTS build, the API image pins Node 22.Lena Fischer

Understood, Node 22 LTS from NodeSource.

go ahead and install it and get the server started.Tom Reyes
Shellcat /etc/os-release 2>/dev/null | head -5; which apt-get
Shellsudo apt-get update -qq && sudo apt-get install -y -qq nodejs npm
Shellnode --version && npm --version
Shellnpm install
Shellnpm run dev &

Server is running at http://localhost:5173/, Vite dev server ready in 284ms.

Big Pickle
Model
Claude Sonnet 5
Claude Opus 5
GPT-5.5
Gemini 3.5 Pro
Muse Spark 1.3 Free
Big Pickle
Project pending status
feature/discounts LFTR
What is the status of the discounts branch?Tom Reyes
Shellgit log --oneline feature/discounts -8

Eight commits since main: the coupon model, the checkout hook, and a migration. No PR yet.

Do we have a written plan for the discounts work?Priya Nair

No. You have no PLAN, TODO, or roadmap file.

Your closest thing to a plan is .coshell/review/dod.md: integer cents, handled promises, no focused tests, no dead exports.

Draft one from the commits and the dod file, then open it in the Plan tab.Lena Fischer
Readdod.md
Editdiscounts.md /docs/plans/+48−0

Drafted docs/plans/discounts.md with five steps. It is waiting for approval in the Plan tab.

Muse Spark 1.3 Free
Model
Claude Sonnet 5
Claude Opus 5
GPT-5.5
Gemini 3.5 Pro
Muse Spark 1.3 Free
Big Pickle
Count to 120
main LFTR
Quick sanity check on Big Pickle before we let it near the repo. Say hi.Tom Reyes

Hi. Big Pickle here, ready when you are.

Without using any tools, list the first ten primes.Priya Nair

2, 3, 5, 7, 11, 13, 17, 19, 23, 29.

Without using any tools, count from 1 to 120, one number per line, then stop.Lena Fischer

1
2
3
4
5
6
7
8
9
10
11
12

Thinking
Big Pickle
Model
Claude Sonnet 5
Claude Opus 5
GPT-5.5
Gemini 3.5 Pro
Muse Spark 1.3 Free
Big Pickle
Chat2PlanDeep ReviewBrowserReview
Morning. Plan is approved, I’m starting the orders dashboard on acme-web.8:52
TR
Tom Reyes8:55I’ll take the limiter then. Which drive?
office-mac-mini has Redis running, use that one.8:55
LF
Lena Fischer9:10Back online. Anything blocked?
TR
Tom Reyes9:11Nope. OrdersDashboard.jsx is Priya’s, limiter is mine, webhooks are free if you want them
LF
Lena Fischer9:12Taking webhooks.
Lena the Refunded pill should be amber, not red. I queued a prompt for it9:30
TR
Tom Reyes9:41Picking up rateLimit.ts for the webhooks route
LF
Lena Fischer9:42Tom I already touched the 429 path there, check the overlap note before you push
Step 4 in the plan is mine, I’ll ping when the tests are green
Sounds good. I’ll review after, then we roll the flag.9:44
Mention
CScoshellassistant
TRTom Reyeson the drive
LFLena Fischeron the drive
OrdersDashboard.jsxfile
index.cssfile
rateLimit.tsfile
webhooks.tsfile
App.jsxfile
Rate limiter rolloutDetailsWorking
Spec approvedPlan approvedExecuting 3/5

Goal

Protect /v2 from bursty API keys without slowing normal traffic. One key should never be able to starve the others.

Approach

A token bucket per API key, 100 requests per minute, stored in Redis so all three replicas share state. Over-limit requests get a 429 with a Retry-After header. Ship behind the rate_limit_v2 flag and roll out gradually.

Constraints

  • No new dependencies beyond ioredis, which we already run.
  • p99 latency budget: +2 ms on the hot path.
  • Existing tests stay green at every step.

Verification

bun test after every step. Load test with 1k keys before the flag moves to 50%. Watch 429 rate and p99 in the dashboard for a day at 10%.

Steps
Token bucket middleware with testsVerified
Add
Redis-backed bucket, atomic across replicasVerified
Add
Retry-After header on 429 responsesVerified
Add
Apply the limiter to /v2/webhooksLena, in progress
Add
Roll out behind the rate_limit_v2 flagWaiting
Add
on step 5, Roll out behind the flag
PN
Priya Nair2m
Roll out to 10% of keys first, then 50%. Add both as substeps.
LF
Lena Fischernow
Agreed, updating the step before the agent gets there.
Deep Review
feat/orders against main
Run review
No review yet. Run one when the branch is ready.
HighExport button colour is hardcodedOrdersDashboard.jsx:41
The Export button sets #5B4CF0 inline while every other control reads var(--brand). Tom’s follow-up prompt fixes it; verify once that edit lands.
Send fix to agentDismiss
MediumNothing tests the stat cardsOrdersDashboard.jsx
No test asserts that the three stat cards render or that a delta shows its direction. A render test with the card labels would catch a regression.
Send fix to agentDismiss
LowUnused importApp.jsx:3
useMemo is imported and never used.
Send fix to agentDismiss
Port 5173
Dev servers on this drive
Port 5173vite
Port 3000next
Port 8080api
Port...ShareInspect
acme
DashboardOrdersCustomersSettings
Orders
Last 7 days · updated just now
FilterExport
Revenue today$18,420+12% vs last week
Orders342+8%
Average order$53.86−3%
Revenue, last 7 days7 days30 days
MonTueWedThuFriSatSun
OrderCustomerStatusTotal
#10428Maya Osei$128.40
#10427Theo LindqvistRefunded$64.00
#10426Ada Mensah$212.75
#10425Ravi ShankarPending$39.90
Tom
3 Changed files+112 −3
src/pages/OrdersDashboard.jsx+77−0
38 <div className="toolbar">
39+ <button className="btn">Filter</button>
40+ <button className="btn primary" style={{ background: '#5B4CF0' }}>
41+ Export
42 </div>
src/index.css+33−0
112+ .stat { border: 1px solid #e6e6e6; border-radius: 10px; }
113+ .stat .delta.up { color: var(--ok); }
114+ .status.refunded { background: var(--danger-bg); }
src/App.jsx+2−3
3- import { useMemo, useState } from 'react'
3+ import { useState } from 'react'
18- <Summary />
18+ <Summary />
19+ <OrdersDashboard />
Orders dashboard for acme-web
acme-vm
feat/orders
Add the orders overview to the dashboard: revenue today, order count, and average order value, then the recent orders table.Priya Nair
Explored4 reads
EditOrdersDashboard.jsx /src/pages/+77−0
Editindex.css /src/+33−0

Overview is in with the three stat cards and the recent orders table. Live on http://localhost:5173.

2 Changed files+110 −0
src/pages/OrdersDashboard.jsx+77−0
src/index.css+33−0
Can the stat cards stretch to equal height? The average order card is shorter than the others.Lena Fischer
Editindex.css /src/+4−1

Cards stretch now. The grid uses align-items: stretch and each delta line is pinned to the bottom with margin-top: auto.

Add a 7 day / 30 day toggle above the chart. Default to 7 days.Tom Reyes
EditOrdersDashboard.jsx /src/pages/+31−4
Shellbun test

Added the toggle. 30 days aggregates by week and the axis relabels. 8 tests pass.

Move the delta onto the card’s top row, right aligned against the label.Priya Nair
Editindex.css /src/+6−2

Delta sits on the top row now, right aligned, so the numbers line up down the column.

Use var(--brand) for the Export button, not a hardcoded hex.Tom Reyes
EditOrdersDashboard.jsx /src/pages/+1−1
Claude Sonnet 5
ChatPlanReviewDeep reviewBrowserTerminal
Rate limiter rollout
office-mac-mini
feat/rate-limit
Start the rate limiter plan. Token bucket per API key, 100 a minute.Priya Nair
Explored6 reads
EditrateLimit.ts /src/middleware/+64−0
Shellbun test

Token bucket middleware is in with 12 tests. Step 1 verified.

Keep the bucket in Redis, we run three replicas.Tom Reyes
EditrateLimit.ts /src/middleware/+22−9

Moved the bucket to Redis with a Lua script so the check is atomic across replicas. 14 passing. Steps 2 and 3 verified.

Execute step 4. Start with the webhooks route, I already reviewed the limiter.Lena Fischer
ReadrateLimit.ts
Editwebhooks.ts /src/routes/+14−2
Shellbun test

Webhooks now share the limiter. 16 passing. Marking step 4 verified and moving to the flag rollout.

Thinking
Claude Sonnet 5
ChatPlanReviewDeep reviewTerminal
Dev server on the VM
acme-vm
main
Start the dev server on this VM so the team can preview the orders dashboard.Priya Nair
Shellwhich node npm bun

Node.js isn’t installed on this VM, so I can’t start the dev server yet. I can install it with the system package manager and then run it. Want me to?

Yes, but use the LTS build, the API image pins Node 22.Lena Fischer

Understood, Node 22 LTS from NodeSource.

go ahead and install it and get the server started.Tom Reyes
Shellcat /etc/os-release 2>/dev/null | head -5; which apt-get
Shellsudo apt-get update -qq && sudo apt-get install -y -qq nodejs npm
Shellnode --version && npm --version
Shellnpm install
Shellnpm run dev &

Server is running at http://localhost:5173/, Vite dev server ready in 284ms.

Big Pickle
ChatPlanReviewDeep reviewBrowserTerminal
Project pending status
office-mac-mini
feature/discounts
What is the status of the discounts branch?Tom Reyes
Shellgit log --oneline feature/discounts -8

Eight commits since main: the coupon model, the checkout hook, and a migration. No PR yet.

Do we have a written plan for the discounts work?Priya Nair

No. You have no PLAN, TODO, or roadmap file.

Your closest thing to a plan is .coshell/review/dod.md: integer cents, handled promises, no focused tests, no dead exports.

Draft one from the commits and the dod file, then open it in the Plan tab.Lena Fischer
Readdod.md
Editdiscounts.md /docs/plans/+48−0

Drafted docs/plans/discounts.md with five steps. It is waiting for approval in the Plan tab.

Muse Spark 1.3 Free
ChatPlanReviewDeep reviewTerminal
Count to 120
acme-vm
main
Quick sanity check on Big Pickle before we let it near the repo. Say hi.Tom Reyes

Hi. Big Pickle here, ready when you are.

Without using any tools, list the first ten primes.Priya Nair

2, 3, 5, 7, 11, 13, 17, 19, 23, 29.

Without using any tools, count from 1 to 120, one number per line, then stop.Lena Fischer

1
2
3
4
5
6
7
8
9
10
11
12

Thinking
Big Pickle
ChatPlanReviewDeep reviewTerminal

The difference is not the editor. It is the layer between the people.

Single-player vs sharedCursor runs on each person's machine, in each person's copy. Coshell is one live session everyone joins, on a drive you host.
Prompt the same agentIn Coshell, teammates prompt one agent in one live session and watch its work land. A Cursor cloud agent run is one worker per chat, which teammates open by link.
No copy to merge backOne shared environment means there is no diverging copy to reconcile later.

Self-hosted means something different on each side.

The agent runs on your machine, not only its tools.Cursor's docs: Cursor runs the agent loop, inference, and planning, and your worker performs file edits and terminal commands. A self-hosted Coshell drive runs the agent itself on your laptop, VM, or container.
Your code goes to your model provider, under your key.During a Cursor run the worker sends file contents, terminal output, diffs, and screenshots to Cursor. In Coshell the drive calls the provider you chose with your key. The Coshell edge relays the browser session and never makes a model call.
A drive is a place, not a task sandbox.Cursor's pools schedule a worker per run and hibernate it between turns. A Coshell drive is a persistent place the team keeps: files, sessions, and history stay, asleep when idle, awake in seconds.

Cursor vs Coshell, side by side.

CursorCoshell
What it isAn AI editor on your machine, plus cloud agents that can run their tool calls on machines you ownA shared live session your team and its agents work in, on a drive you host
Single-player or sharedSingle-player: one copy per person in the editor, one worker per cloud agent runShared: one live session for the whole team, or private when you want it
Real-time multiplayerTeammates can open a cloud agent run by link, read-only unless admins enable follow-upsSeveral people prompt the same agent in one session, at the same time, with a name on every prompt
Overlap detectionSeparate runs land as separate pull requests; you reconcile in reviewAn overlap layer catches the same concern being changed twice, while it happens
Load the codebase onceEach person's editor indexes its own copyThe shared session loads context once, for everyone
What runs on your machineThe editor. For cloud agents, the tool calls: file edits, terminal commands, local MCP, computer use. The agent loop stays in Cursor's cloudThe whole agent runtime, with the files, the terminal, and the preview
Where inference runsCursor's cloud, on Cursor's Composer models and frontier models through CursorYour provider, under your key, or your Claude Pro or Max subscription
What leaves your networkFor cloud agents: file contents, terminal output, diffs, screenshots, and MCP results, sent to Cursor (per their docs)Prompts to your model provider. The Coshell edge relays the browser session and never sees a model call
Pools and autoscalingNamed pools, a controller, autoscaling, hibernate and restore (ahead of ours; Enterprise plan)Not a pool. One drive per project or workstream, with as many sessions as you want
Computer useClick, type, screenshot, and drive a browser on a Linux or Mac worker's own desktop; watch or take overA cloud browser (Notte, on your key) the agent drives and you can take over and hand back, plus live preview of localhost in the session
Per-session privacyThe editor is local. Cloud runs are visible to the Cursor team they started under; Privacy Mode keeps code out of trainingPer session: private, named teammates, or whole drive
ModelsBuilt-in models, plus your own keys in the editor; cloud agents billed through your Cursor plan70+ models on your own keys, including a Claude Pro or Max subscription
Where you work fromThe desktop app, web, iOS app, Slack, GitHub, Linear, APIAny browser, the CLI, VS Code, or your phone
GitCommits from your local checkout; cloud agents push a branch and open a pull requestCommits by the prompter, pull requests as the connected person, no token on the drive
Self-hostingTool execution on your machines; the agent and inference stay in Cursor's cloud. Pools need EnterpriseThe whole agent on your laptop, VM, or container, free; Enterprise adds org-wide on-prem
PricingHobby free; Pro from $20 a month per person; Teams $40 per user a month; pools on EnterpriseFree to self-host; Enterprise is paid
Best forOne developer moving fast in their own editor, with cloud agents that need your VPN, caches, or GPUsA team working with its agents in the same live session, on its own machines

Compare with

Built on OpenCode

Cursor vs Coshell, answered

Not exactly. Cursor is an AI editor that runs on your machine for one person, and its cloud agents are good at long tasks that end in a pull request. Coshell is a shared session your whole team joins to work with the same agents at the same time, on a drive you host. Many teams use both: Cursor for solo editing, Coshell when the work is shared. If you searched Cursor vs coshell expecting two editors, that is the key difference: one is an editor, the other is a shared session.

In the editor, no: each person edits their own copy of the code on their own machine. For cloud agents, partly: per Cursor's docs a teammate can open a run by its link to read the conversation and the changes, and a team admin can turn on follow-ups so teammates can send messages into it, but each chat is claimed by one worker. Coshell starts from the other end. Several people prompt the same agent in one live session at the same time, every prompt and commit carries who sent it, and you can keep a session private when you want to.

No. They self-host different layers. With Cursor, your machine runs the tool calls: file edits, terminal commands, local MCP, computer use. Cursor's docs say the agent loop, inference, and planning run in Cursor's cloud, and that during a run the worker sends file contents, terminal output, diffs, and screenshots to Cursor. With Coshell, the agent itself runs on your machine and calls your model provider with your key. Nothing about the run depends on our cloud except signing your team in and relaying the session to their browsers.

The model call never does. Your drive sends prompts straight to the provider you chose, under your key or your Claude subscription. What passes through Coshell is the session itself: the drive keeps an outbound, encrypted tunnel to our edge, which signs your teammates in and relays what they see in the browser. The Enterprise tier runs that edge on your own infrastructure too, so nothing leaves your environment.

No. Two things prevent it. Unlike each person editing their own checkout, everyone shares one running copy, so there is no divergent branch to lose in a later merge. And when two efforts reach for the same concern, the overlap layer catches it and steers the second one before it overwrites the first.

Fleet scheduling. A pool is a named queue of workers with a controller that claims requests, spawns machines on demand, autoscales on queue depth, and hibernates idle machines until the next prompt, on Kubernetes, Lambda, Modal, E2B, and others. Mentions in Slack, GitHub, and Linear route into a pool by name. If you want a fleet of short-lived workers, one per task, Cursor's pools are built for that. A Coshell drive is the opposite shape: one persistent place per project that the whole team keeps, with as many sessions in it as you want.

Yes. Coshell runs on 70+ models with your own keys, and a drive runs the Claude Code binary on your Claude Pro or Max login if you have one. Work pushes to your real git repositories as a normal git operation. Self-host a drive on your own machine and the agent, the files, and the model calls all stay under your control; the Enterprise tier adds org-wide on-prem and SSO. Cursor's cloud agents run on the models Cursor offers, billed through your Cursor plan.

Nothing. Install the CLI, run coshell host init on a laptop, a VM, or a container, or deploy with one click on Railway, Render, or Northflank, and the whole team joins the same session in a browser. You bring the compute, so there is nothing for us to meter. Enterprise is the paid tier: SSO, an audit trail, and on-prem at scale.

Get your team in the same session.

Keep Cursor for solo work. When the work is shared, self-host a drive for free and put the whole team in one live session with the agent.