Docs

Get your team into a shared session in minutes.

Everything works in your browser at coshell.ai and from your terminal with the CLI. Here is how to get in, what the session screen does, and the commands to go deeper.

Quickstart

Two ways in, and you can mix them: everything works in your browser at coshell.ai, and from your terminal with the CLI. Each step shows both.

1
Get in
In the browser

Open coshell.ai, create an account, and name your org. The first screen asks where your first drive should run.

From the terminal

Install the CLI and run coshell signup. It creates the account, names the org, and enrolls this machine as your first drive in one go.

curl -fsSL https://coshell.ai/install | bash
coshell signup
2
Create a drive
In the browser

In the app, choose New drive, pick a machine you control or a one-click provider, and paste the two commands it shows you. The drive appears in the left column when it is online.

From the terminal

On any machine you want to use as a drive, run coshell host init. Name it after a project or workstream.

$coshell host init
3
Open the live session
In the browser

Click the drive, open a project folder, and start a session. You get the agent transcript on the left and the side panel on the right: Chat, Plan, Deep Review, Browser, and Review.

From the terminal

Attach to the same drive from your terminal. Same session, same presence, same chat.

$coshell attach my-project
4
Bring your team in
In the browser

Invite a teammate to the org. They join the drive from a browser, see the session in the list, and can prompt the same agent immediately.

From the terminal

Teammates can attach from their own terminals instead. Presence, chat, and follow work the same in the TUI.

$coshell attach my-project

The session screen

Everything in the browser happens on one screen. The transcript is where the team prompts the agent; the side panel is where the team talks, plans, reviews, and looks at what the agent built.

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
  1. 1
    Session tabsEvery open session on this drive. The dot beside a title means it is tiled in grid mode. The plus opens a new session.
  2. 2
    TranscriptPrompts carry the name of the person who sent them. Tool calls, edits, and test runs land inline. Queued prompts wait at the bottom until the agent is free.
  3. 3
    ComposerAsk anything, / for commands, @ for context. Pick the model per session; admins choose which models the team can use.
  4. 4
    Side panelChat with the people in the session, read and comment on the plan, run a Deep Review of the branch, open the running app in the Browser tab, and read the diff in Review.
  5. 5
    VisibilityOpen to the drive, shared with named teammates, or private to you. Change it any time from the Open button.
  6. 6
    Tab and grid modeSwitch between one session at a time and a tiled grid of several. Cmd+Shift+G on a Mac, Ctrl+Shift+G elsewhere.

Working in the app

Prompt togetherAnyone in the session can prompt. If the agent is busy, prompts queue in the open with a name on each, and the queue strip shows what is next.
ChatEach session has its own chat. @ a teammate to notify them, @ a file to point at it, and @coshell to ask the assistant what the team is working on.
PlanPlans and specs live in the Plan tab. Approve a plan, execute it step by step with each step verified, and comment on any line while the agent works.
BrowserEvery dev server on the drive shows up as a Browser tab. Teammates see the same page and each other's cursor. Inspect pins comments on elements and sends them to the agent as one prompt.
Review and Deep ReviewReview shows the changed files and diffs for the session. Deep Review checks the branch against main and lists findings you can send to the agent or dismiss.
FollowFollow a teammate from the roster and your view tracks theirs: the session, the file, even their cursor in the preview. Stop any time.
Grid modeTile as many sessions and terminals as you want in one window. Split a pane, zoom it, or switch back to tabs.
Any deviceThe session lives on the drive, not in your browser. Open it from a laptop, the terminal, or a phone.

Drives

A drive is the machine your team works on: the repo, the environment, the running app, and every session. It runs wherever you choose, binds to localhost, and connects out to coshell.ai over one authenticated tunnel. Setting one up on a laptop, a Mac mini, a VM, or a one-click provider, and keeping it running, is covered in the self-host guide.

Attach with your stock OpenCode CLI

Coshell does not fork the protocol. The OpenCode CLI you already have attaches to a drive unchanged, so you are never locked to our interface.

