@zenalexa/unicli 0.209.0 → 0.210.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.
Files changed (325) hide show
  1. package/AGENTS.md +56 -15
  2. package/README.md +228 -278
  3. package/dist/adapters/cursor/cursor.d.ts +2 -1
  4. package/dist/adapters/cursor/cursor.d.ts.map +1 -1
  5. package/dist/adapters/cursor/cursor.js +87 -1
  6. package/dist/adapters/cursor/cursor.js.map +1 -1
  7. package/dist/adapters/discord-app/discord-app.d.ts +1 -1
  8. package/dist/adapters/discord-app/discord-app.js +94 -1
  9. package/dist/adapters/discord-app/discord-app.js.map +1 -1
  10. package/dist/browser/bridge.d.ts +45 -0
  11. package/dist/browser/bridge.d.ts.map +1 -1
  12. package/dist/browser/bridge.js +94 -1
  13. package/dist/browser/bridge.js.map +1 -1
  14. package/dist/browser/cdp-client.d.ts +24 -1
  15. package/dist/browser/cdp-client.d.ts.map +1 -1
  16. package/dist/browser/cdp-client.js +56 -2
  17. package/dist/browser/cdp-client.js.map +1 -1
  18. package/dist/browser/launcher.d.ts +5 -0
  19. package/dist/browser/launcher.d.ts.map +1 -1
  20. package/dist/browser/launcher.js +7 -0
  21. package/dist/browser/launcher.js.map +1 -1
  22. package/dist/cli.d.ts.map +1 -1
  23. package/dist/cli.js +67 -2
  24. package/dist/cli.js.map +1 -1
  25. package/dist/commands/browser.d.ts.map +1 -1
  26. package/dist/commands/browser.js +79 -1
  27. package/dist/commands/browser.js.map +1 -1
  28. package/dist/commands/ext.d.ts +11 -0
  29. package/dist/commands/ext.d.ts.map +1 -0
  30. package/dist/commands/ext.js +122 -0
  31. package/dist/commands/ext.js.map +1 -0
  32. package/dist/commands/skills.d.ts +2 -3
  33. package/dist/commands/skills.d.ts.map +1 -1
  34. package/dist/commands/skills.js +2 -3
  35. package/dist/commands/skills.js.map +1 -1
  36. package/dist/commands/status.d.ts +12 -0
  37. package/dist/commands/status.d.ts.map +1 -0
  38. package/dist/commands/status.js +137 -0
  39. package/dist/commands/status.js.map +1 -0
  40. package/dist/engine/yaml-runner.d.ts +10 -0
  41. package/dist/engine/yaml-runner.d.ts.map +1 -1
  42. package/dist/engine/yaml-runner.js +51 -3
  43. package/dist/engine/yaml-runner.js.map +1 -1
  44. package/dist/hub/index.d.ts +37 -0
  45. package/dist/hub/index.d.ts.map +1 -0
  46. package/dist/hub/index.js +98 -0
  47. package/dist/hub/index.js.map +1 -0
  48. package/dist/hub/passthrough.d.ts +21 -0
  49. package/dist/hub/passthrough.d.ts.map +1 -0
  50. package/dist/hub/passthrough.js +71 -0
  51. package/dist/hub/passthrough.js.map +1 -0
  52. package/dist/manifest.json +1770 -64
  53. package/dist/types.d.ts +15 -0
  54. package/dist/types.d.ts.map +1 -1
  55. package/dist/types.js.map +1 -1
  56. package/package.json +2 -1
  57. package/src/adapters/36kr/latest.yaml +36 -0
  58. package/src/adapters/arxiv/trending.yaml +37 -0
  59. package/src/adapters/baidu/hot.yaml +37 -0
  60. package/src/adapters/baidu/search.yaml +41 -0
  61. package/src/adapters/bbc/technology.yaml +26 -0
  62. package/src/adapters/bbc/top.yaml +26 -0
  63. package/src/adapters/bbc/world.yaml +26 -0
  64. package/src/adapters/bilibili/coin.yaml +33 -0
  65. package/src/adapters/bilibili/later.yaml +31 -0
  66. package/src/adapters/bilibili/live.yaml +41 -0
  67. package/src/adapters/bilibili/trending.yaml +29 -0
  68. package/src/adapters/binance/hot.yaml +39 -0
  69. package/src/adapters/binance/kline.yaml +35 -0
  70. package/src/adapters/binance/ticker.yaml +33 -0
  71. package/src/adapters/bluesky/likes.yaml +35 -0
  72. package/src/adapters/bluesky/notifications.yaml +30 -0
  73. package/src/adapters/bluesky/post.yaml +25 -0
  74. package/src/adapters/chrome/bookmarks.yaml +26 -0
  75. package/src/adapters/chrome/tabs.yaml +25 -0
  76. package/src/adapters/cnki/search.yaml +40 -0
  77. package/src/adapters/cnn/technology.yaml +26 -0
  78. package/src/adapters/cocoapods/info.yaml +33 -0
  79. package/src/adapters/coinbase/prices.yaml +27 -0
  80. package/src/adapters/coinbase/rates.yaml +24 -0
  81. package/src/adapters/coupang/hot.yaml +29 -0
  82. package/src/adapters/crates-io/info.yaml +29 -0
  83. package/src/adapters/crates-io/versions.yaml +33 -0
  84. package/src/adapters/ctrip/hot.yaml +28 -0
  85. package/src/adapters/cursor/cursor.ts +91 -1
  86. package/src/adapters/dangdang/hot.yaml +38 -0
  87. package/src/adapters/dangdang/search.yaml +43 -0
  88. package/src/adapters/deepseek/chat.yaml +33 -0
  89. package/src/adapters/deepseek/models.yaml +18 -0
  90. package/src/adapters/devto/latest.yaml +29 -0
  91. package/src/adapters/devto/search.yaml +34 -0
  92. package/src/adapters/dianping/hot.yaml +43 -0
  93. package/src/adapters/dianping/search.yaml +48 -0
  94. package/src/adapters/discord-app/discord-app.ts +99 -1
  95. package/src/adapters/docker/networks.yaml +20 -0
  96. package/src/adapters/docker/volumes.yaml +19 -0
  97. package/src/adapters/docker-hub/info.yaml +26 -0
  98. package/src/adapters/docker-hub/tags.yaml +34 -0
  99. package/src/adapters/douban/group-hot.yaml +29 -0
  100. package/src/adapters/douban/new-movies.yaml +32 -0
  101. package/src/adapters/douban/tv-hot.yaml +32 -0
  102. package/src/adapters/doubao/ask.yaml +64 -0
  103. package/src/adapters/doubao/new.yaml +18 -0
  104. package/src/adapters/doubao/status.yaml +21 -0
  105. package/src/adapters/douyu/hot.yaml +34 -0
  106. package/src/adapters/douyu/search.yaml +42 -0
  107. package/src/adapters/eastmoney/fund.yaml +36 -0
  108. package/src/adapters/eastmoney/market.yaml +26 -0
  109. package/src/adapters/ele/hot.yaml +40 -0
  110. package/src/adapters/ele/search.yaml +47 -0
  111. package/src/adapters/exchangerate/list.yaml +25 -0
  112. package/src/adapters/facebook/marketplace.yaml +43 -0
  113. package/src/adapters/facebook/post.yaml +29 -0
  114. package/src/adapters/futu/hot.yaml +49 -0
  115. package/src/adapters/futu/quote.yaml +46 -0
  116. package/src/adapters/gitee/repos.yaml +34 -0
  117. package/src/adapters/github-trending/developers.yaml +33 -0
  118. package/src/adapters/github-trending/weekly.yaml +34 -0
  119. package/src/adapters/gitlab/projects.yaml +34 -0
  120. package/src/adapters/godot/scene-export.yaml +1 -1
  121. package/src/adapters/hackernews/comments.yaml +36 -0
  122. package/src/adapters/hackernews/item.yaml +28 -0
  123. package/src/adapters/hf/datasets.yaml +34 -0
  124. package/src/adapters/hf/spaces.yaml +34 -0
  125. package/src/adapters/homebrew/search.yaml +27 -0
  126. package/src/adapters/huggingface-papers/search.yaml +33 -0
  127. package/src/adapters/imdb/box-office.yaml +28 -0
  128. package/src/adapters/infoq/latest.yaml +26 -0
  129. package/src/adapters/instagram/activity.yaml +45 -0
  130. package/src/adapters/instagram/highlights.yaml +48 -0
  131. package/src/adapters/instagram/reels-trending.yaml +51 -0
  132. package/src/adapters/instagram/reels.yaml +34 -0
  133. package/src/adapters/instagram/stories.yaml +29 -0
  134. package/src/adapters/instagram/suggested.yaml +40 -0
  135. package/src/adapters/instagram/tags.yaml +52 -0
  136. package/src/adapters/itch-io/search.yaml +35 -0
  137. package/src/adapters/itch-io/top.yaml +31 -0
  138. package/src/adapters/ithome/hot.yaml +27 -0
  139. package/src/adapters/ithome/latest.yaml +26 -0
  140. package/src/adapters/jianyu/search.yaml +42 -0
  141. package/src/adapters/ke/ershoufang.yaml +75 -0
  142. package/src/adapters/ke/xiaoqu.yaml +73 -0
  143. package/src/adapters/kuaishou/hot.yaml +39 -0
  144. package/src/adapters/kuaishou/search.yaml +44 -0
  145. package/src/adapters/linkedin/jobs.yaml +47 -0
  146. package/src/adapters/lobsters/search.yaml +35 -0
  147. package/src/adapters/macos/active-app.yaml +16 -0
  148. package/src/adapters/macos/apps-list.yaml +14 -0
  149. package/src/adapters/macos/apps.yaml +31 -0
  150. package/src/adapters/macos/battery.yaml +26 -0
  151. package/src/adapters/macos/bluetooth.yaml +14 -0
  152. package/src/adapters/macos/brightness.yaml +22 -0
  153. package/src/adapters/macos/caffeinate.yaml +25 -0
  154. package/src/adapters/macos/calendar-create.yaml +81 -0
  155. package/src/adapters/macos/calendar-list.yaml +53 -0
  156. package/src/adapters/macos/calendar-today.yaml +30 -0
  157. package/src/adapters/macos/clipboard.yaml +23 -0
  158. package/src/adapters/macos/contacts-search.yaml +59 -0
  159. package/src/adapters/macos/dark-mode.yaml +19 -0
  160. package/src/adapters/macos/disk-info.yaml +31 -0
  161. package/src/adapters/macos/disk-usage.yaml +14 -0
  162. package/src/adapters/macos/do-not-disturb.yaml +21 -0
  163. package/src/adapters/macos/empty-trash.yaml +16 -0
  164. package/src/adapters/macos/finder-recent.yaml +24 -0
  165. package/src/adapters/macos/finder-selection.yaml +22 -0
  166. package/src/adapters/macos/finder-tags.yaml +40 -0
  167. package/src/adapters/macos/lock-screen.yaml +16 -0
  168. package/src/adapters/macos/mail-send.yaml +54 -0
  169. package/src/adapters/macos/mail-status.yaml +38 -0
  170. package/src/adapters/macos/messages-send.yaml +42 -0
  171. package/src/adapters/macos/music-control.yaml +43 -0
  172. package/src/adapters/macos/music-now.yaml +34 -0
  173. package/src/adapters/macos/notes-list.yaml +30 -0
  174. package/src/adapters/macos/notes-search.yaml +45 -0
  175. package/src/adapters/macos/notification.yaml +27 -0
  176. package/src/adapters/macos/notify.yaml +46 -0
  177. package/src/adapters/macos/open-app.yaml +21 -0
  178. package/src/adapters/macos/open.yaml +24 -0
  179. package/src/adapters/macos/photos-search.yaml +44 -0
  180. package/src/adapters/macos/processes.yaml +14 -0
  181. package/src/adapters/macos/reminder-create.yaml +75 -0
  182. package/src/adapters/macos/reminders-complete.yaml +33 -0
  183. package/src/adapters/macos/reminders-list.yaml +28 -0
  184. package/src/adapters/macos/safari-tabs.yaml +26 -0
  185. package/src/adapters/macos/say.yaml +36 -0
  186. package/src/adapters/macos/screen-lock.yaml +16 -0
  187. package/src/adapters/macos/screenshot.yaml +34 -0
  188. package/src/adapters/macos/shortcuts-list.yaml +14 -0
  189. package/src/adapters/macos/shortcuts-run.yaml +28 -0
  190. package/src/adapters/macos/sleep.yaml +14 -0
  191. package/src/adapters/macos/spotlight.yaml +43 -0
  192. package/src/adapters/macos/system-info.yaml +32 -0
  193. package/src/adapters/macos/trash.yaml +32 -0
  194. package/src/adapters/macos/uptime.yaml +14 -0
  195. package/src/adapters/macos/volume.yaml +19 -0
  196. package/src/adapters/macos/wifi-info.yaml +14 -0
  197. package/src/adapters/macos/wifi.yaml +63 -0
  198. package/src/adapters/maimai/search.yaml +62 -0
  199. package/src/adapters/maoyan/hot.yaml +33 -0
  200. package/src/adapters/maoyan/search.yaml +40 -0
  201. package/src/adapters/mastodon/timeline.yaml +33 -0
  202. package/src/adapters/mastodon/user.yaml +32 -0
  203. package/src/adapters/medium/article.yaml +22 -0
  204. package/src/adapters/medium/trending.yaml +30 -0
  205. package/src/adapters/meituan/hot.yaml +26 -0
  206. package/src/adapters/mubu/list.yaml +36 -0
  207. package/src/adapters/mubu/search.yaml +54 -0
  208. package/src/adapters/netease-music/playlist.yaml +34 -0
  209. package/src/adapters/netease-music/top.yaml +33 -0
  210. package/src/adapters/notion/databases.yaml +41 -0
  211. package/src/adapters/notion/pages.yaml +44 -0
  212. package/src/adapters/notion/search.yaml +41 -0
  213. package/src/adapters/npm/downloads.yaml +28 -0
  214. package/src/adapters/npm/info.yaml +25 -0
  215. package/src/adapters/npm/search.yaml +35 -0
  216. package/src/adapters/npm/versions.yaml +33 -0
  217. package/src/adapters/npm-trends/trending.yaml +17 -0
  218. package/src/adapters/nytimes/search.yaml +35 -0
  219. package/src/adapters/obsidian/daily.yaml +23 -0
  220. package/src/adapters/obsidian/open.yaml +26 -0
  221. package/src/adapters/obsidian/search.yaml +28 -0
  222. package/src/adapters/ollama/generate.yaml +33 -0
  223. package/src/adapters/ollama/models.yaml +29 -0
  224. package/src/adapters/ollama/ps.yaml +20 -0
  225. package/src/adapters/openrouter/search.yaml +31 -0
  226. package/src/adapters/perplexity/ask.yaml +33 -0
  227. package/src/adapters/pexels/curated.yaml +31 -0
  228. package/src/adapters/pinduoduo/search.yaml +36 -0
  229. package/src/adapters/producthunt/search.yaml +41 -0
  230. package/src/adapters/pypi/search.yaml +37 -0
  231. package/src/adapters/pypi/versions.yaml +31 -0
  232. package/src/adapters/quark/ls.yaml +39 -0
  233. package/src/adapters/quark/search.yaml +39 -0
  234. package/src/adapters/qweather/forecast.yaml +37 -0
  235. package/src/adapters/reddit/new.yaml +34 -0
  236. package/src/adapters/reddit/rising.yaml +33 -0
  237. package/src/adapters/reddit/top.yaml +40 -0
  238. package/src/adapters/reddit/trending.yaml +25 -0
  239. package/src/adapters/replicate/run.yaml +39 -0
  240. package/src/adapters/reuters/latest.yaml +26 -0
  241. package/src/adapters/sinafinance/market.yaml +21 -0
  242. package/src/adapters/slack/messages.yaml +41 -0
  243. package/src/adapters/slack/post.yaml +32 -0
  244. package/src/adapters/slack/search.yaml +28 -0
  245. package/src/adapters/slack/send.yaml +35 -0
  246. package/src/adapters/slack/status.yaml +19 -0
  247. package/src/adapters/slack/users.yaml +37 -0
  248. package/src/adapters/slock/servers.yaml +32 -0
  249. package/src/adapters/spotify/now-playing.yaml +28 -0
  250. package/src/adapters/spotify/playlists.yaml +37 -0
  251. package/src/adapters/spotify/top-tracks.yaml +42 -0
  252. package/src/adapters/stackoverflow/question.yaml +34 -0
  253. package/src/adapters/stackoverflow/tags.yaml +30 -0
  254. package/src/adapters/steam/app-details.yaml +32 -0
  255. package/src/adapters/steam/new-releases.yaml +28 -0
  256. package/src/adapters/steam/search.yaml +36 -0
  257. package/src/adapters/steam/specials.yaml +29 -0
  258. package/src/adapters/steam/wishlist.yaml +36 -0
  259. package/src/adapters/substack/trending.yaml +28 -0
  260. package/src/adapters/taobao/hot.yaml +31 -0
  261. package/src/adapters/taobao/search.yaml +44 -0
  262. package/src/adapters/techcrunch/search.yaml +33 -0
  263. package/src/adapters/theverge/search.yaml +33 -0
  264. package/src/adapters/threads/hot.yaml +44 -0
  265. package/src/adapters/threads/search.yaml +47 -0
  266. package/src/adapters/tiktok/trending.yaml +28 -0
  267. package/src/adapters/toutiao/hot.yaml +31 -0
  268. package/src/adapters/toutiao/search.yaml +47 -0
  269. package/src/adapters/twitch/games.yaml +31 -0
  270. package/src/adapters/twitch/search.yaml +39 -0
  271. package/src/adapters/twitch/streams.yaml +38 -0
  272. package/src/adapters/twitter/lists.yaml +49 -0
  273. package/src/adapters/twitter/media.yaml +48 -0
  274. package/src/adapters/twitter/mentions.yaml +38 -0
  275. package/src/adapters/twitter/mute.yaml +42 -0
  276. package/src/adapters/twitter/pin.yaml +43 -0
  277. package/src/adapters/twitter/quotes.yaml +43 -0
  278. package/src/adapters/twitter/retweets.yaml +44 -0
  279. package/src/adapters/twitter/spaces.yaml +43 -0
  280. package/src/adapters/twitter/unmute.yaml +42 -0
  281. package/src/adapters/unsplash/random.yaml +27 -0
  282. package/src/adapters/v2ex/search.yaml +36 -0
  283. package/src/adapters/vscode/extensions.yaml +23 -0
  284. package/src/adapters/vscode/install-ext.yaml +26 -0
  285. package/src/adapters/vscode/open.yaml +25 -0
  286. package/src/adapters/wechat-channels/hot.yaml +39 -0
  287. package/src/adapters/wechat-channels/search.yaml +57 -0
  288. package/src/adapters/weibo/trending.yaml +28 -0
  289. package/src/adapters/weixin/hot.yaml +22 -0
  290. package/src/adapters/wikipedia/today.yaml +25 -0
  291. package/src/adapters/xiaohongshu/follow.yaml +35 -0
  292. package/src/adapters/xiaohongshu/hashtag.yaml +44 -0
  293. package/src/adapters/xiaohongshu/hot.yaml +34 -0
  294. package/src/adapters/xiaohongshu/like.yaml +27 -0
  295. package/src/adapters/xiaohongshu/profile.yaml +39 -0
  296. package/src/adapters/xiaohongshu/save.yaml +27 -0
  297. package/src/adapters/xiaohongshu/suggest.yaml +34 -0
  298. package/src/adapters/xiaohongshu/trending.yaml +35 -0
  299. package/src/adapters/xiaohongshu/unfollow.yaml +40 -0
  300. package/src/adapters/xueqiu/market.yaml +25 -0
  301. package/src/adapters/yahoo-finance/quote.yaml +35 -0
  302. package/src/adapters/yahoo-finance/search.yaml +42 -0
  303. package/src/adapters/yahoo-finance/trending.yaml +30 -0
  304. package/src/adapters/youtube/playlist.yaml +43 -0
  305. package/src/adapters/youtube/shorts.yaml +42 -0
  306. package/src/adapters/youtube/trending.yaml +41 -0
  307. package/src/adapters/zhihu/answer.yaml +29 -0
  308. package/src/adapters/zhihu/answers.yaml +38 -0
  309. package/src/adapters/zhihu/article.yaml +27 -0
  310. package/src/adapters/zhihu/articles.yaml +38 -0
  311. package/src/adapters/zhihu/collections.yaml +37 -0
  312. package/src/adapters/zhihu/columns.yaml +38 -0
  313. package/src/adapters/zhihu/comment.yaml +42 -0
  314. package/src/adapters/zhihu/followers.yaml +37 -0
  315. package/src/adapters/zhihu/following.yaml +37 -0
  316. package/src/adapters/zhihu/pins.yaml +37 -0
  317. package/src/adapters/zhihu/topic.yaml +35 -0
  318. package/src/adapters/zhihu/topics.yaml +37 -0
  319. package/src/adapters/zhihu/trending.yaml +36 -0
  320. package/src/adapters/zhihu/user.yaml +30 -0
  321. package/src/adapters/zoom/join.yaml +24 -0
  322. package/src/adapters/zoom/start.yaml +17 -0
  323. package/src/hub/external-clis.yaml +343 -0
  324. package/src/hub/index.ts +128 -0
  325. package/src/hub/passthrough.ts +85 -0
