@zenalexa/unicli 0.215.0 → 0.215.1

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/AGENTS.md CHANGED
@@ -3,6 +3,7 @@
3
3
  <!-- IF YOU ARE AN AI AGENT: Read this file. It tells you everything you need.
4
4
  Install: npm install -g @zenalexa/unicli
5
5
  Discover: unicli search "your intent" (bilingual EN/ZH)
6
+ Agent routing: unicli agents matrix && unicli agents recommend <agent>
6
7
  Run: unicli <site> <command> [args]
7
8
  Output is structured Markdown by default (non-TTY + agent UA auto-detected). Use -f json for JSON. Errors are structured envelopes to stderr.
8
9
  You can fix broken adapters yourself — read the Self-Repair section. -->
@@ -80,7 +81,7 @@ Sites requiring auth: bilibili, weibo, zhihu, twitter, xueqiu, zsxq, jike, werea
80
81
 
81
82
  ## Output Contract
82
83
 
83
- Every command returns v2 `AgentEnvelope` on stdout (24 surfaces: adapter dispatch + `core.list/health/usage/search` + `ext.list` + `dev.watch` + 17 admin: `agents auth eval explore generate hub lint mcp migrate migrate-schema operate repair research schema skills status synthesize`). `mcp serve` stays raw (stdio MCP). Format auto-selected — pipe or set an agent UA env var for Markdown.
84
+ Commands return v2 `AgentEnvelope` on stdout across adapter, core, ext/dev, and admin surfaces (`agents matrix/recommend/generate`, `auth`, `mcp`, `repair`, etc.). `mcp serve` and `acp` stay raw stdio protocol servers. Format auto-selected — pipe or set an agent UA env var for Markdown.
84
85
 
85
86
  ### Format auto-selection
86
87
 
@@ -193,21 +194,22 @@ Default tools: `unicli_run`, `unicli_list`, `unicli_search`, `unicli_explore`. A
193
194
  ## ACP (avante.nvim / Zed)
194
195
 
195
196
  ```bash
196
- unicli acp # JSON-RPC 2.0 over stdio
197
+ unicli acp # ACP compatibility over stdio
197
198
  ```
198
199
 
199
- See [`docs/AVANTE.md`](docs/AVANTE.md).
200
+ ACP is an editor compatibility gateway, not the core runtime. Prefer `unicli agents recommend <agent>` for Claude Code, Codex, Cursor, OpenCode, Gemini, Qwen, Kiro, Aider, Goose, Cline, Roo, AgentAPI, etc.
200
201
 
201
202
  ## External CLI Passthrough
202
203
 
203
- 35 registered external CLIs. If installed on your system, they're available as top-level commands:
204
+ 58 registered external CLIs. If installed on your system, they're available as top-level commands:
204
205
 
205
206
  ```bash
206
207
  unicli ext list # Show all external CLIs + install status
208
+ unicli ext list --tag agent # Show coding-agent CLIs
207
209
  unicli ext install <name> # Install an external CLI
208
210
  unicli lark-cli calendar +agenda # Direct passthrough
209
211
  ```
210
212
 
211
213
  ## Version
212
214
 
213
- 0.215.0Closed Adapter Loop
215
+ 0.215.1Agent Backend Matrix
package/README.md CHANGED
@@ -10,23 +10,135 @@
10
10
 
11
11
  <br><br>
12
12
 
13
- **CLI is all agents need.**
13
+ **One CLI that lets agents use websites, apps, and your computer.**
14
14
 
15
- The execution layer for agent skills. Deterministic, editable, cross-vendor.
15
+ Uni-CLI turns a plain-language task into a real command. Agents search, run it, get Markdown/JSON back, and can fix broken site adapters themselves.
16
16
 
17
17
  <br>
18
18
 
