Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
500 commits
Select commit Hold shift + click to select a range
132f61b
Say in the managed schema and the policy parser that Chrome withholds…
davidmckayv Oct 19, 2026
b8d0165
Say in the company guide that Chrome withholds a Recorder policy of t…
davidmckayv Oct 19, 2026
415ef2f
Drop the Recorder company install guide and its test, and the pointer…
davidmckayv Oct 19, 2026
fe7966a
Count a workspace Desktop copies as its manifest alone as present in …
davidmckayv Oct 19, 2026
a3ac00f
Cut an over-budget network event's request and response bodies to one…
davidmckayv Oct 19, 2026
047a4f5
Have the service worker name the extension version in offscreen.recov…
davidmckayv Oct 19, 2026
bd878ca
While a recording runs, ask OpenBot every 30 s whether its connection…
davidmckayv Oct 19, 2026
4fe3fca
Raise the Recorder's web connect limit from 3 to 10 per OpenBot origi…
davidmckayv Oct 19, 2026
468ac44
Mask what a person says while recording: scrubTranscript finds a card…
davidmckayv Oct 19, 2026
b3279c3
Transcribe the person's narration in the browser while they record: t…
davidmckayv Oct 19, 2026
eb9e7d4
Show the narration in the popup: a Voice row beside the recording's t…
davidmckayv Oct 19, 2026
bc975ef
Mask any spoken number Chrome cuts short or runs together: scrubTrans…
davidmckayv Oct 19, 2026
26f3110
Say so in the Voice row when the browser hears speech but hands back …
davidmckayv Oct 19, 2026
6a5ab27
Ask for every permission when the Recorder is installed, so the first…
davidmckayv Oct 19, 2026
66175e0
Warn that Learning will not see a recording only when its capture pas…
davidmckayv Oct 19, 2026
9d91f58
Keep the setup page readable in a narrow window: Allow microphone sit…
davidmckayv Oct 19, 2026
ce34f26
Keep one-time codes in the browser: a 2FA field with no autocomplete=…
davidmckayv Oct 19, 2026
8e1102f
Mask a code typed a digit per box: a row of 4 to 8 one-character boxe…
davidmckayv Oct 19, 2026
687598f
Merge main into the Recorder branch: desktop.yml watches both main's …
davidmckayv Oct 19, 2026
4b14dbf
Record only the network calls the person's own actions cause: a fetch…
davidmckayv Oct 19, 2026
ff087ee
Record navigation and page events from a followed tab's top frame onl…
davidmckayv Oct 19, 2026
4097d2b
Record into each person's own Learning space, with no Bot in the Reco…
davidmckayv Oct 19, 2026
5fa0ed8
Every Bot a person uses draws Skills from their own Learning space, a…
davidmckayv Oct 19, 2026
acf333b
Stop the Recorder's leak checks reading the event's clock as a leaked…
davidmckayv Oct 19, 2026
ffaf7ab
Record the person's steps instead of network calls: a recording is ea…
davidmckayv Oct 19, 2026
702652e
Say in the popup what a recording now holds: the form reads that it r…
davidmckayv Oct 19, 2026
ad25956
Keep the page's own chatter and redirects out of the steps: a write w…
davidmckayv Oct 19, 2026
b6de006
Name the element a click was meant for: a click on text or a wrapper …
davidmckayv Oct 19, 2026
56c6a2b
The AG-UI observation the network capture hands to the agent events: …
davidmckayv Oct 20, 2026
354bcc9
The agent events' interface: observe what the network capture sees of…
davidmckayv Oct 20, 2026
451a667
Let the agent events keep a long message instead of losing it: trimEv…
davidmckayv Oct 20, 2026
b828664
Read the chat message and tool call a click landed in as CopilotKit r…
davidmckayv Oct 20, 2026
93bb2d0
Turn the AG-UI traffic a recording sees into exactly the events Copil…
davidmckayv Oct 20, 2026
239be16
Prove the agent events match CopilotKit on real traffic: scripts/agen…
davidmckayv Oct 20, 2026
41e17f5
See the agent's side through Chrome's debugger: every AG-UI run a fol…
davidmckayv Oct 20, 2026
7911efd
Never change the capture's own observation: the agent events apply a …
davidmckayv Oct 20, 2026
97d6f01
Pin the agent events' masking, replays and coverage on real recording…
davidmckayv Oct 20, 2026
5f14f9a
Emit nothing for a recording that has stopped: a run's events still b…
davidmckayv Oct 20, 2026
a90fe8b
Read each streamed message's agent.message text in the coverage test …
davidmckayv Oct 20, 2026
244f0a7
See the agent's side from inside the page when Chrome refuses the deb…
davidmckayv Oct 20, 2026
88d45cc
Stop reading an event stream once its first event shows it is not AG-…
davidmckayv Oct 20, 2026
0ab250d
Merge the agent's side of a recording: the network capture's AG-UI ob…
davidmckayv Oct 21, 2026
0396906
Capture clicks and typing with CopilotKit main's own capture code: np…
davidmckayv Oct 21, 2026
0f2970e
Send typing exactly as CopilotKit main settles it, with each held edi…
davidmckayv Oct 21, 2026
48e5237
Mask every copy of an edited field's content to its value's verdict: …
davidmckayv Oct 21, 2026
2c2ea18
Never take CopilotKit's own capture batch for a step's save: a POST w…
davidmckayv Oct 21, 2026
0156642
See the agent's side of a recording made in OpenBot itself: the AG-UI…
davidmckayv Oct 21, 2026
42909f5
Match CopilotKit's legacy capture where the end-to-end run found the …
davidmckayv Oct 21, 2026
1e0fd90
Carry the dependency patches wherever the tree is installed: both ima…
davidmckayv Oct 21, 2026
bd1151c
Merge the capture and masking fixes from the end-to-end run: an edite…
davidmckayv Oct 21, 2026
2a0c01e
Never take CopilotKit's own capture-pass request for a save: the page…
davidmckayv Oct 21, 2026
520601c
Merge the agent-side fixes from the end-to-end run: CopilotKit's thre…
davidmckayv Oct 21, 2026
d360dab
Never cut an agent event's ids, names or enum-like fields to fit it: …
davidmckayv Oct 21, 2026
6ea697e
Follow OpenBot's own runtime info call, so a recording made in OpenBo…
davidmckayv Oct 21, 2026
5b45f58
Let a click take the Thread of the run its form's submit started: Ope…
davidmckayv Oct 21, 2026
1aa76bb
Merge the second end-to-end fixes: an oversized agent.event keeps eve…
davidmckayv Oct 21, 2026
518f63c
Mask a typed secret wherever it appears later in the recording, and k…
davidmckayv Oct 21, 2026
453a744
Keep the steps a service worker holds across a restart, put narration…
davidmckayv Oct 21, 2026
dd99a99
Merge the privacy fixes from the full end-to-end: a secret typed anyw…
davidmckayv Oct 21, 2026
5c0dce6
Say which connected browser is this one, and when each connected to t…
davidmckayv Oct 21, 2026
ecc0ea4
Record one row per action, beside CopilotKit's own events: a submit o…
davidmckayv Oct 21, 2026
9d384dc
Attach the saves the end-to-end run left off its steps and stop holdi…
davidmckayv Oct 21, 2026
b4a18e4
Carry a Thread's tools and context in agent.event only when they chan…
davidmckayv Oct 21, 2026
bc61d7f
Follow a chat's move to a new Thread as CopilotKit does, and let a cl…
davidmckayv Oct 21, 2026
4540681
Merge the durability, order and surface fixes from the full end-to-en…
davidmckayv Oct 21, 2026
5155470
Merge the step and save fixes from the full end-to-end: the Recorder'…
davidmckayv Oct 21, 2026
f3d852c
Merge the agent-side fixes from the CopilotKit-site end-to-end: a cha…
davidmckayv Oct 21, 2026
d2be564
Keep the text of a button, link or label that names a password
davidmckayv Oct 21, 2026
b68255b
Send a held step once when the browser quits as it leaves
davidmckayv Oct 21, 2026
18addf4
Start a new tab's first page change at its opener's page, and number …
davidmckayv Oct 21, 2026
63b1da2
Keep the agent events' click context across a service-worker restart
davidmckayv Oct 21, 2026
f88e89c
Merge the final end-to-end fixes: a control that only names a passwor…
davidmckayv Oct 21, 2026
dfd3435
Attach a save whose only typed values are secrets
davidmckayv Oct 21, 2026
fbaa3c8
Merge the last end-to-end fix: a save whose only typed values are sec…
davidmckayv Oct 21, 2026
961b41c
Merge origin/main into the Recorder branch
davidmckayv Oct 21, 2026
192dabe
Describe the Recorder's agent side in the changelog: every AG-UI run …
davidmckayv Oct 21, 2026
d4499fc
Merge origin/main into the Recorder branch
davidmckayv Oct 22, 2026
769630a
Bring the Recorder's tests in line with main
davidmckayv Oct 22, 2026
32ea6a3
Set down the contract the OpenBot Browser is built against
davidmckayv Oct 22, 2026
3d2196b
Add the Browser page and its sidebar button: the person's own browser…
davidmckayv Oct 22, 2026
48f34c9
Bring the Recorder's Settings pages to main's wording: OpenBot rather…
davidmckayv Oct 22, 2026
525989a
Run the person's own browser on OpenBot Desktop, with the Recorder bu…
davidmckayv Oct 22, 2026
2d5c90f
Archive the live browser run's deployment from the repository root, w…
davidmckayv Oct 22, 2026
d2a0104
Say plainly why the person's browser asks for port 4101 first
davidmckayv Oct 22, 2026
4722dec
Merge slice 3: OpenBot Desktop runs the person's browser
davidmckayv Oct 22, 2026
77b7b3a
Answer the Browser button's read in the sidebar pagination test, whic…
davidmckayv Oct 22, 2026
8eb4f68
Line the recording mark up with the icons in the rows around it, and …
davidmckayv Oct 22, 2026
2ba9a52
Type-check the Recorder's and Learning's server tests against main's …
davidmckayv Oct 22, 2026
603b1b0
Merge the Recorder branch: its tests pass CI's test typecheck
davidmckayv Oct 22, 2026
c045721
Merge slice 4: the Browser page
davidmckayv Oct 22, 2026
749213b
Open a person's own OpenBot browser from the server, already connected
davidmckayv Oct 22, 2026
f40e3c4
Let the Recorder take its connection and commands from its launcher
davidmckayv Oct 22, 2026
68490fa
Time a narrated phrase from its own first word when Chrome reuses a r…
davidmckayv Oct 22, 2026
70e49ad
Pin a Bot's browser launch exactly, before a person's browser joins it
davidmckayv Oct 22, 2026
94351c1
Open a person's browser on the computer, with the Recorder in it and …
davidmckayv Oct 22, 2026
f09680d
Carry the built Recorder in the computer image
davidmckayv Oct 22, 2026
29ec0bc
Start the local computer with Chrome or Edge, and document the Record…
davidmckayv Oct 22, 2026
8707864
Test the OpenBot browser's routes, its live screen and where it may go
davidmckayv Oct 22, 2026
5251968
Merge slice 1: the computer opens a person's browser with the Recorde…
davidmckayv Oct 22, 2026
ae24b03
Answer the computer's refusals as the person's, and its own failings …
davidmckayv Oct 22, 2026
25339b5
Merge slice 2: the server opens the person's own browser, and the Rec…
davidmckayv Oct 22, 2026
2f8ee2b
Leave OpenBot Desktop's own Recorder host out of the person's browser
davidmckayv Oct 22, 2026
55bb029
Name the OpenBot browser's connection in Settings, Browsers
davidmckayv Oct 22, 2026
ae240e5
Let the page say a phrase has begun, and put its times on the server'…
davidmckayv Oct 22, 2026
e924521
Let a person's cloud browser reach OpenBot and the gateway on their o…
davidmckayv Oct 22, 2026
a026a87
Hold the steps while the launcher says a phrase is under way, and rep…
davidmckayv Oct 22, 2026
c70d3b1
Put narration on the server's clock, wait for a slow page's own answe…
davidmckayv Oct 22, 2026
3421f3f
Merge the server's end-to-end fixes
davidmckayv Oct 22, 2026
d2abf16
Tell the Recorder when a phrase begins, show what it hears, and confi…
davidmckayv Oct 22, 2026
35a3fb7
Merge the Recorder's and the app's end-to-end fixes
davidmckayv Oct 22, 2026
bf6f136
Offer Record while the Recorder reports itself disconnected
davidmckayv Oct 22, 2026
8eaf612
Word the network filter's refusals for a person, and let a domain rul…
davidmckayv Oct 22, 2026
4a6003e
Say which page did not open in a sentence, not Playwright's error and…
davidmckayv Oct 22, 2026
c51714d
Pass the person starting and stopping a phrase to the Recorder
davidmckayv Oct 22, 2026
ee15000
Keep a person's browser open while its one window shows a Recorder page
davidmckayv Oct 22, 2026
73365f9
Load Google in browsers behind the egress filter
davidmckayv Oct 22, 2026
56280ca
Keep the whole page on the hosted live screen while the Recorder records
davidmckayv Oct 22, 2026
bb25221
Merge the computer's end-to-end fixes
davidmckayv Oct 22, 2026
ae57b18
Let a person's cloud browser reach OpenBot and the gateway by name on…
davidmckayv Oct 22, 2026
0ecca20
Describe the OpenBot Browser in the changelog
davidmckayv Oct 22, 2026
35c89a2
Let OpenBot tell the Recorder its connection was revoked
davidmckayv Oct 22, 2026
918ae6c
Let the Recorder forget a connection OpenBot revoked as soon as OpenB…
davidmckayv Oct 22, 2026
75ba0d1
Tell a person's OpenBot browser at once when they disconnect it, and …
davidmckayv Oct 22, 2026
bcbe663
Bracket an IPv6 address where a network refusal names its port
davidmckayv Oct 22, 2026
ec738cc
Merge the Disconnect fix: OpenBot tells the Recorder at once
davidmckayv Oct 22, 2026
77b3b88
Say in the changelog that a Disconnect signs the Recorder out at once
davidmckayv Oct 22, 2026
528768e
Judge each browser's connections by its own network policy alone
davidmckayv Oct 22, 2026
05e3712
Refuse a Recorder call the browser is slow to answer instead of endin…
davidmckayv Oct 22, 2026
3184ac1
Apply a person's live-screen input in the order it was sent
davidmckayv Oct 22, 2026
b0a572c
Give a hosted person's browser exactly what a hosted Bot's says about…
davidmckayv Oct 22, 2026
492caed
Show the address that failed for a tab on an error page
davidmckayv Oct 22, 2026
7389865
Let OpenBot tell the person's browser that its connection was revoked
davidmckayv Oct 22, 2026
97d6f14
Run the Recorder on disk in a profile that ran an earlier one, and pi…
davidmckayv Oct 22, 2026
9a2c8b3
Type the new real-browser tests the way the suite's others are typed
davidmckayv Oct 22, 2026
a2f4880
Keep the shared-filter browser test off the internet
davidmckayv Oct 22, 2026
ebffb8a
Merge the computer's round-two fixes
davidmckayv Oct 22, 2026
037eb7b
Never sign a person's own browsing as the deployment's Bot
davidmckayv Oct 22, 2026
7841889
Describe the computer's round-two fixes in the changelog
davidmckayv Oct 22, 2026
2584932
Assert the signed-out Recorder state has no person, in a shape that c…
davidmckayv Oct 22, 2026
3a4c2ab
Call an empty hosted tab "New tab" in the tab strip, not "about:blank"
davidmckayv Oct 22, 2026
3e11793
Report a hosted browser's Recorder as narrated by the app, signed in …
davidmckayv Oct 22, 2026
821f187
Say why a person's browser did not open, and at which step, in both logs
davidmckayv Oct 22, 2026
024cc71
Open a person's browser once when two opens arrive together
davidmckayv Oct 22, 2026
28709c6
Merge the run-3 fixes: overlapping opens take turns, and every failed…
davidmckayv Oct 22, 2026
0637895
Ask OpenBot before the Recorder takes a connection from its launcher
davidmckayv Oct 22, 2026
3551adf
Describe the run-3 fixes in the changelog
davidmckayv Oct 22, 2026
ac6d71c
Tell a person their browser cannot open, not how to set up its computer
davidmckayv Oct 22, 2026
e8e3f0f
Show the narration switch off when narration cannot hear the person
davidmckayv Oct 22, 2026
9e67426
Say nothing was recorded when Stop ends a recording with no actions
davidmckayv Oct 22, 2026
4efed44
Merge the run-4 fixes: no empty recording claimed saved, setup text k…
davidmckayv Oct 22, 2026
a002810
Describe the run-4 fixes in the changelog
davidmckayv Oct 22, 2026
31e8b14
Follow every tab the person uses while a recording runs
davidmckayv Oct 22, 2026
cf81161
Tell a person their browser cannot open, not to set OPENBOT_PUBLIC_URL
davidmckayv Oct 22, 2026
5eb0d66
Answer a browser that cannot start here as setup, and keep Playwright…
davidmckayv Oct 22, 2026
7b4a7ed
Merge David's tab decision: a recording follows every tab the person …
davidmckayv Oct 22, 2026
e0d8d2a
Describe the Recorder following every tab in the changelog
davidmckayv Oct 22, 2026
37921ea
Let the Recorder say what a stopped recording held
davidmckayv Oct 22, 2026
ff0926d
Log a page change only while the browser stays open
davidmckayv Oct 22, 2026
fc4be20
Start a person's native browser without focus emulation, and follow t…
davidmckayv Oct 22, 2026
9fd16ef
Report what a stopped recording held: its actions and its narrated ph…
davidmckayv Oct 22, 2026
ebe3fed
Say what a recording saved, and that it held nothing only when the Re…
davidmckayv Oct 22, 2026
acfebbd
Say a person's page changed only once their browser has stayed open w…
davidmckayv Oct 22, 2026
8242429
Refuse a person's browser started without its DevTools pipe, rather t…
davidmckayv Oct 22, 2026
410b467
Merge the run-5 fixes: background tabs stay in the background, and a …
davidmckayv Oct 22, 2026
d40192f
Describe the run-5 fixes in the changelog
davidmckayv Oct 22, 2026
1fd3528
Say where the person's browser shows before it is opened
davidmckayv Oct 22, 2026
08d2216
Say where a person's browser shows in its state, before it is opened
davidmckayv Oct 22, 2026
2003d31
Add the app's toast, Base UI's own, drawn as shadcn's Base UI Toast
davidmckayv Oct 22, 2026
c87fc4e
Open the person's browser in one click from the sidebar
davidmckayv Oct 22, 2026
ddefb67
Merge the one-click Browser button in the sidebar
davidmckayv Oct 22, 2026
ddafa36
Describe the one-click Browser button in the changelog
davidmckayv Oct 22, 2026
f50f1f1
Keep an error toast until it is closed, and draw the opening Browser …
davidmckayv Oct 22, 2026
5b7f309
Tell the person on a single-user OpenBot that their browser's setup i…
davidmckayv Oct 22, 2026
f5e1240
Merge the run-7 polish: the refusal stays until closed, Opening reads…
davidmckayv Oct 22, 2026
41d2428
Tell a single-user OpenBot's person what to do when their browser can…
davidmckayv Oct 22, 2026
b9cac96
Set down the contract for the person's real browser
davidmckayv Oct 22, 2026
7d55506
Name the computer route that lists the person's own browsers
davidmckayv Oct 22, 2026
5d6dc1a
Package the Recorder for the Chrome Web Store and Edge Add-ons
davidmckayv Oct 22, 2026
e4ac6aa
Connect the Recorder through OpenBot Desktop with no Connect page
davidmckayv Oct 22, 2026
08d7fe1
Keep each Recorder's activity, and open the person's own browser from…
davidmckayv Oct 22, 2026
57eb4f2
Light the Browser button's red dot from any of the person's Recorders…
davidmckayv Oct 22, 2026
6bfdcfd
Merge: the server keeps each Recorder's activity, and the Browser but…
davidmckayv Oct 22, 2026
88c189e
Bring the person's own Chrome or Edge forward, and open the Recorder'…
davidmckayv Oct 22, 2026
179623b
Register the Recorder from its stores with the person's Chrome and Ed…
davidmckayv Oct 22, 2026
b15b6b4
Merge: OpenBot Desktop registers the Recorder with the person's Chrom…
davidmckayv Oct 22, 2026
22953e2
Name a browser OpenBot Desktop connects by its own brand, Edge as Edge
davidmckayv Oct 22, 2026
8aea6c3
Tell OpenBot what the Recorder is recording, for the Browser button's…
davidmckayv Oct 22, 2026
3c8a26b
Say what the Recorder collects, and where it goes, before anything is…
davidmckayv Oct 22, 2026
e15e747
Name the id the Recorder runs under when Intelligence refuses its origin
davidmckayv Oct 22, 2026
f751d59
Merge: the Recorder connects through OpenBot Desktop with no Connect …
davidmckayv Oct 22, 2026
ca83b1c
Say only what is always true about where a recording goes
davidmckayv Oct 22, 2026
0abd72b
Describe the person's real browser in the changelog
davidmckayv Oct 22, 2026
c2b9e2e
Merge: package the Recorder for the Chrome Web Store and Edge Add-ons
davidmckayv Oct 22, 2026
253e648
Count the Recorder's activity route among the routes OpenBot serves it
davidmckayv Oct 22, 2026
eda630a
Keep the person's Learning space when Chrome stops the Recorder's idl…
davidmckayv Oct 22, 2026
8860452
Head the setup page with what the Recorder collects
davidmckayv Oct 22, 2026
3c63b1d
Merge the run-8 Recorder fixes: the Learning line survives a worker r…
davidmckayv Oct 22, 2026
356022b
Say in the changelog that the setup page opens with what the Recorder…
davidmckayv Oct 22, 2026
1500853
Set down what OpenBot's own page may ask the Recorder in the same bro…
davidmckayv Oct 23, 2026
e1de4b8
Answer OpenBot's own page in the same browser: its state, Record and …
davidmckayv Oct 23, 2026
f992492
Merge: the Recorder answers OpenBot's own page, and connects with no …
davidmckayv Oct 23, 2026
e53c21f
Work with the Recorder in the browser OpenBot is open in from the Bro…
davidmckayv Oct 23, 2026
4e9c98e
Show Connected at once in Settings, Browsers when a trusted OpenBot's…
davidmckayv Oct 23, 2026
9f8e612
Merge: the Browser button uses the browser OpenBot is open in
davidmckayv Oct 23, 2026
5e19ebd
Describe the Browser button in the person's own browser in the changelog
davidmckayv Oct 23, 2026
677e28c
Merge OpenBot main into the Recorder branch
davidmckayv Oct 26, 2026
b5e002d
Merge OpenBot main, through the Recorder branch, into the OpenBot Bro…
davidmckayv Oct 26, 2026
9fcf28d
The Recorder's notice takes main's 0.5rem radius
davidmckayv Oct 26, 2026
43a9b60
Merge branch 'merge-main-into-recorder' into merge-main-into-browser
davidmckayv Oct 26, 2026
86ae33c
Merge remote-tracking branch 'origin/main' into david/recorder-and-br…
davidmckayv Oct 27, 2026
ece8372
Expect Windows' path separator in the local browser's environment test
davidmckayv Oct 27, 2026
99e8089
Read the Anthropic key from either header in the AG2 test
davidmckayv Oct 27, 2026
ca8b748
Merge remote-tracking branch 'origin/main' into david/recorder-and-br…
davidmckayv Oct 27, 2026
a1dd3bf
Merge remote-tracking branch 'origin/main' into david/recorder-and-br…
davidmckayv Oct 27, 2026
543f2f6
Merge remote-tracking branch 'origin/main' into david/recorder-and-br…
davidmckayv Oct 28, 2026
38989c4
Address the code-owner review on the Recorder and the OpenBot Browser
davidmckayv Oct 28, 2026
fe7f95a
Record a task in a Bot's own browser: browser controls and the Record…
davidmckayv Oct 28, 2026
3521221
Pin the on-device language sentence with this runtime's own name for …
davidmckayv Oct 28, 2026
975cbe9
Tests: print a DOM node in a failed assertion as its markup, not ever…
davidmckayv Oct 28, 2026
5b34f7b
Merge #858's latest into a Bot's browser
davidmckayv Oct 28, 2026
46820a4
Keep what a person typed while holding a Bot's wheel from the Bot, te…
davidmckayv Oct 28, 2026
8a9334d
Merge remote-tracking branch 'origin/main' into david/recorder-and-br…
davidmckayv Oct 28, 2026
33ac1db
Recorder: count a connect request before asking OpenBot Desktop for i…
davidmckayv Oct 28, 2026
4ad7432
Recorder: catch a refused storage restriction and say so, as top-leve…
davidmckayv Oct 28, 2026
cc46ec4
Narration: never ask again while the choice loads, and pass it on wit…
davidmckayv Oct 28, 2026
79316f5
Call a built-in Bot's model on the Responses API behind a gateway whe…
davidmckayv Oct 28, 2026
0390580
Recorder: the page cannot hide or remove the recording mark
davidmckayv Oct 28, 2026
db0b1a0
Live screen: release every key still down when it stops forwarding keys
davidmckayv Oct 28, 2026
47e8745
Recorder: a Cancel on the Connect page is said only while a page coul…
davidmckayv Oct 28, 2026
cd5533a
Settings, Browsers: the Disconnect dialog names the browser it is about
davidmckayv Oct 28, 2026
e5e94af
Comments say the reason for the code, not that a review asked
davidmckayv Oct 28, 2026
532b7c1
End a person's Recorders with every end of their sign-in, and never s…
davidmckayv Oct 28, 2026
e9ce440
Show a Bot's help request in the conversation, and keep its hand-back…
davidmckayv Oct 28, 2026
add96dd
Merge: the Bot answers after a help hand-back, and the conversation s…
davidmckayv Oct 28, 2026
922cf1e
Say in the changelog what a person types stays theirs, and that help …
davidmckayv Oct 28, 2026
4924a70
Merge End a person's Recorders with every end of their sign-in, an
davidmckayv Oct 28, 2026
bef7815
Merge Call a built-in Bot's model on the Responses API behind a ga
davidmckayv Oct 28, 2026
c12a986
Say in the changelog that a Bot behind an OpenAI proxy answers again,…
davidmckayv Oct 28, 2026
b4a39b4
Name how a sign-in ended as `ending` on the Recorder's audit rows, le…
davidmckayv Oct 28, 2026
d9d9f42
Merge #858's latest into a Bot's browser
davidmckayv Oct 28, 2026
613eee4
Clear a browser's data from its bar: one button, a short confirmation…
davidmckayv Oct 28, 2026
08b0165
End the person's browser's Recorder connection when they clear that b…
davidmckayv Oct 28, 2026
a68683f
Say in the changelog that a browser inside OpenBot can be cleared wit…
davidmckayv Oct 28, 2026
99763bb
Merge main into the Recorder and OpenBot Browser
davidmckayv Oct 28, 2026
dcb165e
Merge main into the Recorder and OpenBot Browser
davidmckayv Oct 28, 2026
ce7d420
Merge #858's latest into a Bot's browser
davidmckayv Oct 28, 2026
7b18393
Refuse Record in a Bot's browser where its Bots share one computer, a…
davidmckayv Oct 28, 2026
28056c9
Merge main into a Bot's browser
davidmckayv Oct 28, 2026
b9a270b
Merge main into a Bot's browser
davidmckayv Oct 28, 2026
54227cb
Merge main into a Bot's browser
davidmckayv Oct 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -139,13 +139,13 @@ jobs:
# The headless run of the Web Bot Auth test is also the one that checks the user agent fix.
- run: >-
bun test tests/sign-in.test.ts tests/session-cookies.test.ts tests/follows-popup.test.ts
tests/demonstration-live.test.ts tests/webrtc-proxy.test.ts tests/web-bot-auth-browser.test.ts
tests/webrtc-proxy.test.ts tests/web-bot-auth-browser.test.ts
tests/handoff-page-restore.test.ts tests/enter-text.test.ts tests/person-browser.test.ts tests/person-browser-computer.test.ts
tests/bot-browser.test.ts tests/bot-browser-computer.test.ts
tests/screencast-keys-browser.test.ts tests/browser-memory.test.ts
working-directory: agent-computer
env:
OPENBOT_COMPUTER_BROWSER: '1'
OPENBOT_DEMONSTRATION_LIVE: '1'
COMPUTER_BROWSER_MODE: headless
# Headed is the default for hosted computers, so it is tested as one: the computer starting its
# own Xvfb, and the signing again with cross-site frames in processes of their own.
Expand Down
49 changes: 48 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -581,6 +581,53 @@ not visit during a recording are never recorded, and nothing on the browser's ow
settings) or the Recorder's own is. A tab that reloaded as you switched to it no longer loses the saves
it sends.