package/README.md CHANGED
@@ -1,342 +1,286 @@
1
- <!-- AGENT: npm install -g @zenalexa/unicli && unicli list | 756 commands across 167 sites. JSON when piped. Self-repairing YAML adapters. unicli repair --loop for autonomous fix. unicli research for self-improvement. See AGENTS.md -->
1
+ <!-- AGENT: npm install -g @zenalexa/unicli && unicli list | 957 commands across 195 sites. JSON when piped. Self-repairing YAML adapters. unicli repair --loop for autonomous fix. See AGENTS.md -->
2
2
 
3
3
  <h1 align="center">Uni-CLI</h1>
4
4
 
5
5
  <p align="center">
6
- <strong>The universal interface between AI agents and the world's software.</strong>
6
+ <strong>CLI is all agents need.</strong><br>
7
+ <sub>One command to control any website, desktop app, or local tool — with structured JSON output and self-repairing adapters.</sub>
7
8
  </p>
8
9
 
9
10
  <p align="center">
10
- <a href="https://www.npmjs.com/package/@zenalexa/unicli"><img src="https://img.shields.io/npm/v/@zenalexa/unicli?style=flat-square" alt="npm"></a>
11
- <a href="https://nodejs.org"><img src="https://img.shields.io/node/v/@zenalexa/unicli?style=flat-square" alt="Node.js"></a>
12
- <a href="./LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue?style=flat-square" alt="Apache-2.0"></a>
11
+ <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>
12
+ <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>
13
+ <a href="https://www.npmjs.com/package/@zenalexa/unicli"><img src="https://img.shields.io/npm/dm/@zenalexa/unicli?style=flat-square" alt="downloads"></a>
14
+ <a href="https://nodejs.org"><img src="https://img.shields.io/node/v/@zenalexa/unicli?style=flat-square&color=339933" alt="node"></a>
15
+ <a href="./LICENSE"><img src="https://img.shields.io/github/license/olo-dot-io/Uni-CLI?style=flat-square" alt="license"></a>
16
+ <img src="https://img.shields.io/badge/TypeScript-strict-3178C6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript">
13
17
  </p>