19
- <a href="https://www.npmjs.com/package/@zenalexa/unicli"><img src="https://img.shields.io/npm/v/@zenalexa/unicli?style=flat-square&color=cb3837" alt="npm"></a>
20
- <a href="https://github.com/olo-dot-io/Uni-CLI/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/olo-dot-io/Uni-CLI/ci.yml?style=flat-square&label=CI" alt="CI"></a>
21
- <a href="./LICENSE"><img src="https://img.shields.io/github/license/olo-dot-io/Uni-CLI?style=flat-square" alt="license"></a>
22
- <img src="https://img.shields.io/badge/tests-<!-- STATS:test_count -->7145<!-- /STATS -->-44cc11?style=flat-square" alt="tests">
23
- <img src="https://img.shields.io/badge/agent--reach-ally-6a5acd?style=flat-square" alt="agent-reach ally">
19
+ <img src="https://readme-typing-svg.demolab.com?font=JetBrains+Mono&duration=2200&pause=700&color=6A5ACD&center=true&vCenter=true&width=720&lines=Find+the+right+command;Run+real+sites+and+apps;Get+JSON+or+Markdown+back;Fix+adapters+without+waiting" alt="Find the right command. Run real sites and apps. Get JSON or Markdown back. Fix adapters without waiting.">
20
+
21
+ <br>
22
+
23
+ <a href="https://www.npmjs.com/package/@zenalexa/unicli"><img src="https://img.shields.io/npm/v/@zenalexa/unicli?style=for-the-badge&color=cb3837&label=npm" alt="npm"></a>
24
+ <a href="https://github.com/olo-dot-io/Uni-CLI/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/olo-dot-io/Uni-CLI/ci.yml?style=for-the-badge&label=CI" alt="CI"></a>
25
+ <a href="./LICENSE"><img src="https://img.shields.io/github/license/olo-dot-io/Uni-CLI?style=for-the-badge" alt="license"></a>
26
+ <img src="https://img.shields.io/badge/tests-<!-- STATS:test_count -->7160<!-- /STATS -->-44cc11?style=for-the-badge" alt="tests">
27
+ <img src="https://img.shields.io/badge/agent--reach-ally-6a5acd?style=for-the-badge" alt="agent-reach ally">
28
+
29
+ <br>
30
+
31
+ <img src="https://img.shields.io/badge/<!-- STATS:site_count -->220<!-- /STATS -->_sites-111827?style=for-the-badge" alt="220 sites">
32
+ <img src="https://img.shields.io/badge/<!-- STATS:command_count -->1283<!-- /STATS -->_commands-0f766e?style=for-the-badge" alt="1283 commands">
33
+ <img src="https://img.shields.io/badge/58_CLI_bridges-7c3aed?style=for-the-badge" alt="58 CLI bridges">
34
+ <img src="https://img.shields.io/badge/v2_AgentEnvelope-2563eb?style=for-the-badge" alt="v2 AgentEnvelope">
35
+ <img src="https://img.shields.io/badge/self--repairing_YAML-f97316?style=for-the-badge" alt="self-repairing YAML">
24
36
 
25
37
  <br><br>
26
38
 
