@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.
- package/AGENTS.md +19 -1
- package/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/bin/unicli-mcp.d.ts +10 -0
- package/dist/bin/unicli-mcp.d.ts.map +1 -0
- package/dist/bin/unicli-mcp.js +10 -0
- package/dist/bin/unicli-mcp.js.map +1 -0
- package/dist/manifest.json +1 -1
- package/package.json +22 -8
- package/server.json +44 -0
- package/skills/README.md +39 -0
- package/skills/talk-normal/SKILL.md +25 -0
- package/skills/talk-normal/prompt.md +35 -0
- package/skills/unicli/SKILL.md +389 -0
- package/skills/unicli/references/auth.md +188 -0
- package/skills/unicli/references/output.md +238 -0
- package/skills/unicli/references/sites.md +259 -0
- package/skills/unicli-browser/SKILL.md +99 -0
- package/skills/unicli-claude-code/SKILL.md +172 -0
- package/skills/unicli-explorer/SKILL.md +90 -0
- package/skills/unicli-hermes/SKILL.md +83 -0
- package/skills/unicli-oneshot/SKILL.md +59 -0
- package/skills/unicli-operate/SKILL.md +113 -0
- package/skills/unicli-repair/SKILL.md +209 -0
- package/skills/unicli-repair/references/error-codes.md +149 -0
- package/skills/unicli-repair/references/yaml-patches.md +321 -0
- package/skills/unicli-smart-search/SKILL.md +80 -0
- package/skills/unicli-usage/SKILL.md +65 -0
|
@@ -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
|
+
```
|