jackwener/OpenCLI · error · CommandExecutionError
Nothing changed. Open the tweet in the browser and retry.
Error message
Nothing changed. Open the tweet in the browser and retry.
What it means
This CommandExecutionError is thrown by the twitter hide-reply CLI when the in-page hide attempt returns a non-ok result after an optional retry on the parent URL. The library cannot hide the reply (e.g. the button was not found, the action was rejected, or Twitter returned an unexpected state), so it instructs the user to open the tweet manually and retry. It signals that no change was made to the reply's hidden state.
Source
Thrown at clis/twitter/hide-reply.js:121
return { ok: false, message: 'Could not find "Hide reply" option. This may not be a reply on your tweet.' };
}
hideItem.click();
await new Promise(r => setTimeout(r, 1500));
return { ok: true, message: 'Reply successfully hidden.' };
} catch (e) {
return { ok: false, message: e.toString() };
}
})()`);
let result = await runHideAttempt(true);
if (result?.retryOnParent && result.parentUrl) {
await page.goto(result.parentUrl);
await page.wait({ selector: '[data-testid="primaryColumn"]' });
result = await runHideAttempt(false);
}
if (!result.ok) {
throw new CommandExecutionError(result.message, 'Nothing changed. Open the tweet in the browser and retry.');
}
await page.wait(2);
return [{
status: 'success',
message: result.message
}];
}
});
View on GitHub (pinned to 49907e53dc)
Solutions
- Verify the URL points to the specific reply to hide, not the parent tweet
- Open the tweet in a browser and check the reply's current state (already hidden/deleted?)
- Re-run after ensuring the browser session is logged in as an account that can hide the reply
- Retry later in case Twitter is rate-limiting or serving a changed UI
- Update/check the library for Twitter DOM selector changes
Example fix
// before twitter hide-reply https://x.com/user/status/123 // after twitter hide-reply https://x.com/user/status/123#reply-456 // target the reply itself, and confirm session/state first
Defensive patterns
Strategy: try-catch
Validate before calling
// verify URL points at a specific reply and a browser session exists
if (!/^https:\/\/(x|twitter)\.com\/[^/]+\/status\/\d+/.test(url)) throw new Error('Invalid tweet/reply URL');
if (!page) throw new Error('Open a browser session before hide-reply'); Type guard
function hasBrowserSession(p) { return typeof p === 'object' && p !== null && typeof p.goto === 'function' && typeof p.evaluate === 'function'; } Try / catch
try {
await clis.twitter.hideReply.func(page, { url });
} catch (e) {
if (e.message.includes('Nothing changed')) {
// verify reply state in browser, then decide whether to retry once
} else throw e;
} Prevention
- Always pass the specific reply URL, not the parent tweet
- Ensure a logged-in browser session with permission over the reply
- Check the reply isn't already hidden/deleted before running
- Keep the library updated for Twitter DOM changes
When it happens
Trigger: Running `twitter hide-reply` with a URL whose reply cannot be hidden: the in-page evaluate returned ok:false (button not found, Twitter UI changed, reply already handled, or a page-level exception inside runHideAttempt), including after the retryOnParent re-navigation to result.parentUrl also failed.
Common situations: Passing a URL of the tweet instead of the specific reply; the reply is already hidden or deleted; Twitter DOM changes break the selector-based click; the logged-in session lacks permission to hide the reply (not the reply author or not the tweet author context expected); rate-limiting or a slow page load means the primaryColumn loaded but the hide control never rendered.
Related errors
- Nothing changed. Open the tweet in the browser and retry.
- Failed to delete list ${listId}: ${deleteResult?.message ||
- Unexpected 12306 probe: ${JSON.stringify(probe)}
- Waiting for 12306 tk auth cookie
- Failed to upload file to ChatGPT project knowledge
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/97e5badaa775312b.
Report an issue: GitHub.