27
- ```
28
- npm install -g @zenalexa/unicli
29
- ```
39
+ <pre><code>npm install -g @zenalexa/unicli
40
+ unicli search "your intent"
41
+ unicli &lt;site&gt; &lt;command&gt; -f json</code></pre>
42
+
43
+ <br>
44
+
45
+ <p align="center">
46
+ <strong>Web / Social / Knowledge</strong><br>
47
+ <img src="https://img.shields.io/badge/X-000000?style=flat-square&logo=x&logoColor=white" alt="X">
48
+ <img src="https://img.shields.io/badge/Reddit-FF4500?style=flat-square&logo=reddit&logoColor=white" alt="Reddit">
49
+ <img src="https://img.shields.io/badge/Instagram-E4405F?style=flat-square&logo=instagram&logoColor=white" alt="Instagram">
50
+ <img src="https://img.shields.io/badge/TikTok-000000?style=flat-square&logo=tiktok&logoColor=white" alt="TikTok">
51
+ <img src="https://img.shields.io/badge/YouTube-FF0000?style=flat-square&logo=youtube&logoColor=white" alt="YouTube">
52
+ <img src="https://img.shields.io/badge/Bilibili-00A1D6?style=flat-square&logo=bilibili&logoColor=white" alt="Bilibili">
53
+ <img src="https://img.shields.io/badge/Zhihu-0084FF?style=flat-square&logo=zhihu&logoColor=white" alt="Zhihu">
54
+ <img src="https://img.shields.io/badge/Weibo-E6162D?style=flat-square&logo=sinaweibo&logoColor=white" alt="Weibo">
55
+ <img src="https://img.shields.io/badge/Xiaohongshu-FF2442?style=flat-square&logoColor=white" alt="Xiaohongshu">
56
+ <img src="https://img.shields.io/badge/Douyin-000000?style=flat-square&logo=tiktok&logoColor=white" alt="Douyin">
57
+ <img src="https://img.shields.io/badge/Hacker%20News-FF6600?style=flat-square&logo=ycombinator&logoColor=white" alt="Hacker News">
58
+ <img src="https://img.shields.io/badge/GitHub-181717?style=flat-square&logo=github&logoColor=white" alt="GitHub">
59
+ <img src="https://img.shields.io/badge/Stack%20Overflow-F58025?style=flat-square&logo=stackoverflow&logoColor=white" alt="Stack Overflow">
60
+ <img src="https://img.shields.io/badge/Product%20Hunt-DA552F?style=flat-square&logo=producthunt&logoColor=white" alt="Product Hunt">
61
+ <img src="https://img.shields.io/badge/npm-CB3837?style=flat-square&logo=npm&logoColor=white" alt="npm">
62
+ <img src="https://img.shields.io/badge/PyPI-3775A9?style=flat-square&logo=pypi&logoColor=white" alt="PyPI">
63
+ <img src="https://img.shields.io/badge/Wikipedia-000000?style=flat-square&logo=wikipedia&logoColor=white" alt="Wikipedia">
64
+ <img src="https://img.shields.io/badge/Spotify-1DB954?style=flat-square&logo=spotify&logoColor=white" alt="Spotify">
65
+ <img src="https://img.shields.io/badge/IMDb-F5C518?style=flat-square&logo=imdb&logoColor=black" alt="IMDb">
66
+ <img src="https://img.shields.io/badge/Bloomberg-000000?style=flat-square&logoColor=white" alt="Bloomberg">
67
+ <img src="https://img.shields.io/badge/Reuters-FF8000?style=flat-square&logo=reuters&logoColor=white" alt="Reuters">
68
+ <img src="https://img.shields.io/badge/BBC-B80000?style=flat-square&logo=bbc&logoColor=white" alt="BBC">
69
+ <img src="https://img.shields.io/badge/Binance-F0B90B?style=flat-square&logo=binance&logoColor=black" alt="Binance">
70
+ <img src="https://img.shields.io/badge/Coinbase-0052FF?style=flat-square&logo=coinbase&logoColor=white" alt="Coinbase">
71
+ <img src="https://img.shields.io/badge/Yahoo%20Finance-6001D2?style=flat-square&logo=yahoo&logoColor=white" alt="Yahoo Finance">
72
+ <img src="https://img.shields.io/badge/Hugging%20Face-FFD21F?style=flat-square&logo=huggingface&logoColor=black" alt="Hugging Face">
73
+ </p>
74
+
75
+ <p align="center">
76
+ <strong>Agent / IDE / Coding Surfaces</strong><br>
77
+ <img src="https://img.shields.io/badge/Claude%20Code-D97757?style=flat-square&logo=anthropic&logoColor=white" alt="Claude Code">
78
+ <img src="https://img.shields.io/badge/Codex-111111?style=flat-square&logo=openai&logoColor=white" alt="Codex">
79
+ <img src="https://img.shields.io/badge/OpenCode-101010?style=flat-square&logoColor=white" alt="OpenCode">
80
+ <img src="https://img.shields.io/badge/Cursor-000000?style=flat-square&logoColor=white" alt="Cursor">
81
+ <img src="https://img.shields.io/badge/Kiro-FF9900?style=flat-square&logo=amazon&logoColor=black" alt="Kiro">
82
+ <img src="https://img.shields.io/badge/Gemini-4285F4?style=flat-square&logo=googlegemini&logoColor=white" alt="Gemini">
83
+ <img src="https://img.shields.io/badge/Qwen-1E88E5?style=flat-square&logoColor=white" alt="Qwen">
84
+ <img src="https://img.shields.io/badge/Kimi-6C5CE7?style=flat-square&logoColor=white" alt="Kimi">
85
+ <img src="https://img.shields.io/badge/MiniMax-00A6FB?style=flat-square&logoColor=white" alt="MiniMax">
86
+ <img src="https://img.shields.io/badge/Cline-6E56CF?style=flat-square&logoColor=white" alt="Cline">
87
+ <img src="https://img.shields.io/badge/Roo%20Code-2E7D32?style=flat-square&logoColor=white" alt="Roo Code">
88
+ <img src="https://img.shields.io/badge/Windsurf-00C2FF?style=flat-square&logoColor=white" alt="Windsurf">
89
+ <img src="https://img.shields.io/badge/Continue-000000?style=flat-square&logoColor=white" alt="Continue">
90
+ <img src="https://img.shields.io/badge/Aider-6F42C1?style=flat-square&logo=python&logoColor=white" alt="Aider">
91
+ <img src="https://img.shields.io/badge/Goose-111827?style=flat-square&logoColor=white" alt="Goose">
92
+ <img src="https://img.shields.io/badge/OpenHands-FF6B00?style=flat-square&logoColor=white" alt="OpenHands">
93
+ <img src="https://img.shields.io/badge/SWE--agent-0F172A?style=flat-square&logoColor=white" alt="SWE-agent">
94
+ <img src="https://img.shields.io/badge/GitHub%20Copilot-181717?style=flat-square&logo=githubcopilot&logoColor=white" alt="GitHub Copilot">
95
+ <img src="https://img.shields.io/badge/Amp-5B5BD6?style=flat-square&logoColor=white" alt="Amp">
96
+ <img src="https://img.shields.io/badge/Auggie-0EA5E9?style=flat-square&logoColor=white" alt="Auggie">
97
+ <img src="https://img.shields.io/badge/Crush-E11D48?style=flat-square&logoColor=white" alt="Crush">
98
+ <img src="https://img.shields.io/badge/AgentAPI-334155?style=flat-square&logoColor=white" alt="AgentAPI">
99
+ <img src="https://img.shields.io/badge/acpx-475569?style=flat-square&logoColor=white" alt="acpx">
100
+ </p>
101
+
102
+ <p align="center">
103
+ <strong>Desktop / Media / DevOps / Cloud</strong><br>
104
+ <img src="https://img.shields.io/badge/macOS-000000?style=flat-square&logo=apple&logoColor=white" alt="macOS">
105
+ <img src="https://img.shields.io/badge/Chrome-4285F4?style=flat-square&logo=googlechrome&logoColor=white" alt="Chrome">
106
+ <img src="https://img.shields.io/badge/Blender-F5792A?style=flat-square&logo=blender&logoColor=white" alt="Blender">
107
+ <img src="https://img.shields.io/badge/FFmpeg-007808?style=flat-square&logo=ffmpeg&logoColor=white" alt="FFmpeg">
108
+ <img src="https://img.shields.io/badge/ImageMagick-0074C1?style=flat-square&logoColor=white" alt="ImageMagick">
109
+ <img src="https://img.shields.io/badge/GIMP-5C5543?style=flat-square&logo=gimp&logoColor=white" alt="GIMP">
110
+ <img src="https://img.shields.io/badge/FreeCAD-729FCF?style=flat-square&logo=freecad&logoColor=white" alt="FreeCAD">
111
+ <img src="https://img.shields.io/badge/Audacity-0000CC?style=flat-square&logo=audacity&logoColor=white" alt="Audacity">
112
+ <img src="https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white" alt="Docker">
113
+ <img src="https://img.shields.io/badge/GitHub%20CLI-181717?style=flat-square&logo=github&logoColor=white" alt="GitHub CLI">
114
+ <img src="https://img.shields.io/badge/jq-C7254E?style=flat-square&logo=json&logoColor=white" alt="jq">
115
+ <img src="https://img.shields.io/badge/yt--dlp-4A5568?style=flat-square&logo=youtube&logoColor=white" alt="yt-dlp">
116
+ <img src="https://img.shields.io/badge/AWS-232F3E?style=flat-square&logo=amazonaws&logoColor=white" alt="AWS">
117
+ <img src="https://img.shields.io/badge/Vercel-000000?style=flat-square&logo=vercel&logoColor=white" alt="Vercel">
118
+ <img src="https://img.shields.io/badge/Supabase-3ECF8E?style=flat-square&logo=supabase&logoColor=black" alt="Supabase">
119
+ <img src="https://img.shields.io/badge/Cloudflare-F38020?style=flat-square&logo=cloudflare&logoColor=white" alt="Cloudflare">
120
+ <img src="https://img.shields.io/badge/Stripe-635BFF?style=flat-square&logo=stripe&logoColor=white" alt="Stripe">
121
+ <img src="https://img.shields.io/badge/Firebase-FFCA28?style=flat-square&logo=firebase&logoColor=black" alt="Firebase">
122
+ <img src="https://img.shields.io/badge/Netlify-00C7B7?style=flat-square&logo=netlify&logoColor=white" alt="Netlify">
123
+ <img src="https://img.shields.io/badge/Railway-0B0D0E?style=flat-square&logo=railway&logoColor=white" alt="Railway">
124
+ <img src="https://img.shields.io/badge/Azure-0078D4?style=flat-square&logo=microsoftazure&logoColor=white" alt="Azure">
125
+ <img src="https://img.shields.io/badge/Google%20Cloud-4285F4?style=flat-square&logo=googlecloud&logoColor=white" alt="Google Cloud">
126
+ <img src="https://img.shields.io/badge/Twilio-F22F46?style=flat-square&logo=twilio&logoColor=white" alt="Twilio">
127
+ <img src="https://img.shields.io/badge/Resend-000000?style=flat-square&logo=resend&logoColor=white" alt="Resend">
128
+ <img src="https://img.shields.io/badge/Algolia-003DFF?style=flat-square&logo=algolia&logoColor=white" alt="Algolia">
129
+ <img src="https://img.shields.io/badge/Slack-4A154B?style=flat-square&logo=slack&logoColor=white" alt="Slack">
130
+ <img src="https://img.shields.io/badge/Notion-000000?style=flat-square&logo=notion&logoColor=white" alt="Notion">
131
+ <img src="https://img.shields.io/badge/Linear-5E6AD2?style=flat-square&logo=linear&logoColor=white" alt="Linear">
132
+ <img src="https://img.shields.io/badge/Figma-F24E1E?style=flat-square&logo=figma&logoColor=white" alt="Figma">
133
+ </p>
134
+
135
+ <table>
136
+ <tr>
137
+ <td><strong>For people</strong><br>Install one binary and use hundreds of sites, apps, CLIs, and OS actions from the terminal.</td>
138
+ <td><strong>For agents</strong><br>Search for a task, run one command, parse one envelope, and repair the YAML when a site changes.</td>
139
+ <td><strong>For maintainers</strong><br>Keep adapters small, readable, testable, and overrideable in <code>~/.unicli/adapters/</code>.</td>
140
+ </tr>
141
+ </table>
30
142
 
