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."4metadata:5 short-description: "Query logged-in ChatGPT through BrowserOS"6---78# ChatGPT Web910Use this skill when the user wants a head start querying ChatGPT through the11already logged-in BrowserOS browser session.1213This is a prose-only helper skill. It uses BrowserOS MCP directly. It ships no14scripts, runners, controllers, harnesses, schemas, or automation infrastructure.1516Read and apply `../browseros/SKILL.md` before the first BrowserOS call. The17canonical BrowserOS skill owns page provenance, window and profile identity,18lifecycle, proof, recovery, secrets, and cleanup; this skill owns the19ChatGPT-specific workflow, including finding and remembering a working Pro20account among the `Work` profile and a variable number of Pro profiles.2122Read `../_shared/agent-orchestration-policy.md` before the query. ChatGPT Web is23an intentional provider/browser-capability lane rather than a generic local24child-agent route. Starting a new conversation and continuing an exact existing25conversation are different context choices; never inherit whatever conversation26happens to be open without deciding which one the user wants.2728## Use When2930- The user asks to ask ChatGPT, consult ChatGPT, get ChatGPT's opinion, or run a31 prompt through the ChatGPT web UI.32- The user wants BrowserOS MCP to drive logged-in ChatGPT instead of using the33 OpenAI API.34- The user wants local attachments included in a ChatGPT web prompt.35- The user wants ChatGPT Pro to review code that lives on a pushed branch or PR36 through the ChatGPT GitHub connector.37- The user has a rough prompt and wants it shaped before sending.3839## Do Not Use When4041- The user wants OpenAI API usage or product/API guidance.42- The user wants generic web automation unrelated to ChatGPT.43- BrowserOS MCP is unavailable in the current host.44- ChatGPT is not already logged in in BrowserOS.45- The task would require automated login.46- The user requests more than 10 attachments.4748## Non-Negotiables4950- Read and apply `../browseros/SKILL.md` before the first direct BrowserOS MCP51 call and obey it throughout this workflow; a name-drop of the skill without52 reading it does not count.53- Use BrowserOS MCP, not `web.run`, OpenAI API calls, shell browser scripts, or54 direct cookie/session handling.55- There is one `Work` profile and any number of Pro profiles, each with its56 own ChatGPT account. Their BrowserOS windows should already be open, and all57 accounts should have the same projects. Discover the actual profiles and58 windows; there is no fixed account count or required rotation order. Note59 which account currently offers Pro and use it. Keep verifying the selected60 profile/window/page throughout the run under `$browseros` (the page's window61 or browser-context evidence plus a safe in-app account or workspace marker, never an email,62 token, or session payload), and name it in the receipt. If you cannot63 prove which profile a page belongs to, stop and ask instead of guessing.64- Use one BrowserOS `https://chatgpt.com/` tab at a time in the chosen window.65 Reuse an eligible current-agent-controlled ChatGPT page in that66 window when one can be safely task-adopted under `$browseros`; otherwise67 open exactly one ChatGPT page as a tab in that window, landing and68 verifying it the way `$browseros` prescribes.69- Never create a new BrowserOS window. Use existing profile windows under70 `$browseros`. Do not open pages hoping one lands in the71 right profile.72- Reusing the page does not mean reusing its conversation. Do login check,73 conversation selection, mode selection, attachment upload, submission,74 waiting, and response reading in that same page.75- Do not open extra ChatGPT tabs for polling, attachment handling, retries,76 separate prompts, or readback. During account failover, select or open one77 eligible page in the next profile and continue there alone; clean up any78 page this run created in the previous profile under `$browseros`.79- Run ChatGPT Web prompts serially. If the user gives multiple ChatGPT asks,80 process them one at a time in the same ChatGPT tab. Keep them in one81 conversation only when they are explicit follow-ups; otherwise start a new82 clean conversation in that tab for each independent ask. If the user asks for83 parallel ChatGPT Web runs, explain that this skill runs serially to avoid web84 session rate limits, then proceed sequentially. If simultaneous ChatGPT Web85 runs are mandatory, fail loudly instead of opening parallel tabs.86- Read and apply `../prompt-authoring/SKILL.md` to the actual populated prompt87 before every submission; a name-drop of the skill without reading it does not88 count. Preserve the user's intent and any explicitly requested verbatim89 relay; otherwise remove hidden caller assumptions, leading success criteria,90 and closed evidence paths before sending.91- Do not over-prompt Pro. Pro is a frontier model, not a junior worker: send92 the ask, the essential context it cannot infer, and the desired output shape,93 then stop. Do not stack roles, personas, invented rubrics, step-by-step94 methodologies, output schemas, repeated constraints, motivational framing, or95 restated context the thread already has. When in doubt, cut; a short faithful96 prompt beats an engineered one.97- Always work in ChatGPT's `Chat` surface, never `Work`. The composer's98 `Select chat surface` radio decides which picker you get; Pro exists only99 in `Chat`. `Work` tops out at `Ultra`, and `Ultra` is not Pro. Check the100 radio before touching the model pill and again before every send. A101 prompt sent from `Work` was not a Pro run: redo it in `Chat`.102- Default to **GPT-6 Astra Pro** in the `Chat` picker: select GPT-6 Astra and103 the literal **`Pro`** option, with `Extended` thinking when that is a104 separate control. **Pro is not Extra High, xhigh, Ultra, Thinking, or105 whatever happens to be the highest available setting.** A `5/5` indicator106 alone does not establish Pro; verify the actual `Pro` selection. If Pro is107 missing, try the next account instead of selecting a substitute. Only108 deviate when the user explicitly requests a different model or mode.109- Respect explicit user choices for `Instant`, `Thinking`, `Pro`, `Light`,110 `Standard`, `Extended`, or `Heavy`.111- Do not downgrade or upgrade the requested mode silently.112- Never automate login. If ChatGPT is not logged in, fail loudly and tell the113 user to log in manually in BrowserOS.114- Treat `Pro`, especially `Extended` or `Heavy`, as a long-running mode. A115 response can take 10+ minutes. Wait patiently in the same tab until generation116 finishes before reading or submitting anything else.117- Actually read everything Pro emits - interim messages, the visible thinking118 or reasoning summary, and the final response - during heartbeat check-ins119 and at the end, and act on what it says. Errors often surface first in the120 thinking trace or an interim message, such as Pro noting it cannot open a121 file or reach a repo, long before the final text. A completed generation is122 not automatically a success: if Pro says it cannot see an attachment, repo,123 PR, required data, or connector, if it improvised around a missing input, if124 it answers a different question than the one submitted, if it reports an125 error, refuses, or returns something empty or degenerate, treat that as a126 failed run. Fix the input and resubmit; if required connector access is127 unavailable or broken, switch to a suitable Pro account or stop and tell the128 user. Never relay a broken response as the answer or report success without129 having read the text.130- Submit any plan, and any other multi-paragraph body, as an attached file,131 never typed or pasted into the composer. Newlines in the composer can send132 early and split the message, so the composer gets only a short single-133 paragraph ask that points at the attached file. After sending, read back the134 submitted user message and confirm the full body arrived.135- A response built on an input Pro never actually received is invalid even136 when it reads as polished and confident. If Pro did not get something it was137 supposed to get and worked around it - "I don't have the file, so I'll138 assume...", reviewing a plan from its description instead of the attachment,139 imagining repo contents it could not open, or inventing data without a140 working BigQuery connection - discard the response. Restore actual access141 before resubmitting, switching Pro accounts if needed, or stop and tell the142 user what is unavailable. Never relay or build on an answer Pro invented143 around a missing input.144- Dismiss transient blocker popups immediately. They are UI noise, not part145 of the response; closing one never counts as altering the run. If a146 submission does not go through for a transient reason, wait about 5147 minutes, dismiss any blocker, and resubmit the same prompt in the same tab.148- A missing or disabled literal `Pro` option in the verified `Chat` picker149 probably means that account is temporarily rate limited. An explicit150 usage-cap message confirms a limit. In either case, switch to the next151 account under `$browseros`, preferring one recently observed to offer Pro.152 Update the run's notes with unavailable and working accounts. Check the153 remaining configured accounts before declaring Pro unavailable. Do not154 retry the capped account or substitute `Extra High`, `xhigh`, `Ultra`,155 `Thinking`, another model, or the API. If no available account offers Pro,156 report the accounts checked and pause the blocked Pro consultation or157 decision. Continue independent authorized work; pause the whole run only158 when no useful independent work remains. Wait for the user to say Pro is159 available again; never count a pending review as passed.160- Do not print, save, summarize, or inspect account details, cookies, tokens,161 raw session payloads, or other secrets.162- Enforce a maximum of 10 attachments. Do not silently drop files.163- Keep the result simple: ChatGPT's answer plus a short receipt.164- Place every conversation in the most applicable ChatGPT project. A root chat165 outside any project has no project context, so its review is useless; use a166 root chat only when no existing project plausibly fits, and say so in the167 receipt.168- Before starting a new conversation for continuing work, check whether the169 workstream already has a live Pro thread: look in the most applicable project170 for a Pro thread from the last 24-48 hours on this same work and continue it171 instead of starting fresh. If that thread is already about 6 or more172 prompt/response turns deep, start a new conversation in the same project173 instead of overloading it. An explicit user choice of an exact thread or a174 new chat always wins over this default.175- Continue an exact conversation the user names only when the intended176 conversation can be identified. If it cannot, stop and ask for the missing177 conversation choice rather than sending into an unrelated history.178- While a `Pro` response is generating, keep a periodic check-in heartbeat,179 defaulting to about every 5 minutes, using the host's heartbeat capability180 when one exists, so the run never wedges silently during a long wait. Clear181 the heartbeat as soon as the response is read or the run terminally fails;182 never leave a stale heartbeat running.183- For data questions, attach the BigQuery connector through `@BigQuery` in184 the composer. For GitHub or repository questions, attach `@GitHub`. Use both185 when the ask needs both. A typed name or confident answer does not prove186 access: verify the attached connector and its successful access to the187 required sources. If either required connector is missing or not working,188 switch to another suitable Pro account or stop and tell the user. Never189 accept guessed data, imagined code, or an answer without actual source access.190191## First Move1921931. Resolve the user's desired ChatGPT ask, required BigQuery/GitHub connectors,194 and any explicit mode, effort, model, or attachment requests.1952. Read `../prompt-authoring/SKILL.md` and apply it to the populated prompt196 before touching ChatGPT. Keep it faithful to the user's intent, preserve an197 explicitly requested verbatim relay, and make caller hypotheses198 challengeable rather than task truth. Keep the prompt lean per the199 over-prompting rule above: cut scaffolding instead of adding it.2003. Resolve conversation placement: identify the most applicable ChatGPT201 project, then resolve202 `conversation = continue-exact | continue-recent-pro | new-in-project |203 new-root`. `continue-exact` requires an explicit user request and an204 identifiable target. `continue-recent-pro` applies when the ask continues a205 workstream with a Pro thread from the last 24-48 hours in that project and206 the thread is under about 6 turns. Otherwise use `new-in-project`, or207 `new-root` only when no project fits.2084. Discover the already-open `Work` and Pro profile windows and read any209 account-availability notes for this run. Start with an explicitly requested210 profile or the account holding the needed thread when Pro is available211 there; otherwise prefer the account most recently observed to offer Pro.212 Verify its current state. If Pro is missing or capped, follow failover below.2135. Under `$browseros`, select the single current-agent-controlled ChatGPT page214 for the run inside that window: safely task-adopt an eligible215 `https://chatgpt.com/` page there, or open exactly one new page as a tab216 in that window. Prove the page is in the chosen window before using it.217 Never create a new window.2186. Verify that page is logged in before doing anything else.2197. In that page, open the resolved conversation: a new chat inside the chosen220 project, the recent Pro thread, or the exact requested conversation. Verify221 the thread before submitting into it. Do not submit while the page is merely222 showing an arbitrary prior thread.2238. Set the surface radio to `Chat` and verify the requested model and mode,224 defaulting to GPT-6 Astra with literal `Pro`. If required Pro is missing or225 disabled, switch to the next account below. Never send a Pro request from226 `Work` or substitute Extra High.227228## Profile Windows And Rate Limits229230Read and apply `$browseros`, including its profile/account operating details,231before inspecting or switching accounts. The account pool is one `Work` profile232and a variable number of Pro profiles whose windows should already be open.233Names such as `Pro One`, `Pro1`, `Pro2`, and `Pro3` are examples, not a fixed234inventory or rotation order. Discover what is open on this machine and verify235the actual profile/window/page mapping. All accounts should have the same236projects; verify the same-named project after switching. Conversations are per237account, so carry the needed thread context into the destination conversation.238239Keep a brief note in the existing run context or worklog identifying which240profile/window currently offers Pro and the required connector access, which241accounts were unavailable, and when each was checked. Record positive242availability, not just failures, and continue with the working account. Use these notes to avoid repeatedly choosing a capped243account; refresh stale observations when resuming because limits are temporary.244Recheck the working profile/window/page under `$browseros` throughout use and245before every submission or readback. The shared project name alone cannot prove246that this is the account whose availability you checked.247248In ChatGPT's `Chat` surface, inspect GPT-6 Astra's model and reasoning controls,249including `Configure...` / `Intelligence` when present. If the literal `Pro`250option is absent or disabled, treat it as a probable temporary account rate251limit. Do not redefine Pro as the highest remaining option. `Extra High` is252still not Pro even if it is now the top setting. An explicit usage-cap message,253including `You've hit your rate limit. Please try again later`, triggers the254same account switch:2552561. Note the profile/window, observed condition, and when checked: Pro257 missing/disabled or an explicit rate-limit message. The missing option258 alone is a probable limit, not proof.2592. Use a recently known working account, or check another configured account260 not yet checked. Under `$browseros`, select or open one eligible ChatGPT page261 in its existing window, prove its profile, and verify login. Protect the262 user's foreground focus under that skill's operating rules.2633. Set the surface to `Chat` and verify GPT-6 Astra's literal `Pro` option.264 If unavailable there too, update the note and continue through the remaining265 accounts. When Pro is available, note that profile/window as the working266 account and use it; there is no need to test every other account first.2674. When Pro is available, open the same-named project and start a conversation268 with the necessary goal, decisions, and prior thread context. Re-attach files269 and re-attach the required `@BigQuery` / `@GitHub` mentions with their source270 context, including the PR URL for code reviews. Verify connector access,271 `Pro`, and the requested thinking effort; submit the same ask and continue272 in that page alone.2735. Clean up pages this run created and no longer needs under `$browseros`.274 Record the profiles checked, the successful profile, and continuation thread.275276Only after checking the available accounts should the run report that Pro277cannot be used right now. Name the profiles and observed conditions, pause the278blocked Pro consultation or decision, and continue independent authorized work.279Pause the whole run only when no useful independent work remains. Wait for the280user to say Pro is available again; do not poll capped accounts or count a281pending review as passed. There is no substitute for GPT-6 Astra Pro: never282Extra High, xhigh, Ultra, Thinking, another model, provider, reviewer, or API.283284## Login Check285286From the ChatGPT page, use BrowserOS MCP page JavaScript to fetch:287288```javascript289fetch('/api/auth/session', { credentials: 'include' })290```291292Use only the safe boolean result: whether the parsed JSON has a `user` value.293Do not display or store the returned user, account, token, cookie, or session294fields.295296If the session does not prove a logged-in user, stop with:297298```text299BrowserOS is not logged in to ChatGPT. Open https://chatgpt.com/ in BrowserOS,300log in manually, then rerun $chatgpt-web.301```302303If the endpoint cannot be checked, fail loudly. Do not infer login from visible304page controls.305306## Projects And Conversation Selection307308Root chats without a project have none of the project's files, instructions, or309prior threads, so a review sent there is context-free and useless. Pick where310the conversation lives before composing anything:3113121. Read the project list in the ChatGPT sidebar and judge which project313 actually matches the current ask: same repo, product, or workstream.3142. If the ask continues work that recently went through Pro, open that315 project's thread list and look for a Pro thread from the last 24-48 hours on316 this same work. Open the candidate and skim enough of it to confirm it is317 the same workstream, not just a similar title. Threads are per account:318 if the live thread is in another profile window, that window is the one319 to use unless it is rate limited.3203. Continue that thread when it matches, is a `Chat`-surface thread (not321 labeled `Work` in the sidebar), and is under about 6 prompt/response322 turns. Around 6 or more turns, treat it as saturated and start a new323 conversation in the same project instead.3244. With no matching recent thread, start a new conversation inside the chosen325 project.3265. Use a root chat only when no existing project plausibly fits the ask, and327 note that choice in the receipt.328329An explicit user request for a specific thread, a specific project, or a fresh330chat overrides all of the defaults above.331332## Data And Repository Access Via Connectors333334**Actual source access is required. Pro can produce a confident answer even335when it has no data or repository access; that answer is invalid.**3363371. For data questions, @mention the BigQuery connector in the composer. For338 GitHub or repository questions, including code reviews and architecture339 questions about our code, @mention GitHub. Attach both `@BigQuery` and340 `@GitHub` when the ask needs both. Select the actual connector from the341 mention picker and confirm it is attached; plain text naming it is not an342 invocation. Name the relevant data scope or repository in the ask.3432. For code review, commit and push the work to its PR branch and include the344 exact PR URL with `@GitHub`. Do not substitute pasted diffs or file dumps345 for the connector's access to the branch.3463. Confirm the required connectors are available before sending. During347 generation and before accepting the answer, inspect the visible connector348 activity, returned source material, and Pro's messages for successful349 access to the data or repository needed for this question. A connected350 badge or Pro saying it has access is insufficient. The evidence must show351 it actually retrieved the needed data or code; no retrieval, failed queries,352 inaccessible sources, or guesses cannot support an accepted answer.3534. If either required connector is unavailable or fails, stop using that run.354 Switch to another already-open Pro profile under `$browseros`, or stop the355 consultation and tell the user exactly which connector/source is356 unavailable. On switching, verify literal Pro, the intended profile and357 project, and working access to every required connector; carry the ask and358 inputs over and attach the mentions again. Record the working account and359 connector status in the existing availability notes. Connector failure360 alone does not establish a Pro rate limit. Never automate connector361 authorization; any needed connection or permission repair is manual.362363Discard any response built on guessed data or imagined repository contents.364Resume only with actual access to all sources the ask requires; do not present365the failed answer as a result, a completed review, or a basis for a decision.366367## Chat Surface: Chat, Never Work368369The ChatGPT composer has a `Select chat surface` radio group with two370surfaces, `Chat` and `Work`. Select GPT-6 Astra Pro in `Chat`. Work's model picker371and reasoning slider do not select Chat's Pro mode. A review sent from372`Work` does not count as a Pro verdict; redo it in `Chat`.373374Before touching the model pill, and again before every send:3753761. Read the surface radio group and make sure `Chat` is the checked radio.377 If `Work` is checked, select `Chat` and re-read the composer; the pill378 changes with the surface.3792. For a Pro run, confirm GPT-6 Astra and the literal `Pro` option are selected, with380 `Extended` thinking where offered. Extra High, xhigh, Ultra, or a numeric381 power level alone do not establish Pro. If Pro is unavailable, switch382 accounts under the profile-window section before sending.3833. When continuing a thread, confirm it is a Chat-surface thread. The384 sidebar labels Work-surface chats with `Work`; a Work thread cannot carry385 a Pro conversation, so start a new `Chat` conversation in the project386 instead.387388Naming trap: the BrowserOS profile window called `Work` has nothing to do389with ChatGPT's `Work` surface. In every BrowserOS profile, including `Work`,390the ChatGPT surface is `Chat`.391392## Mode And Effort393394Default when the user does not specify:395396```text397surface = Chat (never Work)398mode = literal Pro option (never Extra High, xhigh, Ultra, or Thinking)399effort = Extended400model = GPT-6 Astra Pro401```402403Use the ChatGPT model pill beside the composer, in the `Chat` surface.404Prefer `Configure...` when available because it exposes the `Intelligence`405dialog with explicit model options and thinking effort.406407Observed controls to select from:408409- surface: `Chat`, `Work` - always `Chat`410- mode: `Instant`, `Thinking`, `Pro`411- effort: `Light`, `Standard`, `Extended`, `Heavy`412- model: GPT-6 Astra, with the literal `Pro` option verified in the live Chat413 picker unless the user explicitly requests another model or mode414415**Pro means the literal `Pro` option on GPT-6 Astra.** It is not shorthand for416maximum available reasoning. `Extra High` / `xhigh`, `Ultra`, `Thinking`, and417every other non-Pro setting are different configurations and cannot satisfy a418Pro request or required review. `Extended` is a separate thinking choice when419offered; it does not turn a non-Pro selection into Pro. Neither a numeric420`5/5` indicator nor a BrowserOS profile named `Pro` proves the selected mode.421422Re-open the live `Chat` picker and inspect the model's nested controls before423concluding Pro is missing. If GPT-6 Astra's literal `Pro` option is absent or424disabled, follow account failover; this is probably a temporary rate limit on425that account. Do not select the highest remaining setting. Before every Pro426send, confirm `Chat`, GPT-6 Astra, `Pro`, and the requested thinking effort.427428Do not run a Pro prompt merely to test the skill. Only use Pro when the user's429actual request needs the default or explicitly asks for it.430431Because the default is `Pro` with `Extended` thinking, the default path also432requires patient waiting. Do not treat a long silent period as failure by itself.433434## Attachments435436When the material to send is a plan or any multi-paragraph body, write it to a437file (a temp file is fine) and attach it through the upload path below instead438of typing it into the composer. The composer then carries only a short439single-paragraph ask that references the attached file by name.440441Preflight attachments before browser interaction:442443- every path must be absolute444- every path must exist445- count must be 10 or fewer446447Use the BrowserOS file-upload path that works with ChatGPT in the selected448ChatGPT page:4494501. Create a temporary visible file input in the page for BrowserOS MCP to use.4512. Snapshot the temporary input and use the live BrowserOS MCP `upload` tool452 with its exact ref and the user's absolute paths.4533. Transfer the selected `File` objects into ChatGPT's hidden `#upload-files`454 input.4554. Dispatch `input` and `change` events on the ChatGPT input.4565. Confirm visible attachment chips by filename.4576. Remove the temporary visible input.458459If any requested filename does not appear as an attachment chip, stop before460submitting.461462## Submission4634641. Verify the resolved conversation placement one final time. For465 `new-in-project` the page must be a new chat inside the chosen project; for466 `continue-recent-pro` or `continue-exact` the visible thread must be the467 resolved thread; for `new-root` the page must be a new root chat.4682. Fill the ChatGPT composer with the final prompt. If the ask includes a plan469 or any multi-paragraph body, that body must already be an attached file and470 the composer text must be a short single-paragraph ask referencing it.4713. Confirm the surface radio is `Chat` and the selected mode and effort472 match the request or default, GPT-6 Astra with literal `Pro` and Extended473 thinking. If required Pro is missing or disabled, switch accounts before474 sending. If the checked surface is `Work`, switch to `Chat` and reselect.4754. Confirm every attachment chip and required `@BigQuery` / `@GitHub`476 connector mention is attached. If a required connector is missing or known477 to be broken, switch Pro accounts or stop and tell the user before sending.4785. Click `Send prompt`, then read back the just-submitted user message and479 confirm it contains the full intended text and attachments. If it was480 truncated or split, stop the resulting generation and resubmit correctly.4816. Wait in the same tab until generation finishes. For `Pro`, `Extended`, or482 `Heavy`, 10+ minutes can be normal; poll slowly and let ChatGPT finish. For483 a `Pro` run, set the check-in heartbeat (default about every 5 minutes)484 before settling into the long wait so the run cannot wedge silently. At485 each check-in, read what is actually on the page - the visible thinking or486 reasoning summary, interim assistant messages, partial response text, error487 banners, connector failures - not just whether a spinner exists. If the488 thinking trace or an interim message already shows the run going wrong,489 such as a missing attachment, failed BigQuery access, or an unreachable490 repo, act on it then rather than waiting out the full generation.4917. Do not refresh, resubmit, open another tab, or start another ChatGPT prompt492 while a response is still generating. Dismissing a transient blocker493 dialog is always allowed. If the submission did not go through for a494 transient reason, wait about 5 minutes and resubmit the same prompt in the495 same tab. If it was refused with the rate-limit message, follow the496 profile-window failover instead of retrying here.4978. Treat failure as concrete, not time-based: visible ChatGPT error, lost498 login/session, required manual user action, missing attachment before send,499 or a clearly inactive page with no generation indicator and no response500 progress after a patient wait.5019. Read the latest assistant response from the page in full, plus its visible502 thinking or reasoning summary and any interim messages, and check them503 against the submitted ask. Error signals anywhere in that output count as504 failures even though generation completed: Pro saying it cannot access or505 see the attachment, repo, PR, required data, or connector; no evidence of506 actual retrieval from required connectors; Pro improvising around a507 missing input by assuming, imagining, or working from a description of an508 artifact it never opened; Pro answering a different or partial question; a509 refusal; an empty or degenerate reply. On any of these, diagnose the input,510 repair it, and resubmit. For missing or broken connector access, switch to511 another suitable Pro profile or stop and tell the user. Never relay the512 broken response: a polished answer built on data or code Pro never accessed513 is still invalid.51410. Clear the check-in heartbeat as soon as the response is read or the run515 terminally fails. Do not leave it running past the run.516517## Output518519Return:520521- ChatGPT's answer522- surface (`Chat`), model, mode, and effort used523- verified working profile/window/page and any account failovers, with the524 observed availability of accounts checked and when checked525- conversation placement used: the project name plus `continue-exact`,526 `continue-recent-pro`, `new-in-project`, or `new-root` with a one-line reason527 when the choice was `new-root`528- attachment filenames, if any; connectors used with a brief account of the529 data or code actually accessed, and the PR URL for a code review530- a short note if the prompt was shaped before submission531- a short note when the run waited for a long Pro response, including that the532 heartbeat was set and cleared533534If the run fails, name the exact failed condition and the next manual repair.535When no available profile offers Pro after checking the configured accounts,536say so plainly with the observed conditions, name the Pro537consultation or decision that is paused and any independent work continuing,538and wait for the user to say Pro is back.