14
18
 
15
19
  <p align="center">
16
- 167 sites · 756 commands · 35 pipeline steps · 29 template filters · Zero runtime dependencies beyond Node.js
20
+ <code>npm install -g @zenalexa/unicli</code>
17
21
  </p>
18
22
 
19
23
  ---
20
24
 
21
- Agents cannot draw in SolidWorks. Cannot design PCBs. Cannot run CFD simulations. Cannot send Outlook emails. Cannot access most websites.
22
-
23
- Uni-CLI fixes this. One command, structured JSON output, self-repairing YAML adapters. **~80 tokens per invocation** — two orders of magnitude cheaper than MCP.
24
-
25
25
  ```bash
26
- npm install -g @zenalexa/unicli
27
- unicli hackernews top --limit 5 # Public API
28
- unicli bilibili hot # Chinese platform
29
- unicli twitter search "AI agents" # Authenticated
30
- unicli blender render scene.blend # Desktop software
31
- unicli cursor ask "explain this code" # Electron app
26
+ unicli hackernews top --limit 5 # Hacker News front page
27
+ unicli twitter search "AI agents" # Twitter (authenticated)
28
+ unicli bilibili hot # Bilibili trending
29
+ unicli blender render scene.blend # Render a 3D scene
30
+ unicli cursor ask "explain this code" # Talk to Cursor IDE
31
+ unicli notion search "meeting notes" # Search Notion
32
+ unicli obs scene set "Camera 2" # Switch OBS scene
33
+ unicli ffmpeg compress video.mp4 # Compress video
32
34
  ```
