Tweets are just markdown now.

Treat them that way. Swap x.com for x.pcstyle.dev in any public post URL and the post, its thread, or the full article comes back as Markdown your agent can read.

Opens the converted post in a new tab — the same result as swapping the host by hand.

Open source · Free · No account

mdfromx.com/trq212/status/2052809885763747935 text/markdown
## Post · 1/11 — Thariq (@trq212)

## Using Claude Code: The Unreasonable
   Effectiveness of HTML

![cover](https://pbs.twimg.com/…)

Markdown has become the dominant file
format used by agents to communicate
with us…

You see the same post either way. Your agent doesn't.

$ curl x.com/trq212/status/2052809885763747935

no content
<!DOCTYPE html><html lang="en" dir="ltr"
data-app-env="prod"><head><meta charSet="utf-8"
nonce="JCApsPM44mDDnid3Yl…"><meta
name="viewport" content="width=device-width…

…hundreds of KB of markup,
zero post text…

JavaScript is not available.

$ curl x.pcstyle.dev/trq212/status/2052809885763747935

markdown
## Post · 1/11 — Thariq (@trq212)

## Using Claude Code: The
   Unreasonable Effectiveness
   of HTML

![cover](https://pbs.twimg.com/…)

Markdown has become the dominant
file format used by agents to
communicate with us…

Pipe it anywhere

The response is plain text/markdown, so curl … > post.md drops a tweet straight into your vault.

Your notes, your scripts, and your agents all speak Markdown. X speaks JavaScript. x.md is the translation layer: keep the URL, change the host, read the post.

Nothing important gets dropped.

Conversion keeps the parts that matter when you're saving a post for later — or feeding it to a model.

Threads

The full reply chain comes back by default, numbered in order. Add ?thread=off when you only want the one post.

$ curl 'x.pcstyle.dev/trq212/status/2104983034152063339'

## Post · 1/15 — Thariq (@trq212)

I was on the latent space podcast with Swyx and Vibhu!
…
Source: https://x.com/trq212/status/2104983034152063339
---

## Thread · 2/15 — Thariq (@trq212)

2/ Basically all evals are saturated if you look at the transcripts, the models almost always see the correct solution and barely miss it.
…
---

## Thread · 3/15 — Thariq (@trq212)

3/ The hugging face incident - what happened and why it was such a big update to me
…

Media

Images and video survive as Markdown links instead of disappearing into a player.

$ curl 'x.pcstyle.dev/trq212/status/2107192901537329354?thread=off'

## Post · 1/1 — Thariq (@trq212)

I've been working on a skill that makes better HTML plans in Claude Code.

It uses simple language, shows code snippets, surfaces questions & makes mockups. …

> [video](https://video.twimg.com/amplify_video/…/Z9oP5h3b6Si4JJSh.mp4)
> ![video thumbnail](https://pbs.twimg.com/amplify_video_thumb/…/uRUNrBppYBlJb6eh.jpg)
Source: https://x.com/trq212/status/2107192901537329354

Quote posts

Quoted posts are nested inline where they appear, not dropped or reduced to a bare link.

$ curl 'x.pcstyle.dev/trq212/status/2105849729297055792?thread=off'

## Post · 1/1 — Thariq (@trq212)

This is a personal side project I've been working on! Here's the original post: …

> **Quoted post**
>
> **Thariq** @trq212
> As a personal side project, I've been prototyping a video game.
> …
> [video](https://video.twimg.com/amplify_video/…/w_0z92VuuMU0fxgT.mp4)
> Source: https://x.com/trq212/status/2105333496768319969

Source: https://x.com/trq212/status/2105849729297055792

X Articles

Long-form articles convert with their full body — headings, lists, and embedded posts included.

$ curl 'x.pcstyle.dev/trq212/status/2052809885763747935?thread=off'

## Post · 1/1 — Thariq (@trq212)

## Using Claude Code: The Unreasonable Effectiveness of HTML

![cover](https://pbs.twimg.com/media/HHz_ftzaIAAwkQs.jpg)

This is now also on the Claude Blog.

Markdown has become the dominant file format used by agents to communicate with us. …

# Why HTML?

## Information Density

HTML can convey much richer information compared to markdown. …

Obsidian frontmatter

?format=obsidian adds YAML frontmatter with author, date, and source URL, ready for your vault.

$ curl 'x.pcstyle.dev/trq212/status/2052809885763747935?format=obsidian&thread=off'

---
source: https://x.com/trq212/status/2052809885763747935
author: Thariq
author_handle: trq212
published: Fri May 08 17:56:30 +0000 2026
tags: [twitter, x, trq212]
---

## Post · 1/1 — Thariq (@trq212)

## Using Claude Code: The Unreasonable Effectiveness of HTML
…

Three ways to point an agent at it.

for any agent

Say it in the prompt

One line is enough. Every agent that can fetch a URL now reads tweets.

"To read an X post, swap x.com for x.pcstyle.dev."

for skills-aware agents

Install the skill

One command teaches Amp, Claude Code, and friends the host swap permanently.

$bunx skills add pc-style/x-md -g -y

for scripts

Call the API

The same Markdown, with JSON and raw variants. Every route, parameter, and limit is written down in the API documentation and described again in OpenAPI.

GET /api/v1/posts?url=…

Common questions.

Do I need an X or Twitter API key to use x.md?

No. The hosted service reads public X content through public upstream providers, so there is no X API key, no developer account, and no sign-in of any kind. Rate limits take the place of authentication.

Does it return whole threads, or only a single post?

Whole threads by default. A status URL returns the conversation: parent posts, the author thread numbered in order, and top replies. Add ?thread=off for only the requested post, or ?context=thread to leave out unrelated replies.

Can x.md read private, protected, or deleted posts?

No. x.md only returns what X already serves publicly. Protected and private accounts, suspended accounts, and deleted posts are never available, and X Lists and direct messages are not supported.

Is there a rate limit?

Yes. Live search is the scarce path: public callers get 5 uncached searches per minute per IP address, plus a further per-IP budget over a fifteen-minute window. Post and profile reads are cached for an hour by default, so repeat reads of the same URL usually never reach upstream.

Can x.md post, reply, follow, or like on my behalf?

No. x.md is strictly read-only. It has no write path to X, never holds your credentials, and cannot act on any account.

What output formats are available?

Compact Markdown by default. Add ?full=true for dates and metrics, ?format=obsidian for YAML frontmatter, or ?format=json (or an Accept: application/json header) for structured JSON carrying both the rendered Markdown and the raw post data.

How do I point an agent at it?

Three ways: tell the agent in its prompt to swap x.com for x.pcstyle.dev, install the browse-x skill, or call the documented HTTP API described at /docs, /openapi.json, and /mcp.

Read a post the way your agent does.

MIT-licensed. Fork it, deploy to Vercel, and the same swap works on your own domain.