Tell a built-in Bot about its computer - #79
Open
rhlsthrm wants to merge 1 commit into
Open
Conversation
The instructions that make the computer usable live in shared/bot-prompt.ts: navigate rather than claiming you cannot browse, snapshot before acting, and at a sign-in call computer_request_help so a person can take the wheel rather than reporting the task as impossible. Two files imported it, both of them shipped Bots. A built-in agent knew only the role its package gave it, while the surface offered it the same computer tools as everything else. Asked to file an issue on a site it was not signed in to, General Assistant browsed to the page, said it could not, and never asked for help, so the wheel was never offered. That is not a Bot declining; it is a Bot that was never told. Renamed to COMPUTER_GUIDANCE, because instructions about the computer belong to the computer rather than to one implementation, and appended to the package role for built-in agents. Only where a computer is configured: a deployment with the browser routes unmounted should not promise a Bot hands it has not got.
rhlsthrm
requested review from
MikeRyanDev,
davidmckayv,
guidovizoso and
tylerslaton
as code owners
August 21, 2026 08:16
9 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
shared/bot-prompt.tsholds what a Bot knows about its own hands: navigate rather than claiming you cannot browse, snapshot before acting so refs are real, workspace files, and the sign-in protocol —Two files imported it, and both are shipped Bots:
agent-botandagent-langgraph. A built-in agent knew only the role its package gives it — for the example package, "You are a helpful general assistant. Give clear, concise, and accurate answers." Meanwhile<ComputerTools />is mounted for every Bot alike, so the tools were on offer to it the whole time; nothing had told it what they were for.Asked to file an issue on GitHub, General Assistant browsed to the issues page, said it could not do it while signed out, and never called
computer_request_help— so nobody was ever offered the wheel, on a deployment whose take-the-wheel path works. That is not a Bot declining a task, it is a Bot that was never told the task was possible.SYSTEM_PROMPTbecomesCOMPUTER_GUIDANCE, because instructions about the computer belong to the computer rather than to one implementation, andbuiltInAgentConfigurationappends it to the package role. Both shipped Bots keep the identical text as their whole prompt, so their behaviour does not change.Threaded from
mountCopilotRuntime, which passes it only whenconfig.computeris set. A deployment with no computer has the browser routes unmounted, and a Bot told it has a browser there would be a Bot promising something that does not exist.Where it runs
DeploymentConfigand a module constant, both of which every replica has; nothing is cached or coordinated.Boundary and audit
computer.help_requested/control_taken/control_released, which are existing events that a built-in agent previously never triggered.Changelog
Unreleased→Fixed.Proof
bun test server/tests/copilot.test.ts→ 16 pass.bun run typecheckclean inserver. Biome clean on all four files.Before, on the running stack: "File an issue on github.com/CopilotKit/openbot titled ..." to General Assistant.
audit_eventsshows exactly one action —— and then prose saying it could not. No
computer_request_help, no help event, no takeover offered.After, same request, same Bot: it navigates to GitHub's sign-in page, reports the wall, and offers to have a person sign in. Asked to hand over, it calls the tool and the banner appears — "The assistant needs you. Please sign in to GitHub so I can file an issue on your behalf." with Take control — and taking control shows the real login inside that Bot's own Chromium with "You have control. Click and type on the page as you normally would." The events land in order:
One thing this does not fix, worth saying plainly: with the guidance attached, the model still asked in prose on first hitting the sign-in wall rather than calling
computer_request_helpstraight away, and offered the wheel when asked. The instruction is explicit, so that looks like model judgment (gpt-5.5) rather than missing wiring, and the prompt text is unchanged here.