@zenalexa/unicli 0.218.0 → 0.218.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.
@@ -0,0 +1,188 @@
1
+ # Authentication & Strategy Reference
2
+
3
+ How unicli handles authentication: from public APIs to full browser login flows.
4
+
5
+ ---
6
+
7
+ ## Strategy Cascade (Auto-Probe)
8
+
9
+ On first run, unicli probes strategies in order and caches the result:
10
+
11
+ ```
12
+ public → cookie → header
13
+ ```
14
+
15
+ Browser strategies (`intercept`, `ui`) never auto-promote — they require explicit
16
+ opt-in via the YAML adapter's `strategy:` field.
17
+
18
+ | Strategy | Requires | When used |
19
+ | ----------- | ------------------------------- | ------------------------------------------ |
20
+ | `public` | Nothing | Open APIs, no auth |
21
+ | `cookie` | `~/.unicli/cookies/<site>.json` | Login-gated; auto-exported from browser |
22
+ | `header` | Cookie + CSRF token | Cookie + per-request CSRF (auto-extracted) |
23
+ | `intercept` | Browser CDP session | Navigate page, capture XHR; no direct API |
24
+ | `ui` | Browser CDP session | Click through login or interact with page |
25
+
26
+ ---
27
+
28
+ ## First-Time Setup Workflow
29
+
30
+ ```bash
31
+ # 1. Start setup — unicli opens a browser window
32
+ unicli auth setup <site>
33
+
34
+ # 2. Log in to the site in the browser window
35
+ # 3. unicli detects cookies and saves them automatically
36
+
37
+ # 4. Verify
38
+ unicli auth status <site>
39
+
40
+ # 5. Test the command
41
+ unicli <site> <command>
42
+ ```
43
+
44
+ ---
45
+
46
+ ## Auth Commands Reference
47
+
48
+ ```bash
49
+ unicli auth setup <site> # guided browser login + cookie export
50
+ unicli auth status <site> # check cookie file exists + expiry
51
+ unicli auth list # all authenticated sites
52
+ unicli auth refresh <site> # re-export cookies (when expired)
53
+ unicli auth remove <site> # delete stored credentials
54
+ ```
55
+
56
+ ---
57
+
58
+ ## Cookie File Location
59
+
60
+ ```
61
+ ~/.unicli/cookies/<site>.json
62
+ ```
63
+
64
+ - Files are JSON arrays of cookie objects (Netscape/WebKit format).
65
+ - **Never read or edit cookie files directly** — use `unicli auth` commands.
66
+ - Cookie files are per-site; one site can have one active cookie file.
67
+ - Expiry: cookies expire per the site's session policy (hours to months).
68
+
69
+ ---
70
+
71
+ ## Exit Code 77 — Auth Required
72
+
73
+ When you see exit 77 (`auth_required` or `not_authenticated`):
74
+
75
+ ```bash
76
+ # Step 1: Check which sites need auth
77
+ unicli auth list
78
+
79
+ # Step 2: Set up auth
80
+ unicli auth setup <site>
81
+
82
+ # Step 3: Retry the failed command
83
+ unicli <site> <command>
84
+ ```
85
+
86
+ ---
87
+
88
+ ## Site-Specific Auth Notes
89
+
90
+ ### Chinese social platforms (Weibo, Zhihu, Bilibili, Douyin)
91
+
92
+ - Cookie-based; sessions typically last 7–30 days.
93
+ - Re-run `unicli auth setup <site>` after expiry.
94
+ - Bilibili has anti-bot measures — use `unicli auth setup bilibili` in headful mode.
95
+
96
+ ### Twitter / X
97
+
98
+ - Cookie-based via browser session.
99
+ - Twitter aggressively rotates session tokens; may need monthly refresh.
100
+ - `unicli auth status twitter` shows last-updated timestamp.
101
+
102
+ ### Reddit
103
+
104
+ - Most listing commands work without auth (`public`).
105
+ - Search and user commands may need auth for personalized results.
106
+
107
+ ### LinkedIn
108
+
109
+ - Requires auth for most commands.
110
+ - Sessions last weeks; refresh on 77 errors.
111
+
112
+ ### Financial platforms (Xueqiu, Eastmoney, Futu)
113
+
114
+ - Xueqiu hot/hot-stock are public.
115
+ - Portfolio/watchlist commands require auth.
116
+
117
+ ### E-commerce (Amazon, JD, Taobao)
118
+
119
+ - Hot/search are public.
120
+ - Cart/order/account commands require auth.
121
+
122
+ ### GitHub / GitLab
123
+
124
+ - Public repo commands work without auth.
125
+ - `gh` bridge commands use your local `gh auth` token, not unicli cookies.
126
+ - `unicli gh pr list` → delegates to `gh cli` (must have `gh auth login` done).
127
+
128
+ ### AI platforms (Claude, ChatGPT, Deepseek)
129
+
130
+ - Require auth for all commands.
131
+ - Browser-based auth; sessions last weeks.
132
+ - Use `unicli claude chat "..."` for quick one-off calls.
133
+
134
+ ---
135
+
136
+ ## Browser Strategy — When Cookie Is Not Enough
137
+
138
+ Some sites require JavaScript rendering or have bot detection that blocks API calls.
139
+ For these, unicli uses `intercept` or `ui` strategy via Chrome CDP.
140
+
141
+ **Pre-requisite**: `unicli browser start` must be running.
142
+
143
+ ### Intercept strategy
144
+
145
+ The adapter navigates to the page, captures XHR/fetch responses, and extracts data
146
+ from the network traffic — no DOM scraping, highly reliable.
147
+
148
+ ```bash
149
+ unicli browser start
150
+ unicli <site> <command> # adapter auto-uses intercept strategy
151
+ ```
152
+
153
+ ### UI strategy
154
+
155
+ The adapter interacts with the page (click, type, scroll) to trigger data loading,
156
+ then extracts via DOM accessibility snapshot.
157
+
158
+ ```bash
159
+ unicli browser start
160
+ unicli browser status # confirm CDP is alive
161
+ unicli <site> <command> # adapter auto-uses ui strategy
162
+ ```
163
+
164
+ For building new adapters with these strategies, load skill `unicli-explorer`.
165
+
166
+ ---
167
+
168
+ ## Troubleshooting Auth
169
+
170
+ ### Symptoms and fixes
171
+
172
+ | Symptom | Fix |
173
+ | ----------------------------------------- | ----------------------------------------------------------------- |
174
+ | Exit 77, `auth_required` | `unicli auth setup <site>` |
175
+ | Commands work then fail hours later | Cookie expired — `unicli auth refresh <site>` |
176
+ | `unicli auth status <site>` shows no file | Cookie was never set up — run `unicli auth setup <site>` |
177
+ | Browser window opens but login hangs | Try `unicli browser start` first, then `unicli auth setup <site>` |
178
+ | "permission_denied" after login | Account lacks access to that resource |
179
+ | Auth succeeds but command still fails | Check `unicli health` — may be adapter issue, not auth |
180
+
181
+ ### Verify the full auth chain
182
+
183
+ ```bash
184
+ unicli doctor # system health: Node, Chrome, auth files, index
185
+ unicli auth list # which sites have cookies
186
+ unicli auth status <site> # cookie file freshness
187
+ unicli browser status # CDP session alive?
188
+ ```
@@ -0,0 +1,238 @@
1
+ # AgentEnvelope v2 — Output Format Reference
2
+
3
+ All unicli commands emit a **v2 AgentEnvelope**. This is the stable machine contract
4
+ since v0.215. This reference covers every field, error codes, parsing patterns, and
5
+ format-specific behavior.
6
+
7
+ ---
8
+
9
+ ## Complete Schema
10
+
11
+ ```typescript
12
+ // Success envelope
13
+ {
14
+ ok: true,
15
+ schema_version: "2", // always "2"
16
+ command: "site.command", // e.g. "hackernews.top"
17
+ meta: {
18
+ duration_ms: number, // wall-clock time in ms
19
+ count?: number, // rows in data[]
20
+ surface?: "web" | "desktop" | "system" | "mobile",
21
+ adapter_version?: string, // YAML/TS adapter version string
22
+ operator?: string, // browser operator handle if used
23
+ pagination?: {
24
+ next_cursor?: string, // opaque cursor; pass via --cursor
25
+ has_more?: boolean, // true when more pages exist
26
+ }
27
+ },
28
+ data: T[], // payload — array or object depending on adapter
29
+ error: null,
30
+ next_actions: AgentNextAction[]
31
+ }
32
+
33
+ // Failure envelope
34
+ {
35
+ ok: false,
36
+ schema_version: "2",
37
+ command: "site.command",
38
+ meta: { duration_ms: number },
39
+ data: null,
40
+ error: {
41
+ code: string, // see error code table below
42
+ exit_code: number, // sysexits.h aligned
43
+ message: string, // human-readable
44
+ adapter_path?: string, // YAML file to repair (if applicable)
45
+ step: number, // pipeline step index that failed (0-based)
46
+ retryable: boolean, // true = retry after fix; false = args/config issue
47
+ suggestion: string, // what to do next
48
+ remedy?: {
49
+ message: string,
50
+ command?: string, // exact CLI command to run as remedy
51
+ deeplink?: string,
52
+ doc?: string
53
+ },
54
+ diff_candidate?: string, // suggested YAML diff for repair
55
+ minimum_capability?: string // e.g. "browser.cdp" — needed transport
56
+ },
57
+ next_actions: AgentNextAction[]
58
+ }
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Error Code Reference
64
+
65
+ ### Transport / network (5 codes)
66
+
67
+ | Code | Exit | Meaning | Action |
68
+ | ------------------- | ---- | ----------------------------------- | --------------------------------------- |
69
+ | `network_error` | 75 | TCP/TLS/DNS failure, timeout | Retry once; check connectivity |
70
+ | `rate_limited` | 75 | 429 or upstream quota | Wait and retry; reduce `--limit` |
71
+ | `upstream_error` | 75 | 5xx or malformed body from upstream | Retry; if persists load `unicli-repair` |
72
+ | `api_error` | 1 | 4xx non-auth error | Read `message` + `suggestion` |
73
+ | `not_authenticated` | 77 | Credentials expired or missing | `unicli auth setup <site>` |
74
+
75
+ ### Input / validation (3 codes)
76
+
77
+ | Code | Exit | Meaning | Action |
78
+ | --------------- | ---- | ------------------------------ | ---------------------------------------- |
79
+ | `invalid_input` | 2 | Arg failed validation | Fix args; `unicli describe <site> <cmd>` |
80
+ | `selector_miss` | 1 | CSS/XPath matched nothing | Load `unicli-repair` — selector changed |
81
+ | `not_found` | 66 | HTTP 404 or "no such resource" | Check the resource ID or URL |
82
+
83
+ ### Authorization (2 codes)
84
+
85
+ | Code | Exit | Meaning | Action |
86
+ | ------------------- | ---- | ----------------------------- | -------------------------------------- |
87
+ | `auth_required` | 77 | Missing cookie file | `unicli auth setup <site>` |
88
+ | `permission_denied` | 77 | Authenticated but lacks scope | Different account or check permissions |
89
+
90
+ ### Runtime (2 codes)
91
+
92
+ | Code | Exit | Meaning | Action |
93
+ | ---------------- | ---- | ----------------------------------- | --------------------------------------------------- |
94
+ | `internal_error` | 1 | Uncaught exception in unicli | Report to GitHub issues |
95
+ | `quarantined` | 1 | Adapter gated by `quarantine:` flag | `unicli repair --quarantined`; load `unicli-repair` |
96
+
97
+ ### Ref-locator (3 codes, browser mode only)
98
+
99
+ | Code | Exit | Meaning | Action |
100
+ | --------------- | ---- | -------------------------------------- | -------------------------------------------- |
101
+ | `stale_ref` | 1 | Browser snapshot ref detached from DOM | Re-run `unicli browser state` for fresh refs |
102
+ | `ambiguous` | 1 | Ref maps to multiple elements | Use a more specific `--css` selector |
103
+ | `ref_not_found` | 1 | Ref not in current snapshot | Re-run `unicli browser state` |
104
+
105
+ ---
106
+
107
+ ## next_actions — HATEOAS Navigation
108
+
109
+ `next_actions` are generated from the adapter schema. **Trust them** — they are not
110
+ suggested by an LLM but computed from the command's type, args, and response context.
111
+
112
+ ```json
113
+ "next_actions": [
114
+ {
115
+ "command": "unicli describe hackernews top",
116
+ "description": "Inspect the command's JSON schema, channels, and example payload"
117
+ },
118
+ {
119
+ "command": "unicli hackernews top --args-file <path.json>",
120
+ "description": "Re-run with a JSON payload from file",
121
+ "params": {
122
+ "path": {
123
+ "description": "Absolute path to a JSON object file with command args"
124
+ }
125
+ }
126
+ },
127
+ {
128
+ "command": "unicli hackernews top --cursor <next_cursor>",
129
+ "description": "Fetch next page",
130
+ "params": {
131
+ "next_cursor": {
132
+ "value": "eyJwIjoyLCJsIjoyNX0=",
133
+ "description": "Pagination cursor from current response"
134
+ }
135
+ }
136
+ }
137
+ ]
138
+ ```
139
+
140
+ `params[].value` pre-fills the value from the current response (e.g. the cursor).
141
+ `params[].enum` constrains valid choices. `params[].default` shows the implicit default.
142
+
143
+ ---
144
+
145
+ ## Output Format Comparison
146
+
147
+ | Format | Flag | Use case |
148
+ | --------- | ----------------- | ------------------------------------------------------- |
149
+ | `md` | default / `-f md` | Display to user; agent-native Markdown with frontmatter |
150
+ | `json` | `-f json` | Programmatic parsing with jq or code |
151
+ | `yaml` | `-f yaml` | Config-style output |
152
+ | `csv` | `-f csv` | Spreadsheet export; array data only |
153
+ | `compact` | `-f compact` | One row per line, `\|` separator; array data only |
154
+
155
+ `UNICLI_OUTPUT=json` environment variable sets `json` globally without per-call flags.
156
+
157
+ ---
158
+
159
+ ## Parsing Patterns
160
+
161
+ ### Extract titles
162
+
163
+ ```bash
164
+ unicli hackernews top -f json | jq '.data[].title'
165
+ ```
166
+
167
+ ### Filter by field value
168
+
169
+ ```bash
170
+ unicli xueqiu hot -f json | jq '.data[] | select(.change | tonumber > 5)'
171
+ ```
172
+
173
+ ### Extract nested field
174
+
175
+ ```bash
176
+ unicli bilibili hot -f json | jq '.data[] | {title: .title, view: .stat.view}'
177
+ ```
178
+
179
+ ### Pagination loop
180
+
181
+ ```bash
182
+ cursor=""
183
+ while true; do
184
+ result=$(unicli reddit hot --limit 25 ${cursor:+--cursor $cursor} -f json)
185
+ echo "$result" | jq '.data[].title'
186
+ cursor=$(echo "$result" | jq -r '.meta.pagination.next_cursor // empty')
187
+ has_more=$(echo "$result" | jq -r '.meta.pagination.has_more // false')
188
+ [ "$has_more" = "true" ] || break
189
+ done
190
+ ```
191
+
192
+ ### Check success before parsing
193
+
194
+ ```bash
195
+ result=$(unicli hackernews top -f json)
196
+ if echo "$result" | jq -e '.ok' >/dev/null 2>&1; then
197
+ echo "$result" | jq '.data[].title'
198
+ else
199
+ echo "Error: $(echo "$result" | jq -r '.error.message')"
200
+ echo "Action: $(echo "$result" | jq -r '.error.suggestion')"
201
+ fi
202
+ ```
203
+
204
+ ### Error-first pattern (recommended)
205
+
206
+ ```bash
207
+ unicli twitter search "AI agents" -f json | jq '
208
+ if .ok then
209
+ .data[] | {title: .text, author: .author}
210
+ else
211
+ "ERROR[\(.error.code)]: \(.error.message) → \(.error.suggestion)"
212
+ end
213
+ '
214
+ ```
215
+
216
+ ---
217
+
218
+ ## Surface Field
219
+
220
+ `meta.surface` indicates the access method used:
221
+
222
+ | Value | Meaning |
223
+ | --------- | --------------------------------------------- |
224
+ | `web` | HTTP/REST API call |
225
+ | `desktop` | Local app via AppleScript / Accessibility API |
226
+ | `system` | macOS system call |
227
+ | `mobile` | Mobile device bridge |
228
+
229
+ ---
230
+
231
+ ## Schema Version History
232
+
233
+ | Version | Since | Notes |
234
+ | ------- | ----------- | --------------------------------- |
235
+ | `2` | v0.215 | Current. All agent-facing output. |
236
+ | `1` | v0.1–v0.214 | Legacy. Removed in v0.215. |
237
+
238
+ v2 is the only version. If you see `schema_version: "1"` in output, upgrade unicli.
@@ -0,0 +1,259 @@
1
+ # Site Catalog — Uni-CLI 237 Sites
2
+
3
+ Load this file when you need to find which site to query. Organized by category.
4
+ All commands: `unicli list --site <site>` · Full search: `unicli search "<topic>"`.
5
+
6
+ ---
7
+
8
+ ## News & Tech Media
9
+
10
+ | Site | Key commands |
11
+ | ------------- | ----------------------------------------------------------------- |
12
+ | `hackernews` | `top`, `new`, `ask`, `show`, `jobs`, `search`, `comments`, `user` |
13
+ | `bbc` | `hot`, `tech`, `world`, `business` |
14
+ | `cnn` | `top`, `tech` |
15
+ | `nytimes` | `top`, `tech` |
16
+ | `reuters` | `top`, `tech` |
17
+ | `36kr` | `hot`, `new`, `recommend`, `search` |
18
+ | `ithome` | `hot`, `new`, `search` |
19
+ | `infoq` | `hot`, `new` |
20
+ | `v2ex` | `hot`, `top`, `new`, `tab` |
21
+ | `linux-do` | `hot`, `new` |
22
+ | `devto` | `hot`, `trending`, `new`, `search` |
23
+ | `lobsters` | `hot`, `new` |
24
+ | `lesswrong` | `hot`, `new`, `search`, many more |
25
+ | `producthunt` | `hot`, `top`, `search` |
26
+
27
+ ---
28
+
29
+ ## Social & Community
30
+
31
+ | Site | Key commands |
32
+ | ----------- | ------------------------------------------------- |
33
+ | `twitter` | `search`, `trending`, `user`, `timeline`, `likes` |
34
+ | `bluesky` | `trending`, `search`, `user`, `feed`, many more |
35
+ | `reddit` | `hot`, `new`, `top`, `search`, `subreddit` |
36
+ | `weibo` | `hot`, `trending`, `search`, `user` |
37
+ | `zhihu` | `hot`, `trending`, `search`, `question`, `answer` |
38
+ | `jike` | `hot`, `search`, `user`, `topic` |
39
+ | `instagram` | `feed`, `search`, `user`, `stories`, many more |
40
+ | `facebook` | `feed`, `search`, `groups`, many more |
41
+ | `tieba` | `hot`, `search`, `posts` |
42
+ | `threads` | `hot`, `search`, `user` |
43
+
44
+ ---
45
+
46
+ ## Video & Streaming
47
+
48
+ | Site | Key commands |
49
+ | ---------- | ------------------------------------------------------------------ |
50
+ | `bilibili` | `hot`, `trending`, `search`, `user`, `video`, `bangumi`, many more |
51
+ | `youtube` | `search`, `trending`, `channel`, `comments` |
52
+ | `tiktok` | `search`, `trending`, `user` |
53
+ | `douyin` | `hot`, `search`, `user` |
54
+ | `kuaishou` | `hot`, `search` |
55
+ | `douyu` | `hot`, `new` |
56
+ | `hupu` | `hot`, `new`, `search`, `match` |
57
+
58
+ ---
59
+
60
+ ## Finance & Markets
61
+
62
+ | Site | Key commands |
63
+ | --------------- | ----------------------------------------------- |
64
+ | `xueqiu` | `hot`, `hot-stock`, `search`, `quote`, `news` |
65
+ | `eastmoney` | `hot`, `news`, `fund`, `stock`, many more |
66
+ | `bloomberg` | `markets`, `latest`, `search`, `tech`, `asia` |
67
+ | `binance` | `hot`, `price`, `kline`, `orderbook`, many more |
68
+ | `barchart` | `hot`, `movers`, `futures`, `currencies` |
69
+ | `coinbase` | `price`, `markets` |
70
+ | `futu` | `hot`, `news` |
71
+ | `yahoo-finance` | `search`, `quote`, `news` |
72
+ | `exchangerate` | `rate`, `convert` |
73
+
74
+ ---
75
+
76
+ ## E-commerce & Shopping
77
+
78
+ | Site | Key commands |
79
+ | ---------- | ------------------------------------------------- |
80
+ | `amazon` | `search`, `hot`, `deals`, `categories`, many more |
81
+ | `jd` | `search`, `hot`, `deals`, `flash-sale`, many more |
82
+ | `taobao` | `search`, `hot`, `new` |
83
+ | `xianyu` | `search`, `hot` |
84
+ | `smzdm` | `hot`, `new`, `deal` |
85
+ | `dangdang` | `hot`, `search` |
86
+ | `coupang` | `hot`, `search` |
87
+ | `boss` | `search`, `hot`, `company`, many more |
88
+ | `51job` | `search`, `hot` |
89
+ | `linkedin` | `search`, `jobs`, `people` |
90
+ | `maimai` | `hot`, `search` |
91
+
92
+ ---
93
+
94
+ ## AI Platforms
95
+
96
+ | Site | Key commands |
97
+ | ----------- | ----------------------------------------------------- |
98
+ | `claude` | `chat`, `vision`, `summarize`, `translate`, many more |
99
+ | `chatgpt` | `chat`, `image`, `vision`, many more |
100
+ | `deepseek` | `chat`, `code`, many more |
101
+ | `gemini` | `chat`, `vision`, `search` |
102
+ | `doubao` | `chat`, `image`, many more |
103
+ | `grok` | `chat` |
104
+ | `hf` | `search`, `model`, `dataset`, `spaces` |
105
+ | `codex` | `run`, `chat`, `code`, many more |
106
+ | `hermes` | `run`, `list`, `search` |
107
+ | `autoagent` | `run` |
108
+
109
+ ---
110
+
111
+ ## Developer Tools & Code
112
+
113
+ | Site | Key commands |
114
+ | ----------------------- | ------------------------------------------ |
115
+ | `github-trending` | `daily`, `weekly`, `monthly` |
116
+ | `gh` | `pr`, `issue`, `repo`, `search`, many more |
117
+ | `gitee` | `hot`, `search`, `trending` |
118
+ | `gitlab` | `hot`, `search` |
119
+ | `docker-hub` | `search`, `hot` |
120
+ | `docker` | `ps`, `images`, `logs` |
121
+ | `hackernews` | `search` (dev content is strong here) |
122
+ | `crates-io` | `search`, `hot`, `new` |
123
+ | `cocoapods` | `search`, `info` |
124
+ | `npm` (via bridge `gh`) | use `gh` or `docker` bridges |
125
+
126
+ ---
127
+
128
+ ## Academic & Research
129
+
130
+ | Site | Key commands |
131
+ | -------------------- | ------------------------ |
132
+ | `arxiv` | `search`, `hot`, `paper` |
133
+ | `huggingface-papers` | `hot`, `new` |
134
+ | `google-scholar` | `search`, `author` |
135
+ | `baidu-scholar` | `search` |
136
+ | `cnki` | `search` |
137
+ | `semanticscholar` | (via MCP, not unicli) |
138
+
139
+ ---
140
+
141
+ ## Reading & Content
142
+
143
+ | Site | Key commands |
144
+ | ------------ | --------------------------------------------------- |
145
+ | `douban` | `hot`, `top250`, `search`, `book`, `movie`, `music` |
146
+ | `weread` | `ranking`, `hot`, `new` |
147
+ | `wikipedia` | `search`, `article` |
148
+ | `dictionary` | `define`, `translate`, `synonym` |
149
+ | `itch-io` | `hot`, `new`, `search` |
150
+
151
+ ---
152
+
153
+ ## Travel & Lifestyle
154
+
155
+ | Site | Key commands |
156
+ | ---------- | -------------------------- |
157
+ | `ctrip` | `hot`, `search` |
158
+ | `dianping` | `hot`, `search` |
159
+ | `ele` | `hot`, `search` |
160
+ | `ke` | `search`, `hot`, many more |
161
+ | `band` | `hot`, `events` |
162
+
163
+ ---
164
+
165
+ ## Desktop Apps (macOS)
166
+
167
+ ### Productivity
168
+
169
+ | Site | Key commands |
170
+ | ---------------- | --------------------------------- |
171
+ | `cursor` | `open`, `edit`, `run`, many more |
172
+ | `chatwise` | `chat`, `create`, many more |
173
+ | `evernote-app` | `search`, `note`, many more |
174
+ | `apple-notes` | `search`, `create`, `list` |
175
+ | `apple-podcasts` | `search`, `play` |
176
+ | `insomnia` | `request`, `workspace`, many more |
177
+
178
+ ### Creative
179
+
180
+ | Site | Key commands |
181
+ | ------------- | -------------------------------------- |
182
+ | `blender` | `render`, `info`, `script`, many more |
183
+ | `gimp` | `open`, `resize`, `export`, many more |
184
+ | `figma` | `export`, `pages`, many more |
185
+ | `inkscape` | `export`, `info` |
186
+ | `krita` | `open`, `export`, many more |
187
+ | `kdenlive` | `render`, `export` |
188
+ | `imagemagick` | `resize`, `convert`, `info`, many more |
189
+
190
+ ### Development
191
+
192
+ | Site | Key commands |
193
+ | ---------------- | ------------------------------------- |
194
+ | `github-desktop` | `status`, `commit`, `push`, many more |
195
+ | `gitkraken` | `status`, `branch`, many more |
196
+
197
+ ### Communication
198
+
199
+ | Site | Key commands |
200
+ | ------------- | ------------------------------------- |
201
+ | `discord-app` | `send`, `read`, `channels`, many more |
202
+ | `imessage` | `send`, `read`, `search` |
203
+ | `dingtalk` | `send`, `read`, many more |
204
+ | `feishu` | `send`, `read`, many more |
205
+ | `lark` | `send`, `read`, many more |
206
+
207
+ ---
208
+
209
+ ## Local & System Services
210
+
211
+ | Site | Key commands |
212
+ | ------------- | ------------------------------------------------------- |
213
+ | `macos` | `volume`, `brightness`, `screenshot`, `wifi`, many more |
214
+ | `ffmpeg` | `compress`, `convert`, `info`, many more |
215
+ | `jq` | `filter`, `format` |
216
+ | `homebrew` | `install`, `search` |
217
+ | `comfyui` | `generate`, `workflow`, many more |
218
+ | `ollama` | (via service adapter) |
219
+ | `adguardhome` | `status`, `filter`, many more |
220
+ | `bitwarden` | `get`, `list`, many more |
221
+
222
+ ---
223
+
224
+ ## Cloud & Infrastructure
225
+
226
+ | Site | Key commands |
227
+ | -------- | ---------------------------- |
228
+ | `aws` | `run` (bridge to aws CLI) |
229
+ | `az` | `run` (bridge to az CLI) |
230
+ | `gcloud` | `run` (bridge to gcloud CLI) |
231
+ | `doctl` | `run` (bridge to doctl) |
232
+ | `flyctl` | `run` (bridge to fly CLI) |
233
+
234
+ ---
235
+
236
+ ## Chinese Platforms (Specialty)
237
+
238
+ | Site | Key commands |
239
+ | ------------- | ---------------------------- |
240
+ | `1688` | `search`, `hot`, many more |
241
+ | `chaoxing` | `courses`, `search` |
242
+ | `jianyu` | `search`, `hot` |
243
+ | `juejin` | `hot`, `trending` |
244
+ | `gov-law` | `search`, `hot` |
245
+ | `gov-policy` | `search`, `latest` |
246
+ | `jimeng` | `generate`, `hot`, many more |
247
+ | `antigravity` | many commands |
248
+
249
+ ---
250
+
251
+ ## Discover More
252
+
253
+ ```bash
254
+ unicli list # full list, 3,319 commands
255
+ unicli search "<topic>" # semantic search
256
+ unicli list --type desktop # 2,068 desktop app commands
257
+ unicli list --type service # 43 local service commands
258
+ unicli list --quarantined # adapters needing repair
259
+ ```