Age/sensitive-media bypass for X.com via initial-state and JSON feature-switch patching (Alt+. toggles the dot indicator; click it for diagnostics)
A lightweight userscript for X/Twitter which modifies client-side age-verification and sensitive-media feature state directly in the browser.
AgebypassX runs locally and uses multiple application-state interception paths:
window.__INITIAL_STATE__Object.assignJSON.parseResponse.prototype.jsonv2.4.0 does not use webpack interception. The current implementation works by patching application state and parsed response data before X's frontend consumes it.
The script runs at:
document-start
so its hooks are installed as early as possible.
Press:
Alt + .
to show or hide the status dot.
The visibility preference is stored locally using localStorage.
AgebypassX operates entirely inside your browser.
The script:
localStorage.There are no external connections required by the userscript.
v2.4.0 currently watches for:
rweb_age_assurance_flow_enabled
age_verification_gate_enabled
sensitive_tweet_warnings_enabled
sensitive_media_settings_enabled
grok_settings_age_restriction_enabled
rweb_mvr_blurred_media_interstitial_enabled
Desired states:
{
rweb_age_assurance_flow_enabled: false,
age_verification_gate_enabled: false,
sensitive_tweet_warnings_enabled: false,
sensitive_media_settings_enabled: true,
grok_settings_age_restriction_enabled: false,
rweb_mvr_blurred_media_interstitial_enabled: false
}
The patcher supports several feature formats, including:
{
feature_name: true
}
wrapped values:
{
feature_name: {
value: true
}
}
and GraphQL-style entries:
{
feature: "feature_name",
enabled: true
}
X can represent feature-switch values using different types.
For example:
true
"true"
1
AgebypassX v2.4.0 preserves the existing representation:
boolean → boolean
string → "true" / "false"
number → 1 / 0
After changing a target value, the script reads it back to verify that the write actually succeeded.
This detects cases such as:
Compatible client-side birthdate objects are patched to:
{
year: 1990,
month: 1,
day: 1
}
Birthdate writes are also type-preserving and verified.
Examples:
1995 → 1990
"1995" → "1990"
Birthdate processing has its own diagnostic counters.
window.__INITIAL_STATE__AgebypassX intercepts X's initial application state and patches relevant values before the frontend consumes them.
v2.4.0 also handles late userscript injection.
If window.__INITIAL_STATE__ already exists when AgebypassX starts, the existing state is preserved and patched before the accessor is installed.
If the existing property cannot safely be read, AgebypassX leaves it untouched rather than risking state corruption.
The remaining hooks continue working as fallbacks.
Object.assignAgebypassX wraps:
Object.assign
and checks state-like objects containing structures such as:
featureSwitch
entities
users
Relevant targets are patched after the native assignment completes.
JSON.parseAgebypassX wraps:
JSON.parse
Before performing a recursive walk, the raw JSON text is checked for:
birthdatefeatureSwitchUnrelated JSON is returned without a deep scan.
Response.prototype.jsonFetch responses parsed using:
response.json()
can bypass an overridden JSON.parse.
AgebypassX therefore also wraps:
Response.prototype.json
Returned objects first go through a lightweight structural scan.
Only potentially relevant responses are passed to the full patcher.
AgebypassX is event-driven.
It does not use:
Recursive patching only occurs after one of the interception gates detects potentially relevant state.
Each patch operation uses its own WeakSet for circular-reference protection.
This also allows the same state object to be patched again later during SPA navigation if X modifies or repopulates it.
A small dot appears in the top-right corner.
The interception/traversal system is currently operating without a detected hook or traversal error.
A hook installation or recursive traversal operation encountered an error.
Check DevTools Console for:
[Nox]
The status dot represents hook/traversal health.
Individual target-feature write failures are tracked separately in diagnostics.
This means the indicator can remain green while diagnostics show that a specific feature was found but could not be modified.
Click the status dot to print diagnostics to the browser console.
v2.4.0 reports:
Current ACTIVE / ERROR status
Historical error count
Gate-hit counts
Flags found
Flags changed
Flag process/write failures
Birthdate statistics
Potential related keys
Recent errors
The script tracks activity from:
state
assign
parse
json
which correspond to:
__INITIAL_STATE__
Object.assign
JSON.parse
Response.json
Each known flag has three counters:
found
changed
writeFailed
found > 0
changed > 0
writeFailed = 0
The flag was found and successfully changed.
found > 0
changed = 0
writeFailed = 0
The flag was found but already had the desired value.
found > 0
writeFailed > 0
The flag was encountered, but one or more accesses/writes could not be completed or verified.
found = 0
This is a warning signal, not proof that the flag was removed.
Possible reasons include:
AgebypassX includes a lightweight diagnostic scanner for potentially related keys containing terms such as:
age
birth
minor
sensitive
blur
restrict
verif
interstitial
Potential matches are reported as diagnostic candidates only.
They are not automatically treated as real feature flags.
The scanner only runs inside state that was already reached through a known interception gate, so it cannot guarantee detection of completely renamed structures.
The diagnostics also report:
birthdate.seen
birthdate.changed
birthdate.failed
seenCompatible birthdate objects encountered.
changedBirthdate fields successfully changed and verified.
failedBirthdate field writes which threw or failed read-back verification.
Press:
Alt + .
to toggle the status indicator.
The preference persists locally across reloads.
Try:
https://x.com/*
https://twitter.com/*
Open:
F12 → Console
Search for:
[Nox]
Normal startup messages include:
[Nox] v2.4.0 loaded
[Nox] ready — click the dot for diagnostics
If no messages appear, the userscript is probably not executing.
Check the console for messages such as:
[Nox] Existing state capture failed
[Nox] __INITIAL_STATE__ hook failed
[Nox] State patch failed
[Nox] Object.assign patch failed
[Nox] JSON.parse patch failed
[Nox] Response.json hook failed
[Nox] walk failed
Click the indicator to display the stored diagnostics.
A green indicator means the interception/traversal system is operating.
It does not guarantee that X still uses the same feature names or client-side enforcement.
Click the dot and inspect:
flags found
flags changed
flag process/write failures
birthdate
gate hits
X may have changed:
AgebypassX is primarily tested on Chromium-based browsers, including:
Tampermonkey and Violentmonkey-compatible environments should generally work, although behaviour may vary between userscript managers.
GitHub:
https://github.com/Saganaki22/AgebypassX/issues
When reporting an issue, please include:
gate hits.flags found.flags changed.flag process/write failures.[Nox] errors.Please remove personal information from screenshots or console output before posting it publicly.
GitHub:
https://github.com/Saganaki22/AgebypassX
AgebypassX is open source and licensed under the MIT License.
Feature values now preserve their original boolean/string/number representation.
Assignments are read back after modification to confirm that the new value actually stuck.
Added counters for:
found
changed
writeFailed
for every target flag.
Birthdate values now use type-preserving, verified writes with independent:
seen
changed
failed
counters.
The indicator now represents hook/traversal health separately from individual feature-write outcomes.
Unrelated page activity can no longer falsely clear an error state.
Internal traversal errors now propagate back to the hook which triggered the patch.
Potential age/sensitive-media-related keys encountered near known state structures are reported for debugging.
__INITIAL_STATE__ HookAgebypassX now safely handles cases where X populated window.__INITIAL_STATE__ before the userscript started.
Existing state is preserved and patched rather than overwritten.
If the property cannot safely be captured, it is left untouched and fallback hooks continue operating.
Current releases use application-state and parsed-response interception.
Webpack interception is not used or required by v2.4.0.
AgebypassX is an independent open-source project and is not affiliated with, endorsed by, or associated with X Corp., Twitter, Tampermonkey, or Violentmonkey.
The project modifies client-side application state only.
X may change its frontend, feature flags, experiments, response structures, or introduce additional server-side enforcement at any time, which may cause some or all functionality to stop working.
Use the software at your own discretion and comply with the laws, platform rules, and age requirements applicable to you.