33
35
 
34
- ## Compared to
36
+ Every command outputs **structured JSON when piped** — zero flags needed. Every error emits structured JSON to stderr with the adapter path, the failing step, and a fix suggestion. **~80 tokens per call.**
35
37
 
36
- > Source-level honest comparison. Numbers are from a 2026-04-07 audit of cloned reference repos under `ref/`. Full breakdown in [docs/COMPARE.md](./docs/COMPARE.md).
38
+ ## Key Ideas
37
39
 
38
- | Project | Shape | Best when | Where Uni-CLI fits |
39
- | ----------------------------- | ---------------------------------- | ----------------------------------- | ---------------------------------------------------- |
40
- | **opencli** (14K) | TypeScript adapter hub | The genome — Uni-CLI extends it | Uni-CLI = 35 pipeline steps vs 15, +eval, +repair |
41
- | **CLI-Anything** (29K, HKUDS) | Python adapter hub + skill gen | Desktop-app coverage (44 harnesses) | Uni-CLI = 167 sites web breadth, single-binary |
42
- | **browser-use** (86K) | Python library, LLM per step | Open-ended browser tasks | Different shape — embed vs invoke |
43
- | **goose** (38K, MCP-first) | MCP-host runtime | MCP-only environments | `unicli mcp serve` mounts as MCP server |
44
- | **hermes-agent** (30K) | Agent w/ memory + multi-platform | Long-running personal agent | Different category — hermes is agent, Uni-CLI = tool |
45
- | **Stagehand** | Browser-only `observe/act/extract` | Vision-grounded web tasks | Uni-CLI v0.209 ships `unicli operate observe` |
40
+ **Universal** 195 sites, 30+ desktop apps, 8 Electron apps, 35 CLI bridges, 30 macOS system commands. One interface: `unicli <site> <command>`.
46
41
 
47
- ## Why CLI
42
+ **Self-repairing** When a site changes its API, the agent reads the ~20 line YAML adapter, fixes it, retries. No human in the loop. Fixes persist across updates.
48
43
 
49
- | Criterion | MCP | CLI (Uni-CLI) |
50
- | ------------------- | --------------------------------------- | ---------------------------------------- |
51
- | Cost per invocation | 550–1,400 tokens (tool definition) | ~80 tokens |
52
- | Context overhead | 3 servers = 72% of 200K window consumed | Zero |
53
- | Composability | Single-tool calls | Unix pipes, `jq`, shell scripts |
54
- | Self-repair | Agents cannot read server source | Agent reads 20-line YAML, edits, retries |
55
- | Universality | Requires MCP client support | Every agent has Bash |
56
- | Auth reuse | Per-server configuration | Chrome login sessions via daemon |
44
+ **Agent-native** Piped output auto-switches to JSON. Errors are machine-parseable. Exit codes follow `sysexits.h`. The agent doesn't need flags or special handling.
57
45
 
58
- CLI is: universal, composable, self-repairable, and context-efficient. MCP is a protocol for tool registration. **They solve different problems.** Uni-CLI supports both use `unicli mcp` for MCP-only environments.
46
+ **Cheap** ~80 tokens per CLI invocation vs 550–1,400 tokens for an MCP tool definition. Two orders of magnitude cheaper in context window cost.
59
47
 
