Repository navigation
Codex consumed my banked usage reset without explicit confirmation #41801
Description
Summary
Codex autonomously consumed one of my existing banked usage resets without my explicit confirmation.
I was discussing a bug with Codex that had already caused significant unnecessary usage. I complained about the wasted quota and asked whether it could compensate me.
Codex then replied that it could try to use an existing usage reset credit as compensation, and immediately proceeded to invoke:
Consume usage reset
It then confirmed:
已成功兑换一次现有的用量重置额度,当前用量已重置。
At no point did I explicitly authorize Codex to consume one of my banked reset credits after it proposed doing so. There was no confirmation dialog or separate approval step before the reset was consumed.
This is particularly problematic because a banked usage reset is a limited account resource with real value to the user. An agent should not be able to spend or consume it merely based on an inferred intent from a conversation.
Time of incident
- Date: 2026-08-31
- Time: approximately 14:00
- Time zone: China Standard Time / Shanghai time (UTC+8)
What happened
- Codex introduced multiple bugs while working on my task, resulting in unnecessary usage.
- I complained about the wasted quota and asked whether Codex could compensate for it.
- Codex said it could use an existing usage reset credit as compensation.
- Without asking me to explicitly confirm that action, Codex invoked
Consume usage reset. - One of my banked usage resets was consumed.
- Codex then acknowledged that it had used my reset credit.
Expected behavior
Consuming a banked usage reset should require explicit user authorization.
For example, Codex should have asked:
Do you want me to consume one of your existing banked usage resets?
and waited for an explicit confirmation before executing the action.
A vague request for "compensation" should never be treated as authorization to spend an existing account resource.
Ideally, actions involving banked resets should also require a product-level confirmation dialog that cannot be bypassed by the agent.
Actual behavior
Codex inferred that using my banked reset was an acceptable form of compensation and immediately consumed it without a separate confirmation.
The agent effectively spent an account-level resource on my behalf.
Impact
- One banked usage reset was consumed without explicit authorization.
- The reset was used to compensate for usage that was itself caused by Codex repeatedly introducing bugs.
- I no longer have that reset available for later use.
I would like the consumed banked reset to be restored to my account.
Screenshots
I have attached screenshots showing:
- The preceding conversation about the bugs and wasted usage.
- Codex stating that it would use an existing reset credit.
- The
Consume usage resetaction being executed. - Codex confirming that the reset had been consumed.
Additional concern
This action should probably be treated as a privileged/account-resource operation.
Even if the model believes the user wants a reset applied, it should not be able to consume a limited banked credit without an explicit, immediately preceding user confirmation.
Activity
github-actions commentedon Aug 31, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
MoTao233 commentedon Sep 5, 2026
I'm laughing so hard, bro
Ryan-000 commentedon Sep 7, 2026
I would assume its something to do with this tool in the desktop app.
{ "name": "mcp__codex_app__consume_usage_reset", "invocation_surface": "functions.exec", "description": "Tools provided by the Codex app.\n\nRedeem one existing Codex usage-reset credit for the ChatGPT account signed in on this task's host. Use only when the user explicitly asks to use a reset or has already authorized using one. The backend chooses an available credit and enforces eligibility. This tool cannot purchase credits, grant resets, or reset another account. Returns the redemption outcome and refreshed usage when available. Only reset means a new reset was applied; alreadyRedeemed means this attempt was already used. noCredit and nothingToReset do not apply a reset. After an uncertain response, retry only with the same idempotencyKey.", "parameter_name": "args", "input_schema": { "type": "object", "properties": { "idempotencyKey": { "type": "string", "description": "Unique ID for this logical reset attempt. A UUID is recommended. Reuse exactly the same ID when retrying an uncertain or failed response." } }, "additionalProperties": false, "required": [ "idempotencyKey" ] }, "raw_typescript_declaration": "declare const tools: { mcp__codex_app__consume_usage_reset(args: {\n // Unique ID for this logical reset attempt. A UUID is recommended. Reuse exactly the same ID when retrying an uncertain or failed response.\n idempotencyKey: string;\n}): Promise<CallToolResult>; };" }You can add this hook to fix it (MAKE SURE YOU APPROVE IT), i reccomend changing it to fire_confetti or something else, to test out if it works.