Skip to content

Output format

Output is compact and deterministic, built for an agent’s context window: no colours, no emoji, no padding.

  • The first line is a heading that names the object; the second is a metadata line separated by ·.
  • Engagement is one line with short labels and compact numbers, only the counts the platform provides: likes 1.2K · reposts 88 · replies 64 · quotes 12 · views 210K.
  • Text is verbatim: full long posts and original line breaks, never summarised.
  • Media are single lines: [image] https://… (alt: "…"), or [video 1:42] transcript available: scrollhound transcript ….
  • A quoted post is an inline blockquote, one level deep.
  • An empty result is the single line No results. (exit code 0).
# Thread by Marc Lou (@marc_louvion) · 142K followers
https://x.com/marc_louvion/status/1849000000000000000 · 2026-10-21 14:03 UTC · 3 posts
## 1/3 · likes 1.2K · reposts 88 · replies 64 · quotes 12 · views 210K
I shipped 3 products in 30 days. Here's the exact posting routine:
[image] https://pbs.twimg.com/media/abc.jpg (alt: "Revenue chart")
## Top replies (20 of 64, top)
- @tibo_maker (98K followers) · likes 220 · 2026-10-21: The "post the build" point is underrated.
next: scrollhound x replies 1849000000000000000 --cursor eyJ2IjoxLCJwIjoidHdpdHRlcmFwaS1pbyJ9

(An illustrative example of the format, not a real thread.)

When there’s more, the last line is next: followed by the exact command to run, with a --cursor. Lists page this way. Long transcripts and Articles (over about 20,000 characters) are split into chunks the same way, and every chunk after the first is a free re-read.

Big lists (say x posts --limit 500) stop at about 20,000 characters with a line like showing 1–47 of 500 posts to keep this readable; next: shows #48 onward. Following next: continues from post 48 without fetching again, so it’s free. Long comment trees say how many comments they show. --json always returns everything that was fetched.

Comments and replies are only fetched when asked for (--comments <n>). A post read without them ends with a line like 318 comments on Reddit, not loaded (ask for comments to include them).

Add --json to any command:

{
"data": { "kind": "thread", "posts": [], "replies": { "items": [], "nextCursor": null } },
"meta": { "requestId": "…", "cached": false, "costUsd": 0.011, "notionalCredits": 1, "warnings": [] }
}

data uses the same normalised shape for every provider: post, thread, article, user, video, hn_item, trends, subreddit, reddit_thread and the paged lists. meta.cached is true when the result came from the cache at no cost.

Errors go to stderr as error: … plus a hint: … line with the next step.

Exit Codes Meaning
0 — Success, including empty results and pending transcriptions
1 internal_error Something broke on our side; retry, and quote the request id if it persists
2 invalid_input A bad flag or argument; the message names it
3 unauthenticated, forbidden, x_not_connected, x_reauth_required Log in, or connect / reconnect X
4 not_found, unsupported_url The item doesn’t exist, or the link isn’t X, YouTube, HN or Reddit
5 rate_limited, spend_cap_reached, quota_exhausted Slow down, or wait for the cap or quota to reset
6 upstream_unavailable A data provider is failing; retry in a few minutes

Warnings (for example, less than 10% of your monthly cap left) go to stderr and never change the exit code.