31
143
  <br>
32
144
 
@@ -38,7 +150,7 @@ npm install -g @zenalexa/unicli
38
150
 
39
151
  ## What
40
152
 
41
- Uni-CLI is a universal interface that compiles agent intent into deterministic CLI programs. One binary reaches <!-- STATS:site_count -->220<!-- /STATS --> sites, 30+ desktop apps, 35 CLI bridges, and the local OS — <!-- STATS:command_count -->1283<!-- /STATS --> commands in total. Every adapter is a 20-line YAML pipeline, so agents can read, edit, and re-run them without a compiler.
153
+ Uni-CLI is a universal interface that compiles agent intent into deterministic CLI programs. One binary reaches <!-- STATS:site_count -->220<!-- /STATS --> sites, 30+ desktop apps, 58 CLI bridges, and the local OS — <!-- STATS:command_count -->1283<!-- /STATS --> commands in total. Every adapter is a 20-line YAML pipeline, so agents can read, edit, and re-run them without a compiler.
42
154
 
43
155
  Coverage is cross-cutting: web APIs and browser automation, desktop subprocesses (ffmpeg, Blender, LibreOffice), macOS system calls (screenshot, clipboard, Calendar), macOS AX, and a pluggable CUA contract with mock/provider stubs — all behind the same `unicli <site> <command>` surface. Output is a v2 AgentEnvelope in Markdown by default; use `-f json` for JSON, `-f yaml` for YAML, or legacy `csv` / `compact` when needed. Errors include the adapter path, the failing step, and a suggestion — enough directional feedback for an agent to fix the adapter and retry.