60
- ## Architecture
48
+ ## Self-Repair
49
+
50
+ The core differentiator. When a command breaks, agents fix it themselves:
61
51
 
52
+ ```mermaid
53
+ flowchart LR
54
+ A["unicli site cmd\n❌ fails"] --> B["Structured error\n{adapter_path, step, suggestion}"]
55
+ B --> C["Agent reads\n20-line YAML"]
56
+ C --> D["Agent edits\nthe adapter"]
57
+ D --> E["unicli site cmd\n✅ works"]
58
+ E --> F["Fix persists in\n~/.unicli/adapters/"]
62
59
  ```
63
- unicli <site> <command> [args]
64
-
65
- ┌───────────────┼───────────────┐
66
- ▼ ▼ ▼
67
- YAML Adapter TS Adapter Bridge (passthrough)
68
- (20 lines) (complex logic) (gh, docker, vercel)
69
- │ │ │
70
- ▼ ▼ ▼
71
- ┌─────────────────────────────────────────┐
72
- │ Pipeline Engine (30 steps) │
73
- │ fetch · navigate · evaluate · click │
74
- │ type · press · scroll · wait · tap │
75
- │ intercept · snapshot · download │
76
- │ websocket · exec · write_temp · ... │
77
- └─────────┬───────────────┬───────────────┘
78
- │ │
79
- ┌─────────▼─────┐ ┌───────▼───────┐
80
- │ Direct CDP │ │ Daemon │
81
- │ (fast, local)│ │ (persistent, │
82
- │ │ │ reuses Chrome │
83
- │ │ │ login state) │
84
- └───────────────┘ └───────────────┘
85
- │ │
86
- ┌─────────▼───────────────▼───────┐
87
- │ Output Formatter │
88
- │ table · json · yaml · csv · md │
89
- │ (auto-JSON when piped) │
90
- └─────────────────────────────────┘
60
+
61
+ ```bash
62
+ unicli repair hackernews top # Diagnose + suggest fix
63
+ unicli test hackernews # Validate adapter
64
+ unicli repair --loop # Autonomous fix loop
91
65
  ```
92
66
 
93
- ## Self-Repair
67
+ Fixes are saved to `~/.unicli/adapters/` and survive `npm update`.
94
68
 
95
- This is the core differentiator. When a command fails:
69
+ ## Coverage
96
70
 
