Use case

Pair program with the agent, together.

Two engineers, one live session, one agent on one running drive. Stop trading a screen-share where one person drives and the other watches. *Both of you* prompt the same agent, on the same files and terminal, at the same time.

One of you drives, the other watches a video of your screen.

Both of you prompt one agent in one live session, together.

ACheckout form validation
Open
Who can access
Openeveryone on the drive
SharedTom, Lena
Privatejust me
Checkout form validation
feat/checkout-validation TR
Add inline validation to the checkout form: email, card number, and postcode.Priya Nair
Explored3 reads
EditCheckoutForm.tsx /src/checkout/+58−4

Validation runs on blur for each field. Errors render in a toast for now; tell me if you want them inline under the field.

Under the field, not a toast. Red text, 13px, same as the login form.Tom Reyes
ReadLoginForm.tsx
EditCheckoutForm.tsx /src/checkout/+12−6

Matched the login form’s FieldError component. Errors sit under each field now.

Disable Pay until every field is valid, and run the tests.Priya Nair
EditCheckoutForm.tsx /src/checkout/+5−1
Shellbun test checkout

Pay is disabled until the form validates. 9 tests pass, including the three new ones for the error states.

1 prompt queuedClear queue
Tom ReyesAccept US and EU postcodes too, not just UK.
Claude Sonnet 5
Model
Claude Sonnet 5
Claude Opus 5
GPT-5.5
Gemini 3.5 Pro
Muse Spark 1.3 Free
Big Pickle
ChatPlanDeep ReviewReview
TR
Tom Reyes10:02I’ll steer the copy and the error states, you take the tests?
Deal. Watching your prompts land.10:02
TR
Tom Reyes10:09Look at CheckoutForm.tsx line 41, the postcode regex is UK only
Good catch, queuing a prompt for that after the tests.10:10
Mention
CScoshellassistant
TRTom Reyeson the drive
LFLena Fischeron the drive
CheckoutForm.tsxfile
priceOrder.tsfile
rateLimit.tsfile
webhooks.tsfile
dod.mdfile
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/rate-limit 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
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 />

What pairing in Coshell actually looks like.

Not a screen-share and not two checkouts that merge later. One shared session on one running drive, with everything you need to work side by side. Every line below is running in production today.

Both of you prompt the same live agent

No driver and no watcher. Two engineers prompt one agent in one live session, on one running filesystem and terminal, and watch the same work land. Not two copies of the codebase trying to merge later.

Presence and follow, so you see each other's focus

See who is in the session and what they are looking at. Follow a teammate's view to ride along with their train of thought, and use the in-session chat overlay to talk without leaving the work.

Shared terminal and shared browser

The terminal and the integrated localhost browser are shared and auto-reloading, so you both see the same output and the same preview. Inspect an element, leave a comment, and send it straight to the agent.

Private when you start, shared when you are ready

Keep a session private while you sketch, share it with your pairing partner by name, or open it to the whole drive. Per-session access control means you decide the audience, session by session.

The codebase is loaded once, for both of you.

A drive stays warm in the cloud with your files, terminal, and dependencies ready. The agent reads the repo once for the session and holds it warm, so the two of you work against the same live state instead of each paying to load context on your own. Use 70+ models on your own keys, scoped per drive, and push to your real git when you are done. It sleeps when idle, and idle time is never billed.

Pairing in Coshell, answered

On a screen-share, one person types and everyone else watches a video of it. In Coshell you are both in the same live session, prompting the same agent on the same running drive. Your partner is not watching a stream of your machine, they are working in the environment with you, with their own prompts, presence, and follow.

You are prompting one shared agent on one running environment, not two copies that merge later, so there are no diverging changes to reconcile afterward. If work runs concurrently and two edits reach for the same lines, an overlap layer catches it before they clobber. The repo is read in once and stays warm for the session, so you are both working against the same live state.

Yes. Coshell works from any browser and from the CLI. Your partner can device-login and attach to the drive by name, and the stock OpenCode CLI attaches unchanged. You can be in the browser and they can be in the terminal, both in the same live session on the same drive.

Pair with the agent, in one live session.

Open a drive in the browser, or attach from the CLI. Bring your pairing partner into the same live session and prompt one agent together, on the same running drive.