44
156
 
@@ -46,9 +158,11 @@ Self-repair is a first-class capability. When a site changes its API, an agent r
46
158
 
47
159
  ## Why
48
160
 
49
- MCP tool catalogs cost 4–35× more tokens per call than an equivalent CLI invocation, and 55K tokens of cold-start tax before the agent touches a tool (Firecrawl, Scalekit, Apideck benchmarks; see [`docs/BENCHMARK.md`](docs/BENCHMARK.md)). Agents perform better with executable programs than with catalogs of tool descriptions. Retrieval-over-catalog research in 2025–2026 (Semantic Tool Discovery, ITR Dynamic Tool Exposure, JSPLIT) reports 95–99% context reduction when tools are fetched on demand.
161
+ Large tool catalogs make agents pay before they act: descriptions, schemas, examples, auth notes, and edge cases all compete with task context. Uni-CLI keeps the catalog out of context by default. The agent searches by intent, receives one executable command, then gets a small v2 envelope with enough structure to retry or repair.
162
+
163
+ The agent stack is not converging on one universal runtime. It is converging on mixed native CLIs, JSON streams, MCP tool buses, editor-owned sessions, bridge control planes, and watchlist runtimes. Uni-CLI treats those as routes, not factions: native CLI/JSON/MCP first, editor gateways only where they are the right compatibility edge.
50
164
 