97
- ```
98
- unicli <site> <cmd> fails
99
- → structured error JSON: { adapter_path, step, action, suggestion }
100
- agent reads the 20-line YAML at that path
101
- agent edits the YAML (selector changed, API versioned, auth rotated)
102
- agent retries fixed
103
- fix persists in ~/.unicli/adapters/ (survives npm update)
71
+ <details open>
72
+ <summary><strong>Web Platforms — 95 sites</strong></summary>
73
+
74
+ | Category | Sites |
75
+ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
76
+ | **Tech / Dev** | hackernews, stackoverflow, devto, lobsters, producthunt, hf, github-trending, substack, lesswrong, npm, pypi, crates-io, cocoapods, homebrew, gitlab, gitee, npm-trends, ollama |
77
+ | **Social** | twitter (35 cmds), reddit (20), instagram (24), tiktok (15), facebook (10), bluesky (12), medium, threads |
78
+ | **Chinese Social** | bilibili (18), weibo, zhihu (20), xiaohongshu (24), douyin (13), jike, douban, weread, tieba, v2ex, linux-do, zsxq, xiaoyuzhou, baidu, toutiao |
79
+ | **Video / Media** | youtube (5), bilibili, douyin, tiktok, kuaishou, douyu, wechat-channels, twitch |
80
+ | **Finance** | xueqiu, sinafinance, barchart, yahoo-finance, binance, futu, coinbase, eastmoney |
81
+ | **News** | bbc, bloomberg (10), reuters, 36kr, google news, cnn, nytimes, techcrunch, theverge, infoq, ithome |
82
+ | **Shopping** | amazon (8), xianyu, coupang, smzdm, jd, maoyan, ele, dianping, dangdang, pinduoduo, meituan |
83
+ | **Jobs** | boss (14), linkedin |
84
+ | **AI Platforms** | gemini (5), grok, doubao-web (9), notebooklm (15), yollomi (12), jimeng, yuanbao, deepseek, perplexity |
85
+ | **Education** | chaoxing, arxiv, wikipedia |
86
+ | **Other** | ones (11), band, xiaoe, pixiv (6), hupu (7), ctrip, sinablog, steam |
87
+
88
+ </details>
89
+
90
+ <details>
91
+ <summary><strong>Desktop Software — 32 apps</strong></summary>
92
+
93
+ | Category | Apps |
94
+ | ----------------- | ------------------------------------------------------------------- |
95
+ | **3D / CAD** | blender (13 cmds), freecad (15), cloudcompare (4), openscad |
96
+ | **Image** | gimp (12), inkscape, imagemagick (6), krita (4) |
97
+ | **Video / Audio** | ffmpeg (11), kdenlive (3), shotcut (3), audacity (8), musescore (5) |
98
+ | **Diagram** | drawio, mermaid |
99
+ | **Document** | libreoffice, pandoc |
100
+ | **Streaming** | obs (8, WebSocket) |
101
+ | **Productivity** | zotero (8), vscode (3), obsidian (3) |
102
+ | **Dev Services** | wiremock (5), adguardhome (5), novita (3) |
103
+ | **Browser** | chrome (2), zoom (2) |
104
+ | **Other** | slay-the-spire-ii (6), sketch (3) |
105
+
106
+ </details>
107
+
108
+ <details>
109
+ <summary><strong>Electron Apps — 8 apps, 70 commands</strong></summary>
110
+
111
+ All via Chrome DevTools Protocol — no extensions, no hacks.
112
+
113
+ | App | Commands | Port |
114
+ | --------------- | ---------------------------------------------------------------------------------------------- | ---- |
115
+ | **Cursor** | ask, send, read, model, composer, extract-code, new, status, screenshot, dump, history, export | 9226 |
116
+ | **Codex** | ask, send, read, model, extract-diff, new, status, screenshot, dump, history, export | 9222 |
117
+ | **ChatGPT** | ask, send, read, model, new, status, screenshot, dump | 9236 |
118
+ | **Notion** | search, read, write, new, status, sidebar, favorites, export, screenshot | 9230 |
119
+ | **Discord** | servers, channels, read, send, search, members, status, delete | 9232 |
120
+ | **ChatWise** | ask, send, read, model, new, status, screenshot, dump | 9228 |
121
+ | **Doubao** | ask, send, read, new, status, screenshot, dump | 9225 |
122
+ | **Antigravity** | ask, send, read, model, new, status, screenshot, dump | 9234 |
123
+
124
+ </details>
125
+
126
+ <details>
127
+ <summary><strong>CLI Bridges — 35 tools</strong></summary>
128
+
129
+ Passthrough wrappers that normalize output to JSON:
130
+
131
+ docker, gh, jq, yt-dlp, vercel, supabase, wrangler, lark, dingtalk, hf, claude-code, codex-cli, opencode, aws, gcloud, az, doctl, netlify, railway, flyctl, pscale, neonctl, slack, kimi-cli, gws, deepagents, stripe, firebase, mmx-cli, wecom, mem0, dws, hermes, openclaw, opencode-cli
132
+
133
+ </details>
134
+
135
+ <details>
136
+ <summary><strong>macOS System — 30 commands</strong></summary>
137
+
138
+ | Category | Commands |
139
+ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
140
+ | **Audio/Display** | volume, dark-mode, brightness, say |
141
+ | **Power/System** | battery, lock-screen, caffeinate, sleep, uptime, system-info |
142
+ | **Files/Search** | spotlight, disk-info, trash, empty-trash, open, finder-tags, finder-recent, finder-selection |
143
+ | **Network** | wifi, wifi-info, bluetooth |
144
+ | **Notifications** | notify, notification, do-not-disturb |
145
+ | **Apps** | apps, apps-list, active-app, open-app, safari-tabs, shortcuts-list, shortcuts-run |
146
+ | **PIM** | calendar-list, calendar-create, calendar-today, contacts-search, mail-status, mail-send, messages-send, reminders-list, reminders-create, reminders-complete |
147
+ | **Media** | music-now, music-control, photos-search, notes-list, notes-search, screenshot, clipboard, processes |
148
+
149
+ </details>
150
+
151
+ ## Architecture
152
+
153
+ ```mermaid
154
+ graph TB
155
+ CMD["unicli &lt;site&gt; &lt;command&gt; [args]"]
156
+
157
+ CMD --> YAML["YAML Adapter<br/><i>~20 lines, agent-editable</i>"]
158
+ CMD --> TS["TS Adapter<br/><i>complex logic</i>"]
159
+ CMD --> BRIDGE["Bridge<br/><i>passthrough to CLI</i>"]
160
+
161
+ YAML --> ENGINE
162
+ TS --> ENGINE
163
+ BRIDGE --> ENGINE
164
+
165
+ subgraph ENGINE ["Pipeline Engine — 35 steps"]
166
+ direction LR
167
+ API["fetch fetch_text<br/>parse_rss html_to_md"]
168
+ TRANSFORM["select map filter<br/>sort limit"]
169
+ BROWSER["navigate evaluate<br/>click type press<br/>scroll intercept<br/>snapshot tap extract"]
170
+ CONTROL["set if each<br/>parallel append<br/>rate_limit assert retry"]
171
+ OTHER["exec write_temp<br/>download websocket"]
172
+ end
173
+
174
+ ENGINE --> CDP["Direct CDP"]
175
+ ENGINE --> DAEMON["Browser Daemon<br/><i>reuses Chrome logins</i>"]
176
+
177
+ CDP --> OUT["Output Formatter<br/><i>table · json · yaml · csv · md</i>"]
178
+ DAEMON --> OUT
104
179
  ```
105
180
 
106
- Verification: `unicli repair <site> <command>` diagnoses, `unicli test [site]` validates.
181
+ Remote browser support via `UNICLI_CDP_ENDPOINT` connect to any CDP WebSocket (Cloudflare Browser Rendering, Browserless, or self-hosted).
107
182
 
108
- ## Coverage
183
+ ## Write an Adapter
109
184
 
110
- ### Web Platforms (67 sites)
111
-
112
- | Category | Sites |
113
- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
114
- | **Tech / Dev** | hackernews, stackoverflow, devto, lobsters, producthunt, hf, github-trending, substack, lesswrong |
115
- | **Social — International** | twitter (25 cmds), reddit (16), instagram (19), tiktok (15), facebook (10), bluesky, medium |
116
- | **Social — Chinese** | bilibili (13), weibo, zhihu, xiaohongshu (13), douyin (13), jike, douban, weread, tieba, v2ex, linux-do, zsxq, xiaoyuzhou |
117
- | **Video / Media** | youtube (5), bilibili, douyin, tiktok |
118
- | **Finance** | xueqiu, sinafinance, barchart, yahoo-finance |
119
- | **News** | bbc, bloomberg (10), reuters, 36kr, google news |
120
- | **Shopping** | amazon (8), xianyu, coupang, smzdm, jd |
121
- | **Jobs** | boss (14), linkedin |
122
- | **AI Platforms** | gemini (5), grok, doubao-web (9), notebooklm (15), yollomi (12), jimeng, yuanbao |
123
- | **Education** | chaoxing, arxiv, wikipedia |
124
- | **Other** | ones (11), band, xiaoe, pixiv (6), hupu (7), ctrip, sinablog, steam, lobsters |
125
-
126
- ### Desktop Software (28 apps)
127
-
128
- | Category | Apps |
129
- | ---------------- | ----------------------------------------------------------- |
130
- | **3D / CAD** | blender (13 cmds), freecad (15), cloudcompare (4), openscad |
131
- | **Image** | gimp (12), inkscape, imagemagick (6), krita (4) |
132
- | **Video** | ffmpeg (11), kdenlive (3), shotcut (3), musescore (5) |
133
- | **Diagram** | drawio, mermaid |
134
- | **Document** | libreoffice, pandoc |
135
- | **Audio** | audacity (8) |
136
- | **Streaming** | obs (8, WebSocket) |
137
- | **Productivity** | zotero (8) |
138
- | **Dev Services** | wiremock (5), adguardhome (5), novita (3) |
139
- | **Game** | slay-the-spire-ii (6, HTTP bridge mod) |
140
- | **Design** | sketch (3) |
141
-
142
- ### Electron Apps (8 apps, 66 commands)
143
-
144
- | App | Commands | Method |
145
- | --------------- | ---------------------------------------------------------------------------------------------- | --------- |
146
- | **Cursor** | ask, send, read, model, composer, extract-code, new, status, screenshot, dump, history, export | CDP :9226 |
147
- | **Codex** | ask, send, read, model, extract-diff, new, status, screenshot, dump, history, export | CDP :9222 |
148
- | **ChatGPT** | ask, send, read, model, new, status, screenshot, dump | CDP :9236 |
149
- | **Notion** | search, read, write, new, status, sidebar, favorites, export, screenshot | CDP :9230 |
150
- | **Discord** | servers, channels, read, send, search, members, status | CDP :9232 |
151
- | **ChatWise** | ask, send, read, model, new, status, screenshot, dump | CDP :9228 |
152
- | **Doubao** | ask, send, read, new, status, screenshot, dump | CDP :9225 |
153
- | **Antigravity** | ask, send, read, model, new, status, screenshot, dump | CDP :9234 |
154
-
155
- ### Bridge (passthrough to existing CLIs)
156
-
157
- docker, gh, jq, yt-dlp, vercel, supabase, wrangler, lark, dingtalk, hf, claude-code, codex-cli, opencode, aws, gcloud, az, doctl, netlify, railway, flyctl, pscale, neonctl, slack
158
-
159
- ## Pipeline Engine
160
-
161
- 30 steps execute in sequence. Each YAML adapter is a pipeline of these steps.
162
-
163
- | Step | Type | What it does |
164
- | ------------ | --------- | ----------------------------------------------------------------------------- |
165
- | `fetch` | API | HTTP JSON with retry, backoff, cookie injection, concurrent fan-out (limit=5) |
166
- | `fetch_text` | API | HTTP raw text (RSS, HTML, XML) |
167
- | `parse_rss` | API | RSS 2.0 + Atom feed parser |
168
- | `html_to_md` | API | HTML → Markdown via Turndown |
169
- | `select` | Transform | Navigate JSON by dot-path (`data.items[]`) |
170
- | `map` | Transform | Transform each item via `${{ }}` templates |
171
- | `filter` | Transform | Keep items matching expression |
172
- | `sort` | Transform | Sort by field (numeric-aware) |
173
- | `limit` | Transform | Cap result count |
174
- | `exec` | Desktop | Run subprocess with stdin, env, file output |
175
- | `write_temp` | Desktop | Create ephemeral script file |
176
- | `navigate` | Browser | Navigate Chrome to URL via CDP |
177
- | `evaluate` | Browser | Execute JS in page context |
178
- | `click` | Browser | Click element by CSS selector |
179
- | `type` | Browser | Type text into input |
180
- | `press` | Browser | Keyboard key with modifiers (Ctrl+A, Enter) |
181
- | `wait` | Browser | Wait for time, selector, or text |
182
- | `scroll` | Browser | Direction scroll, auto-scroll to bottom |
183
- | `intercept` | Browser | Capture fetch + XHR responses (dual-patched, stealthed) |
184
- | `snapshot` | Browser | DOM accessibility tree with interactive refs |
185
- | `tap` | Browser | Vue Store Action Bridge (Pinia/Vuex → capture network) |
186
- | `download` | Media | HTTP + yt-dlp, batch concurrent, skip_existing |
187
- | `websocket` | Service | WebSocket connect/send/receive (OBS auth support) |
188
- | `set` | Control | Store variables into `vars` context for templates |
189
- | `if` | Control | Conditional execution of sub-pipeline branches |
190
- | `append` | Control | Push ctx.data into vars array for accumulation |
191
- | `each` | Control | Loop sub-pipeline with do-while + max iteration limit |
192
- | `parallel` | Control | Run sub-pipelines concurrently with merge strategies |
193
- | `rate_limit` | Control | Per-domain token bucket request throttling |
194
-
195
- ### Template Expressions
196
-
197
- 29 pipe filters: `join`, `urlencode`, `urldecode`, `slice`, `replace`, `lowercase`, `uppercase`, `trim`, `default`, `split`, `first`, `last`, `length`, `strip_html`, `truncate`, `slugify`, `sanitize`, `ext`, `basename`, `keys`, `json`, `abs`, `round`, `ceil`, `floor`, `int`, `float`, `str`, `reverse`, `unique`
185
+ Most adapters are ~20 lines of YAML:
198
186
 
199
187
  ```yaml