coshell token new my-project
export OPENCODE_SERVER_PASSWORD=cosh_pat_…
opencode attach https://your-drive.coshell.ai

You can also mint a per-drive token from the dashboard, under CLI access.

Core concepts

DrivesA drive is your team's persistent cloud workspace: the repo, the environment, and your sessions, kept warm between sessions. Pricing is free to self-host, so teams keep a drive per project.
Live sessionsInside a drive, everyone works in the same live session: one agent, one filesystem, one terminal, and an integrated browser preview. It is closer to a Google Doc than to git.
OverlapWhen two agents reach for the same lines of the same file, Overlap catches it and steers the second edit before it clobbers the first. It works across every model and fails open, so it never blocks your editing.
Presence and followSee who is in the session and what they are doing. Follow a teammate to watch them steer the agent in real time.
Integrated browser previewA drive runs your app and shows it live in an integrated browser preview. When the agent ships a change, everyone in the session sees it reload, so you review the running app together, not a diff.
Your modelsRun 70+ models on your own keys, use the included models, or, on Enterprise, route through Amazon Bedrock in your own AWS account. Admins choose the allowed set per drive.
Per-session privacyEvery session has its own access control: private to you, shared with named teammates, or open to the drive. See the security details.
Push to your real gitWork in a drive lands in your own repositories as normal commits and pushes, so your existing branches, reviews, and CI keep working. Nothing you build is trapped in Coshell.

CLI reference

Prefer the terminal? Everything here is also in the browser, but these are the commands you will use most. Run any command with --help for the full options.

coshell signupCreate an account, name your org, and enroll this machine as your first drive, in one command.
coshell loginSign in. Add --web to sign in through the browser, including GitHub.
coshell attach <name>Open a drive in your terminal. Run coshell with no command to pick one.
coshell drivesList your drives and their status.
coshell drives info <name>Show a drive's details.
coshell host initEnroll this machine as a self-hosted drive. Run coshell host add to enroll another one on the same machine.
coshell host statusShow the self-hosted drives running on this machine.
coshell host updateUpdate a drive's runtime to the latest published version and restart it. Updates every drive enrolled here when you leave the slug off.
coshell host unenroll <slug>Stop a self-hosted drive, delete it on Coshell, and remove its local state.
coshell host doctorCheck this machine's fitness for self-hosting before you enroll it.
coshell run "<prompt>"Run an agent task on a drive. Add --detach to keep it running in the background.
coshell runs / coshell logs <id> -fList agent runs, or stream a run's output live.
coshell token new <drive>Mint a per-drive access token for attaching the stock OpenCode CLI.
coshell upgradeUpdate Coshell to the latest version.

A self-hosted drive uses the machine it runs on, so there is no size to pick. See pricing: free to self-host, and Enterprise when you need SSO, an audit trail, or Coshell on your own infrastructure at scale.

Docs, answered

Coshell runs 70+ models. Bring your own provider keys, use the included models, or, on Enterprise, route every model call through Amazon Bedrock in your own AWS account. Admins choose the allowed set of models per drive.

Work in a drive lands in your own repositories as normal git commits and pushes, so your existing branches, reviews, and CI keep working as they do today. Nothing you build is trapped in Coshell: your code stays in the git you already use.

Overlap. Everyone in a drive works on one shared filesystem, so there is no diverging copy to lose. And when two agents reach for the same lines of the same file, Overlap catches it and steers the second edit before it lands: proceed if the changes are compatible, take other lines, wait, or let the first land first. It runs across every model and fails open, so it never blocks editing.

Yes. Coshell does not fork the protocol, so the stock OpenCode CLI attaches to a drive unchanged. Mint a per-drive token with coshell token new, set OPENCODE_SERVER_PASSWORD, and run opencode attach against your drive's address.

Start a shared live session.

Launch a drive in the browser, or attach from the CLI. Your whole team works in the same live session, on the same codebase.