Welcome to
The Office
Sign in with your access key
Ask your administrator for this key.
{{ loginError }}
{{ st.sev }}
{{ st.title }}
Overview
Chats
{{ crumbProject }}
Maintenance
{{ maintCrumb }}
Session
Administrator
Usage & billing
Accounts
Desk
{{ activeFullName }}
Nickname
{{ activeNick }}
Model
{{ activeModel }}
Account
{{ activeAccount }}
{{ acctPlan }}
{{ acctDeskCount }} desks here {{ acctSpend }}
Plan limits
{{ l.k }}
{{ l.val }}
Desks by state
Active
{{ activeCount }}
{{ g.label }}
{{ g.count }}
{{ d.name }}
{{ d.unread }}
{{ c.text }}
-
{{ d.nickWarn }}
No prefix in use yet.
{{ d.sub }}
{{ m.v }} /
Inactive
{{ freeCount }}
{{ fg.name }}
{{ m.v }} /
tank is dry — a boot will not get far
{{ f.slotLabel }} · free
Drop files here to add to chat
Today
{{ turnCount }} turns · {{ contextTokens }} tok
{{ paneLoadingText }}
Showing {{ paneRows }} of {{ paneRowsTotal }} messages - the beginning of this chat did not load.
Cooking up a fresh OS session
Please wait - booting the OS into this desk. The conversation appears here the moment the boot turn files its final log call.
Unable to load this chat
{{ paneErrorText }}
No turns filed yet
This desk's session is linked and its ledger is empty so far - the conversation appears here the moment a turn is filed, refreshed every 5 seconds. Watch opens the live chat.
No transcript on file for this chat
The OS transcript ledger holds nothing for this chat's session - it was started before the ledger existed, or its session does not file turns. The linker read the chat page and found no session it could honestly name. Watch opens the live chat; a desk cycled onto a fresh session files from its first turn.
Nothing is socketed on this desk - load a chat from the Chats page and its conversation appears here.
{{ t.who }}
{{ t.time }}
{{ t.elapsed }}
{{ t.model }} {{ t.tokens }}
{{ t.bodyNodes }}
{{ activeName }}
writing
{{ activeModel }}{{ liveElapsed }}
{{ at.name }}
{{ at.size }}
⏎ send · ⇧⏎ newline {{ contextPct }}% · {{ contextTokens }} tok
First run
The Office
No accounts connected
An account is a provider login held as a cookie jar in a headless browser. Each one comes with three desks — session slots that cannot be added to or removed. You load a chat into a slot, work, then release it.
{{ demoChat }}
a chat, from a project
One account
cookie jar
{{ s.n }}
{{ s.label }}
{{ s.sub }}
chats socket in
{{ demoChat }}
a chat, from a project
{{ demoHint }}
{{ x.label }}
{{ x.note }}
The sign-in link expires after 10 minutes of inactivity.
{{ r.k }}
{{ r.v }}
{{ g.label }}
{{ d.label }} is {{ d.status }}
checked {{ d.checked }}
{{ t.k }}
{{ t.v }}
{{ t.sub }}
Vendors
{{ c.label }}
{{ c.status }}
{{ c.what }} · {{ c.checked }}
Concurrency
{{ c.conc }}
Plan usage
{{ c.planLabel }}
{{ c.plan }}
{{ c.cost }} this cycle
{{ c.resets }}
{{ c.stuck }}
Jump to
{{ droplet.name }}
{{ droplet.state }}
{{ droplet.project }}
{{ droplet.region }}
{{ droplet.vpc }}
{{ droplet.image }}
Insights · last hour
CPU usage
{{ droplet.cpu }}
Memory
{{ droplet.mem }}
Connection details
Public IPv4
{{ droplet.publicIp }}
Private IP
{{ droplet.privateIp }}
Total droplet cost
{{ droplet.costMonth }}
/ month
{{ droplet.costHour }} / hour
Estimated from the current configuration.
Automated backups
{{ droplet.backups }}
Last backup {{ droplet.lastBackup }}.
Tags
{{ t }}
Recent activity
{{ a.name }}
{{ a.when }}
{{ c.k }}
peak {{ c.peak }}
{{ t }}
Public network
Reachable from anywhere at this address.
Public IPv4
{{ droplet.publicIp }}
Gateway {{ droplet.gateway }} · netmask {{ droplet.netmask }}
Private network
Only members of the same VPC can reach this address.
Private IP
{{ droplet.privateIp }}
{{ droplet.vpc }} · {{ droplet.vpcRange }}
Firewall · inbound
Action Type Protocol Ports Source Firewall
{{ r.action }} {{ r.type }} {{ r.proto }} {{ r.ports }} {{ r.src }} {{ r.fw }}
Firewall · outbound
Action Type Protocol Ports Destination Firewall
{{ r.action }} {{ r.type }} {{ r.proto }} {{ r.ports }} {{ r.src }} {{ r.fw }}
Block storage
Name Size Mount Region
{{ v.name }} {{ v.size }} {{ v.mount }} {{ v.region }}
No volumes attached
The droplet runs on its own disk. Attach a volume if the browser profiles outgrow it.
Automated backups
Taken {{ droplet.window }}. Next window starts {{ droplet.nextBackup }}.
Name Created Deletes
{{ b.name }} {{ b.created }} {{ b.deletes }}
Snapshots
Name Size Region Created
{{ x.name }}
{{ x.from }}
{{ x.size }} {{ x.region }} {{ x.created }}
Activity
Name Initiated Execution time
{{ a.name }} {{ a.when }} {{ a.took }}
Session
{{ mtDetail.short }}
Status
{{ mtDetail.state }}
Desk
{{ mtDetail.desk }} {{ mtDetail.slot }}
Started
{{ mtDetail.started }}
Duration
{{ mtDetail.dur }}
Region
{{ mtDetail.region }}
Context
{{ mtDetail.ctx }}
Expires
{{ mtDetail.expires }}
Session replay
{{ l.t }}
{{ l.lvl }}
{{ l.msg }}
{{ r.m }}
{{ r.url }}
{{ r.code }}
{{ r.ms }}
{{ e.t }}
{{ e.e }}
No Stagehand actions recorded for this session.
Sessions
{{ mtSessionCount }}
{{ mtOrphanNote }}
Status Session Desk Account Started Duration Expires Metadata
{{ r.state }}
{{ r.id }}
{{ r.desk }}
{{ r.slot }}
{{ r.acct }} {{ r.started }} {{ r.dur }} {{ r.expires }} {{ r.meta }}
Contexts
A context is a persisted cookie jar. It is what keeps an account signed in between sessions — delete one and that account has to sign in again.
Context Account Used by Created
{{ c.short }} {{ c.acct }} {{ c.used }} {{ c.created }}
Fetch history
Status Fetch Started Page
{{ x.state }}
{{ x.id }} {{ x.started }} {{ x.page }}
Analytics · last 8 days
{{ c.k }}
{{ c.v }}
Browser time
Total {{ mtBrowserTotal }} · Avg {{ mtBrowserAvg }}
{{ d }}
Proxy data
Total {{ mtProxyTotal }} · Avg {{ mtProxyAvg }}
No proxy bandwidth used in this window.
Usage & billing
{{ mtPlanName }}
Shared across all projects and counted against a single organization limit. Concurrency {{ mtConc }} · plan resets {{ mtPlanResets }}.
{{ u.k }}
{{ u.sub }}
{{ u.v }}
{{ u.of }}
Invoices
Date Invoice Plan Total Status
{{ i.date }} {{ i.id }} {{ i.plan }} {{ i.total }} {{ i.status }}
Members
Email Access Role Joined Updated
{{ m.email }} you {{ m.access }} {{ m.role }} {{ m.joined }} {{ m.updated }}
Project settings
Project name
Project id
{{ mtProjId }}
API key
{{ mtApiKey }}
Rotating breaks every service still using the old key.
Default session timeout
Organization preferences
Organization name
Organization slug
browserbase.com/org/
Changing the slug breaks existing console links.
Raw usage plumbing (office_usage_read)
{{ usageRawStatus }}
fields - what each number is and where it came from
{{ usageRawFields }}
settings (usage.*)
{{ usageRawSettings }}
{{ a.label }}
{{ a.json }}
{{ t.k }}
{{ t.v }}
{{ t.sub }}
Credit purse
{{ creditNote }}
{{ cr.name }}
{{ cr.note }}
{{ cr.spent }}
{{ cr.limit }}
{{ cr.balance }}
{{ cr.age }}
Spend history
{{ spendHistoryNote }}
{{ sh.name }}
{{ sh.period }}
{{ sh.note }}
{{ sh.readings }}
{{ sh.total }}
Work by model
{{ workByModelNote }}
{{ rateNote }}
{{ wm.model }}
{{ wm.spread }}
{{ wm.tool }}
{{ wm.responses }}
{{ wm.xwu }}
{{ wm.cost }}
Where this period lands
{{ burnLine }}
{{ fc.label }}
{{ fc.note }}
{{ fc.val }}
Session work
{{ sessionWorkNote }}
{{ sw.chat }}
{{ sw.where }}
{{ sw.model }}
{{ sw.when }}
{{ sw.endText }}
{{ sw.dur }}
{{ sw.responses }}
{{ sw.ctx }}
{{ sw.xwu }}
Spend by account
{{ m.name }}
{{ m.spent }}
{{ m.balance }}
Ceiling history
{{ a.name }}
{{ a.plan }}
{{ a.spend }}
Billing
Since service started: {{ billingTotals.life }}. Next charge: {{ billingTotals.nextWho }} in {{ billingTotals.nextIn }}.
Account
Service started
Bills on
Next charge
Card
Due in
Charge
Lifetime
{{ b.name }}
{{ b.started }}
{{ b.billsOn }}
{{ b.nextBill }}
{{ b.card }}{{ b.brand }}
{{ b.days }}
{{ b.amount }}
{{ b.lifetime }}
Credit drain
{{ drainNote }}
Account
Plan
Balance
24h
7 days
Spent 7d
{{ dr.name }}
{{ dr.stateText }}
{{ dr.balance }}
{{ dr.deltaText }}
{{ dr.spent7 }}
Receipts
{{ receiptNote }}
Account
Charged
Reference
Amount
{{ rc.acct }}
{{ rc.when }}
{{ rc.ref }}
{{ rc.amount }}
Work by module
From each module's table: what is done, what is left, what finishing costs
Spent so far
{{ moduleTotals.spent }}
{{ moduleTotals.progress }}
Left to finish · plan
{{ moduleTotals.plan }}
at plan rates
Left to finish · API
{{ moduleTotals.api }}
{{ moduleTotals.delta }}
Module
Progress
%
Spent
To go
API
{{ m.name }}
{{ m.table }} · {{ m.acct }}
{{ m.progress }}{{ m.left }}
{{ m.pct }}
{{ m.spent }}
{{ m.toGoPlan }}
{{ m.toGoApi }}
Breakdown
{{ a.name }}
{{ a.plan }}
{{ a.forecast }}
{{ a.cost }}
{{ p.project }}
{{ p.tokens }}
{{ p.cost }}
{{ d.n }}
{{ d.tokens }}
{{ d.cost }}
{{ t.k }}
{{ t.v }}
{{ t.sub }}
Next resets
Sort
{{ r.acct }}
{{ r.count }}
{{ r.meter }}
{{ r.when }}
{{ r.note }}
{{ x.label }}
{{ x.text }}
{{ x.text }}
Fuel and state
{{ fuelLead }}
Most gas first: all models plus fable. Dimmed rows cannot take a chat.
{{ a.name }}
{{ a.plan }}
{{ a.freeNote }}
{{ a.browser }}
{{ a.idle }} {{ a.done }} {{ a.working }} {{ a.slotNote }}
{{ a.nextReset }}
{{ a.allVal }} / {{ a.fableVal }}
all models / fable
{{ l.k }}
{{ l.val }}
{{ a.forecast }}
weekly reset {{ a.weeklyReset }}
{{ a.updatedAgo }}
{{ a.spend }}
Waiting on you
Oldest first
{{ q.name }}
{{ q.acct }}
{{ q.waiting }}
Desks
Grouped by the account that owns the slots. Accounts with no live desk sit in the fuel table above.
{{ g.name }}
{{ g.plan }} · {{ g.count }}
{{ c.name }}
{{ c.unread }}
{{ c.preview }}
{{ c.sub }} {{ c.elapsed }}
{{ c.ctx }}%
Activity
Newest first
{{ f.time }}
{{ f.name }}
{{ f.text }}
Timeline
{{ rangeNote }}
{{ a.name }}
{{ a.plan }} · {{ a.count }} desks
{{ l.name }}
{{ l.elapsed }}
No accounts connected
Add an account and its three desks appear here.
{{ a.name }}
{{ a.health }}
{{ a.stateTag }}
{{ a.plan }} {{ a.slotLabel }} {{ a.spend }}
{{ a.peak }}
{{ s.n }}
{{ s.name }}
{{ s.sub }}
{{ s.state }}
{{ s.ctx }}
All 3 slots in use — release one to load another chat.
Key
{{ a.masked }}
Created {{ a.created }}
Last used {{ a.lastUsed }}
Page Version {{ a.layoutName }} {{ a.layoutNote }}
{{ a.metaRaw }}
Spend history
{{ a.historyCaption }}
{{ a.historyEmpty }}
Usage credits
{{ a.creditStateLabel }}
{{ a.creditSpent }}
{{ a.creditSpentSub }}
{{ a.creditBalance }}
{{ a.creditBalanceSub }}
Defaults
{{ a.defModel }}
{{ a.defEffort }} effort
{{ a.archived }}
Manage
Project instructions
{{ pi.text }}
{{ crumbAcct }}
{{ railPlan }}
{{ railPeak }}
{{ railFree }} {{ railSpend }}
{{ s.n }}
{{ s.name }}
{{ s.sub }}
Dropping {{ dragLabel }}
Sort
No projects on this account
Create one and its chats can be loaded into a desk.
No projects match that search. Clear it to see them all.
Pick a project
Its chats appear here — drag one into a free slot on the left.
{{ crumbProject }}
Drop to start a new chat here
{{ freeSlotNote }} ⣿ drag to a desk
Your pick is applied in the desk’s browser when it arms (agent v1.4.0+ confirms it took hold); on older box code the pick stores and waits.
{{ m.name }}
{{ effortNote }}
{{ x.name }} Default
{{ m.name }}
{{ m.note }}
Effort{{ effortLabel }}
More models
Chats
Sort
View
No chats match that search. Clear it to see them all.
No chats in this folder
The sweep read this project and found it empty. New chats are added here after the next sweep, or write a message above to start one.
{{ c.name }}
live
gone
archiving…
{{ c.stateLabel }}
{{ c.statusLabel }}
outside
{{ c.when }}
{{ c.name }}
live
gone
archiving…
{{ c.stateLabel }}
{{ c.statusLabel }}
outside
-
{{ c.nickWarn }}
No prefix in use yet on this account.
{{ b.label }}
{{ b.sub }}
{{ b.body }}
{{ liveDesk.url }}
{{ liveDesk.step }}
Opening a browser on this desk's cookie jar…
{{ liveDesk.name }} is booting
Its session id appears here as soon as it reports in, and this frame fills with the real browser.
live browser frame
{{ liveDesk.name }}{{ liveDesk.chat }}{{ liveDesk.acct }} {{ liveDesk.session }}{{ liveDesk.expires }}
Watching every desk
{{ wallCount }} · click a frame to open it full
No desk is working right now. Load a chat into a slot to start one.
{{ w.name }}
{{ w.acct }}
{{ w.step }}
Now tap a slot for {{ pickChatName }}
{{ a.sev }}
{{ a.title }}
{{ a.body }}
Load into which desk?
{{ slotPickChat }}
All 3 slots in use — picking one releases it and loads this chat.
{{ r.label }}
{{ r.sub }}
Push instructions
{{ pushSummary }}
One text, many projects. Each selected project's instructions panel is opened on its own account's browser, cleared, written and saved - then RE-READ, and the line beside it reports what actually landed. The same account runs one write at a time; accounts run side by side. A failure stops that account's remaining writes.
{{ pushNote }}
{{ g.name }}
{{ r.mark }}
{{ r.name }}
{{ r.status }}
{{ x.n }}
{{ x.label }}
{{ onbLeft }}
{{ onbTitle }}
The Office opens a real browser and keeps its cookie jar. You sign in there once; the jar is what lasts.
Opening a browser and minting your sign-in link…
Open the link, sign in as usual — including any code — then come back and press Done.
Open the sign-in browser
{{ onbLink }}
Leaving this dialog is safe — the half-added account waits for you in the header.
Checking the jar is signed in…
{{ onbEmail }} is connected
Its 3 desk slots are ready — they come with the account.
{{ onbError }}
Finish adding {{ onbEmail }}
{{ onbLeft }}
RESUME →
{{ toastName }}
finished · {{ toastMeta }}
JUMP →
Quick settings
Settings
{{ sectionTitle }}
applies instantly
{{ userName }}
{{ email }}
Your avatar is pulled from Gravatar using this address.
Signed in with an access key
Theme
Accent
Density
Chat typeface
Nine lines don't reconcile, totalling $18,442. The largest single gap is Arca Supply.
Dark · Steel blue · Compact
The same walkthrough the first run shows. Opening it puts the console into the guided view with its live diagram — drag the chat card onto a desk slot to see the gesture — and you can leave it again from the same button.
{{ r.k }}
{{ r.v }}
{{ n.label }}
{{ n.sub }}
Default model
Default effort
Default account
Auto-archive idle desks
Context warning
{{ ctxWarn }}%
{{ k.name }}
{{ k.plan }}
·
{{ k.desks }}
{{ k.masked }}
Provider and system keys
Stored credentials. Replace one and the value goes straight to the vault - never shown back, never logged. {{ keysCount }}
{{ keysErrorText }}
{{ v.name }}
{{ v.ago }}
{{ v.title }}
{{ v.shownValue }}
{{ keyShapeLine }}
{{ v.rotateNote }}
{{ v.doneText }}
{{ v.failText }}
Account keys
Which accounts have a saved key the blocks below can be assembled from, and why not where not. {{ assemblyReady }}
{{ assemblyErrorText }}
{{ officeSessionNote }}
{{ ak.username }}
{{ ak.ago }}
{{ ak.mark }}
rotating...
{{ ak.reason }}
Boot instructions
The blocks that go into a project's instructions field, and the runtime sequences behind them. View assembles one on demand with your key already in it.
{{ blocksErrorText }}
{{ b.label }}
{{ b.note }}
{{ b.size }}
{{ b.ago }}
{{ b.why }}
{{ b.status }}
Add a key
{{ addKeyNote }}
Click a shortcut to rebind it.
{{ k.label }}
{{ k.keys }}
{{ adminRole }}
{{ adminKeyNote }}
Show the Maintenance tab
On by default for administrators. Hiding it is cosmetic — the server still enforces the role.
Confirm before every write
Killing sessions, deleting contexts, rotating keys. Leave this on.
Executor daemon
The daemon on the DigitalOcean box. Both buttons trip a flag in the database that the box picks up on its next poll — nothing here reaches the machine directly. Restart takes the daemon down and back up; reboot takes the whole droplet with it.
{{ daemonStateLabel }}
Audit log
Administration actions taken from The Office.
{{ a.what }}
{{ a.obj }}
{{ a.vendor }}
{{ a.outcome }}
{{ a.who }} · {{ a.when }}
The slots the maths layer reads. Edit a slot as JSON and save it; Postgres re-derives every figure below from the stored slots on the next read (office_maths_read), and the Usage tab's raw box carries the same maths block.
{{ mathsStatus }}
Budget
A cap is a MARKER, never a brake \u2014 going over is displayed and nothing anywhere stops, throttles or blocks. Leave a field empty or at 0 for unlimited. Per-account caps count against that account's own billing cycle.
Whole fleet
{{ budgetFleetNote }}
{{ bg.name }}
{{ bg.note }}
{{ budgetNote }}
{{ m.label }}
{{ m.hint }}
{{ m.allowed }}
{{ mathsNote }}
Derived by Postgres from the slots
{{ mathsDerived }}
Maths SQL - the arithmetic itself
{{ mathsSqlStatus }}
- {{ r.text }}
{{ mathsSqlResult }}
{{ v.line }}
Error states
prototype only — fire a banner to review it
{{ t.label }}{{ t.sev }}
Which browser is this account signed in on
{{ br.name }}
{{ br.who }}
Your pick is applied in the desk’s browser when it arms (agent v1.4.0+ confirms it took hold); on older box code the pick stores and waits.
{{ m.name }}
{{ effortNote }}
{{ x.name }} Default
{{ m.name }}
{{ m.note }}
Effort{{ effortLabel }}
More models
{{ bootTitleText }}
{{ bootBodyText }}
Model
{{ bootModelLabel }}
Effort
{{ bootEffortLabel }}
{{ confirmTitle }}
{{ confirmBody }}
{{ it.main }}
{{ it.sub }}
{{ it.right }}
{{ confirmNote }}
{{ r.name }}
{{ r.sub }}
console