close

Browse the web in tokens, not pages.

A typical page is tens of thousands of tokens of markup. The signal on it fits in a few hundred. oc fetches the page, distills it into compact text with numbered actions, and lets an agent drive the site by number.

$ npm install -g @only-cli/oc

Node 20+. Three runtime dependencies. No daemon, browser extension, or per-site adapters. Or skip the install with npx @only-cli/oc.

$ oc open news.ycombinator.com
# Hacker News
[1] Show HN: I built a tiny CSV toolkit
[2] 312 comments
...
actions: do <n> | read <n> | next | raw

$ oc do 1

1,444 tokens for four real pages, the same four cost 65,372 as raw HTML


45×

Fewer tokens than a raw HTML fetch

477

Tokens for a Reddit thread that was 52,899

500

Token budget per render, hard capped

3

Runtime dependencies, zero setup


Three ways in

Give your agent the web, cheaply

Claude Code, Codex, Cursor, Copilot, or any shell-capable agent. Pick the setup that matches how you already work; each is one line.

Install through the skills directory into Claude Code, Cursor, Codex, and Copilot. The skill costs almost no context until the agent invokes it.

$ npx skills add only-cli/oc

Prefer to do it by hand? Copy skills/only-cli/ into your agent's skills directory.


Command surface

Five commands, four flags

Small enough that an agent learns it from one --help and never asks again.

CommandWhat it doesShips
oc open <url>Fetch and render a page with numbered actionsv0.1
oc do <n>Follow the numbered link [n] from the last pagev0.2
oc find <query>Where a string appears on the page already openv0.2
oc nextThe next budget worth of the page already openv0.2
oc read <n>Full text of the region at [n]v0.2
oc raw [url]Distilled markdown of the whole pagev0.1
oc fill <n> <text>Type into a numbered inputv0.2
oc submit [n]Submit a formv0.2
Flags --budget <tokens>--json--html--session <name>--verbose Metrics are off by default, because metrics cost tokens too.

Benchmarks, measured 2026-08-19

The gap is clearest on a task with a few hops in it

Open r/ClaudeAI's front page, follow its top post to the comments, and report what the top comment argues, plus a single page, Yahoo Finance's AAPL quote. One live session per row, against each agent's own default tools. Bars share one scale across both tasks.

Methodology + per-task numbers

Reddit, multi-hop

Codex + oc
112,794 tok6 turns · right
est. cost
$0.07
Codex default
301,009 tok12 turns · right
est. cost
$0.18
Claude Code + oc
250,628 tok8 turns · right
est. cost
$0.15
Claude default
196,675 tok7 turns · failure (∞)
est. cost
$0.12

AAPL, single page

Codex + oc
59,648 tok4 turns · right
est. cost
$0.04
Claude default
123,866 tok3 turns · right
est. cost
$0.08
Claude Code + oc
198,976 tok7 turns · right
est. cost
$0.12
Codex default
71,947 tok4 turns · failure
est. cost
$0.04

Claude Code's own WebFetch and WebSearch are blocked from reddit.com outright, and by default it has no shell to fall back to, so on the Reddit task it does not just cost more, it fails outright. Codex falls back to its own web search and curl, and gets there at 2.7× what it costs through oc. On the single AAPL page it flips: Codex's default never opens the page and reports a stale price, while Claude Code's default WebFetch is the cheapest correct answer in the table, cheaper than oc. Struck-through rows didn't land a correct answer. Cost bars are an estimate, not a measurement: they apply Claude Code's own measured rate on these runs (~$0.61 per 1,000 tokens, blended across input, output, and cache reads/writes) to every row's token count, including the two Codex rows, since the Codex CLI doesn't report a per-run dollar cost and its underlying model has no published price to fall back on — treat those two as a stand-in, not gpt-5.6-sol's real pricing.


Works today

Any mostly-static site, no per-site setup

News, blogs, documentation, forums, and search engines: one generic engine distills whatever HTML comes back. Tuned shortcuts cover the sites agents hit most.

SiteShortcuts
Hacker Newstop · new · item · user
Redditsub · post · user · search
DuckDuckGosearch · lite
Bingsearch · news

A site shortcut is a small JSON file; see CONTRIBUTING.md.

Known limits, honestly

What it can't do yet

Pages that only render with JavaScriptv0.3
Sites behind a login, since sessions hold page state but not cookies yetv0.2
Sites with hard bot challenges may still refuse the toolOpen

v0.1 is early: static pages, budget-aware rendering, and offline tests. Requests impersonate Chrome and fall back to native fetch. MIT licensed; contributions welcome.


Practising what it preaches

This site is readable by the thing it is for

Every word is in the initial HTML, with no client-side rendering and one honest heading hierarchy. There is an llms.txt for orientation, an RSS feed, a sitemap, and structured data for crawlers.

$ oc open only-cli.com
# only-cli: browse in tokens, not pages
install: npm install -g @only-cli/oc
[1] For agents: three ways in
[2] Commands: five commands, four flags
[3] Benchmarks: 1,444 vs 65,372 tokens
[4] Blog: 3 posts
actions: do <n> | raw <url>

Writing

All posts →

Stop paying for markup your agent throws away.

$ npm install -g @only-cli/oc
Star it on GitHub