200
- ${{ item.title | truncate(50) }}
201
- ${{ item.tags | join(', ') }}
202
- ${{ args.query | urlencode }}
203
- ${{ item.url | basename | sanitize }}
204
- ${{ item.score > 100 ? 'hot' : 'normal' }}
188
+ site: hackernews
189
+ name: top
190
+ type: web-api
191
+ strategy: public
192
+ pipeline:
193
+ - fetch:
194
+ url: "https://hacker-news.firebaseio.com/v0/topstories.json"
195
+ - limit: { count: "${{ args.limit | default(30) }}" }
196
+ - each:
197
+ do:
198
+ - fetch:
199
+ url: "https://hacker-news.firebaseio.com/v0/item/${{ item }}.json"
200
+ max: "${{ args.limit | default(30) }}"
201
+ - map:
202
+ title: "${{ item.title }}"
203
+ score: "${{ item.score }}"
204
+ url: "${{ item.url }}"
205
+ by: "${{ item.by }}"
206
+ columns: [title, score, by, url]
205
207
  ```
206
208
 
207
- VM sandbox with null-prototype isolation, 50ms timeout, forbidden pattern blocklist.
209
+ Five adapter types: `web-api`, `desktop`, `browser`, `bridge`, `service`.
208
210
 
209
- ## Authentication Strategies
211
+ 29 template filters in a sandboxed VM: `join`, `urlencode`, `truncate`, `slugify`, `sanitize`, `basename`, `strip_html`, `default`, `split`, `first`, `last`, `length`, `keys`, `json`, `replace`, `lowercase`, `uppercase`, `trim`, `slice`, `reverse`, `unique`, `abs`, `round`, `ceil`, `floor`, `int`, `float`, `str`, `ext`.
210
212
 
211
- | Strategy | Auth | How |
212
- | ----------- | ------------- | -------------------------------------------------------- |
213
- | `public` | None | Direct HTTP fetch |
214
- | `cookie` | Cookie file | `~/.unicli/cookies/<site>.json` injected into headers |
215
- | `header` | Cookie + CSRF | Cookie + auto-extracted CSRF token (ct0, bili_jct, etc.) |
216
- | `intercept` | Browser | Navigate page, capture XHR/fetch responses |
217
- | `ui` | Browser | Direct DOM interaction (click, type, submit) |
213
+ ## Authentication
218
214
 
219
- Strategy cascade: auto-probes PUBLIC → COOKIE → HEADER on first run.
215
+ Five strategies, auto-detected via cascade (`PUBLIC → COOKIE → HEADER`):
220
216
 
221
- ## Browser Daemon
217
+ | Strategy | How |
218
+ | ----------- | -------------------------------------------------------- |
219
+ | `public` | Direct HTTP — no credentials |
220
+ | `cookie` | Injects cookies from `~/.unicli/cookies/<site>.json` |
221
+ | `header` | Cookie + auto-extracted CSRF token (ct0, bili_jct, etc.) |
222
+ | `intercept` | Navigates page in Chrome, captures XHR/fetch responses |
223
+ | `ui` | Direct DOM interaction (click, type, submit) |
222
224
 
223
- Persistent background process that bridges CLI commands to Chrome tabs. Reuses existing Chrome login sessions — no cookie files, no extension install required for basic operation.
224
-
225
- ```
226
- unicli daemon status # Check daemon state
227
- unicli daemon stop # Graceful shutdown (auto-exits after 4h idle)
228
-
229
- unicli operate open <url> # Navigate browser
230
- unicli operate state # DOM snapshot (accessibility tree)
231
- unicli operate click <ref> # Click by ref from snapshot
232
- unicli operate type <ref> <text> # Type into element
233
- unicli operate eval <js> # Execute JavaScript
234
- unicli operate screenshot [path] # Capture page
235
- unicli operate network # View captured requests
236
-
237
- unicli record <url> # Auto-generate adapter from page traffic
225
+ ```bash
226
+ unicli auth setup twitter # Show required cookies + template
227
+ unicli auth check twitter # Validate cookie file
228
+ unicli auth list # List configured sites
238
229
  ```
239
230
 
240
- ## Plugin System
231
+ ## Browser Daemon
232
+
233
+ Persistent background process that reuses your Chrome login sessions — no cookie export, no extension install:
241
234
 