51
- Uni-CLI is the execution half of that equation. The MCP server exposes 4 meta-tools (~200 tokens cold-start) — `unicli_run`, `unicli_list`, `unicli_search`, `unicli_explore` — and the agent pulls the exact tool it needs via BM25 bilingual search over a 50KB index. The CLI itself costs one subprocess per call.
165
+ Uni-CLI is the execution layer for that world. The MCP server exposes 4 meta-tools (~200 tokens cold-start) — `unicli_run`, `unicli_list`, `unicli_search`, `unicli_explore` — and the agent pulls the exact tool it needs via BM25 bilingual search over a 50KB index. Direct shell access costs no tool-catalog tokens and one deterministic subprocess per call.
52
166
 
53
167
  ## Quick start
54
168
 
@@ -77,28 +191,43 @@ Full walkthrough with 5 worked examples: [`docs/QUICKSTART.md`](docs/QUICKSTART.
77
191
  ## Architecture
78
192
 
79
193
  ```mermaid
80
- graph TB
81
- CMD["unicli &lt;site&gt; &lt;command&gt;"]
82
-
83
- CMD --> ADAPT["Adapter layer<br/><!-- STATS:adapter_count_yaml -->896<!-- /STATS --> YAML · <!-- STATS:adapter_count_ts -->77<!-- /STATS --> TS · 35 bridges"]
84
-
85
- ADAPT --> ENGINE["Pipeline engine — <!-- STATS:pipeline_step_count -->59<!-- /STATS -->+ steps<br/>fetch · navigate · exec · extract · each · if · parallel"]
86
-
87
- ENGINE --> T1["HTTP<br/>(web APIs)"]
88
- ENGINE --> T2["CDP Browser<br/>(raw WebSocket)"]
89
- ENGINE --> T3["Subprocess<br/>(ffmpeg, yt-dlp, gh)"]
90
- ENGINE --> T4["Desktop-AX<br/>(macOS AppleScript)"]
91
- ENGINE --> T5["Desktop-UIA<br/>(Windows declared stub)"]
92
- ENGINE --> T6["Desktop-AT-SPI<br/>(Linux declared stub)"]
93
- ENGINE --> T7["CUA<br/>(contract · mock · provider stubs)"]
94
-
95
- T1 --> OUT["Formatter<br/>md · json · yaml · csv · compact"]
96
- T2 --> OUT
97
- T3 --> OUT
98
- T4 --> OUT
99
- T5 --> OUT
100
- T6 --> OUT
101
- T7 --> OUT
194
+ %%{init: {"theme":"base","themeVariables":{"fontFamily":"Inter, ui-sans-serif, system-ui, sans-serif","primaryColor":"#eef2ff","primaryTextColor":"#111827","primaryBorderColor":"#6366f1","lineColor":"#64748b","secondaryColor":"#ecfeff","tertiaryColor":"#fff7ed"},"flowchart":{"curve":"basis","nodeSpacing":42,"rankSpacing":54}}}%%
195
+ flowchart LR
196
+ Intent["Agent intent<br/><code>推特热门</code> · <code>render scene</code>"]:::entry
197
+ Search["Intent search<br/>BM25 + TF-IDF<br/>50KB bilingual index"]:::core
198
+ Command["One command<br/><code>unicli &lt;site&gt; &lt;command&gt;</code>"]:::core
199
+ Adapter["Adapter layer<br/><!-- STATS:adapter_count_yaml -->896<!-- /STATS --> YAML · <!-- STATS:adapter_count_ts -->77<!-- /STATS --> TS<br/>58 CLI bridges"]:::core
200
+ Engine["Pipeline engine<br/><!-- STATS:pipeline_step_count -->59<!-- /STATS --> steps<br/>fetch · navigate · exec · extract"]:::core
201
+ Envelope["v2 AgentEnvelope<br/>md · json · yaml · csv"]:::out
202
+ Repair["Self-repair loop<br/><code>adapter_path</code> · <code>step</code> · <code>suggestion</code>"]:::repair
203
+
204
+ subgraph Transports["Transport adapters"]
205
+ HTTP["HTTP / APIs"]:::transport
206
+ Browser["CDP browser"]:::transport
207
+ Process["Subprocess CLIs"]:::transport
208
+ Desktop["Desktop AX"]:::transport
209
+ CUA["CUA contract"]:::transport
210
+ end
211
+
212
+ Intent --> Search --> Command --> Adapter --> Engine
213
+ Engine --> HTTP
214
+ Engine --> Browser
215
+ Engine --> Process
216
+ Engine --> Desktop
217
+ Engine --> CUA
218
+ HTTP --> Envelope
219
+ Browser --> Envelope
220
+ Process --> Envelope
221
+ Desktop --> Envelope
222
+ CUA --> Envelope
223
+ Envelope -. failure gives direction .-> Repair
224
+ Repair -. persistent override .-> Adapter
225
+
226
+ classDef entry fill:#111827,color:#ffffff,stroke:#111827,stroke-width:2px;
227
+ classDef core fill:#eef2ff,color:#111827,stroke:#6366f1,stroke-width:1.5px;
228
+ classDef transport fill:#ecfeff,color:#0f172a,stroke:#0891b2,stroke-width:1.2px;
229
+ classDef out fill:#f0fdf4,color:#052e16,stroke:#16a34a,stroke-width:1.5px;
230
+ classDef repair fill:#fff7ed,color:#7c2d12,stroke:#f97316,stroke-width:1.5px;
102
231
  ```
103
232
 
104
233
  Seven TransportAdapters, one adapter layer, one formatter. Adapters are declarative YAML by default (Rice-decidable, no imports) and TypeScript when a site genuinely needs it. The full step reference lives in [`docs/ADAPTER-FORMAT.md`](docs/ADAPTER-FORMAT.md).
@@ -131,13 +260,14 @@ Exit codes follow `sysexits.h`: `0` ok, `66` empty, `69` unavailable, `75` tempo
131
260
  | ------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
132
261
  | **CUA contract** | Stable screenshot/action interface with mock backend and explicit provider stubs; not marketed as real computer-use yet |
133
262
  | **MCP transports** | stdio · Streamable HTTP (spec 2025-11-25) · SSE · OAuth 2.1 PKCE |
134
- | **ACP ready** | `unicli acp` speaks JSON-RPC 2.0 for avante.nvim, Zed, Gemini CLI |
263
+ | **Agent backend matrix** | `unicli agents matrix/recommend` covers native CLIs, JSON streams, MCP sessions, bridges, editors, and watchlist agents |
264
+ | **ACP gateway** | `unicli acp` remains available for avante.nvim/Zed-style clients, not the core runtime |
135
265
  | **Cross-vendor skills** | Skills in `skills/` work in Claude Code, OpenCode, Codex, Cursor, Cline |
136
266
  | **Self-repair envelope** | Every error ships `adapter_path` + `step` + `suggestion` (Banach-convergent) |
137
267
  | **Bilingual search** | BM25 + TF-IDF, 50KB index, <10ms queries, 200-entry ZH↔EN alias table |
138
268
  | **Browser operator** | Extension-backed browser daemon with shared or isolated workspaces, background mode, bind/sessions |
139
269
 
140
- Detailed benchmarks (p50/p95 token cost per category, vs GitHub MCP cold-start): [`docs/BENCHMARK.md`](docs/BENCHMARK.md).
270
+ Reproducible local benchmarks (p50/p95 token and latency by route): [`docs/BENCHMARK.md`](docs/BENCHMARK.md).
141
271
 
142
272
  ## Platform coverage
143
273
 
@@ -152,7 +282,7 @@ Detailed benchmarks (p50/p95 token cost per category, vs GitHub MCP cold-start):
152
282
  | **AI / ML (14)** | huggingface, ollama, replicate, perplexity, deepseek, doubao |
153
283
  | **Desktop (30+)** | blender, ffmpeg, imagemagick, gimp, freecad, musescore, kdenlive |
154
284
  | **macOS system (58)** | screenshot, clipboard, Calendar, Mail, Reminders, Shortcuts, Safari |
155
- | **CLI bridges (35)** | gh, yt-dlp, jq, aws, vercel, supabase, wrangler, stripe |
285
+ | **CLI bridges (58)** | claude, codex, gemini, qwen, kiro, opencode, aider, goose, mini, amp |
156
286
 
157
287
  Run `unicli list` for the live catalog, or `unicli list --category=<domain>` to filter.
158
288
 
@@ -167,11 +297,14 @@ Every major agent platform works out of the box:
167
297
  | **Cursor** | MCP Settings → `unicli` → `npx @zenalexa/unicli mcp serve` | Bilingual search works inside Cursor chat |
168
298
  | **avante.nvim** | `type = "acp", command = "unicli", args = { "acp" }` | See [`docs/AVANTE.md`](docs/AVANTE.md) |
169
299
  | **OpenCode** | MCP via `opencode.jsonc` — `command: "unicli mcp serve"` | AGENTS.md auto-loaded |
170
- | **Cline** | Add MCP server in settings stdio transport | Same 4 meta-tools, 200-token cold start |
300
+ | **Kiro CLI** | Add `npx @zenalexa/unicli mcp serve` as an MCP server | Amazon Q CLI successor path |
301
+ | **Cline / Roo** | Add Uni-CLI in MCP settings | Editor owns the session |
171
302
 
172
303
  Direct shell access (any agent with Bash or exec):
173
304
 
174
305
  ```bash
306
+ unicli agents matrix
307
+ unicli agents recommend cursor
175
308
  unicli twitter search "AI agents"
176
309
  unicli blender render scene.blend --output /tmp/frame.png
177
310
  unicli macos screenshot --region 0,0,1920,1080
@@ -245,7 +378,7 @@ unicli test <site> # Validate
245
378
  unicli record <url> # Auto-generate adapter from traffic
246
379
  ```
247
380
 
248
- Full reference: [`docs/ADAPTER-FORMAT.md`](docs/ADAPTER-FORMAT.md). Migrating from OpenCLI: [`docs/MIGRATING-FROM-OPENCLI.md`](docs/MIGRATING-FROM-OPENCLI.md) and the one-shot `unicli import opencli-yaml`.
381
+ Full reference: [`docs/ADAPTER-FORMAT.md`](docs/ADAPTER-FORMAT.md). Existing YAML adapters can be imported with `unicli import opencli-yaml`.
249
382
 
250
383
  ## Search
251
384
 
@@ -260,9 +393,9 @@ unicli search --category finance # browse by category
260
393
 
261
394
  BM25 + TF-IDF scoring with a 200-entry ZH↔EN alias table. The index is 50KB, queries complete in under 10ms.
262
395
 
263
- ## Theory + benchmarks
396
+ ## Design principles + benchmarks
264
397
 
265
- The design rests on five principles, each tied to a citation in [`docs/refs.bib`](docs/refs.bib):
398
+ The design rests on five operational principles:
266
399
 
267
400
  1. **Rice's restriction** — every adapter has decidable semantics (YAML pipeline, no Turing-complete logic).
268
401
  2. **Lehman's mandate** — no adapter is permanent; self-repair is first-class.
@@ -270,7 +403,7 @@ The design rests on five principles, each tied to a citation in [`docs/refs.bib`
270
403
  4. **Agent tool trilemma (original)** — coverage × accuracy × performance, pick two. We choose accuracy × performance.
271
404
  5. **Banach convergence** — structured errors must provide directional feedback (`adapter_path` + `step` + `suggestion`) so repair iterations converge.
272
405
 
273
- Full treatment with 42 citations: [`docs/THEORY.md`](docs/THEORY.md). Reproducible benchmarks comparing Uni-CLI to GitHub MCP and Firecrawl MCP: [`docs/BENCHMARK.md`](docs/BENCHMARK.md).
406
+ Full treatment: [`docs/THEORY.md`](docs/THEORY.md). Reproducible local benchmarks: [`docs/BENCHMARK.md`](docs/BENCHMARK.md).
274
407
 
275
408
  ## Development
276
409
 
@@ -286,7 +419,7 @@ npm run verify # typecheck + lint + test + build + stats check
286
419
  | `npm run build` | Production build |
287
420
  | `npm run typecheck` | TypeScript strict |
288
421
  | `npm run lint` | Oxlint |
289
- | `npm run test` | Unit tests (<!-- STATS:test_count -->7145<!-- /STATS -->) |
422
+ | `npm run test` | Unit tests (<!-- STATS:test_count -->7160<!-- /STATS -->) |
290
423
  | `npm run test:adapter` | Validate all adapters |
291
424
  | `npm run verify` | Full pipeline (7 gates) |
292
425
 
@@ -329,6 +462,5 @@ Repo: <https://github.com/olo-dot-io/Uni-CLI> · npm: [`@zenalexa/unicli`](https
329
462
  </p>
330
463
 
331
464
  <p align="center">
332
- <sub>v0.215.0 — Closed Adapter Loop</sub><br>
333
- <sub><!-- STATS:site_count -->220<!-- /STATS --> sites · <!-- STATS:command_count -->1283<!-- /STATS --> commands · <!-- STATS:pipeline_step_count -->59<!-- /STATS --> pipeline steps · BM25+TF-IDF bilingual search · MCP 2025-11-25 · <!-- STATS:test_count -->7145<!-- /STATS --> tests</sub>
465
+ <sub>v0.215.1</sub>
334
466
  </p>