Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "only-cli",
"source": { "source": "github", "repo": "only-cli/oc" },
"description": "Browse websites from the terminal in a few hundred tokens",
"version": "0.5.0",
"version": "0.5.1",
"homepage": "https://github.com/only-cli/oc",
"license": "MIT"
}
Expand Down
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "only-cli",
"description": "Browse websites from the terminal in a few hundred tokens",
"version": "0.5.0"
"version": "0.5.1"
}
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,31 @@
Notable changes per release. Releases before 0.4.0 are listed at
[github.com/only-cli/oc/releases](https://github.com/only-cli/oc/releases).

## 0.5.1

### Added

- `find <query>` in every `actions:` footer, after `do <n>` and before
`read <n>`, the order the skill's "going further, cheapest first" list
already gives. One command lands on the block that matters, where `read`
needs the right number first and `next` pages toward it. The entry costs 3
or 4 tokens per render. (#46)

### Fixed

- `oc open` no longer dies with `Impersonating chrome150 is not supported` on
machines where impers loads a system copy of libcurl-impersonate older than
v2.1.0, which predates the fingerprint the `chrome` alias resolves to. A
refused fingerprint now downgrades the same way a blocked response already
did: chrome falls back to firefox, and when both identities are refused the
plain fetch transport still gets the page. Any other impers failure
propagates unchanged, and installs where impers works keep the newest chrome
fingerprint. (#40)
- The `actions:` footer no longer offers `fill <n> <text>` and `submit` on
pages with an input. Both are still planned, and following the footer's
own suggestion always failed. A test now keeps every footer free of
commands that are not available yet. (#44)

## 0.5.0

### Added
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ If you are an LLM reading this repository, [llms.txt](llms.txt) is the short ver
npm install -g @only-cli/oc
```

Requires Node 20+. Requests impersonate Chrome via [impers](https://github.com/lexiforest/impers); falls back to native fetch if impers is unavailable.
Requires Node 20+. Requests impersonate Chrome via [impers](https://github.com/lexiforest/impers). When a site, or the local copy of libcurl-impersonate, refuses the Chrome identity, the request downgrades to Firefox, and to native fetch when impers is unavailable or refuses both.

### Agent skill

Expand Down
2 changes: 1 addition & 1 deletion llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Key facts:
- A shortcut is `oc <site> <verb> [args]`: `oc hn top`, `oc reddit sub ClaudeAI`, `oc gh repo only-cli oc`, `oc ddg search claude code cli`, `oc learn doc azure/aks/what-is-aks`, `oc py library json`. Name the site by its short name, bare name, or domain (`oc hn`, `oc ycombinator`, `oc news.ycombinator.com`), the last argument takes every word after it so a query needs no quoting, and `oc sites` lists every site with its verbs. A shortcut resolves to a URL and then behaves exactly like `oc open <url>`
- X profiles and individual posts read without a login (about 390 and 260 tokens); X search, explore, and hashtag pages do not, and oc reports the block instead of guessing
- Outbound fetches honor `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` (and their lowercase forms), so oc works in a sandbox whose only route to the network is a proxy. An https target is tunneled with CONNECT and its certificate is still verified, credentials in the proxy URL reach the proxy and nothing else, and private or locally unresolvable targets stay refused. `ALL_PROXY` is not read
- Requests impersonate Chrome, so pages that block plain scripts often still work
- Requests impersonate Chrome, so pages that block plain scripts often still work; a Chrome identity the site or the local libcurl-impersonate refuses downgrades to Firefox, then to plain fetch
- Agent skill included: `npx skills add https://github.com/only-cli/oc --skill web-browsing-cli` ([skills.sh](https://www.skills.sh/only-cli/oc/web-browsing-cli))
- Authenticated pages: `printf %s "..." | oc login --cookie - --domain example.com [--expires 1h] [--session name]` seeds a timeboxed cookie jar; cookies are sent on every fetch for that session and live in a separate file from page state. `--cookie -` reads the header from stdin, which keeps the credential out of `ps` and shell history; `--domain` must be a real hostname, not a bare TLD. Seeded cookies are https-only unless `--allow-http` says the site is not, so a redirect that downgrades to `http` drops them. `oc logout` forgets that session's cookies and its saved page
- No JavaScript rendering yet (on the roadmap)
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@only-cli/oc",
"version": "0.5.0",
"version": "0.5.1",
"description": "Turn websites into a compact CLI so AI agents can browse without burning tokens.",
"type": "module",
"bin": {
Expand Down
16 changes: 8 additions & 8 deletions skills/web-browsing-cli/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ description: Token-efficient web browsing and web content extraction for AI agen
Renders a web page as a compact, numbered terminal view instead of raw HTML. A typical page is under 500 tokens.

```
npx --yes @only-cli/oc@0.5.0 open <url> compact view, numbered elements
npx --yes @only-cli/oc@0.5.0 do <n> follow link [n], or read it if [n] is text
npx --yes @only-cli/oc@0.5.0 find <query> where a string appears, or that place itself
npx --yes @only-cli/oc@0.5.1 open <url> compact view, numbered elements
npx --yes @only-cli/oc@0.5.1 do <n> follow link [n], or read it if [n] is text
npx --yes @only-cli/oc@0.5.1 find <query> where a string appears, or that place itself
when only one matches
npx --yes @only-cli/oc@0.5.0 next next ~500 tokens of the page already open
npx --yes @only-cli/oc@0.5.0 read <n> full text of region [n]
npx --yes @only-cli/oc@0.5.0 raw [url] whole page as markdown (--html for cleaned HTML)
npx --yes @only-cli/oc@0.5.0 login seed cookies (--cookie, --domain, --expires)
npx --yes @only-cli/oc@0.5.0 logout [session] forget a session: cookies and saved page
npx --yes @only-cli/oc@0.5.1 next next ~500 tokens of the page already open
npx --yes @only-cli/oc@0.5.1 read <n> full text of region [n]
npx --yes @only-cli/oc@0.5.1 raw [url] whole page as markdown (--html for cleaned HTML)
npx --yes @only-cli/oc@0.5.1 login seed cookies (--cookie, --domain, --expires)
npx --yes @only-cli/oc@0.5.1 logout [session] forget a session: cookies and saved page
```

None of these except `open`/`do`/`raw <url>` fetch anything; they replay the page `open` already saved.
Expand Down