unbrowse 6.17.2 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -38
- package/SKILL.md +93 -0
- package/package.json +2 -1
- package/vendor/kuri/manifest.json +3 -3
package/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Unbrowse
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
5
|
-
> Agents should connect via the **MCP server**. The CLI (`unbrowse ...`) and SDK are unaffected. Add this to your MCP host config (Claude Desktop, Cursor, Codex, or any MCP-compatible client):
|
|
3
|
+
> Skill, MCP server, SDK, CLI — four ways to use the same local runtime. `SKILL.md` is back in this package; the MCP block below still works as the canonical agent path. Pick what your host supports.
|
|
6
4
|
>
|
|
7
5
|
> ```json
|
|
8
6
|
> {
|
|
@@ -15,17 +13,17 @@
|
|
|
15
13
|
> }
|
|
16
14
|
> ```
|
|
17
15
|
>
|
|
18
|
-
> Then run `npx unbrowse setup` once. The
|
|
16
|
+
> Then run `npx unbrowse setup` once. The SKILL.md in this directory is loadable via `find-skills` / `/find-skills`; reading it gives an agent the same map (resolve + execute + browse-session) without an MCP host.
|
|
19
17
|
|
|
20
18
|
This package installs the `unbrowse` CLI.
|
|
21
19
|
|
|
22
|
-
Unbrowse is a local Model Context Protocol (MCP) server and CLI that turns
|
|
20
|
+
Unbrowse is a local Model Context Protocol (MCP) server and CLI that turns websites into reusable API routes for agents. It learns callable routes from explicit browsing sessions, keeps credentials local, and shares only sanitized route metadata when you publish.
|
|
23
21
|
|
|
24
22
|
One agent learns a site once. Every later agent gets the fast path.
|
|
25
23
|
|
|
26
24
|
Unbrowse is a drop-in replacement for OpenClaw / `agent-browser` browser flows for agents: on the API-native path it is typically ~30x faster, ~90% cheaper, and turns repeated browser work into reusable route assets.
|
|
27
25
|
|
|
28
|
-
> Security note: capture and execution stay local by default. Credentials stay on your machine. Learned
|
|
26
|
+
> Security note: capture and execution stay local by default. Credentials stay on your machine. Learned routes are published to the shared marketplace only after an explicit publish checkpoint.
|
|
29
27
|
## MCP server
|
|
30
28
|
|
|
31
29
|
Unbrowse implements the Model Context Protocol over stdio. `unbrowse mcp` is the MCP server entrypoint.
|
|
@@ -65,12 +63,12 @@ curl -fsSL https://unbrowse.ai/install.sh | sh
|
|
|
65
63
|
That installer now follows the Kuri pattern: detect platform, download the matching release tarball, install `unbrowse` into `~/.local/bin`, then run `unbrowse setup`.
|
|
66
64
|
|
|
67
65
|
```bash
|
|
68
|
-
# Deterministic setup
|
|
69
|
-
|
|
70
|
-
|
|
66
|
+
# Deterministic npm setup
|
|
67
|
+
npm install -g unbrowse
|
|
68
|
+
unbrowse setup
|
|
71
69
|
```
|
|
72
70
|
|
|
73
|
-
|
|
71
|
+
`unbrowse setup` runs the first-time bootstrap: ToS acceptance, agent registration + API-key caching, and wallet detection when present.
|
|
74
72
|
|
|
75
73
|
If a wallet is configured, that wallet address becomes the contributor/payment truth: it is synced onto your agent profile, used as the destination for contributor payouts when your routes earn, and used as the spending wallet for paid marketplace routes.
|
|
76
74
|
|
|
@@ -91,8 +89,7 @@ On supported platforms, install now fails fast if the matching GitHub release as
|
|
|
91
89
|
For generic MCP hosts:
|
|
92
90
|
|
|
93
91
|
```bash
|
|
94
|
-
|
|
95
|
-
cd ~/unbrowse && ./setup --host mcp
|
|
92
|
+
npx unbrowse setup --mcp
|
|
96
93
|
```
|
|
97
94
|
|
|
98
95
|
That writes a ready-to-import MCP config to `~/.config/unbrowse/mcp/unbrowse.json`. A generic template is also published at [`/mcp.json`](https://www.unbrowse.ai/mcp.json).
|
|
@@ -100,7 +97,7 @@ That writes a ready-to-import MCP config to `~/.config/unbrowse/mcp/unbrowse.jso
|
|
|
100
97
|
If your agent host uses skills:
|
|
101
98
|
|
|
102
99
|
```bash
|
|
103
|
-
|
|
100
|
+
npm install -g unbrowse
|
|
104
101
|
```
|
|
105
102
|
|
|
106
103
|
## Upgrading
|
|
@@ -181,7 +178,7 @@ The dependency graph is not just API-to-API. On JS-heavy checkout flows it also
|
|
|
181
178
|
|
|
182
179
|
- First-time capture/indexing on a site can take 20-80 seconds. That is the slow path; repeats should be much faster.
|
|
183
180
|
- For website tasks, keep the agent on Unbrowse instead of letting it drift into generic web search or ad hoc `curl`.
|
|
184
|
-
-
|
|
181
|
+
- Some sites are harder targets than others. Prefer documented JSON routes when a site offers them.
|
|
185
182
|
|
|
186
183
|
## Help shape the next eval
|
|
187
184
|
|
|
@@ -191,20 +188,20 @@ If you tried Unbrowse on a site or API and could not get it to work, add it to [
|
|
|
191
188
|
|
|
192
189
|
The synced skill repo also carries the public docs set:
|
|
193
190
|
|
|
194
|
-
- [Quickstart](
|
|
195
|
-
- [
|
|
196
|
-
- [
|
|
197
|
-
- [
|
|
191
|
+
- [Quickstart](https://docs.unbrowse.ai/guides/quickstart)
|
|
192
|
+
- [Agent workflow](https://docs.unbrowse.ai/for-agents/how-an-agent-uses-unbrowse)
|
|
193
|
+
- [Integration surfaces](https://docs.unbrowse.ai/for-developers/integration-surfaces)
|
|
194
|
+
- [Payment model](https://docs.unbrowse.ai/HOW_UNBROWSE_PAYS)
|
|
198
195
|
|
|
199
196
|
Whitepaper companion docs:
|
|
200
197
|
|
|
201
|
-
- [Whitepaper companion index](
|
|
202
|
-
- [For Technical Readers](
|
|
203
|
-
- [For Investors](
|
|
198
|
+
- [Whitepaper companion index](https://docs.unbrowse.ai/whitepaper/)
|
|
199
|
+
- [For Technical Readers](https://docs.unbrowse.ai/whitepaper/for-technical-readers)
|
|
200
|
+
- [For Investors](https://docs.unbrowse.ai/whitepaper/for-investors)
|
|
204
201
|
|
|
205
202
|
## How it works
|
|
206
203
|
|
|
207
|
-
When an agent asks for something, Unbrowse first searches the marketplace for an existing skill. If one exists with enough confidence, it executes immediately. If not, Unbrowse
|
|
204
|
+
When an agent asks for something, Unbrowse first searches the marketplace for an existing skill. If one exists with enough confidence, it executes immediately. If not, Unbrowse can open a local browser session, learn reusable route metadata, and publish it only after the configured checkpoint.
|
|
208
205
|
|
|
209
206
|
Every learned skill becomes discoverable by every future agent. Reliability scoring, feedback, schema drift, and verification keep the good paths hot and the broken ones out of the way.
|
|
210
207
|
|
|
@@ -214,7 +211,7 @@ When you call `POST /v1/intent/resolve`, the orchestrator follows this priority
|
|
|
214
211
|
|
|
215
212
|
1. **Route cache** (5-min TTL) — instant hit if the same intent was recently resolved
|
|
216
213
|
2. **Marketplace search** — semantic vector search ranked by composite score: 40% embedding similarity + 30% reliability + 15% freshness + 15% verification status
|
|
217
|
-
3. **
|
|
214
|
+
3. **Local browser session** — the runtime observes allowed requests, indexes reusable route metadata, and can publish a new skill after review
|
|
218
215
|
4. **DOM fallback** — if no API endpoints are found (static/SSR sites), structured data is extracted from rendered HTML
|
|
219
216
|
|
|
220
217
|
Skills published by live capture become available to all agents on the network.
|
|
@@ -241,15 +238,15 @@ A background verification loop runs every 6 hours, executing safe (GET) endpoint
|
|
|
241
238
|
|
|
242
239
|
## Authentication for gated sites
|
|
243
240
|
|
|
244
|
-
For most sites,
|
|
241
|
+
For most sites, sign-in works from your existing local browser session or from an interactive login window. Sessions stay on your machine and are reused only by your local runtime.
|
|
245
242
|
|
|
246
243
|
| Strategy | How it works | When to use |
|
|
247
244
|
| ------------------- | -------------------------------------------------- | ---------------------------------------------------- |
|
|
248
|
-
|
|
|
245
|
+
| Local session reuse | Uses your existing local browser session | Default — works if you're logged in via your browser |
|
|
249
246
|
| Yolo mode | Opens Chrome with your real profile | Sites with complex auth (OAuth popups, 2FA) |
|
|
250
247
|
| Interactive login | Opens a headed browser for manual login | Fallback when auto-resolve has no cookies |
|
|
251
248
|
|
|
252
|
-
|
|
249
|
+
Authentication material stays local, is stored encrypted, and is automatically refreshed or discarded when a site rejects it. The marketplace receives route metadata, not your private session.
|
|
253
250
|
|
|
254
251
|
## Mutation safety
|
|
255
252
|
|
|
@@ -270,7 +267,7 @@ See the public API reference below for endpoints, search, feedback, auth, and is
|
|
|
270
267
|
| POST | `/v1/intent/resolve` | Search marketplace, capture if needed, execute |
|
|
271
268
|
| POST | `/v1/skills/:id/execute` | Execute a specific skill |
|
|
272
269
|
| POST | `/v1/auth/login` | Interactive browser login |
|
|
273
|
-
| POST | `/v1/auth/
|
|
270
|
+
| POST | `/v1/auth/import` | Import a local browser session |
|
|
274
271
|
| POST | `/v1/search` | Semantic search across all domains |
|
|
275
272
|
| POST | `/v1/search/domain` | Semantic search scoped to a domain |
|
|
276
273
|
| POST | `/v1/feedback` | Submit feedback (affects reliability scores) |
|
|
@@ -284,11 +281,10 @@ See the public API reference below for endpoints, search, feedback, auth, and is
|
|
|
284
281
|
|
|
285
282
|
The standalone skill repo also carries the core repo docs:
|
|
286
283
|
|
|
287
|
-
- [Quickstart guide](
|
|
288
|
-
- [
|
|
289
|
-
- [
|
|
290
|
-
- [
|
|
291
|
-
- [Release checklist](./docs/RELEASING.md)
|
|
284
|
+
- [Quickstart guide](https://docs.unbrowse.ai/guides/quickstart)
|
|
285
|
+
- [Agent workflow](https://docs.unbrowse.ai/for-agents/how-an-agent-uses-unbrowse)
|
|
286
|
+
- [Integration surfaces](https://docs.unbrowse.ai/for-developers/integration-surfaces)
|
|
287
|
+
- [Payment model](https://docs.unbrowse.ai/HOW_UNBROWSE_PAYS)
|
|
292
288
|
|
|
293
289
|
## Configuration
|
|
294
290
|
|
|
@@ -296,8 +292,7 @@ The standalone skill repo also carries the core repo docs:
|
|
|
296
292
|
|
|
297
293
|
```
|
|
298
294
|
~/.unbrowse/config.json # API key, agent ID, registration
|
|
299
|
-
~/.unbrowse/vault/
|
|
300
|
-
~/.unbrowse/vault/.key # Encryption key (mode 0o600)
|
|
295
|
+
~/.unbrowse/vault/ # Encrypted local credential store
|
|
301
296
|
~/.unbrowse/skill-cache/ # Local skill manifest cache
|
|
302
297
|
~/.unbrowse/profiles/<domain>/ # Per-domain Chrome profiles
|
|
303
298
|
~/.unbrowse/logs/unbrowse-YYYY-MM-DD.log # Daily logs
|
|
@@ -323,13 +318,13 @@ src/
|
|
|
323
318
|
├── api/routes.ts # HTTP route definitions
|
|
324
319
|
├── orchestrator/ # Intent resolution pipeline
|
|
325
320
|
├── execution/ # Skill/endpoint execution + retry logic
|
|
326
|
-
├── capture/ #
|
|
327
|
-
├──
|
|
321
|
+
├── capture/ # Local browser session recording
|
|
322
|
+
├── route-indexing/ # Captured requests → reusable route metadata
|
|
328
323
|
├── extraction/ # DOM structured data extraction
|
|
329
324
|
├── marketplace/ # Backend API client (beta-api.unbrowse.ai)
|
|
330
325
|
├── client/ # Agent registration & config management
|
|
331
|
-
├── auth/ # Interactive login +
|
|
332
|
-
├── vault/ # Encrypted credential storage
|
|
326
|
+
├── auth/ # Interactive login + local session reuse
|
|
327
|
+
├── vault/ # Encrypted credential storage
|
|
333
328
|
├── transform/ # Field projection + schema drift detection
|
|
334
329
|
├── verification/ # Periodic endpoint health checks
|
|
335
330
|
├── ratelimit/ # Request throttling
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: unbrowse
|
|
3
|
+
description: Capture once, replay everywhere — Unbrowse learns reusable route metadata from allowed browsing sessions and replays it as a fast, cheap, indexed route. Brings back the skill surface alongside the MCP server + SDK + CLI.
|
|
4
|
+
metadata:
|
|
5
|
+
type: integration
|
|
6
|
+
origin: unbrowse-ai/unbrowse
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Unbrowse
|
|
10
|
+
|
|
11
|
+
Unbrowse turns websites into reusable API routes for agents. Teach a route once, store sanitized metadata, replay it on later calls. Typical run is 30× faster and 90× cheaper than a fresh browser session.
|
|
12
|
+
|
|
13
|
+
Three surfaces, one runtime:
|
|
14
|
+
|
|
15
|
+
| Surface | When to reach for it |
|
|
16
|
+
|---|---|
|
|
17
|
+
| **MCP server** | An MCP-host agent (Claude Desktop, Cursor, Codex, Claude Code). Tool calls like `unbrowse_resolve`, `unbrowse_execute`, `unbrowse_go` appear in the host. |
|
|
18
|
+
| **CLI** (`unbrowse`) | A shell session or a bash-script that wants the same surface as the MCP server, without an MCP host. |
|
|
19
|
+
| **SDK** (`@unbrowse/sdk`) | A TypeScript program that wants to embed Unbrowse. `npm i @unbrowse/sdk` is enough; the SDK spawns its own local binary. |
|
|
20
|
+
|
|
21
|
+
All three resolve to the same runtime workflow underneath:
|
|
22
|
+
- **resolve** asks "is there an indexed route for this intent + URL?" — returns a shortlist or a hard handoff.
|
|
23
|
+
- **execute** picks one endpoint from the shortlist and runs it — returns the real data.
|
|
24
|
+
- **browse-session** opens a managed browser when the API is too dynamic to predict; local capture indexes route metadata.
|
|
25
|
+
|
|
26
|
+
The two-tool flow (resolve + execute) is the agent UX north star: never one call, never three. The shortlist is structured so the calling LLM picks; execute is paid via x402 when the route is priced.
|
|
27
|
+
|
|
28
|
+
## Quickstart
|
|
29
|
+
|
|
30
|
+
For an MCP host (Claude Desktop, Cursor, Claude Code, Codex):
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"mcpServers": {
|
|
35
|
+
"unbrowse": {
|
|
36
|
+
"command": "npx",
|
|
37
|
+
"args": ["-y", "unbrowse", "mcp"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Then once:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npx unbrowse setup
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
For a shell:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
unbrowse resolve --intent "search hacker news for openai" --url https://news.ycombinator.com
|
|
53
|
+
unbrowse execute --skill-id <id-from-resolve> --endpoint-id <id-from-shortlist>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
For a Node program:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npm i @unbrowse/sdk
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
import { spawn } from '@unbrowse/sdk';
|
|
64
|
+
const client = await spawn();
|
|
65
|
+
const resolved = await client.resolve({ intent: 'search hn for openai', url: 'https://news.ycombinator.com' });
|
|
66
|
+
const result = await client.execute({ skillId: resolved.skill.id, endpointId: resolved.endpoints[0].id });
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## /contract-shape (why three surfaces stay coherent)
|
|
70
|
+
|
|
71
|
+
Every tool call on every surface follows the same shape:
|
|
72
|
+
|
|
73
|
+
1. **Declare** — the call carries an intent + URL.
|
|
74
|
+
2. **Iterate** — the runtime tries cached → marketplace → first-pass browser → live capture, in that order. Each step appends one trace row.
|
|
75
|
+
3. **Mark with proof** — the response carries a trace with `success`, `skill_id`, `endpoint_id`. The proof is the trace row.
|
|
76
|
+
|
|
77
|
+
Honest residue surfaces as a `next_step` field (`open_browse_session`, `abandon_or_authenticate`) instead of a one-word error.
|
|
78
|
+
|
|
79
|
+
## What lives in the public docs
|
|
80
|
+
|
|
81
|
+
Every primitive Unbrowse depends on (pointer-not-payload, residential proxy fallback, interstitial shortcut, x402+Faremeter, never-leaked-fields list, domain opt-out, fair split + claim, deploy gate, dimensional bench, kuri first-principles roadmap) is documented at [`docs/public/primitives/`](../../docs/public/primitives/) in the public repo. The README index there is enforced by `scripts/check-primitives-doc-public.sh` so the folder cannot drift from the codebase.
|
|
82
|
+
|
|
83
|
+
## Skill / MCP / SDK / CLI sync (the precommit gate)
|
|
84
|
+
|
|
85
|
+
When a shipping-surface signal changes (new top-level dir, new workspace member, new binary, new wrangler.toml target, new deploy workflow), the same commit must update a canonical doc. The gate at `scripts/precommit-doc-delta.sh` surfaces the delta as evidence on every iterate; full canonical wiring at `~/.claude/skills/meta-harness/scripts/gates/doc-delta.sh`.
|
|
86
|
+
|
|
87
|
+
The skill surface (this file) updates whenever the MCP tool catalog or the SDK API changes. The precommit gate flags it; the agent ships the update in the same commit.
|
|
88
|
+
|
|
89
|
+
## Provenance
|
|
90
|
+
|
|
91
|
+
Source code: <https://github.com/unbrowse-ai/unbrowse-dev>
|
|
92
|
+
Public mirror: <https://github.com/unbrowse-ai/unbrowse>
|
|
93
|
+
MCP server, CLI, SDK published from this monorepo. Backend (`backend/`) is the Cloudflare Worker that handles marketplace + sponsor tier; frontend (`frontend/`) is the landing page; `packages/skill/` is this package (the npm-published CLI binary + the skill manifest you're reading).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unbrowse",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"description": "Reverse-engineer any website into reusable API skills. Zero-dep single binary with embedded browser engine.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"scripts/postinstall-ping.mjs",
|
|
15
15
|
"scripts/verify-release-assets.mjs",
|
|
16
16
|
"README.md",
|
|
17
|
+
"SKILL.md",
|
|
17
18
|
"LICENSE"
|
|
18
19
|
],
|
|
19
20
|
"scripts": {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"repo_url": "https://github.com/
|
|
3
|
-
"branch": "
|
|
2
|
+
"repo_url": "https://github.com/justrach/kuri.git",
|
|
3
|
+
"branch": "adding-extensions",
|
|
4
4
|
"source_sha": "3cdc33c8507bd91f1ce499a69f567189e1284e4e",
|
|
5
|
-
"built_at": "2026-05-
|
|
5
|
+
"built_at": "2026-05-22T07:18:34.843Z",
|
|
6
6
|
"binaries": {
|
|
7
7
|
"darwin-arm64": {
|
|
8
8
|
"zig_target": "aarch64-macos",
|