Back to Blog

You wrote a rule, saved it, and… nothing happens. The spam accounts keep rolling by, or your filter isn’t catching what you expected. Is the rule wrong? Did X change something in their API? Or is the tweet not even being evaluated in the first place?

Twitter Filter has a hidden debug mode that answers all three questions at once. Add ?tf-debug to any x.com URL, and the extension prints exactly what it sees for every tweet — the data behind your rules, the evaluation result, and the reason tweets get skipped.

How to open it#

  1. Visit any x.com page with ?tf-debug in the URL — for example https://x.com/home?tf-debug
  2. Press F12 to open the browser’s Developer Tools and switch to the Console tab
  3. Reload the page (the flag is only read at page load)

From now on, every timeline response is logged with what each tweet looks like from the rules’ point of view:

Console showing [tf][api] and [tf][match] logs

The flag works in Chrome, Edge, and Firefox. Without ?tf-debug, the extension logs nothing — the debug calls are complete no-ops, so there’s no performance impact in normal use.

Reading the logs#

Each log line starts with a colored [tf] prefix. The color tells you what kind of message it is:

PrefixColorMeaning
[tf]orangeA rule matched a tweet
[tf][api]greenParsed data for tweets in an intercepted API response, one object per tweet
[tf][match]blueThe evaluation result for a single tweet — which rule matched, or no match
[tf][skip]grayA tweet that was excluded from rule evaluation entirely (whitelist)

[tf][api] — what each tweet looked like#

The green entries are the most useful for debugging. Expand a tweet object and you’ll see every field your rules can reference, exactly as named in the rule reference: user.verified, user.verified_type, user.followers, user.created_at, tweet.text, and so on.

[tf][api] Intercepted 37 tweets (TweetDetail): [
  {
    "user.id": "4398626122",
    "user.screen_name": "OpenAI",
    "user.blue_verified": true,
    "user.verified": true,
    "user.verified_type": "Business",
    "user.followers": 5103598,
    "tweet.id": "2087231350134980830",
    "tweet.text": "Now in preview: The ChatGPT desktop app for Linux…",

  }
]

If a field is missing from the object, it means that data wasn’t available for this tweet (community signal fields like user.based_in only appear once resolved). A field explicitly set to null means it resolved but genuinely has no value.

[tf][match] — the verdict#

The blue lines summarize what happened when rules ran against a tweet:

[tf][match] @OpenAI tweet=2087231350134980830 user.blue_verified=true user.verified=true user.verified_type=Business → matched "test" (mark)
[tf][match] @lmaoomgwtf tweet=2087704964520898601 user.blue_verified=true user.verified=false user.verified_type=null → no match

[tf][skip] — the whitelist#

Here’s the answer to a surprisingly common question: “why wasn’t this tweet filtered?” Twitter Filter deliberately never runs rules against your own tweets or tweets from accounts you follow:

[tf][skip] @dhh tweet=2039387543544758736 reason=followed (whitelist)
[tf][skip] @rxliuli tweet=… reason=own

If you expected a rule to catch someone and their tweets show up as [tf][skip], that’s the whitelist doing its job — unfollowing them (or removing the rule’s expectation) is the only way around it.

A real debugging session#

Say your rule user.verified == true stops matching anyone. Open ?tf-debug and look at the [tf][api] data:

"user.blue_verified": true,
"user.verified": false,            ← the field your rule depends on
"user.verified_type": "Government"

user.verified is false for an account that visibly has a gold badge. That’s not a Twitter Filter bug — X deprecated the old verification.verified flag (it’s now always false) and the gray/gold badge lives in user.verified_type instead. Twitter Filter 0.0.66+ already handles this fallback, but the debug log is exactly how you’d catch an API change like this yourself: the data tells you the rule is checking the wrong thing.

A few notes#

  • The console also prints tweet text and bios — be mindful if you’re sharing your screen while debugging.
  • The logged field names always match the rule reference. If a rule isn’t matching, compare the field values in [tf][api] against what your condition expects.
  • ?tf-debug requires Twitter Filter 0.0.66+.

Don’t have the extension yet? Install Twitter Filter from the extension page.