openai / openai/codex

[ChatGPT Desktop][Upwork plugin] Freelancer account is intermittently routed as Client/Agency; proposal confirmation schema mismatch

Open
#43,586 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug skills tool-calls
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

What issue are you seeing?

The official Upwork plugin is connected to a valid Upwork Freelancer account, but the connector intermittently misroutes the account role.

One tool call correctly identifies the account as:

  • role: TALENT
  • role_label: Freelancer

Immediately afterward, freelancer-only actions can fail as if the account were not a freelancer account, or as if a Client/Agency account were required.

Observed examples include:

  • freelancer proposal reads failing with a message equivalent to: requires a Freelancer or Agency account and is not available for the current account
  • freelancer financial/dashboard reads failing with the same account-role mismatch
  • marketplace job search (find_jobs) intermittently returning an incorrect Client/Agency-role requirement

There is also a separate proposal-submission schema/runtime mismatch:

  • manage_proposals documentation instructed the agent to use confirm_preview with a returned preview_id
  • the exposed tool surface provided confirm_draft, which expects a draft_id
  • using the returned preview identifier with confirm_draft failed
  • switching the Upwork plugin tool mode from full_list to search_execute did not resolve the mismatch

Because of this, the proposal had to be completed through browser/Work automation on Upwork directly instead of through the plugin.

What steps can reproduce the bug?
  1. Connect an Upwork Freelancer account to ChatGPT.
  2. Call the account-listing action.
  3. Confirm the account is returned as TALENT / Freelancer.
  4. Immediately call freelancer-only actions such as proposal list, freelancer dashboard/financials, or marketplace job search.
  5. Observe that one or more calls may fail because the connector treats the current account as if it were not a Freelancer account or requires Client/Agency context.
  6. Start a freelancer proposal flow.
  7. Observe that the proposal tooling/documentation may return a preview_id and instruct the agent to call confirm_preview, while the exposed confirmation tool is confirm_draft and requires a draft_id.
  8. Attempting to complete the flow through the exposed confirmation tool fails.

The account-role behavior is intermittent, but the same connected account can be correctly recognized as Freelancer in one call and rejected as non-Freelancer in the next.

What is the expected behavior?

A connected Upwork TALENT / Freelancer account should consistently retain Freelancer context across all relevant plugin calls, including marketplace job search, proposals, freelancer dashboard/financials, and proposal submission.

The proposal submission contract should also be internally consistent: the create step should return the identifier expected by the exposed confirmation step, and the documented confirmation action should actually exist in the tool surface.

Additional information
  • Platform: ChatGPT desktop app on Windows
  • Subscription: ChatGPT Plus
  • Date observed: September 7, 2026
  • The affected Upwork account is a real Freelancer account and the final proposal was successfully submitted through Upwork's website using browser/Work automation.
  • Public report intentionally omits account IDs, proposal IDs, email addresses, and other personal identifiers.

Codex/ChatGPT feedback was also submitted from the app.

Feedback ID:
no-active-thread-01a07d86-a4cb-7f11-8d73-72558ad87e7c

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The issue names no repository files, tests, or entry points. Start by locating the Upwork connector, account-context handling, and proposal tool definitions, then trace how role data and proposal identifiers move between calls. Done means Freelancer context remains consistent and the documented proposal confirmation contract matches the exposed tools.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
api, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.