ChatGPT Web
Use this skill when the user wants a head start querying ChatGPT through the
already logged-in BrowserOS browser session.
This is a prose-only helper skill. It uses BrowserOS MCP directly. It ships no
scripts, runners, controllers, harnesses, schemas, or automation infrastructure.
Read and apply ../browseros/SKILL.md before the first BrowserOS call. The
canonical BrowserOS skill owns page provenance, window and profile identity,
lifecycle, proof, recovery, secrets, and cleanup; this skill owns the
ChatGPT-specific workflow, including finding and remembering a working Pro
account among the Work profile and a variable number of Pro profiles.
Read ../_shared/agent-orchestration-policy.md before the query. ChatGPT Web is
an intentional provider/browser-capability lane rather than a generic local
child-agent route. Starting a new conversation and continuing an exact existing
conversation are different context choices; never inherit whatever conversation
happens to be open without deciding which one the user wants.
Use When
- The user asks to ask ChatGPT, consult ChatGPT, get ChatGPT's opinion, or run a
prompt through the ChatGPT web UI.
- The user wants BrowserOS MCP to drive logged-in ChatGPT instead of using the
OpenAI API.
- The user wants local attachments included in a ChatGPT web prompt.
- The user wants ChatGPT Pro to review code that lives on a pushed branch or PR
through the ChatGPT GitHub connector.
- The user has a rough prompt and wants it shaped before sending.
Do Not Use When
- The user wants OpenAI API usage or product/API guidance.
- The user wants generic web automation unrelated to ChatGPT.
- BrowserOS MCP is unavailable in the current host.
- ChatGPT is not already logged in in BrowserOS.
- The task would require automated login.
- The user requests more than 10 attachments.
Non-Negotiables
- Read and apply
../browseros/SKILL.md before the first direct BrowserOS MCP
call and obey it throughout this workflow; a name-drop of the skill without
reading it does not count.
- Use BrowserOS MCP, not
web.run, OpenAI API calls, shell browser scripts, or
direct cookie/session handling.
- There is one
Work profile and any number of Pro profiles, each with its
own ChatGPT account. Their BrowserOS windows should already be open, and all
accounts should have the same projects. Discover the actual profiles and
windows; there is no fixed account count or required rotation order. Note
which account currently offers Pro and use it. Keep verifying the selected
profile/window/page throughout the run under $browseros (the page's window
or browser-context evidence plus a safe in-app account or workspace marker, never an email,
token, or session payload), and name it in the receipt. If you cannot
prove which profile a page belongs to, stop and ask instead of guessing.
- Use one BrowserOS
https://chatgpt.com/ tab at a time in the chosen window.
Reuse an eligible current-agent-controlled ChatGPT page in that
window when one can be safely task-adopted under $browseros; otherwise
open exactly one ChatGPT page as a tab in that window, landing and
verifying it the way $browseros prescribes.
- Never create a new BrowserOS window. Use existing profile windows under
$browseros. Do not open pages hoping one lands in the
right profile.
- Reusing the page does not mean reusing its conversation. Do login check,
conversation selection, mode selection, attachment upload, submission,
waiting, and response reading in that same page.
- Do not open extra ChatGPT tabs for polling, attachment handling, retries,
separate prompts, or readback. During account failover, select or open one
eligible page in the next profile and continue there alone; clean up any
page this run created in the previous profile under
$browseros.
- Run ChatGPT Web prompts serially. If the user gives multiple ChatGPT asks,
process them one at a time in the same ChatGPT tab. Keep them in one
conversation only when they are explicit follow-ups; otherwise start a new
clean conversation in that tab for each independent ask. If the user asks for
parallel ChatGPT Web runs, explain that this skill runs serially to avoid web
session rate limits, then proceed sequentially. If simultaneous ChatGPT Web
runs are mandatory, fail loudly instead of opening parallel tabs.
- Read and apply
../prompt-authoring/SKILL.md to the actual populated prompt
before every submission; a name-drop of the skill without reading it does not
count. Preserve the user's intent and any explicitly requested verbatim
relay; otherwise remove hidden caller assumptions, leading success criteria,
and closed evidence paths before sending.
- Do not over-prompt Pro. Pro is a frontier model, not a junior worker: send
the ask, the essential context it cannot infer, and the desired output shape,
then stop. Do not stack roles, personas, invented rubrics, step-by-step
methodologies, output schemas, repeated constraints, motivational framing, or
restated context the thread already has. When in doubt, cut; a short faithful
prompt beats an engineered one.
- Always work in ChatGPT's
Chat surface, never Work. The composer's
Select chat surface radio decides which picker you get; Pro exists only
in Chat. Work tops out at Ultra, and Ultra is not Pro. Check the
radio before touching the model pill and again before every send. A
prompt sent from Work was not a Pro run: redo it in Chat.
- Default to GPT-6 Astra Pro in the
Chat picker: select GPT-6 Astra and
the literal Pro option, with Extended thinking when that is a
separate control. Pro is not Extra High, xhigh, Ultra, Thinking, or
whatever happens to be the highest available setting. A 5/5 indicator
alone does not establish Pro; verify the actual Pro selection. If Pro is
missing, try the next account instead of selecting a substitute. Only
deviate when the user explicitly requests a different model or mode.
- Respect explicit user choices for
Instant, Thinking, Pro, Light,
Standard, Extended, or Heavy.
- Do not downgrade or upgrade the requested mode silently.
- Never automate login. If ChatGPT is not logged in, fail loudly and tell the
user to log in manually in BrowserOS.
- Treat
Pro, especially Extended or Heavy, as a long-running mode. A
response can take 10+ minutes. Wait patiently in the same tab until generation
finishes before reading or submitting anything else.
- Actually read everything Pro emits - interim messages, the visible thinking
or reasoning summary, and the final response - during heartbeat check-ins
and at the end, and act on what it says. Errors often surface first in the
thinking trace or an interim message, such as Pro noting it cannot open a
file or reach a repo, long before the final text. A completed generation is
not automatically a success: if Pro says it cannot see an attachment, repo,
PR, required data, or connector, if it improvised around a missing input, if
it answers a different question than the one submitted, if it reports an
error, refuses, or returns something empty or degenerate, treat that as a
failed run. Fix the input and resubmit; if required connector access is
unavailable or broken, switch to a suitable Pro account or stop and tell the
user. Never relay a broken response as the answer or report success without
having read the text.
- Submit any plan, and any other multi-paragraph body, as an attached file,
never typed or pasted into the composer. Newlines in the composer can send
early and split the message, so the composer gets only a short single-
paragraph ask that points at the attached file. After sending, read back the
submitted user message and confirm the full body arrived.
- A response built on an input Pro never actually received is invalid even
when it reads as polished and confident. If Pro did not get something it was
supposed to get and worked around it - "I don't have the file, so I'll
assume...", reviewing a plan from its description instead of the attachment,
imagining repo contents it could not open, or inventing data without a
working BigQuery connection - discard the response. Restore actual access
before resubmitting, switching Pro accounts if needed, or stop and tell the
user what is unavailable. Never relay or build on an answer Pro invented
around a missing input.
- Dismiss transient blocker popups immediately. They are UI noise, not part
of the response; closing one never counts as altering the run. If a
submission does not go through for a transient reason, wait about 5
minutes, dismiss any blocker, and resubmit the same prompt in the same tab.
- A missing or disabled literal
Pro option in the verified Chat picker
probably means that account is temporarily rate limited. An explicit
usage-cap message confirms a limit. In either case, switch to the next
account under $browseros, preferring one recently observed to offer Pro.
Update the run's notes with unavailable and working accounts. Check the
remaining configured accounts before declaring Pro unavailable. Do not
retry the capped account or substitute Extra High, xhigh, Ultra,
Thinking, another model, or the API. If no available account offers Pro,
report the accounts checked and pause the blocked Pro consultation or
decision. Continue independent authorized work; pause the whole run only
when no useful independent work remains. Wait for the user to say Pro is
available again; never count a pending review as passed.
- Do not print, save, summarize, or inspect account details, cookies, tokens,
raw session payloads, or other secrets.
- Enforce a maximum of 10 attachments. Do not silently drop files.
- Keep the result simple: ChatGPT's answer plus a short receipt.
- Place every conversation in the most applicable ChatGPT project. A root chat
outside any project has no project context, so its review is useless; use a
root chat only when no existing project plausibly fits, and say so in the
receipt.
- Before starting a new conversation for continuing work, check whether the
workstream already has a live Pro thread: look in the most applicable project
for a Pro thread from the last 24-48 hours on this same work and continue it
instead of starting fresh. If that thread is already about 6 or more
prompt/response turns deep, start a new conversation in the same project
instead of overloading it. An explicit user choice of an exact thread or a
new chat always wins over this default.
- Continue an exact conversation the user names only when the intended
conversation can be identified. If it cannot, stop and ask for the missing
conversation choice rather than sending into an unrelated history.
- While a
Pro response is generating, keep a periodic check-in heartbeat,
defaulting to about every 5 minutes, using the host's heartbeat capability
when one exists, so the run never wedges silently during a long wait. Clear
the heartbeat as soon as the response is read or the run terminally fails;
never leave a stale heartbeat running.
- For data questions, attach the BigQuery connector through
@BigQuery in
the composer. For GitHub or repository questions, attach @GitHub. Use both
when the ask needs both. A typed name or confident answer does not prove
access: verify the attached connector and its successful access to the
required sources. If either required connector is missing or not working,
switch to another suitable Pro account or stop and tell the user. Never
accept guessed data, imagined code, or an answer without actual source access.
First Move
- Resolve the user's desired ChatGPT ask, required BigQuery/GitHub connectors,
and any explicit mode, effort, model, or attachment requests.
- Read
../prompt-authoring/SKILL.md and apply it to the populated prompt
before touching ChatGPT. Keep it faithful to the user's intent, preserve an
explicitly requested verbatim relay, and make caller hypotheses
challengeable rather than task truth. Keep the prompt lean per the
over-prompting rule above: cut scaffolding instead of adding it.
- Resolve conversation placement: identify the most applicable ChatGPT
project, then resolve
conversation = continue-exact | continue-recent-pro | new-in-project | new-root. continue-exact requires an explicit user request and an
identifiable target. continue-recent-pro applies when the ask continues a
workstream with a Pro thread from the last 24-48 hours in that project and
the thread is under about 6 turns. Otherwise use new-in-project, or
new-root only when no project fits.
- Discover the already-open
Work and Pro profile windows and read any
account-availability notes for this run. Start with an explicitly requested
profile or the account holding the needed thread when Pro is available
there; otherwise prefer the account most recently observed to offer Pro.
Verify its current state. If Pro is missing or capped, follow failover below.
- Under
$browseros, select the single current-agent-controlled ChatGPT page
for the run inside that window: safely task-adopt an eligible
https://chatgpt.com/ page there, or open exactly one new page as a tab
in that window. Prove the page is in the chosen window before using it.
Never create a new window.
- Verify that page is logged in before doing anything else.
- In that page, open the resolved conversation: a new chat inside the chosen
project, the recent Pro thread, or the exact requested conversation. Verify
the thread before submitting into it. Do not submit while the page is merely
showing an arbitrary prior thread.
- Set the surface radio to
Chat and verify the requested model and mode,
defaulting to GPT-6 Astra with literal Pro. If required Pro is missing or
disabled, switch to the next account below. Never send a Pro request from
Work or substitute Extra High.
Profile Windows And Rate Limits
Read and apply $browseros, including its profile/account operating details,
before inspecting or switching accounts. The account pool is one Work profile
and a variable number of Pro profiles whose windows should already be open.
Names such as Pro One, Pro1, Pro2, and Pro3 are examples, not a fixed
inventory or rotation order. Discover what is open on this machine and verify
the actual profile/window/page mapping. All accounts should have the same
projects; verify the same-named project after switching. Conversations are per
account, so carry the needed thread context into the destination conversation.
Keep a brief note in the existing run context or worklog identifying which
profile/window currently offers Pro and the required connector access, which
accounts were unavailable, and when each was checked. Record positive
availability, not just failures, and continue with the working account. Use these notes to avoid repeatedly choosing a capped
account; refresh stale observations when resuming because limits are temporary.
Recheck the working profile/window/page under $browseros throughout use and
before every submission or readback. The shared project name alone cannot prove
that this is the account whose availability you checked.
In ChatGPT's Chat surface, inspect GPT-6 Astra's model and reasoning controls,
including Configure... / Intelligence when present. If the literal Pro
option is absent or disabled, treat it as a probable temporary account rate
limit. Do not redefine Pro as the highest remaining option. Extra High is
still not Pro even if it is now the top setting. An explicit usage-cap message,
including You've hit your rate limit. Please try again later, triggers the
same account switch:
- Note the profile/window, observed condition, and when checked: Pro
missing/disabled or an explicit rate-limit message. The missing option
alone is a probable limit, not proof.
- Use a recently known working account, or check another configured account
not yet checked. Under
$browseros, select or open one eligible ChatGPT page
in its existing window, prove its profile, and verify login. Protect the
user's foreground focus under that skill's operating rules.
- Set the surface to
Chat and verify GPT-6 Astra's literal Pro option.
If unavailable there too, update the note and continue through the remaining
accounts. When Pro is available, note that profile/window as the working
account and use it; there is no need to test every other account first.
- When Pro is available, open the same-named project and start a conversation
with the necessary goal, decisions, and prior thread context. Re-attach files
and re-attach the required
@BigQuery / @GitHub mentions with their source
context, including the PR URL for code reviews. Verify connector access,
Pro, and the requested thinking effort; submit the same ask and continue
in that page alone.
- Clean up pages this run created and no longer needs under
$browseros.
Record the profiles checked, the successful profile, and continuation thread.
Only after checking the available accounts should the run report that Pro
cannot be used right now. Name the profiles and observed conditions, pause the
blocked Pro consultation or decision, and continue independent authorized work.
Pause the whole run only when no useful independent work remains. Wait for the
user to say Pro is available again; do not poll capped accounts or count a
pending review as passed. There is no substitute for GPT-6 Astra Pro: never
Extra High, xhigh, Ultra, Thinking, another model, provider, reviewer, or API.
Login Check
From the ChatGPT page, use BrowserOS MCP page JavaScript to fetch:
fetch('/api/auth/session', { credentials: 'include' })
Use only the safe boolean result: whether the parsed JSON has a user value.
Do not display or store the returned user, account, token, cookie, or session
fields.
If the session does not prove a logged-in user, stop with:
BrowserOS is not logged in to ChatGPT. Open https://chatgpt.com/ in BrowserOS,
log in manually, then rerun $chatgpt-web.
If the endpoint cannot be checked, fail loudly. Do not infer login from visible
page controls.
Projects And Conversation Selection
Root chats without a project have none of the project's files, instructions, or
prior threads, so a review sent there is context-free and useless. Pick where
the conversation lives before composing anything:
- Read the project list in the ChatGPT sidebar and judge which project
actually matches the current ask: same repo, product, or workstream.
- If the ask continues work that recently went through Pro, open that
project's thread list and look for a Pro thread from the last 24-48 hours on
this same work. Open the candidate and skim enough of it to confirm it is
the same workstream, not just a similar title. Threads are per account:
if the live thread is in another profile window, that window is the one
to use unless it is rate limited.
- Continue that thread when it matches, is a
Chat-surface thread (not
labeled Work in the sidebar), and is under about 6 prompt/response
turns. Around 6 or more turns, treat it as saturated and start a new
conversation in the same project instead.
- With no matching recent thread, start a new conversation inside the chosen
project.
- Use a root chat only when no existing project plausibly fits the ask, and
note that choice in the receipt.
An explicit user request for a specific thread, a specific project, or a fresh
chat overrides all of the defaults above.
Data And Repository Access Via Connectors
Actual source access is required. Pro can produce a confident answer even
when it has no data or repository access; that answer is invalid.
- For data questions, @mention the BigQuery connector in the composer. For
GitHub or repository questions, including code reviews and architecture
questions about our code, @mention GitHub. Attach both
@BigQuery and
@GitHub when the ask needs both. Select the actual connector from the
mention picker and confirm it is attached; plain text naming it is not an
invocation. Name the relevant data scope or repository in the ask.
- For code review, commit and push the work to its PR branch and include the
exact PR URL with
@GitHub. Do not substitute pasted diffs or file dumps
for the connector's access to the branch.
- Confirm the required connectors are available before sending. During
generation and before accepting the answer, inspect the visible connector
activity, returned source material, and Pro's messages for successful
access to the data or repository needed for this question. A connected
badge or Pro saying it has access is insufficient. The evidence must show
it actually retrieved the needed data or code; no retrieval, failed queries,
inaccessible sources, or guesses cannot support an accepted answer.
- If either required connector is unavailable or fails, stop using that run.
Switch to another already-open Pro profile under
$browseros, or stop the
consultation and tell the user exactly which connector/source is
unavailable. On switching, verify literal Pro, the intended profile and
project, and working access to every required connector; carry the ask and
inputs over and attach the mentions again. Record the working account and
connector status in the existing availability notes. Connector failure
alone does not establish a Pro rate limit. Never automate connector
authorization; any needed connection or permission repair is manual.
Discard any response built on guessed data or imagined repository contents.
Resume only with actual access to all sources the ask requires; do not present
the failed answer as a result, a completed review, or a basis for a decision.
Chat Surface: Chat, Never Work
The ChatGPT composer has a Select chat surface radio group with two
surfaces, Chat and Work. Select GPT-6 Astra Pro in Chat. Work's model picker
and reasoning slider do not select Chat's Pro mode. A review sent from
Work does not count as a Pro verdict; redo it in Chat.
Before touching the model pill, and again before every send:
- Read the surface radio group and make sure
Chat is the checked radio.
If Work is checked, select Chat and re-read the composer; the pill
changes with the surface.
- For a Pro run, confirm GPT-6 Astra and the literal
Pro option are selected, with
Extended thinking where offered. Extra High, xhigh, Ultra, or a numeric
power level alone do not establish Pro. If Pro is unavailable, switch
accounts under the profile-window section before sending.
- When continuing a thread, confirm it is a Chat-surface thread. The
sidebar labels Work-surface chats with
Work; a Work thread cannot carry
a Pro conversation, so start a new Chat conversation in the project
instead.
Naming trap: the BrowserOS profile window called Work has nothing to do
with ChatGPT's Work surface. In every BrowserOS profile, including Work,
the ChatGPT surface is Chat.
Mode And Effort
Default when the user does not specify:
surface = Chat (never Work)
mode = literal Pro option (never Extra High, xhigh, Ultra, or Thinking)
effort = Extended
model = GPT-6 Astra Pro
Use the ChatGPT model pill beside the composer, in the Chat surface.
Prefer Configure... when available because it exposes the Intelligence
dialog with explicit model options and thinking effort.
Observed controls to select from:
- surface:
Chat, Work - always Chat
- mode:
Instant, Thinking, Pro
- effort:
Light, Standard, Extended, Heavy
- model: GPT-6 Astra, with the literal
Pro option verified in the live Chat
picker unless the user explicitly requests another model or mode
Pro means the literal Pro option on GPT-6 Astra. It is not shorthand for
maximum available reasoning. Extra High / xhigh, Ultra, Thinking, and
every other non-Pro setting are different configurations and cannot satisfy a
Pro request or required review. Extended is a separate thinking choice when
offered; it does not turn a non-Pro selection into Pro. Neither a numeric
5/5 indicator nor a BrowserOS profile named Pro proves the selected mode.
Re-open the live Chat picker and inspect the model's nested controls before
concluding Pro is missing. If GPT-6 Astra's literal Pro option is absent or
disabled, follow account failover; this is probably a temporary rate limit on
that account. Do not select the highest remaining setting. Before every Pro
send, confirm Chat, GPT-6 Astra, Pro, and the requested thinking effort.
Do not run a Pro prompt merely to test the skill. Only use Pro when the user's
actual request needs the default or explicitly asks for it.
Because the default is Pro with Extended thinking, the default path also
requires patient waiting. Do not treat a long silent period as failure by itself.
Attachments
When the material to send is a plan or any multi-paragraph body, write it to a
file (a temp file is fine) and attach it through the upload path below instead
of typing it into the composer. The composer then carries only a short
single-paragraph ask that references the attached file by name.
Preflight attachments before browser interaction:
- every path must be absolute
- every path must exist
- count must be 10 or fewer
Use the BrowserOS file-upload path that works with ChatGPT in the selected
ChatGPT page:
- Create a temporary visible file input in the page for BrowserOS MCP to use.
- Snapshot the temporary input and use the live BrowserOS MCP
upload tool
with its exact ref and the user's absolute paths.
- Transfer the selected
File objects into ChatGPT's hidden #upload-files
input.
- Dispatch
input and change events on the ChatGPT input.
- Confirm visible attachment chips by filename.
- Remove the temporary visible input.
If any requested filename does not appear as an attachment chip, stop before
submitting.
Submission
- Verify the resolved conversation placement one final time. For
new-in-project the page must be a new chat inside the chosen project; for
continue-recent-pro or continue-exact the visible thread must be the
resolved thread; for new-root the page must be a new root chat.
- Fill the ChatGPT composer with the final prompt. If the ask includes a plan
or any multi-paragraph body, that body must already be an attached file and
the composer text must be a short single-paragraph ask referencing it.
- Confirm the surface radio is
Chat and the selected mode and effort
match the request or default, GPT-6 Astra with literal Pro and Extended
thinking. If required Pro is missing or disabled, switch accounts before
sending. If the checked surface is Work, switch to Chat and reselect.
- Confirm every attachment chip and required
@BigQuery / @GitHub
connector mention is attached. If a required connector is missing or known
to be broken, switch Pro accounts or stop and tell the user before sending.
- Click
Send prompt, then read back the just-submitted user message and
confirm it contains the full intended text and attachments. If it was
truncated or split, stop the resulting generation and resubmit correctly.
- Wait in the same tab until generation finishes. For
Pro, Extended, or
Heavy, 10+ minutes can be normal; poll slowly and let ChatGPT finish. For
a Pro run, set the check-in heartbeat (default about every 5 minutes)
before settling into the long wait so the run cannot wedge silently. At
each check-in, read what is actually on the page - the visible thinking or
reasoning summary, interim assistant messages, partial response text, error
banners, connector failures - not just whether a spinner exists. If the
thinking trace or an interim message already shows the run going wrong,
such as a missing attachment, failed BigQuery access, or an unreachable
repo, act on it then rather than waiting out the full generation.
- Do not refresh, resubmit, open another tab, or start another ChatGPT prompt
while a response is still generating. Dismissing a transient blocker
dialog is always allowed. If the submission did not go through for a
transient reason, wait about 5 minutes and resubmit the same prompt in the
same tab. If it was refused with the rate-limit message, follow the
profile-window failover instead of retrying here.
- Treat failure as concrete, not time-based: visible ChatGPT error, lost
login/session, required manual user action, missing attachment before send,
or a clearly inactive page with no generation indicator and no response
progress after a patient wait.
- Read the latest assistant response from the page in full, plus its visible
thinking or reasoning summary and any interim messages, and check them
against the submitted ask. Error signals anywhere in that output count as
failures even though generation completed: Pro saying it cannot access or
see the attachment, repo, PR, required data, or connector; no evidence of
actual retrieval from required connectors; Pro improvising around a
missing input by assuming, imagining, or working from a description of an
artifact it never opened; Pro answering a different or partial question; a
refusal; an empty or degenerate reply. On any of these, diagnose the input,
repair it, and resubmit. For missing or broken connector access, switch to
another suitable Pro profile or stop and tell the user. Never relay the
broken response: a polished answer built on data or code Pro never accessed
is still invalid.
- Clear the check-in heartbeat as soon as the response is read or the run
terminally fails. Do not leave it running past the run.
Output
Return:
- ChatGPT's answer
- surface (
Chat), model, mode, and effort used
- verified working profile/window/page and any account failovers, with the
observed availability of accounts checked and when checked
- conversation placement used: the project name plus
continue-exact,
continue-recent-pro, new-in-project, or new-root with a one-line reason
when the choice was new-root
- attachment filenames, if any; connectors used with a brief account of the
data or code actually accessed, and the PR URL for a code review
- a short note if the prompt was shaped before submission
- a short note when the run waited for a long Pro response, including that the
heartbeat was set and cleared
If the run fails, name the exact failed condition and the next manual repair.
When no available profile offers Pro after checking the configured accounts,
say so plainly with the observed conditions, name the Pro
consultation or decision that is paused and any independent work continuing,
and wait for the user to say Pro is back.
1---2name: chatgpt-web3description: Query logged-in ChatGPT through BrowserOS after applying $browseros and $prompt-authoring. Use for explicit web consultations, data questions, pushed PR reviews, attachments, or exact conversation continuation. Requires @BigQuery for data and @GitHub for GitHub/repo questions, with actual source access; missing or broken access means switch Pro accounts or stop and tell the user, never accept guesses. Defaults to GPT-6 Astra with literal Pro and Extended thinking in Chat, never Extra High, xhigh, Ultra, or Thinking. Discover the already-open Work and Pro profiles, note and use a working account, and continually verify profile/window/page. Missing Pro probably means a temporary limit; try another account in the same-named project with context carried over. Uses one tab, serial prompts, and a heartbeat during waits. Pause blocked consultation when no suitable account works; continue independent work. Not for API work, generic browser automation, automated login, or scripts.4---56# ChatGPT Web78Use this skill when the user wants a head start querying ChatGPT through the9already logged-in BrowserOS browser session.1011This is a prose-only helper skill. It uses BrowserOS MCP directly. It ships no12scripts, runners, controllers, harnesses, schemas, or automation infrastructure.1314Read and apply `../browseros/SKILL.md` before the first BrowserOS call. The15canonical BrowserOS skill owns page provenance, window and profile identity,16lifecycle, proof, recovery, secrets, and cleanup; this skill owns the17ChatGPT-specific workflow, including finding and remembering a working Pro18account among the `Work` profile and a variable number of Pro profiles.1920Read `../_shared/agent-orchestration-policy.md` before the query. ChatGPT Web is21an intentional provider/browser-capability lane rather than a generic local22child-agent route. Starting a new conversation and continuing an exact existing23conversation are different context choices; never inherit whatever conversation24happens to be open without deciding which one the user wants.2526## Use When2728- The user asks to ask ChatGPT, consult ChatGPT, get ChatGPT's opinion, or run a29 prompt through the ChatGPT web UI.30- The user wants BrowserOS MCP to drive logged-in ChatGPT instead of using the31 OpenAI API.32- The user wants local attachments included in a ChatGPT web prompt.33- The user wants ChatGPT Pro to review code that lives on a pushed branch or PR34 through the ChatGPT GitHub connector.35- The user has a rough prompt and wants it shaped before sending.3637## Do Not Use When3839- The user wants OpenAI API usage or product/API guidance.40- The user wants generic web automation unrelated to ChatGPT.41- BrowserOS MCP is unavailable in the current host.42- ChatGPT is not already logged in in BrowserOS.43- The task would require automated login.44- The user requests more than 10 attachments.4546## Non-Negotiables4748- Read and apply `../browseros/SKILL.md` before the first direct BrowserOS MCP49 call and obey it throughout this workflow; a name-drop of the skill without50 reading it does not count.51- Use BrowserOS MCP, not `web.run`, OpenAI API calls, shell browser scripts, or52 direct cookie/session handling.53- There is one `Work` profile and any number of Pro profiles, each with its54 own ChatGPT account. Their BrowserOS windows should already be open, and all55 accounts should have the same projects. Discover the actual profiles and56 windows; there is no fixed account count or required rotation order. Note57 which account currently offers Pro and use it. Keep verifying the selected58 profile/window/page throughout the run under `$browseros` (the page's window59 or browser-context evidence plus a safe in-app account or workspace marker, never an email,60 token, or session payload), and name it in the receipt. If you cannot61 prove which profile a page belongs to, stop and ask instead of guessing.62- Use one BrowserOS `https://chatgpt.com/` tab at a time in the chosen window.63 Reuse an eligible current-agent-controlled ChatGPT page in that64 window when one can be safely task-adopted under `$browseros`; otherwise65 open exactly one ChatGPT page as a tab in that window, landing and66 verifying it the way `$browseros` prescribes.67- Never create a new BrowserOS window. Use existing profile windows under68 `$browseros`. Do not open pages hoping one lands in the69 right profile.70- Reusing the page does not mean reusing its conversation. Do login check,71 conversation selection, mode selection, attachment upload, submission,72 waiting, and response reading in that same page.73- Do not open extra ChatGPT tabs for polling, attachment handling, retries,74 separate prompts, or readback. During account failover, select or open one75 eligible page in the next profile and continue there alone; clean up any76 page this run created in the previous profile under `$browseros`.77- Run ChatGPT Web prompts serially. If the user gives multiple ChatGPT asks,78 process them one at a time in the same ChatGPT tab. Keep them in one79 conversation only when they are explicit follow-ups; otherwise start a new80 clean conversation in that tab for each independent ask. If the user asks for81 parallel ChatGPT Web runs, explain that this skill runs serially to avoid web82 session rate limits, then proceed sequentially. If simultaneous ChatGPT Web83 runs are mandatory, fail loudly instead of opening parallel tabs.84- Read and apply `../prompt-authoring/SKILL.md` to the actual populated prompt85 before every submission; a name-drop of the skill without reading it does not86 count. Preserve the user's intent and any explicitly requested verbatim87 relay; otherwise remove hidden caller assumptions, leading success criteria,88 and closed evidence paths before sending.89- Do not over-prompt Pro. Pro is a frontier model, not a junior worker: send90 the ask, the essential context it cannot infer, and the desired output shape,91 then stop. Do not stack roles, personas, invented rubrics, step-by-step92 methodologies, output schemas, repeated constraints, motivational framing, or93 restated context the thread already has. When in doubt, cut; a short faithful94 prompt beats an engineered one.95- Always work in ChatGPT's `Chat` surface, never `Work`. The composer's96 `Select chat surface` radio decides which picker you get; Pro exists only97 in `Chat`. `Work` tops out at `Ultra`, and `Ultra` is not Pro. Check the98 radio before touching the model pill and again before every send. A99 prompt sent from `Work` was not a Pro run: redo it in `Chat`.100- Default to **GPT-6 Astra Pro** in the `Chat` picker: select GPT-6 Astra and101 the literal **`Pro`** option, with `Extended` thinking when that is a102 separate control. **Pro is not Extra High, xhigh, Ultra, Thinking, or103 whatever happens to be the highest available setting.** A `5/5` indicator104 alone does not establish Pro; verify the actual `Pro` selection. If Pro is105 missing, try the next account instead of selecting a substitute. Only106 deviate when the user explicitly requests a different model or mode.107- Respect explicit user choices for `Instant`, `Thinking`, `Pro`, `Light`,108 `Standard`, `Extended`, or `Heavy`.109- Do not downgrade or upgrade the requested mode silently.110- Never automate login. If ChatGPT is not logged in, fail loudly and tell the111 user to log in manually in BrowserOS.112- Treat `Pro`, especially `Extended` or `Heavy`, as a long-running mode. A113 response can take 10+ minutes. Wait patiently in the same tab until generation114 finishes before reading or submitting anything else.115- Actually read everything Pro emits - interim messages, the visible thinking116 or reasoning summary, and the final response - during heartbeat check-ins117 and at the end, and act on what it says. Errors often surface first in the118 thinking trace or an interim message, such as Pro noting it cannot open a119 file or reach a repo, long before the final text. A completed generation is120 not automatically a success: if Pro says it cannot see an attachment, repo,121 PR, required data, or connector, if it improvised around a missing input, if122 it answers a different question than the one submitted, if it reports an123 error, refuses, or returns something empty or degenerate, treat that as a124 failed run. Fix the input and resubmit; if required connector access is125 unavailable or broken, switch to a suitable Pro account or stop and tell the126 user. Never relay a broken response as the answer or report success without127 having read the text.128- Submit any plan, and any other multi-paragraph body, as an attached file,129 never typed or pasted into the composer. Newlines in the composer can send130 early and split the message, so the composer gets only a short single-131 paragraph ask that points at the attached file. After sending, read back the132 submitted user message and confirm the full body arrived.133- A response built on an input Pro never actually received is invalid even134 when it reads as polished and confident. If Pro did not get something it was135 supposed to get and worked around it - "I don't have the file, so I'll136 assume...", reviewing a plan from its description instead of the attachment,137 imagining repo contents it could not open, or inventing data without a138 working BigQuery connection - discard the response. Restore actual access139 before resubmitting, switching Pro accounts if needed, or stop and tell the140 user what is unavailable. Never relay or build on an answer Pro invented141 around a missing input.142- Dismiss transient blocker popups immediately. They are UI noise, not part143 of the response; closing one never counts as altering the run. If a144 submission does not go through for a transient reason, wait about 5145 minutes, dismiss any blocker, and resubmit the same prompt in the same tab.146- A missing or disabled literal `Pro` option in the verified `Chat` picker147 probably means that account is temporarily rate limited. An explicit148 usage-cap message confirms a limit. In either case, switch to the next149 account under `$browseros`, preferring one recently observed to offer Pro.150 Update the run's notes with unavailable and working accounts. Check the151 remaining configured accounts before declaring Pro unavailable. Do not152 retry the capped account or substitute `Extra High`, `xhigh`, `Ultra`,153 `Thinking`, another model, or the API. If no available account offers Pro,154 report the accounts checked and pause the blocked Pro consultation or155 decision. Continue independent authorized work; pause the whole run only156 when no useful independent work remains. Wait for the user to say Pro is157 available again; never count a pending review as passed.158- Do not print, save, summarize, or inspect account details, cookies, tokens,159 raw session payloads, or other secrets.160- Enforce a maximum of 10 attachments. Do not silently drop files.161- Keep the result simple: ChatGPT's answer plus a short receipt.162- Place every conversation in the most applicable ChatGPT project. A root chat163 outside any project has no project context, so its review is useless; use a164 root chat only when no existing project plausibly fits, and say so in the165 receipt.166- Before starting a new conversation for continuing work, check whether the167 workstream already has a live Pro thread: look in the most applicable project168 for a Pro thread from the last 24-48 hours on this same work and continue it169 instead of starting fresh. If that thread is already about 6 or more170 prompt/response turns deep, start a new conversation in the same project171 instead of overloading it. An explicit user choice of an exact thread or a172 new chat always wins over this default.173- Continue an exact conversation the user names only when the intended174 conversation can be identified. If it cannot, stop and ask for the missing175 conversation choice rather than sending into an unrelated history.176- While a `Pro` response is generating, keep a periodic check-in heartbeat,177 defaulting to about every 5 minutes, using the host's heartbeat capability178 when one exists, so the run never wedges silently during a long wait. Clear179 the heartbeat as soon as the response is read or the run terminally fails;180 never leave a stale heartbeat running.181- For data questions, attach the BigQuery connector through `@BigQuery` in182 the composer. For GitHub or repository questions, attach `@GitHub`. Use both183 when the ask needs both. A typed name or confident answer does not prove184 access: verify the attached connector and its successful access to the185 required sources. If either required connector is missing or not working,186 switch to another suitable Pro account or stop and tell the user. Never187 accept guessed data, imagined code, or an answer without actual source access.188189## First Move1901911. Resolve the user's desired ChatGPT ask, required BigQuery/GitHub connectors,192 and any explicit mode, effort, model, or attachment requests.1932. Read `../prompt-authoring/SKILL.md` and apply it to the populated prompt194 before touching ChatGPT. Keep it faithful to the user's intent, preserve an195 explicitly requested verbatim relay, and make caller hypotheses196 challengeable rather than task truth. Keep the prompt lean per the197 over-prompting rule above: cut scaffolding instead of adding it.1983. Resolve conversation placement: identify the most applicable ChatGPT199 project, then resolve200 `conversation = continue-exact | continue-recent-pro | new-in-project |201 new-root`. `continue-exact` requires an explicit user request and an202 identifiable target. `continue-recent-pro` applies when the ask continues a203 workstream with a Pro thread from the last 24-48 hours in that project and204 the thread is under about 6 turns. Otherwise use `new-in-project`, or205 `new-root` only when no project fits.2064. Discover the already-open `Work` and Pro profile windows and read any207 account-availability notes for this run. Start with an explicitly requested208 profile or the account holding the needed thread when Pro is available209 there; otherwise prefer the account most recently observed to offer Pro.210 Verify its current state. If Pro is missing or capped, follow failover below.2115. Under `$browseros`, select the single current-agent-controlled ChatGPT page212 for the run inside that window: safely task-adopt an eligible213 `https://chatgpt.com/` page there, or open exactly one new page as a tab214 in that window. Prove the page is in the chosen window before using it.215 Never create a new window.2166. Verify that page is logged in before doing anything else.2177. In that page, open the resolved conversation: a new chat inside the chosen218 project, the recent Pro thread, or the exact requested conversation. Verify219 the thread before submitting into it. Do not submit while the page is merely220 showing an arbitrary prior thread.2218. Set the surface radio to `Chat` and verify the requested model and mode,222 defaulting to GPT-6 Astra with literal `Pro`. If required Pro is missing or223 disabled, switch to the next account below. Never send a Pro request from224 `Work` or substitute Extra High.225226## Profile Windows And Rate Limits227228Read and apply `$browseros`, including its profile/account operating details,229before inspecting or switching accounts. The account pool is one `Work` profile230and a variable number of Pro profiles whose windows should already be open.231Names such as `Pro One`, `Pro1`, `Pro2`, and `Pro3` are examples, not a fixed232inventory or rotation order. Discover what is open on this machine and verify233the actual profile/window/page mapping. All accounts should have the same234projects; verify the same-named project after switching. Conversations are per235account, so carry the needed thread context into the destination conversation.236237Keep a brief note in the existing run context or worklog identifying which238profile/window currently offers Pro and the required connector access, which239accounts were unavailable, and when each was checked. Record positive240availability, not just failures, and continue with the working account. Use these notes to avoid repeatedly choosing a capped241account; refresh stale observations when resuming because limits are temporary.242Recheck the working profile/window/page under `$browseros` throughout use and243before every submission or readback. The shared project name alone cannot prove244that this is the account whose availability you checked.245246In ChatGPT's `Chat` surface, inspect GPT-6 Astra's model and reasoning controls,247including `Configure...` / `Intelligence` when present. If the literal `Pro`248option is absent or disabled, treat it as a probable temporary account rate249limit. Do not redefine Pro as the highest remaining option. `Extra High` is250still not Pro even if it is now the top setting. An explicit usage-cap message,251including `You've hit your rate limit. Please try again later`, triggers the252same account switch:2532541. Note the profile/window, observed condition, and when checked: Pro255 missing/disabled or an explicit rate-limit message. The missing option256 alone is a probable limit, not proof.2572. Use a recently known working account, or check another configured account258 not yet checked. Under `$browseros`, select or open one eligible ChatGPT page259 in its existing window, prove its profile, and verify login. Protect the260 user's foreground focus under that skill's operating rules.2613. Set the surface to `Chat` and verify GPT-6 Astra's literal `Pro` option.262 If unavailable there too, update the note and continue through the remaining263 accounts. When Pro is available, note that profile/window as the working264 account and use it; there is no need to test every other account first.2654. When Pro is available, open the same-named project and start a conversation266 with the necessary goal, decisions, and prior thread context. Re-attach files267 and re-attach the required `@BigQuery` / `@GitHub` mentions with their source268 context, including the PR URL for code reviews. Verify connector access,269 `Pro`, and the requested thinking effort; submit the same ask and continue270 in that page alone.2715. Clean up pages this run created and no longer needs under `$browseros`.272 Record the profiles checked, the successful profile, and continuation thread.273274Only after checking the available accounts should the run report that Pro275cannot be used right now. Name the profiles and observed conditions, pause the276blocked Pro consultation or decision, and continue independent authorized work.277Pause the whole run only when no useful independent work remains. Wait for the278user to say Pro is available again; do not poll capped accounts or count a279pending review as passed. There is no substitute for GPT-6 Astra Pro: never280Extra High, xhigh, Ultra, Thinking, another model, provider, reviewer, or API.281282## Login Check283284From the ChatGPT page, use BrowserOS MCP page JavaScript to fetch:285286```javascript287fetch('/api/auth/session', { credentials: 'include' })288```289290Use only the safe boolean result: whether the parsed JSON has a `user` value.291Do not display or store the returned user, account, token, cookie, or session292fields.293294If the session does not prove a logged-in user, stop with:295296```text297BrowserOS is not logged in to ChatGPT. Open https://chatgpt.com/ in BrowserOS,298log in manually, then rerun $chatgpt-web.299```300301If the endpoint cannot be checked, fail loudly. Do not infer login from visible302page controls.303304## Projects And Conversation Selection305306Root chats without a project have none of the project's files, instructions, or307prior threads, so a review sent there is context-free and useless. Pick where308the conversation lives before composing anything:3093101. Read the project list in the ChatGPT sidebar and judge which project311 actually matches the current ask: same repo, product, or workstream.3122. If the ask continues work that recently went through Pro, open that313 project's thread list and look for a Pro thread from the last 24-48 hours on314 this same work. Open the candidate and skim enough of it to confirm it is315 the same workstream, not just a similar title. Threads are per account:316 if the live thread is in another profile window, that window is the one317 to use unless it is rate limited.3183. Continue that thread when it matches, is a `Chat`-surface thread (not319 labeled `Work` in the sidebar), and is under about 6 prompt/response320 turns. Around 6 or more turns, treat it as saturated and start a new321 conversation in the same project instead.3224. With no matching recent thread, start a new conversation inside the chosen323 project.3245. Use a root chat only when no existing project plausibly fits the ask, and325 note that choice in the receipt.326327An explicit user request for a specific thread, a specific project, or a fresh328chat overrides all of the defaults above.329330## Data And Repository Access Via Connectors331332**Actual source access is required. Pro can produce a confident answer even333when it has no data or repository access; that answer is invalid.**3343351. For data questions, @mention the BigQuery connector in the composer. For336 GitHub or repository questions, including code reviews and architecture337 questions about our code, @mention GitHub. Attach both `@BigQuery` and338 `@GitHub` when the ask needs both. Select the actual connector from the339 mention picker and confirm it is attached; plain text naming it is not an340 invocation. Name the relevant data scope or repository in the ask.3412. For code review, commit and push the work to its PR branch and include the342 exact PR URL with `@GitHub`. Do not substitute pasted diffs or file dumps343 for the connector's access to the branch.3443. Confirm the required connectors are available before sending. During345 generation and before accepting the answer, inspect the visible connector346 activity, returned source material, and Pro's messages for successful347 access to the data or repository needed for this question. A connected348 badge or Pro saying it has access is insufficient. The evidence must show349 it actually retrieved the needed data or code; no retrieval, failed queries,350 inaccessible sources, or guesses cannot support an accepted answer.3514. If either required connector is unavailable or fails, stop using that run.352 Switch to another already-open Pro profile under `$browseros`, or stop the353 consultation and tell the user exactly which connector/source is354 unavailable. On switching, verify literal Pro, the intended profile and355 project, and working access to every required connector; carry the ask and356 inputs over and attach the mentions again. Record the working account and357 connector status in the existing availability notes. Connector failure358 alone does not establish a Pro rate limit. Never automate connector359 authorization; any needed connection or permission repair is manual.360361Discard any response built on guessed data or imagined repository contents.362Resume only with actual access to all sources the ask requires; do not present363the failed answer as a result, a completed review, or a basis for a decision.364365## Chat Surface: Chat, Never Work366367The ChatGPT composer has a `Select chat surface` radio group with two368surfaces, `Chat` and `Work`. Select GPT-6 Astra Pro in `Chat`. Work's model picker369and reasoning slider do not select Chat's Pro mode. A review sent from370`Work` does not count as a Pro verdict; redo it in `Chat`.371372Before touching the model pill, and again before every send:3733741. Read the surface radio group and make sure `Chat` is the checked radio.375 If `Work` is checked, select `Chat` and re-read the composer; the pill376 changes with the surface.3772. For a Pro run, confirm GPT-6 Astra and the literal `Pro` option are selected, with378 `Extended` thinking where offered. Extra High, xhigh, Ultra, or a numeric379 power level alone do not establish Pro. If Pro is unavailable, switch380 accounts under the profile-window section before sending.3813. When continuing a thread, confirm it is a Chat-surface thread. The382 sidebar labels Work-surface chats with `Work`; a Work thread cannot carry383 a Pro conversation, so start a new `Chat` conversation in the project384 instead.385386Naming trap: the BrowserOS profile window called `Work` has nothing to do387with ChatGPT's `Work` surface. In every BrowserOS profile, including `Work`,388the ChatGPT surface is `Chat`.389390## Mode And Effort391392Default when the user does not specify:393394```text395surface = Chat (never Work)396mode = literal Pro option (never Extra High, xhigh, Ultra, or Thinking)397effort = Extended398model = GPT-6 Astra Pro399```400401Use the ChatGPT model pill beside the composer, in the `Chat` surface.402Prefer `Configure...` when available because it exposes the `Intelligence`403dialog with explicit model options and thinking effort.404405Observed controls to select from:406407- surface: `Chat`, `Work` - always `Chat`408- mode: `Instant`, `Thinking`, `Pro`409- effort: `Light`, `Standard`, `Extended`, `Heavy`410- model: GPT-6 Astra, with the literal `Pro` option verified in the live Chat411 picker unless the user explicitly requests another model or mode412413**Pro means the literal `Pro` option on GPT-6 Astra.** It is not shorthand for414maximum available reasoning. `Extra High` / `xhigh`, `Ultra`, `Thinking`, and415every other non-Pro setting are different configurations and cannot satisfy a416Pro request or required review. `Extended` is a separate thinking choice when417offered; it does not turn a non-Pro selection into Pro. Neither a numeric418`5/5` indicator nor a BrowserOS profile named `Pro` proves the selected mode.419420Re-open the live `Chat` picker and inspect the model's nested controls before421concluding Pro is missing. If GPT-6 Astra's literal `Pro` option is absent or422disabled, follow account failover; this is probably a temporary rate limit on423that account. Do not select the highest remaining setting. Before every Pro424send, confirm `Chat`, GPT-6 Astra, `Pro`, and the requested thinking effort.425426Do not run a Pro prompt merely to test the skill. Only use Pro when the user's427actual request needs the default or explicitly asks for it.428429Because the default is `Pro` with `Extended` thinking, the default path also430requires patient waiting. Do not treat a long silent period as failure by itself.431432## Attachments433434When the material to send is a plan or any multi-paragraph body, write it to a435file (a temp file is fine) and attach it through the upload path below instead436of typing it into the composer. The composer then carries only a short437single-paragraph ask that references the attached file by name.438439Preflight attachments before browser interaction:440441- every path must be absolute442- every path must exist443- count must be 10 or fewer444445Use the BrowserOS file-upload path that works with ChatGPT in the selected446ChatGPT page:4474481. Create a temporary visible file input in the page for BrowserOS MCP to use.4492. Snapshot the temporary input and use the live BrowserOS MCP `upload` tool450 with its exact ref and the user's absolute paths.4513. Transfer the selected `File` objects into ChatGPT's hidden `#upload-files`452 input.4534. Dispatch `input` and `change` events on the ChatGPT input.4545. Confirm visible attachment chips by filename.4556. Remove the temporary visible input.456457If any requested filename does not appear as an attachment chip, stop before458submitting.459460## Submission4614621. Verify the resolved conversation placement one final time. For463 `new-in-project` the page must be a new chat inside the chosen project; for464 `continue-recent-pro` or `continue-exact` the visible thread must be the465 resolved thread; for `new-root` the page must be a new root chat.4662. Fill the ChatGPT composer with the final prompt. If the ask includes a plan467 or any multi-paragraph body, that body must already be an attached file and468 the composer text must be a short single-paragraph ask referencing it.4693. Confirm the surface radio is `Chat` and the selected mode and effort470 match the request or default, GPT-6 Astra with literal `Pro` and Extended471 thinking. If required Pro is missing or disabled, switch accounts before472 sending. If the checked surface is `Work`, switch to `Chat` and reselect.4734. Confirm every attachment chip and required `@BigQuery` / `@GitHub`474 connector mention is attached. If a required connector is missing or known475 to be broken, switch Pro accounts or stop and tell the user before sending.4765. Click `Send prompt`, then read back the just-submitted user message and477 confirm it contains the full intended text and attachments. If it was478 truncated or split, stop the resulting generation and resubmit correctly.4796. Wait in the same tab until generation finishes. For `Pro`, `Extended`, or480 `Heavy`, 10+ minutes can be normal; poll slowly and let ChatGPT finish. For481 a `Pro` run, set the check-in heartbeat (default about every 5 minutes)482 before settling into the long wait so the run cannot wedge silently. At483 each check-in, read what is actually on the page - the visible thinking or484 reasoning summary, interim assistant messages, partial response text, error485 banners, connector failures - not just whether a spinner exists. If the486 thinking trace or an interim message already shows the run going wrong,487 such as a missing attachment, failed BigQuery access, or an unreachable488 repo, act on it then rather than waiting out the full generation.4897. Do not refresh, resubmit, open another tab, or start another ChatGPT prompt490 while a response is still generating. Dismissing a transient blocker491 dialog is always allowed. If the submission did not go through for a492 transient reason, wait about 5 minutes and resubmit the same prompt in the493 same tab. If it was refused with the rate-limit message, follow the494 profile-window failover instead of retrying here.4958. Treat failure as concrete, not time-based: visible ChatGPT error, lost496 login/session, required manual user action, missing attachment before send,497 or a clearly inactive page with no generation indicator and no response498 progress after a patient wait.4999. Read the latest assistant response from the page in full, plus its visible500 thinking or reasoning summary and any interim messages, and check them501 against the submitted ask. Error signals anywhere in that output count as502 failures even though generation completed: Pro saying it cannot access or503 see the attachment, repo, PR, required data, or connector; no evidence of504 actual retrieval from required connectors; Pro improvising around a505 missing input by assuming, imagining, or working from a description of an506 artifact it never opened; Pro answering a different or partial question; a507 refusal; an empty or degenerate reply. On any of these, diagnose the input,508 repair it, and resubmit. For missing or broken connector access, switch to509 another suitable Pro profile or stop and tell the user. Never relay the510 broken response: a polished answer built on data or code Pro never accessed511 is still invalid.51210. Clear the check-in heartbeat as soon as the response is read or the run513 terminally fails. Do not leave it running past the run.514515## Output516517Return:518519- ChatGPT's answer520- surface (`Chat`), model, mode, and effort used521- verified working profile/window/page and any account failovers, with the522 observed availability of accounts checked and when checked523- conversation placement used: the project name plus `continue-exact`,524 `continue-recent-pro`, `new-in-project`, or `new-root` with a one-line reason525 when the choice was `new-root`526- attachment filenames, if any; connectors used with a brief account of the527 data or code actually accessed, and the PR URL for a code review528- a short note if the prompt was shaped before submission529- a short note when the run waited for a long Pro response, including that the530 heartbeat was set and cleared531532If the run fails, name the exact failed condition and the next manual repair.533When no available profile offers Pro after checking the configured accounts,534say so plainly with the observed conditions, name the Pro535consultation or decision that is paused and any independent work continuing,536and wait for the user to say Pro is back.