### Record a task in a Bot's own browser, with nothing to install

A Bot's screen, opened larger from a conversation, is now a browser a person can work in: tabs, an
address bar, back, forward and reload sit above the page. Take control and the bar is yours (typing an
address, switching, opening and closing tabs, all from the keyboard too); while the Bot has control it
shows where the Bot is, read only. The OpenBot Recorder is already in every Bot's browser, idle until
someone records, so recording a task needs no extension and no Connect step.

- **Record replaces "Teach a browser workflow".** Name the task, press Record, do it, press Stop. The
panel shows the name, the time and the step count, asks about narration before your first recording
(the same choice as the Browser page), and after Stop says what was saved to your Learning space. The
recording lands in Intelligence exactly as the Recorder sends from any browser, in your own Learning
space, so every Bot you use learns from it, this one included.
- **Only you are recorded, never the Bot.** Record works only while you hold control, and handing it
back (or the Bot's request ending) stops the recording, with its last steps sent before the Recorder
disconnects; the Bot acts again only once the recording has ended. Taking control now records who
took it, so on a shared Bot only that person can use the bar or record, someone else's recording
shows only that one is running, and nobody else sees its name, its step count or its microphone.
- **Record needs a computer the Bot does not share.** Where every Bot runs on one computer (Helm's
shared mode, or `AGENT_COMPUTER_URL` with no supervisor), Record is refused in every Bot's browser
and the panel says why: your Recorder connection would sit in the Bot's profile, where any other
Bot's shell could read it. The bar still works. The computer refuses it too. With a supervisor
(laptop, Desktop) or a Sandbox, each Bot has its own computer and Record works.
- **One connection per recording.** Record mints a Recorder connection for the person who pressed it
and Stop revokes it; Settings, Browsers lists it as "<Bot>'s browser" while it lives, and says
"recording now" for any browser that is recording.
- While a recording runs in a Bot's browser, that Bot's network policy also lets the Recorder reach
OpenBot and the Intelligence gateway, on their own ports only; the Bot's own policy returns when it
ends.
- **Removed: the old "Teach a browser workflow" panel and everything behind it** (its routes under
`/api/demonstrations`, its instant skill draft, "Save and use with this Bot" and "Run on a schedule").
Skills already saved from it stay, as ordinary skills; its recordings stay in the database, unread.
- When you take control yourself, the line under the screen no longer repeats your own request back as
if you had said it.
- **What you type while you hold control stays yours.** After you hand back, the Bot reads a field you
filled as "filled in by the person", never its value, in its page snapshot, its page text and its
screenshots; a field you only tabbed through keeps the Bot's own value.
- **A Bot's request for help shows in the conversation**, with its reason and Take control, and folds
into one line once answered. After you hand back, the Bot is told what you did and carries on, saying
what it does next; if it still stops without a word, the card says so and offers Carry on.
- **Clear browser data.** One button beside reload, in a Bot's browser and in your own, asks "Clear this
browser?" and wipes it: cookies, saved passwords, history, site storage and the screenshots kept of its
pages. It starts fresh, signed out of everything; OpenBot's own Passwords stay. A Bot's browser can be
cleared only by the person holding its control. Audited as `computer.browser_cleared`.
- Leaving a conversation while you hold a Bot's control no longer leaves it blank: the Bot's reply after
you hand back shows when you return, with no "A browser task is paused" notice.

### Your own browser, opened from OpenBot, with the Recorder already in it

Wherever OpenBot can run a browser for you, the sidebar has a **Browser** button below Connections. It
Expand Down Expand Up @@ -641,7 +688,7 @@ close it, and the reason is in the server's and the computer's logs.
- A person's browser always runs the Recorder that came with its OpenBot, even in a profile that ran an
earlier one, and keeps it pinned to the toolbar once.
- A Recorder that is slow to answer is refused instead of taking down the computer and every browser
on it. Typing on a live screen that records a demonstration reaches the page in the order typed.
on it. Typing on a live screen reaches the page in the order typed.
- Opening the Browser page twice in quick succession (reloading it while your browser is still
opening, for one) opens your browser once, connected; before, both opens could be refused, most
often the first after the Recorder was updated. When a browser cannot be opened, the server's and
Expand Down
14 changes: 7 additions & 7 deletions agent-computer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,14 @@ RUN bun install --frozen-lockfile

COPY agent-computer/src ./src
# index.ts imports ../../shared/file-download at runtime (shared/computer-control is type-only and
# erased), demonstration.ts imports ../../shared/demonstration-rules, and the browser routes import
# ../../shared/openbot-browser, so the files they need go where those paths resolve from /app/src.
# erased), and the browser routes import ../../shared/openbot-browser and ../../shared/bot-browser,
# so the files they need go where those paths resolve from /app/src.
COPY shared/file-download.ts /shared/file-download.ts
COPY shared/demonstration-rules.ts /shared/demonstration-rules.ts
# The OpenBot Browser's contract, which the browser routes check requests against. It imports zod,
# and a module resolves its imports from its own directory upward, which from /shared never reaches
# /app/node_modules: so /shared is given that tree to resolve from, rather than a second install.
COPY shared/openbot-browser.ts /shared/openbot-browser.ts
# The OpenBot Browser's contract and a Bot's browser's, which the browser routes check requests
# against. They import zod, and a module resolves its imports from its own directory upward, which
# from /shared never reaches /app/node_modules: so /shared is given that tree to resolve from, rather
# than a second install.
COPY shared/openbot-browser.ts shared/bot-browser.ts /shared/
COPY shared/recorder-extension.ts shared/recorder-extension.json /shared/
RUN ln -s /app/node_modules /shared/node_modules

Expand Down
Loading
Loading