242
235
  ```bash
243
- unicli plugin install github:user/repo # From GitHub
244
- unicli plugin install /local/path # From local directory
245
- unicli plugin list # Show installed
246
- unicli plugin update # Update all
236
+ unicli daemon status # Check daemon
237
+ unicli operate open <url> # Navigate
238
+ unicli operate state # DOM accessibility snapshot
239
+ unicli operate click <ref> # Click by ref
240
+ unicli operate type <ref> <text> # Type into element
241
+ unicli operate eval <js> # Execute JavaScript
242
+ unicli operate screenshot # Capture page
243
+ unicli record <url> # Auto-generate adapter from traffic
247
244
  ```
248
245
 
249
- Plugins can register custom pipeline steps via `registerStep()` and lifecycle hooks:
246
+ 13-layer anti-detection stealth: webdriver removal, `chrome.runtime` mock, CDP marker cleanup, `Error.stack` filtering, iframe consistency, and more. Auto-exits after 4h idle.
250
247
 
251
- ```typescript
252
- import { onBeforeExecute, onAfterExecute } from "unicli/hooks";
253
- onBeforeExecute(async (ctx) => {
254
- /* rate limiting, logging */
255
- });
256
- onAfterExecute(async (ctx, result) => {
257
- /* analytics, caching */
258
- });
259
- ```
248
+ ## MCP Server
260
249
 
261
- ## Shell Completion
250
+ For MCP-only environments:
262
251
 
263
252
  ```bash
264
- unicli completion bash >> ~/.bashrc
265
- unicli completion zsh >> ~/.zshrc
266
- unicli completion fish > ~/.config/fish/completions/unicli.fish
253
+ unicli mcp serve # All 957 commands become MCP tools
267
254
  ```
268
255
 
269
- ## Anti-Detection
270
-
271
- 13-layer stealth injection for browser automation:
272
-
273
- 1. `navigator.webdriver` removal
274
- 2. `window.chrome.runtime` mock
275
- 3. Plugin array normalization
276
- 4. Language header consistency
277
- 5. Permissions API notification fix
278
- 6. `Function.prototype.toString` spoofing
279
- 7. CDP global cleanup (`cdc_`, `__playwright`, `__puppeteer`)
280
- 8. `Error.stack` frame filtering
281
- 9. `outerWidth`/`outerHeight` normalization
282
- 10. Performance API entry filtering
283
- 11. Document-level CDP marker cleanup
284
- 12. iframe `contentWindow.chrome` consistency
285
- 13. Reserved (debugger trap neutralization)
286
-
287
- ## Exit Codes
288
-
289
- Following `sysexits.h`:
290
-
291
- | Code | Meaning | When |
292
- | ---- | ----------- | ----------------------------- |
293
- | `0` | Success | Command completed |
294
- | `1` | Error | Unexpected failure |
295
- | `2` | Usage | Bad arguments |
296
- | `66` | Empty | No data returned |
297
- | `69` | Unavailable | Browser/service not connected |
298
- | `75` | Temporary | Timeout — retry |
299
- | `77` | Auth | Not logged in |
300
- | `78` | Config | Missing credentials |
301
-
302
256
  ## Development
303
257
 
304
258
  ```bash
305
259
  git clone https://github.com/olo-dot-io/Uni-CLI.git && cd Uni-CLI
306
- npm install
307
- npm run dev -- list # Test adapter loading
308
- npm run verify # format + typecheck + lint + test + build
309
- npm run test:adapter # Validate all 601 YAML/TS adapters
260
+ npm install && npm run verify
310
261
  ```
311
262
 
312
- | Command | Purpose |
313
- | ---------------------- | ----------------------- |
314
- | `npm run dev` | Development run |
315
- | `npm run build` | Production build |
316
- | `npm run typecheck` | TypeScript strict check |
317
- | `npm run lint` | Oxlint |
318
- | `npm run test` | Unit tests (753) |
319
- | `npm run test:adapter` | Adapter validation |
320
- | `npm run verify` | Full pipeline |
321
-
322
- ## Technology
323
-
324
- | Layer | Technology |
325
- | -------- | ---------------------------------------------------------- |
326
- | Language | TypeScript (strict) |
327
- | Runtime | Node.js ≥ 20 |
328
- | CLI | Commander |
329
- | Browser | Raw CDP via `ws` (WebSocket) — no Puppeteer, no Playwright |
330
- | Test | Vitest |
331
- | Lint | Oxlint |
332
- | Format | Prettier |
333
- | Template | VM sandbox (null-prototype, 50ms timeout) |
334
-
335
- Zero production dependencies beyond: `chalk`, `cli-table3`, `commander`, `js-yaml`, `turndown`, `undici`, `ws`.
263
+ | Command | Purpose |
264
+ | ---------------------- | ------------------------- |
265
+ | `npm run dev` | Dev run |
266
+ | `npm run build` | Production build |
267
+ | `npm run typecheck` | TypeScript strict |
268
+ | `npm run lint` | Oxlint |
269
+ | `npm run test` | Unit tests (788) |
270
+ | `npm run test:adapter` | Validate all 601 adapters |
271
+ | `npm run verify` | Full pipeline |
272
+
273
+ 7 production dependencies: `chalk`, `cli-table3`, `commander`, `js-yaml`, `turndown`, `undici`, `ws`.
336
274
 
337
275
  ## Contributing
338
276
 
339
- See [CONTRIBUTING.md](./CONTRIBUTING.md). The fastest way to contribute: write a 20-line YAML adapter for a site you use.
277
+ The fastest way to contribute: write a [20-line YAML adapter](./CONTRIBUTING.md) for a site you use.
278
+
279
+ ```bash
280
+ unicli init <site> <command> # Scaffold new adapter
281
+ unicli dev <path> # Hot-reload during dev
282
+ unicli test <site> # Validate
283
+ ```
340
284
 
341
285
  ## License
342
286
 
@@ -345,6 +289,12 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md). The fastest way to contribute: write a
345
289
  ---
346
290
 
347
291
  <p align="center">
348
- <sub>v0.209.0 — Vostok · Popovich</sub><br>
349
- <sub>167 sites · 756 commands · 35 pipeline steps · 29 filters · 775 unit tests</sub>
292
+ <a href="https://github.com/olo-dot-io/Uni-CLI/graphs/contributors">
293
+ <img src="https://contrib.rocks/image?repo=olo-dot-io/Uni-CLI" alt="Contributors">
294
+ </a>
295
+ </p>
296
+
297
+ <p align="center">
298
+ <sub>v0.210.0 — Vostok · Komarov</sub><br>
299
+ <sub>195 sites · 957 commands · 35 pipeline steps · 29 filters · 788 tests</sub>
350
300
  </p>
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * Cursor IDE adapter -- AI chat + composer + code extraction.
3
3
  *
4
- * Commands: ask, send, read, model, status, new, screenshot, dump, composer, extract-code
4
+ * Commands: ask, send, read, model, status, new, screenshot, dump,
5
+ * composer, extract-code, export, history
5
6
  */
6
7
  export {};
7
8
  //# sourceMappingURL=cursor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/adapters/cursor/cursor.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/adapters/cursor/cursor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}