diff --git a/.github/workflows/skill-docs-check.yml b/.github/workflows/skill-docs-check.yml new file mode 100644 index 00000000..f4f39bcd --- /dev/null +++ b/.github/workflows/skill-docs-check.yml @@ -0,0 +1,31 @@ +name: skill-docs-check + +on: + pull_request: + paths: + - 'src/clis/**' + - 'skills/opencli-skill/**' + - 'scripts/sync-*.mjs' + - 'scripts/check-*.sh' + - 'package.json' + - '.github/workflows/skill-docs-check.yml' + push: + branches: [main] + paths: + - 'src/clis/**' + - 'skills/opencli-skill/**' + - 'scripts/sync-*.mjs' + - 'scripts/check-*.sh' + - 'package.json' + workflow_dispatch: + +jobs: + verify: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '22' + - run: npm ci + - run: npm run skill:check diff --git a/README.md b/README.md index b4492f2a..1b7509c1 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,16 @@ npx skills add jackwener/opencli --skill opencli-explorer # Adapter developme npx skills add jackwener/opencli --skill opencli-oneshot # Quick command reference ``` +#### OpenCLI Skill (for coding assistants) + +If you want a lightweight, prompt-friendly skill package, see: +- https://github.com/joeseesun/opencli-skill + +It focuses on three things: +- Natural-language routing for common supported platforms +- Reusing Chrome login session (no API keys) +- Agent-friendly command examples (`-f json` by default) + --- ### For Developers diff --git a/README.zh-CN.md b/README.zh-CN.md index 6f5d7d3d..8ab1ae81 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -130,6 +130,16 @@ npx skills add jackwener/opencli --skill opencli-explorer # 适配器开发 npx skills add jackwener/opencli --skill opencli-oneshot # 快速命令参考 ``` +#### OpenCLI Skill(面向编码助手) + +如果你希望一个更轻量、提示词友好的 skill 包,可以看: +- https://github.com/joeseesun/opencli-skill + +核心定位: +- 面向常见平台的自然语言命令路由 +- 复用 Chrome 登录态(无需 API Key) +- 默认提供更适合 Agent 的 `-f json` 命令示例 + ## 内置命令 运行 `opencli list` 查看完整注册表。 diff --git a/package.json b/package.json index 15caaa77..fffce2c9 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,13 @@ "test:e2e": "vitest run --project e2e", "docs:dev": "vitepress dev docs", "docs:build": "vitepress build docs", - "docs:preview": "vitepress preview docs" + "docs:preview": "vitepress preview docs", + "skill:commands:sync": "node scripts/sync-skill-command-reference.mjs", + "skill:commands:check": "bash scripts/check-skill-command-reference.sh", + "skill:md:sync": "node scripts/sync-skill-md.mjs", + "skill:md:check": "bash scripts/check-skill-md.sh", + "skill:sync": "node scripts/sync-opencli-skill-docs.mjs", + "skill:check": "bash scripts/check-opencli-skill-docs.sh" }, "keywords": [ "cli", diff --git a/scripts/check-opencli-skill-docs.sh b/scripts/check-opencli-skill-docs.sh new file mode 100755 index 00000000..ddba376b --- /dev/null +++ b/scripts/check-opencli-skill-docs.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$ROOT_DIR" + +node scripts/sync-opencli-skill-docs.mjs >/dev/null + +if ! git diff --quiet -- skills/opencli-skill/SKILL.md skills/opencli-skill/references/commands; then + echo "❌ OpenCLI skill docs are out of sync." + echo "Run: node scripts/sync-opencli-skill-docs.mjs" + git --no-pager diff --name-only -- skills/opencli-skill/SKILL.md skills/opencli-skill/references/commands + exit 1 +fi + +echo "✅ OpenCLI skill docs are in sync." diff --git a/scripts/check-skill-command-reference.sh b/scripts/check-skill-command-reference.sh new file mode 100755 index 00000000..5eece09a --- /dev/null +++ b/scripts/check-skill-command-reference.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$ROOT_DIR" + +node scripts/sync-skill-command-reference.mjs >/dev/null + +if ! git diff --quiet -- skills/opencli-skill/references/commands; then + echo "❌ Skill command references are out of sync with src/clis/." + echo "Run: node scripts/sync-skill-command-reference.mjs" + git --no-pager diff --name-only -- skills/opencli-skill/references/commands + exit 1 +fi + +echo "✅ Skill command references are in sync." diff --git a/scripts/check-skill-md.sh b/scripts/check-skill-md.sh new file mode 100755 index 00000000..0c624a75 --- /dev/null +++ b/scripts/check-skill-md.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$ROOT_DIR" + +node scripts/sync-skill-md.mjs >/dev/null + +if ! git diff --quiet -- skills/opencli-skill/SKILL.md; then + echo "❌ SKILL.md is out of sync with src/clis/." + echo "Run: node scripts/sync-skill-md.mjs" + git --no-pager diff --name-only -- skills/opencli-skill/SKILL.md + exit 1 +fi + +echo "✅ SKILL.md is in sync." diff --git a/scripts/sync-opencli-skill-docs.mjs b/scripts/sync-opencli-skill-docs.mjs new file mode 100755 index 00000000..0545fb63 --- /dev/null +++ b/scripts/sync-opencli-skill-docs.mjs @@ -0,0 +1,14 @@ +#!/usr/bin/env node +import { execSync } from 'node:child_process'; +import path from 'node:path'; + +const root = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..'); + +function run(cmd) { + execSync(cmd, { cwd: root, stdio: 'inherit' }); +} + +run('node scripts/sync-skill-command-reference.mjs'); +run('node scripts/sync-skill-md.mjs'); + +console.log('✅ OpenCLI skill docs synced.'); diff --git a/scripts/sync-skill-command-reference.mjs b/scripts/sync-skill-command-reference.mjs new file mode 100755 index 00000000..82845563 --- /dev/null +++ b/scripts/sync-skill-command-reference.mjs @@ -0,0 +1,206 @@ +#!/usr/bin/env node +import fs from 'node:fs'; +import path from 'node:path'; + +const root = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..'); +const srcClisDir = path.join(root, 'src', 'clis'); +const skillCommandsDir = path.join(root, 'skills', 'opencli-skill', 'references', 'commands'); + +const IGNORE_BASENAMES = new Set(['utils', 'shared', 'test-utils', 'index']); +const IGNORE_SUFFIXES = ['.test']; +const IGNORE_PATTERNS = [/(^|-)utils?($|-)/, /(^|-)helpers?($|-)/, /(^|-)shared($|-)/]; +const VALID_EXTS = new Set(['.ts', '.js', '.yaml', '.yml']); + +function normalizeNewlines(s) { return s.replace(/\r\n/g, '\n'); } +function normalizeSpacing(s) { + const lines = normalizeNewlines(s).split('\n'); + const out = []; + let blank = 0; + for (const line of lines) { + if (!line.trim()) { + blank += 1; + if (blank <= 1) out.push(''); + } else { + blank = 0; + out.push(line.replace(/[ \t]+$/g, '')); + } + } + while (out.length && out[out.length - 1] === '') out.pop(); + return out.join('\n') + '\n'; +} + +function listPlatforms() { + return fs.readdirSync(srcClisDir, { withFileTypes: true }) + .filter((d) => d.isDirectory() && !d.name.startsWith('_')) + .map((d) => d.name) + .sort((a, b) => a.localeCompare(b)); +} + +function listCommandFiles(platform) { + const dir = path.join(srcClisDir, platform); + return fs.readdirSync(dir, { withFileTypes: true }) + .filter((e) => e.isFile()) + .map((e) => ({ name: e.name, ext: path.extname(e.name), base: path.basename(e.name, path.extname(e.name)), full: path.join(dir, e.name) })) + .filter((f) => VALID_EXTS.has(f.ext)) + .filter((f) => !IGNORE_BASENAMES.has(f.base)) + .filter((f) => !IGNORE_SUFFIXES.some((s) => f.base.endsWith(s))) + .filter((f) => !IGNORE_PATTERNS.some((p) => p.test(f.base))) + .sort((a, b) => a.base.localeCompare(b.base)); +} + +function parseDocSections(content) { + const map = new Map(); + const regex = /^###\s+([^\n]+)\n([\s\S]*?)(?=\n###\s+|$)/gm; + let m; + while ((m = regex.exec(content)) !== null) { + map.set(m[1].trim(), m[2].replace(/^\n+/, '').replace(/\n+$/, '')); + } + return map; +} + +function matchQuoted(text, re) { + const m = text.match(re); + return m?.[2]?.trim(); +} + +function parseTsMeta(filePath) { + const src = fs.readFileSync(filePath, 'utf8'); + const description = matchQuoted(src, /\bdescription\s*:\s*(["'`])([\s\S]*?)\1/); + + const args = []; + const argsBlock = src.match(/\bargs\s*:\s*\[([\s\S]*?)\]\s*,\s*(?:columns|func)\s*:/); + if (argsBlock) { + const rowRegex = /\{([\s\S]*?)\}/g; + let row; + while ((row = rowRegex.exec(argsBlock[1])) !== null) { + const body = row[1]; + const name = matchQuoted(body, /\bname\s*:\s*(["'`])([\s\S]*?)\1/); + if (!name) continue; + const required = /\brequired\s*:\s*true\b/.test(body); + const positional = /\bpositional\s*:\s*true\b/.test(body); + const type = matchQuoted(body, /\btype\s*:\s*(["'`])([\s\S]*?)\1/); + const def = body.match(/\bdefault\s*:\s*([^,\n}]+)/)?.[1]?.trim(); + const help = matchQuoted(body, /\bhelp\s*:\s*(["'`])([\s\S]*?)\1/); + args.push({ name, required, positional, type, defaultValue: def, help }); + } + } + + return { description, args }; +} + +function parseYamlMeta(filePath) { + const src = fs.readFileSync(filePath, 'utf8'); + const description = src.match(/^description:\s*(.+)$/m)?.[1]?.trim()?.replace(/^['"]|['"]$/g, ''); + + const args = []; + const lines = src.split(/\r?\n/); + let inArgs = false; + let cur = null; + for (const raw of lines) { + const line = raw.replace(/\t/g, ' '); + if (!inArgs) { + if (/^args:\s*$/.test(line)) inArgs = true; + continue; + } + if (/^[A-Za-z_][\w-]*:\s*/.test(line)) break; + const itemStart = line.match(/^\s*-\s+name:\s*(.+)\s*$/); + if (itemStart) { + if (cur?.name) args.push(cur); + cur = { name: itemStart[1].trim().replace(/^['"]|['"]$/g, ''), required: false, positional: false }; + continue; + } + if (!cur) continue; + const kv = line.match(/^\s+([\w-]+):\s*(.+)\s*$/); + if (!kv) continue; + const key = kv[1]; + const val = kv[2].trim(); + if (key === 'required') cur.required = /^true$/i.test(val); + else if (key === 'positional') cur.positional = /^true$/i.test(val); + else if (key === 'type') cur.type = val.replace(/^['"]|['"]$/g, ''); + else if (key === 'default') cur.defaultValue = val; + else if (key === 'help') cur.help = val.replace(/^['"]|['"]$/g, ''); + } + if (cur?.name) args.push(cur); + + return { description, args }; +} + +function parseCommandMeta(file) { + try { + if (file.ext === '.yaml' || file.ext === '.yml') return parseYamlMeta(file.full); + if (file.ext === '.ts' || file.ext === '.js') return parseTsMeta(file.full); + } catch {} + return { description: undefined, args: [] }; +} + +function renderArgs(args) { + if (!args.length) return '- Args: None'; + return ['- Args:', ...args.map((a) => { + const tags = [a.required ? 'required' : 'optional']; + if (a.type) tags.push(`type: ${a.type}`); + if (a.defaultValue !== undefined) tags.push(`default: ${a.defaultValue}`); + const suffix = a.help ? `; ${a.help}` : ''; + return ` - \`${a.name}\`(${tags.join('; ')})${suffix}`; + })].join('\n'); +} + +function existingIsTodo(body) { + if (!body) return true; + return /^- Purpose:\s*(TODO|.+ operation)\b/m.test(body); +} + +function buildSection(platform, cmd, existingBody, meta) { + const purpose = meta.description || `${platform} ${cmd} operation`; + const usage = `- Usage: \`opencli ${platform} ${cmd} [options] -f json\``; + const argsBlock = renderArgs(meta.args); + + if (existingBody && existingBody.trim() && !existingIsTodo(existingBody)) { + const body = existingBody.trim(); + const lines = body.split('\n'); + const hasPurpose = lines.some((l) => l.startsWith('- Purpose:')); + const hasArgs = lines.some((l) => l.startsWith('- Args:')); + const hasUsage = lines.some((l) => l.startsWith('- Usage:')); + + const out = [...lines]; + if (!hasPurpose) out.unshift(`- Purpose: ${purpose}`); + if (!hasArgs) out.push(argsBlock); + if (!hasUsage) out.push(usage); + return `### ${cmd}\n${out.join('\n').trim()}\n`; + } + + return `### ${cmd}\n- Purpose: ${purpose}\n${argsBlock}\n${usage}\n`; +} + +function buildDoc(platform, files, oldContent) { + const existing = oldContent ? parseDocSections(oldContent) : new Map(); + const parts = [`# ${platform}`, '', '## Commands', '']; + + for (const file of files) { + const meta = parseCommandMeta(file); + parts.push(buildSection(platform, file.base, existing.get(file.base), meta).trimEnd()); + parts.push(''); + } + + return normalizeSpacing(parts.join('\n')); +} + +fs.mkdirSync(skillCommandsDir, { recursive: true }); +const updated = []; + +for (const platform of listPlatforms()) { + const files = listCommandFiles(platform); + const docPath = path.join(skillCommandsDir, `${platform}.md`); + const oldContent = fs.existsSync(docPath) ? normalizeNewlines(fs.readFileSync(docPath, 'utf8')) : ''; + const next = buildDoc(platform, files, oldContent); + if (normalizeSpacing(oldContent || '') !== next) { + fs.writeFileSync(docPath, next, 'utf8'); + updated.push(path.relative(root, docPath)); + } +} + +if (updated.length) { + console.log(`Updated ${updated.length} command reference files:`); + for (const f of updated) console.log(`- ${f}`); +} else { + console.log('Command references already in sync.'); +} diff --git a/scripts/sync-skill-md.mjs b/scripts/sync-skill-md.mjs new file mode 100755 index 00000000..61c3a871 --- /dev/null +++ b/scripts/sync-skill-md.mjs @@ -0,0 +1,95 @@ +#!/usr/bin/env node +import fs from 'node:fs'; +import path from 'node:path'; + +const root = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..'); +const srcClisDir = path.join(root, 'src', 'clis'); +const skillPath = path.join(root, 'skills', 'opencli-skill', 'SKILL.md'); + +const IGNORE_BASENAMES = new Set(['utils', 'shared', 'test-utils', 'index']); +const IGNORE_SUFFIXES = ['.test']; +const IGNORE_PATTERNS = [/(^|-)utils?($|-)/, /(^|-)helpers?($|-)/, /(^|-)shared($|-)/]; +const VALID_EXTS = new Set(['.ts', '.js', '.yaml', '.yml']); + +function listPlatforms() { + return fs.readdirSync(srcClisDir, { withFileTypes: true }) + .filter((d) => d.isDirectory() && !d.name.startsWith('_')) + .map((d) => d.name) + .sort((a, b) => a.localeCompare(b)); +} + +function listCommands(platform) { + const dir = path.join(srcClisDir, platform); + const names = new Set(); + for (const e of fs.readdirSync(dir, { withFileTypes: true })) { + if (!e.isFile()) continue; + const ext = path.extname(e.name); + if (!VALID_EXTS.has(ext)) continue; + const base = path.basename(e.name, ext); + if (IGNORE_BASENAMES.has(base)) continue; + if (IGNORE_SUFFIXES.some((s) => base.endsWith(s))) continue; + if (IGNORE_PATTERNS.some((p) => p.test(base))) continue; + names.add(base); + } + return [...names].sort((a, b) => a.localeCompare(b)); +} + +function replaceOrInsertAutoBlock(text, startTag, endTag, blockBody) { + const block = `${startTag}\n${blockBody}\n${endTag}`; + if (text.includes(startTag) && text.includes(endTag)) { + const re = new RegExp(`${startTag}[\\s\\S]*?${endTag}`, 'm'); + return text.replace(re, block); + } + return `${text.trimEnd()}\n\n${block}\n`; +} + +function updateDescription(text, description) { + const fm = text.match(/^---\n([\s\S]*?)\n---\n?/); + if (!fm) throw new Error('SKILL.md missing frontmatter'); + const full = fm[0]; + const body = fm[1]; + let nextBody; + if (/^description:\s*/m.test(body)) { + nextBody = body.replace(/^description:\s*.*$/m, `description: '${description.replace(/'/g, "''")}'`); + } else { + nextBody = `${body}\ndescription: '${description.replace(/'/g, "''")}'`; + } + return text.replace(full, `---\n${nextBody}\n---\n`); +} + +const platforms = listPlatforms(); +const platformData = platforms.map((p) => ({ platform: p, commands: listCommands(p) })); +const totalPlatforms = platformData.length; +const totalCommands = platformData.reduce((s, p) => s + p.commands.length, 0); + +const allPlatforms = platformData + .slice() + .map((p) => p.platform) + .sort((a, b) => a.localeCompare(b)) + .join(', '); + +const description = `Cross-platform web automation skill for search, retrieval, posting, interaction, and downloads. Supports platforms: ${allPlatforms}.`; + +let skill = fs.readFileSync(skillPath, 'utf8'); +skill = updateDescription(skill, description); + +const lines = []; +lines.push(`- Total: **${totalPlatforms} platforms**, **${totalCommands} commands**`); +lines.push(''); +for (const p of platformData) { + const preview = p.commands.slice(0, 8).join(', '); + const more = p.commands.length > 8 ? `, ... (+${p.commands.length - 8})` : ''; + lines.push(`- **${p.platform}** (${p.commands.length}): ${preview}${more}`); +} +lines.push(''); +lines.push(`_Coverage derived from source adapters._`); + +skill = replaceOrInsertAutoBlock( + skill, + '', + '', + lines.join('\n') +); + +fs.writeFileSync(skillPath, skill); +console.log(`Updated ${path.relative(root, skillPath)} with ${totalPlatforms} platforms / ${totalCommands} commands.`); diff --git a/skills/opencli-skill/SKILL.md b/skills/opencli-skill/SKILL.md new file mode 100644 index 00000000..daec7e7b --- /dev/null +++ b/skills/opencli-skill/SKILL.md @@ -0,0 +1,122 @@ +--- +name: opencli-skill +description: 'Cross-platform web automation skill for search, retrieval, posting, interaction, and downloads. Supports platforms: 36kr, amazon, antigravity, apple-podcasts, arxiv, band, barchart, bbc, bilibili, bloomberg, bluesky, boss, chaoxing, chatgpt, chatwise, codex, coupang, ctrip, cursor, devto, dictionary, discord-app, douban, doubao, doubao-app, douyin, facebook, gemini, google, grok, hackernews, hf, imdb, instagram, jd, jike, jimeng, linkedin, linux-do, lobsters, medium, notebooklm, notion, ones, paperreview, pixiv, producthunt, reddit, reuters, sinablog, sinafinance, smzdm, spotify, stackoverflow, steam, substack, tieba, tiktok, twitter, v2ex, web, weibo, weixin, weread, wikipedia, xiaohongshu, xiaoyuzhou, xueqiu, yahoo-finance, yollomi, youtube, zhihu, zsxq.' +--- + +Use this skill as a platform command router. + +Prerequisites and bootstrap: + +- Ensure `opencli` is available. If missing, install: + - `npm install -g @jackwener/opencli` + - verify: `opencli --version` +- Before first real command, run: + - `opencli doctor` +- If doctor reports extension/browser connectivity issue, prompt user to install Chrome Browser Bridge extension manually (same as README): + - Install location: Chrome extension management page `chrome://extensions` + - Option A (recommended): download `opencli-extension.zip` from OpenCLI Releases and install + - Option B (dev mode): open `chrome://extensions` → enable Developer mode → click "Load unpacked" → select OpenCLI repo `extension/` directory + - After install: keep Chrome open and logged into target platforms, then rerun `opencli doctor` + +1. Detect target platform from user request. +2. Load `references/commands/.md`. +3. Select the command and fill required args. +4. Prefer `-f json` for parseable output. +5. If platform/command is unclear, ask one minimal clarification or run `opencli list` / `opencli --help`. + +All command docs live in: +- `references/commands/*.md` + +Record workflow (for dynamic/auth-heavy pages): + +- Start recording: `opencli record ` +- Optional args: + - `--site ` specify site name + - `--timeout ` recording timeout (default 60000) + - `--poll ` polling interval (default 2000) + - `--out ` output directory +- During recording, manually operate the page in browser to trigger API calls. +- Output files: + - `.opencli/record//captured.json` + - `.opencli/record//candidates/*.yaml` +- Use record when `explore` cannot fully discover requests due to login state, SPA routing, or interaction-dependent APIs. + + +- Total: **73 platforms**, **461 commands** + +- **36kr** (4): article, hot, news, search +- **amazon** (5): bestsellers, discussion, offer, product, search +- **antigravity** (9): dump, extract-code, model, new, read, send, serve, status, ... (+1) +- **apple-podcasts** (3): episodes, search, top +- **arxiv** (2): paper, search +- **band** (4): bands, mentions, post, posts +- **barchart** (4): flow, greeks, options, quote +- **bbc** (1): news +- **bilibili** (13): comments, download, dynamic, favorite, feed, following, history, hot, ... (+5) +- **bloomberg** (10): businessweek, economics, feeds, industries, main, markets, news, opinions, ... (+2) +- **bluesky** (9): feeds, followers, following, profile, search, starter-packs, thread, trending, ... (+1) +- **boss** (14): batchgreet, chatlist, chatmsg, detail, exchange, greet, invite, joblist, ... (+6) +- **chaoxing** (2): assignments, exams +- **chatgpt** (7): ask, ax, model, new, read, send, status +- **chatwise** (9): ask, export, history, model, new, read, screenshot, send, ... (+1) +- **codex** (11): ask, dump, export, extract-diff, history, model, new, read, ... (+3) +- **coupang** (2): add-to-cart, search +- **ctrip** (1): search +- **cursor** (12): ask, composer, dump, export, extract-code, history, model, new, ... (+4) +- **devto** (3): tag, top, user +- **dictionary** (3): examples, search, synonyms +- **discord-app** (7): channels, members, read, search, send, servers, status +- **douban** (9): book-hot, download, marks, movie-hot, photos, reviews, search, subject, ... (+1) +- **doubao** (9): ask, detail, history, meeting-summary, meeting-transcript, new, read, send, ... (+1) +- **doubao-app** (7): ask, dump, new, read, screenshot, send, status +- **douyin** (13): activities, collections, delete, draft, drafts, hashtag, location, profile, ... (+5) +- **facebook** (10): add-friend, events, feed, friends, groups, join-group, memories, notifications, ... (+2) +- **gemini** (3): ask, image, new +- **google** (4): news, search, suggest, trends +- **grok** (1): ask +- **hackernews** (8): ask, best, jobs, new, search, show, top, user +- **hf** (1): top +- **imdb** (6): person, reviews, search, title, top, trending +- **instagram** (15): comment, download, explore, follow, followers, following, like, profile, ... (+7) +- **jd** (1): item +- **jike** (10): comment, create, feed, like, notifications, post, repost, search, ... (+2) +- **jimeng** (2): generate, history +- **linkedin** (2): search, timeline +- **linux-do** (10): categories, category, feed, hot, latest, search, tags, topic, ... (+2) +- **lobsters** (4): active, hot, newest, tag +- **medium** (3): feed, search, user +- **notebooklm** (14): current, get, history, list, note-list, notes-get, open, rpc, ... (+6) +- **notion** (8): export, favorites, new, read, search, sidebar, status, write +- **ones** (11): common, enrich-tasks, login, logout, me, my-tasks, resolve-labels, task, ... (+3) +- **paperreview** (3): feedback, review, submit +- **pixiv** (6): detail, download, illusts, ranking, search, user +- **producthunt** (4): browse, hot, posts, today +- **reddit** (15): comment, frontpage, hot, popular, read, save, saved, search, ... (+7) +- **reuters** (1): search +- **sinablog** (4): article, hot, search, user +- **sinafinance** (3): news, rolling-news, stock +- **smzdm** (1): search +- **spotify** (1): spotify +- **stackoverflow** (4): bounties, hot, search, unanswered +- **steam** (1): top-sellers +- **substack** (3): feed, publication, search +- **tieba** (4): hot, posts, read, search +- **tiktok** (15): comment, explore, follow, following, friends, like, live, notifications, ... (+7) +- **twitter** (25): accept, article, block, bookmark, bookmarks, delete, download, follow, ... (+17) +- **v2ex** (11): daily, hot, latest, me, member, node, nodes, notifications, ... (+3) +- **web** (1): read +- **weibo** (7): comments, feed, hot, me, post, search, user +- **weixin** (1): download +- **weread** (7): book, highlights, notebooks, notes, ranking, search, shelf +- **wikipedia** (4): random, search, summary, trending +- **xiaohongshu** (13): comments, creator-note-detail, creator-notes, creator-notes-summary, creator-profile, creator-stats, download, feed, ... (+5) +- **xiaoyuzhou** (3): episode, podcast, podcast-episodes +- **xueqiu** (10): comments, earnings-date, feed, fund-holdings, fund-snapshot, hot, hot-stock, search, ... (+2) +- **yahoo-finance** (1): quote +- **yollomi** (12): background, edit, face-swap, generate, models, object-remover, remove-bg, restore, ... (+4) +- **youtube** (6): channel, comments, search, transcript, transcript-group, video +- **zhihu** (4): download, hot, question, search +- **zsxq** (5): dynamics, groups, search, topic, topics + +_Coverage derived from source adapters._ + diff --git a/skills/opencli-skill/references/commands/36kr.md b/skills/opencli-skill/references/commands/36kr.md new file mode 100644 index 00000000..aea39b55 --- /dev/null +++ b/skills/opencli-skill/references/commands/36kr.md @@ -0,0 +1,29 @@ +# 36kr + +## Commands + +### article +- Purpose: 获取36氪文章正文内容 +- Args: + - `id`(required); Article ID or full 36kr article URL +- Usage: `opencli 36kr article [options] -f json` + +### hot +- Purpose: 36氪热榜 — trending articles (renqi/zonghe/shoucang/catalog) +- Args: + - `limit`(optional; type: int; default: 20); Number of items (max 50) + - `type`(optional; type: string; default: 'catalog'); List type: renqi (人气), zonghe (综合), shoucang (收藏), catalog (热门资讯) +- Usage: `opencli 36kr hot [options] -f json` + +### news +- Purpose: Latest tech/startup news from 36kr (36氪) +- Args: + - `limit`(optional; type: int; default: 20); Number of articles (max 50) +- Usage: `opencli 36kr news [options] -f json` + +### search +- Purpose: 搜索36氪文章 +- Args: + - `query`(required); Search keyword (e.g. "AI", "OpenAI") + - `limit`(optional; type: int; default: 20); Number of results (max 50) +- Usage: `opencli 36kr search [options] -f json` diff --git a/skills/opencli-skill/references/commands/amazon.md b/skills/opencli-skill/references/commands/amazon.md new file mode 100644 index 00000000..c7d2eee7 --- /dev/null +++ b/skills/opencli-skill/references/commands/amazon.md @@ -0,0 +1,36 @@ +# amazon + +## Commands + +### bestsellers +- Purpose: Amazon Best Sellers pages for category candidate discovery +- Args: + - `input`(optional); Best sellers URL or /zgbs path. Omit to use the root Best Sellers page. + - `limit`(optional; type: int; default: 100); Maximum number of ranked items to return (default 100) +- Usage: `opencli amazon bestsellers [options] -f json` + +### discussion +- Purpose: Amazon review summary and sample customer discussion from product review pages +- Args: + - `input`(required); ASIN or product URL, for example B0FJS72893 + - `limit`(optional; type: int; default: 10); Maximum number of review samples to return (default 10) +- Usage: `opencli amazon discussion [options] -f json` + +### offer +- Purpose: Amazon seller, buy box, and fulfillment facts from the product page +- Args: + - `input`(required); ASIN or product URL, for example B0FJS72893 +- Usage: `opencli amazon offer [options] -f json` + +### product +- Purpose: Amazon product page facts for candidate validation +- Args: + - `input`(required); ASIN or product URL, for example B0FJS72893 +- Usage: `opencli amazon product [options] -f json` + +### search +- Purpose: Amazon search results for product discovery and coarse filtering +- Args: + - `query`(required); Search query, for example "desk shelf organizer" + - `limit`(optional; type: int; default: 20); Maximum number of results to return (default 20) +- Usage: `opencli amazon search [options] -f json` diff --git a/skills/opencli-skill/references/commands/antigravity.md b/skills/opencli-skill/references/commands/antigravity.md new file mode 100644 index 00000000..3d0ffa29 --- /dev/null +++ b/skills/opencli-skill/references/commands/antigravity.md @@ -0,0 +1,51 @@ +# antigravity + +## Commands + +### dump +- Purpose: Dump the DOM to help AI understand the UI +- Args: None +- Usage: `opencli antigravity dump [options] -f json` + +### extract-code +- Purpose: Extract multi-line code blocks from the current Antigravity conversation +- Args: None +- Usage: `opencli antigravity extract-code [options] -f json` + +### model +- Purpose: Switch the active LLM model in Antigravity +- Args: + - `name`(required); Target model name (e.g. claude, gemini, o1) +- Usage: `opencli antigravity model [options] -f json` + +### new +- Purpose: Start a new conversation / clear context in Antigravity +- Args: None +- Usage: `opencli antigravity new [options] -f json` + +### read +- Purpose: Read the latest chat messages from Antigravity AI +- Args: + - `last`(optional); Number of recent messages to read (not fully implemented due to generic structure, currently returns full history text or latest chunk) +- Usage: `opencli antigravity read [options] -f json` + +### send +- Purpose: Send a message to Antigravity AI via the internal Lexical editor +- Args: + - `message`(required); The message text to send +- Usage: `opencli antigravity send [options] -f json` + +### serve +- Purpose: antigravity serve operation +- Args: None +- Usage: `opencli antigravity serve [options] -f json` + +### status +- Purpose: Check Antigravity CDP connection and get current page state +- Args: None +- Usage: `opencli antigravity status [options] -f json` + +### watch +- Purpose: Stream new chat messages from Antigravity in real-time +- Args: None +- Usage: `opencli antigravity watch [options] -f json` diff --git a/skills/opencli-skill/references/commands/apple-podcasts.md b/skills/opencli-skill/references/commands/apple-podcasts.md new file mode 100644 index 00000000..ac993309 --- /dev/null +++ b/skills/opencli-skill/references/commands/apple-podcasts.md @@ -0,0 +1,24 @@ +# apple-podcasts + +## Commands + +### episodes +- Purpose: List recent episodes of an Apple Podcast (use ID from search) +- Args: + - `id`(required); Podcast ID (collectionId from search output) + - `limit`(optional; type: int; default: 15); Max episodes to show +- Usage: `opencli apple-podcasts episodes [options] -f json` + +### search +- Purpose: Search Apple Podcasts +- Args: + - `query`(required); Search keyword + - `limit`(optional; type: int; default: 10); Max results +- Usage: `opencli apple-podcasts search [options] -f json` + +### top +- Purpose: Top podcasts chart on Apple Podcasts +- Args: + - `limit`(optional; type: int; default: 20); Number of podcasts (max 100) + - `country`(optional; default: 'us'); Country code (e.g. us, cn, gb, jp) +- Usage: `opencli apple-podcasts top [options] -f json` diff --git a/skills/opencli-skill/references/commands/arxiv.md b/skills/opencli-skill/references/commands/arxiv.md new file mode 100644 index 00000000..e9016a25 --- /dev/null +++ b/skills/opencli-skill/references/commands/arxiv.md @@ -0,0 +1,16 @@ +# arxiv + +## Commands + +### paper +- Purpose: Get arXiv paper details by ID +- Args: + - `id`(required); arXiv paper ID (e.g. 1706.03762) +- Usage: `opencli arxiv paper [options] -f json` + +### search +- Purpose: Search arXiv papers +- Args: + - `query`(required); Search keyword (e.g. "attention is all you need") + - `limit`(optional; type: int; default: 10); Max results (max 25) +- Usage: `opencli arxiv search [options] -f json` diff --git a/skills/opencli-skill/references/commands/band.md b/skills/opencli-skill/references/commands/band.md new file mode 100644 index 00000000..96b875e9 --- /dev/null +++ b/skills/opencli-skill/references/commands/band.md @@ -0,0 +1,32 @@ +# band + +## Commands + +### bands +- Purpose: List all Bands you belong to +- Args: None +- Usage: `opencli band bands [options] -f json` + +### mentions +- Purpose: Show Band notifications where you are @mentioned +- Args: + - `filter`(optional; default: 'mentioned'); Filter: mentioned (default) | all | post | comment + - `limit`(optional; type: int; default: 20); Max results + - `unread`(optional; type: bool; default: false); Show only unread notifications +- Usage: `opencli band mentions [options] -f json` + +### post +- Purpose: Export full content of a post including comments +- Args: + - `band_no`(required; type: int); Band number + - `post_no`(required; type: int); Post number + - `output`(optional; type: str; default: ''); Directory to save attached photos + - `comments`(optional; type: bool; default: true); Include comments (default: true) +- Usage: `opencli band post [options] -f json` + +### posts +- Purpose: List posts from a Band +- Args: + - `band_no`(required; type: int); Band number (get it from: band bands) + - `limit`(optional; type: int; default: 20); Max results +- Usage: `opencli band posts [options] -f json` diff --git a/skills/opencli-skill/references/commands/barchart.md b/skills/opencli-skill/references/commands/barchart.md new file mode 100644 index 00000000..fbf7fccb --- /dev/null +++ b/skills/opencli-skill/references/commands/barchart.md @@ -0,0 +1,32 @@ +# barchart + +## Commands + +### flow +- Purpose: Barchart unusual options activity / options flow +- Args: + - `type`(optional; type: str; default: 'all'); Filter: all, call, or put + - `limit`(optional; type: int; default: 20); Number of results +- Usage: `opencli barchart flow [options] -f json` + +### greeks +- Purpose: Barchart options greeks overview (IV, delta, gamma, theta, vega) +- Args: + - `symbol`(required); Stock ticker (e.g. AAPL) + - `expiration`(optional; type: str); Expiration date (YYYY-MM-DD). Defaults to the nearest available expiration. + - `limit`(optional; type: int; default: 10); Number of near-the-money strikes per type +- Usage: `opencli barchart greeks [options] -f json` + +### options +- Purpose: Barchart options chain with greeks, IV, volume, and open interest +- Args: + - `symbol`(required); Stock ticker (e.g. AAPL) + - `type`(optional; type: str; default: 'Call'); Option type: Call or Put + - `limit`(optional; type: int; default: 20); Max number of strikes to return +- Usage: `opencli barchart options [options] -f json` + +### quote +- Purpose: Barchart stock quote with price, volume, and key metrics +- Args: + - `symbol`(required); Stock ticker (e.g. AAPL, MSFT, TSLA) +- Usage: `opencli barchart quote [options] -f json` diff --git a/skills/opencli-skill/references/commands/bbc.md b/skills/opencli-skill/references/commands/bbc.md new file mode 100644 index 00000000..33e42e5e --- /dev/null +++ b/skills/opencli-skill/references/commands/bbc.md @@ -0,0 +1,9 @@ +# bbc + +## Commands + +### news +- Purpose: BBC News headlines (RSS) +- Args: + - `limit`(optional; type: int; default: 20); Number of headlines (max 50) +- Usage: `opencli bbc news [options] -f json` diff --git a/skills/opencli-skill/references/commands/bilibili.md b/skills/opencli-skill/references/commands/bilibili.md new file mode 100644 index 00000000..daf264ed --- /dev/null +++ b/skills/opencli-skill/references/commands/bilibili.md @@ -0,0 +1,93 @@ +# bilibili + +## Commands + +### comments +- Purpose: 获取 B站视频评论(使用官方 API + WBI 签名) +- Args: + - `bvid`(required); Video BV ID (e.g. BV1WtAGzYEBm) + - `limit`(optional; type: int; default: 20); Number of comments (max 50) +- Usage: `opencli bilibili comments [options] -f json` + +### download +- Purpose: Download Bilibili video (requires yt-dlp) +- Args: + - `bvid`(required); Video BV ID (e.g., BV1xxx) + - `output`(optional; default: './bilibili-downloads'); Output directory + - `quality`(optional; default: 'best'); Video quality (best, 1080p, 720p, 480p) +- Usage: `opencli bilibili download [options] -f json` + +### dynamic +- Purpose: Get Bilibili user dynamic feed +- Args: + - `limit`(optional; type: int; default: 15) +- Usage: `opencli bilibili dynamic [options] -f json` + +### favorite +- Purpose: My default favorites folder +- Args: + - `limit`(optional; type: int; default: 20); Number of results + - `page`(optional; type: int; default: 1); Page number +- Usage: `opencli bilibili favorite [options] -f json` + +### feed +- Purpose: Following feed timeline +- Args: + - `limit`(optional; type: int; default: 20); Number of results + - `type`(optional; default: 'all'); Filter: all, video, article +- Usage: `opencli bilibili feed [options] -f json` + +### following +- Purpose: Get a Bilibili user's following list +- Args: + - `uid`(optional); 目标用户 ID(默认为当前登录用户) + - `page`(optional; type: int; default: 1); 页码 + - `limit`(optional; type: int; default: 50); 每页数量 (最大 50) +- Usage: `opencli bilibili following [options] -f json` + +### history +- Purpose: My watch history +- Args: + - `limit`(optional; type: int; default: 20); Number of results +- Usage: `opencli bilibili history [options] -f json` + +### hot +- Purpose: Bilibili hot videos +- Args: None +- Usage: `opencli bilibili hot [options] -f json` + +### me +- Purpose: My Bilibili profile info +- Args: None +- Usage: `opencli bilibili me [options] -f json` + +### ranking +- Purpose: Get Bilibili video ranking board +- Args: + - `limit`(optional; type: int; default: 20) +- Usage: `opencli bilibili ranking [options] -f json` + +### search +- Purpose: Search Bilibili videos or users +- Args: + - `query`(required); Search keyword + - `type`(optional; default: 'video'); video or user + - `page`(optional; type: int; default: 1); Result page + - `limit`(optional; type: int; default: 20); Number of results +- Usage: `opencli bilibili search [options] -f json` + +### subtitle +- Purpose: Get subtitles for a Bilibili video +- Args: + - `bvid`(required) + - `lang`(optional); 字幕语言代码 (如 zh-CN, en-US, ai-zh),默认取第一个 +- Usage: `opencli bilibili subtitle [options] -f json` + +### user-videos +- Purpose: List videos posted by a specific user +- Args: + - `uid`(required); User UID or username + - `limit`(optional; type: int; default: 20); Number of results + - `order`(optional; default: 'pubdate'); Sort: pubdate, click, stow + - `page`(optional; type: int; default: 1); Page number +- Usage: `opencli bilibili user-videos [options] -f json` diff --git a/skills/opencli-skill/references/commands/bloomberg.md b/skills/opencli-skill/references/commands/bloomberg.md new file mode 100644 index 00000000..c5f5ba7a --- /dev/null +++ b/skills/opencli-skill/references/commands/bloomberg.md @@ -0,0 +1,62 @@ +# bloomberg + +## Commands + +### businessweek +- Purpose: Bloomberg Businessweek top stories (RSS) +- Args: + - `limit`(optional; type: int; default: 1); Number of feed items to return (max 20) +- Usage: `opencli bloomberg businessweek [options] -f json` + +### economics +- Purpose: Bloomberg Economics top stories (RSS) +- Args: + - `limit`(optional; type: int; default: 1); Number of feed items to return (max 20) +- Usage: `opencli bloomberg economics [options] -f json` + +### feeds +- Purpose: List the Bloomberg RSS feed aliases used by the adapter +- Args: None +- Usage: `opencli bloomberg feeds [options] -f json` + +### industries +- Purpose: Bloomberg Industries top stories (RSS) +- Args: + - `limit`(optional; type: int; default: 1); Number of feed items to return (max 20) +- Usage: `opencli bloomberg industries [options] -f json` + +### main +- Purpose: Bloomberg homepage top stories (RSS) +- Args: + - `limit`(optional; type: int; default: 1); Number of feed items to return (max 20) +- Usage: `opencli bloomberg main [options] -f json` + +### markets +- Purpose: Bloomberg Markets top stories (RSS) +- Args: + - `limit`(optional; type: int; default: 1); Number of feed items to return (max 20) +- Usage: `opencli bloomberg markets [options] -f json` + +### news +- Purpose: Read a Bloomberg story/article page and return title, full content, and media links +- Args: + - `link`(required); Bloomberg story/article URL or relative Bloomberg path +- Usage: `opencli bloomberg news [options] -f json` + +### opinions +- Purpose: Bloomberg Opinion top stories (RSS) +- Args: + - `limit`(optional; type: int; default: 1); Number of feed items to return (max 20) +- Usage: `opencli bloomberg opinions [options] -f json` + +### politics +- Purpose: Bloomberg Politics top stories (RSS) +- Args: + - `limit`(optional; type: int; default: 1); Number of feed items to return (max 20) +- Usage: `opencli bloomberg politics [options] -f json` + +### tech +- Purpose: Bloomberg Tech top stories (RSS) +- Args: + - `limit`(optional; type: int; default: 1); Number of feed items to return (max 20) +- Usage: `opencli bloomberg tech [options] -f json` diff --git a/skills/opencli-skill/references/commands/bluesky.md b/skills/opencli-skill/references/commands/bluesky.md new file mode 100644 index 00000000..80048101 --- /dev/null +++ b/skills/opencli-skill/references/commands/bluesky.md @@ -0,0 +1,48 @@ +# bluesky + +## Commands + +### feeds +- Purpose: Popular Bluesky feed generators +- Args: None +- Usage: `opencli bluesky feeds [options] -f json` + +### followers +- Purpose: List followers of a Bluesky user +- Args: None +- Usage: `opencli bluesky followers [options] -f json` + +### following +- Purpose: List accounts a Bluesky user is following +- Args: None +- Usage: `opencli bluesky following [options] -f json` + +### profile +- Purpose: Get Bluesky user profile info +- Args: None +- Usage: `opencli bluesky profile [options] -f json` + +### search +- Purpose: Search Bluesky users +- Args: None +- Usage: `opencli bluesky search [options] -f json` + +### starter-packs +- Purpose: Get starter packs created by a Bluesky user +- Args: None +- Usage: `opencli bluesky starter-packs [options] -f json` + +### thread +- Purpose: Get a Bluesky post thread with replies +- Args: None +- Usage: `opencli bluesky thread [options] -f json` + +### trending +- Purpose: Trending topics on Bluesky +- Args: None +- Usage: `opencli bluesky trending [options] -f json` + +### user +- Purpose: Get recent posts from a Bluesky user +- Args: None +- Usage: `opencli bluesky user [options] -f json` diff --git a/skills/opencli-skill/references/commands/boss.md b/skills/opencli-skill/references/commands/boss.md new file mode 100644 index 00000000..0bdfe3cb --- /dev/null +++ b/skills/opencli-skill/references/commands/boss.md @@ -0,0 +1,108 @@ +# boss + +## Commands + +### batchgreet +- Purpose: Send batch greetings to recommended candidates on BOSS Zhipin +- Args: + - `job-id`(optional; default: ''); Filter by encrypted job ID (greet all jobs if empty) + - `limit`(optional; type: int; default: 5); Max candidates to greet + - `text`(optional; default: ''); Custom greeting message (uses default if empty) +- Usage: `opencli boss batchgreet [options] -f json` + +### chatlist +- Purpose: View recruiter chat list on BOSS Zhipin +- Args: + - `page`(optional; type: int; default: 1); Page number + - `limit`(optional; type: int; default: 20); Number of results + - `job-id`(optional; default: '0'); Filter by job ID (0=all) +- Usage: `opencli boss chatlist [options] -f json` + +### chatmsg +- Purpose: View chat messages with a candidate on BOSS Zhipin +- Args: + - `uid`(required); Encrypted UID (from chatlist) + - `page`(optional; type: int; default: 1); Page number +- Usage: `opencli boss chatmsg [options] -f json` + +### detail +- Purpose: View job detail on BOSS Zhipin +- Args: + - `security-id`(required); Security ID from search results (securityId field) +- Usage: `opencli boss detail [options] -f json` + +### exchange +- Purpose: Request contact exchange (phone/WeChat) on BOSS Zhipin +- Args: + - `uid`(required); Encrypted UID of the candidate + - `type`(optional; default: 'phone'); Exchange type: phone or wechat +- Usage: `opencli boss exchange [options] -f json` + +### greet +- Purpose: Send greeting to a new candidate (start chat) on BOSS Zhipin +- Args: + - `uid`(required); Encrypted UID of the candidate (from recommend) + - `security-id`(required); Security ID of the candidate + - `job-id`(required); Encrypted job ID + - `text`(optional; default: ''); Custom greeting message (uses default template if empty) +- Usage: `opencli boss greet [options] -f json` + +### invite +- Purpose: Send interview invitation on BOSS Zhipin +- Args: + - `uid`(required); Encrypted UID of the candidate + - `time`(required); Interview time (e.g. 2025-04-01 14:00) + - `address`(optional; default: ''); Interview address (uses saved address if empty) + - `contact`(optional; default: ''); Contact person name (uses saved contact if empty) +- Usage: `opencli boss invite [options] -f json` + +### joblist +- Purpose: View my posted jobs on BOSS Zhipin +- Args: None +- Usage: `opencli boss joblist [options] -f json` + +### mark +- Purpose: Add labels to a candidate on BOSS Zhipin +- Args: + - `uid`(required); Encrypted UID of the candidate + - `label`(required); Label name (新招呼/沟通中/已约面/已获取简历/已交换电话/已交换微信/不合适/收藏) or label ID + - `remove`(optional; type: boolean; default: false); Remove the label instead of adding +- Usage: `opencli boss mark [options] -f json` + +### recommend +- Purpose: View recommended candidates (new greetings list) on BOSS Zhipin +- Args: + - `limit`(optional; type: int; default: 20); Number of results to return +- Usage: `opencli boss recommend [options] -f json` + +### resume +- Purpose: View candidate resume on BOSS Zhipin (recruiter side) +- Args: + - `uid`(required); Encrypted UID of the candidate (from chatlist) +- Usage: `opencli boss resume [options] -f json` + +### search +- Purpose: Search jobs on BOSS Zhipin +- Args: + - `query`(required); Search keyword (e.g. AI agent, 前端) + - `city`(optional; default: '北京'); City name or code (e.g. 杭州, 上海, 101010100) + - `experience`(optional; default: ''); Experience: 应届/1年以内/1-3年/3-5年/5-10年/10年以上 + - `degree`(optional; default: ''); Degree: 大专/本科/硕士/博士 + - `salary`(optional; default: ''); Salary: 3K以下/3-5K/5-10K/10-15K/15-20K/20-30K/30-50K/50K以上 + - `industry`(optional; default: ''); Industry code or name (e.g. 100020, 互联网) + - `page`(optional; type: int; default: 1); Page number + - `limit`(optional; type: int; default: 15); Number of results +- Usage: `opencli boss search [options] -f json` + +### send +- Purpose: Send chat message on BOSS Zhipin +- Args: + - `uid`(required); Encrypted UID of the candidate (from chatlist) + - `text`(required); Message text to send +- Usage: `opencli boss send [options] -f json` + +### stats +- Purpose: Job stats on BOSS Zhipin +- Args: + - `job-id`(optional; default: ''); Encrypted job ID (show all if empty) +- Usage: `opencli boss stats [options] -f json` diff --git a/skills/opencli-skill/references/commands/chaoxing.md b/skills/opencli-skill/references/commands/chaoxing.md new file mode 100644 index 00000000..4f36f0a4 --- /dev/null +++ b/skills/opencli-skill/references/commands/chaoxing.md @@ -0,0 +1,19 @@ +# chaoxing + +## Commands + +### assignments +- Purpose: Chaoxing assignments list +- Args: + - `course`(optional; type: string); 按课程名过滤(模糊匹配) + - `status`(optional; type: string; default: 'all'); 按状态过滤 + - `limit`(optional; type: int; default: 20); 最大返回数量 +- Usage: `opencli chaoxing assignments [options] -f json` + +### exams +- Purpose: Chaoxing exams list +- Args: + - `course`(optional; type: string); 按课程名过滤(模糊匹配) + - `status`(optional; type: string; default: 'all'); 按状态过滤 + - `limit`(optional; type: int; default: 20); 最大返回数量 +- Usage: `opencli chaoxing exams [options] -f json` diff --git a/skills/opencli-skill/references/commands/chatgpt.md b/skills/opencli-skill/references/commands/chatgpt.md new file mode 100644 index 00000000..1c6fdf9f --- /dev/null +++ b/skills/opencli-skill/references/commands/chatgpt.md @@ -0,0 +1,44 @@ +# chatgpt + +## Commands + +### ask +- Purpose: Send a prompt and wait for the AI response (send + wait + read) +- Args: + - `text`(required); Prompt to send + - `model`(optional); Model/mode to use: auto, instant, thinking, 5.2-instant, 5.2-thinking + - `timeout`(optional; default: 30)'); Max seconds to wait for response (default: 30) +- Usage: `opencli chatgpt ask [options] -f json` + +### ax +- Purpose: chatgpt ax operation +- Args: None +- Usage: `opencli chatgpt ax [options] -f json` + +### model +- Purpose: Switch ChatGPT Desktop model/mode (auto, instant, thinking, 5.2-instant, 5.2-thinking) +- Args: + - `model`(required); Model to switch to +- Usage: `opencli chatgpt model [options] -f json` + +### new +- Purpose: Open a new chat in ChatGPT Desktop App +- Args: None +- Usage: `opencli chatgpt new [options] -f json` + +### read +- Purpose: Read the last visible message from the focused ChatGPT Desktop window +- Args: None +- Usage: `opencli chatgpt read [options] -f json` + +### send +- Purpose: Send a message to the active ChatGPT Desktop App window +- Args: + - `text`(required); Message to send + - `model`(optional); Model/mode to use: auto, instant, thinking, 5.2-instant, 5.2-thinking +- Usage: `opencli chatgpt send [options] -f json` + +### status +- Purpose: Check if ChatGPT Desktop App is running natively on macOS +- Args: None +- Usage: `opencli chatgpt status [options] -f json` diff --git a/skills/opencli-skill/references/commands/chatwise.md b/skills/opencli-skill/references/commands/chatwise.md new file mode 100644 index 00000000..bc657119 --- /dev/null +++ b/skills/opencli-skill/references/commands/chatwise.md @@ -0,0 +1,53 @@ +# chatwise + +## Commands + +### ask +- Purpose: Send a prompt and wait for the AI response (send + wait + read) +- Args: + - `text`(required); Prompt to send + - `timeout`(optional; default: 30)'); Max seconds to wait (default: 30) +- Usage: `opencli chatwise ask [options] -f json` + +### export +- Purpose: Export the current ChatWise conversation to a Markdown file +- Args: + - `output`(optional; default: /tmp/chatwise-export.md)'); Output file (default: /tmp/chatwise-export.md) +- Usage: `opencli chatwise export [options] -f json` + +### history +- Purpose: List conversation history in ChatWise sidebar +- Args: None +- Usage: `opencli chatwise history [options] -f json` + +### model +- Purpose: Get or switch the active AI model in ChatWise +- Args: + - `model-name`(optional); Model to switch to (e.g. gpt-4, claude-3) +- Usage: `opencli chatwise model [options] -f json` + +### new +- Purpose: Start a new conversation in ChatWise +- Args: None +- Usage: `opencli chatwise new [options] -f json` + +### read +- Purpose: Read the current ChatWise conversation history +- Args: None +- Usage: `opencli chatwise read [options] -f json` + +### screenshot +- Purpose: Capture a snapshot of the current ChatWise window (DOM + Accessibility tree) +- Args: None +- Usage: `opencli chatwise screenshot [options] -f json` + +### send +- Purpose: Send a message to the active ChatWise conversation +- Args: + - `text`(required); Message to send +- Usage: `opencli chatwise send [options] -f json` + +### status +- Purpose: Check active CDP connection to ChatWise Desktop +- Args: None +- Usage: `opencli chatwise status [options] -f json` diff --git a/skills/opencli-skill/references/commands/codex.md b/skills/opencli-skill/references/commands/codex.md new file mode 100644 index 00000000..9f9d623d --- /dev/null +++ b/skills/opencli-skill/references/commands/codex.md @@ -0,0 +1,63 @@ +# codex + +## Commands + +### ask +- Purpose: Send a prompt and wait for the AI response (send + wait + read) +- Args: + - `text`(required); Prompt to send + - `timeout`(optional; default: 60)'); Max seconds to wait for response (default: 60) +- Usage: `opencli codex ask [options] -f json` + +### dump +- Purpose: Dump the DOM and Accessibility tree of Codex for reverse-engineering +- Args: None +- Usage: `opencli codex dump [options] -f json` + +### export +- Purpose: Export the current Codex conversation to a Markdown file +- Args: + - `output`(optional; default: /tmp/codex-export.md)'); Output file (default: /tmp/codex-export.md) +- Usage: `opencli codex export [options] -f json` + +### extract-diff +- Purpose: Extract visual code review diff patches from Codex +- Args: None +- Usage: `opencli codex extract-diff [options] -f json` + +### history +- Purpose: List recent conversation threads in Codex +- Args: None +- Usage: `opencli codex history [options] -f json` + +### model +- Purpose: Get or switch the currently active AI model in Codex Desktop +- Args: + - `model-name`(optional); The ID of the model to switch to (e.g. gpt-4) +- Usage: `opencli codex model [options] -f json` + +### new +- Purpose: Start a new Codex conversation thread / isolated workspace +- Args: None +- Usage: `opencli codex new [options] -f json` + +### read +- Purpose: Read the contents of the current Codex conversation thread +- Args: None +- Usage: `opencli codex read [options] -f json` + +### screenshot +- Purpose: Capture a snapshot of the current Codex window (DOM + Accessibility tree) +- Args: None +- Usage: `opencli codex screenshot [options] -f json` + +### send +- Purpose: Send text/commands to the Codex AI composer +- Args: + - `text`(required); Text, command (e.g. /review), or skill (e.g. $imagegen) +- Usage: `opencli codex send [options] -f json` + +### status +- Purpose: Check active CDP connection to OpenAI Codex App +- Args: None +- Usage: `opencli codex status [options] -f json` diff --git a/skills/opencli-skill/references/commands/coupang.md b/skills/opencli-skill/references/commands/coupang.md new file mode 100644 index 00000000..56ef3cbc --- /dev/null +++ b/skills/opencli-skill/references/commands/coupang.md @@ -0,0 +1,19 @@ +# coupang + +## Commands + +### add-to-cart +- Purpose: Add a Coupang product to cart using logged-in browser session +- Args: + - `product-id`(optional); Coupang product ID + - `url`(optional); Canonical product URL +- Usage: `opencli coupang add-to-cart [options] -f json` + +### search +- Purpose: Search Coupang products with logged-in browser session +- Args: + - `query`(required); Search keyword + - `page`(optional; type: int; default: 1); Search result page number + - `limit`(optional; type: int; default: 20); Max results (max 50) + - `filter`(optional); Optional search filter (currently supports: rocket) +- Usage: `opencli coupang search [options] -f json` diff --git a/skills/opencli-skill/references/commands/ctrip.md b/skills/opencli-skill/references/commands/ctrip.md new file mode 100644 index 00000000..d2600fc6 --- /dev/null +++ b/skills/opencli-skill/references/commands/ctrip.md @@ -0,0 +1,10 @@ +# ctrip + +## Commands + +### search +- Purpose: Ctrip travel search +- Args: + - `query`(required); Search keyword (city or attraction) + - `limit`(optional; type: int; default: 15); Number of results +- Usage: `opencli ctrip search [options] -f json` diff --git a/skills/opencli-skill/references/commands/cursor.md b/skills/opencli-skill/references/commands/cursor.md new file mode 100644 index 00000000..c8204001 --- /dev/null +++ b/skills/opencli-skill/references/commands/cursor.md @@ -0,0 +1,69 @@ +# cursor + +## Commands + +### ask +- Purpose: Send a prompt and wait for the AI response (send + wait + read) +- Args: + - `text`(required); Prompt to send + - `timeout`(optional; default: 30)'); Max seconds to wait for response (default: 30) +- Usage: `opencli cursor ask [options] -f json` + +### composer +- Purpose: Send a prompt directly into Cursor Composer (Cmd+I shortcut) +- Args: + - `text`(required); Text to send into Composer +- Usage: `opencli cursor composer [options] -f json` + +### dump +- Purpose: Dump the DOM and Accessibility tree of Cursor for reverse-engineering +- Args: None +- Usage: `opencli cursor dump [options] -f json` + +### export +- Purpose: Export the current ${site} conversation to a Markdown file +- Args: + - `output`(optional; default: /tmp/${site) +- Usage: `opencli cursor export [options] -f json` + +### extract-code +- Purpose: Extract multi-line code blocks from the current Cursor conversation +- Args: None +- Usage: `opencli cursor extract-code [options] -f json` + +### history +- Purpose: List recent chat sessions from the Cursor sidebar +- Args: None +- Usage: `opencli cursor history [options] -f json` + +### model +- Purpose: Get or switch the currently active AI model in Cursor +- Args: + - `model-name`(optional); The ID of the model to switch to (e.g. claude-3.5-sonnet) +- Usage: `opencli cursor model [options] -f json` + +### new +- Purpose: Start a new Cursor chat or Composer session +- Args: None +- Usage: `opencli cursor new [options] -f json` + +### read +- Purpose: Read the current Cursor chat/composer conversation history +- Args: None +- Usage: `opencli cursor read [options] -f json` + +### screenshot +- Purpose: cursor screenshot operation +- Args: None +- Usage: `opencli cursor screenshot [options] -f json` + +### send +- Purpose: Send a prompt directly into Cursor Composer/Chat +- Args: + - `text`(required); Text to send into Cursor +- Usage: `opencli cursor send [options] -f json` + +### status +- Purpose: Check active CDP connection to Cursor AI Editor +- Args: None +- Usage: `opencli cursor status [options] -f json` diff --git a/skills/opencli-skill/references/commands/devto.md b/skills/opencli-skill/references/commands/devto.md new file mode 100644 index 00000000..66bdc4b1 --- /dev/null +++ b/skills/opencli-skill/references/commands/devto.md @@ -0,0 +1,18 @@ +# devto + +## Commands + +### tag +- Purpose: Latest DEV.to articles for a specific tag +- Args: None +- Usage: `opencli devto tag [options] -f json` + +### top +- Purpose: Top DEV.to articles of the day +- Args: None +- Usage: `opencli devto top [options] -f json` + +### user +- Purpose: Recent DEV.to articles from a specific user +- Args: None +- Usage: `opencli devto user [options] -f json` diff --git a/skills/opencli-skill/references/commands/dictionary.md b/skills/opencli-skill/references/commands/dictionary.md new file mode 100644 index 00000000..c29f1818 --- /dev/null +++ b/skills/opencli-skill/references/commands/dictionary.md @@ -0,0 +1,18 @@ +# dictionary + +## Commands + +### examples +- Purpose: Get example sentences for a given word +- Args: None +- Usage: `opencli dictionary examples [options] -f json` + +### search +- Purpose: Search dictionary definitions, parts of speech, and pronunciations +- Args: None +- Usage: `opencli dictionary search [options] -f json` + +### synonyms +- Purpose: Find synonyms for a given word +- Args: None +- Usage: `opencli dictionary synonyms [options] -f json` diff --git a/skills/opencli-skill/references/commands/discord-app.md b/skills/opencli-skill/references/commands/discord-app.md new file mode 100644 index 00000000..d0284954 --- /dev/null +++ b/skills/opencli-skill/references/commands/discord-app.md @@ -0,0 +1,41 @@ +# discord-app + +## Commands + +### channels +- Purpose: List channels in the current Discord server +- Args: None +- Usage: `opencli discord-app channels [options] -f json` + +### members +- Purpose: List online members in the current Discord channel +- Args: None +- Usage: `opencli discord-app members [options] -f json` + +### read +- Purpose: Read recent messages from the active Discord channel +- Args: + - `count`(optional; default: 20)'); Number of messages to read (default: 20) +- Usage: `opencli discord-app read [options] -f json` + +### search +- Purpose: Search messages in the current Discord server/channel (Cmd+F) +- Args: + - `query`(required); Search query +- Usage: `opencli discord-app search [options] -f json` + +### send +- Purpose: Send a message in the active Discord channel +- Args: + - `text`(required); Message to send +- Usage: `opencli discord-app send [options] -f json` + +### servers +- Purpose: List all Discord servers (guilds) in the sidebar +- Args: None +- Usage: `opencli discord-app servers [options] -f json` + +### status +- Purpose: Check active CDP connection to Discord Desktop +- Args: None +- Usage: `opencli discord-app status [options] -f json` diff --git a/skills/opencli-skill/references/commands/douban.md b/skills/opencli-skill/references/commands/douban.md new file mode 100644 index 00000000..5339573e --- /dev/null +++ b/skills/opencli-skill/references/commands/douban.md @@ -0,0 +1,67 @@ +# douban + +## Commands + +### book-hot +- Purpose: Douban books hot list +- Args: + - `limit`(optional; type: int; default: 20); 返回的图书数量 +- Usage: `opencli douban book-hot [options] -f json` + +### download +- Purpose: 下载电影海报/剧照图片 +- Args: + - `id`(required); 电影 subject ID + - `type`(optional; default: 'Rb'); 豆瓣 photos 的 type 参数,默认 Rb(海报) + - `limit`(optional; type: int; default: 120); 最多下载多少张图片 + - `photo-id`(optional); 只下载指定 photo_id 的图片 + - `output`(optional; default: './douban-downloads'); 输出目录 +- Usage: `opencli douban download [options] -f json` + +### marks +- Purpose: Export personal movie marks +- Args: + - `status`(optional; default: 'collect'); 标记类型: collect(看过), wish(想看), do(在看), all(全部) + - `limit`(optional; type: int; default: 50); 导出数量, 0 表示全部 + - `uid`(optional); 用户ID,不填则使用当前登录账号 +- Usage: `opencli douban marks [options] -f json` + +### movie-hot +- Purpose: Douban movies hot list +- Args: + - `limit`(optional; type: int; default: 20); 返回的电影数量 +- Usage: `opencli douban movie-hot [options] -f json` + +### photos +- Purpose: 获取电影海报/剧照图片列表 +- Args: + - `id`(required); 电影 subject ID + - `type`(optional; default: 'Rb'); 豆瓣 photos 的 type 参数,默认 Rb(海报) + - `limit`(optional; type: int; default: 120); 最多返回多少张图片 +- Usage: `opencli douban photos [options] -f json` + +### reviews +- Purpose: Export personal movie reviews +- Args: + - `limit`(optional; type: int; default: 20); 导出数量 + - `uid`(optional); 用户ID,不填则使用当前登录账号 + - `full`(optional; type: bool; default: false); 获取完整影评内容 +- Usage: `opencli douban reviews [options] -f json` + +### search +- Purpose: Search Douban movies, books, or music +- Args: + - `type`(optional; default: 'movie'); 搜索类型(movie=电影, book=图书, music=音乐) + - `keyword`(required); 搜索关键词 + - `limit`(optional; type: int; default: 20); 返回结果数量 +- Usage: `opencli douban search [options] -f json` + +### subject +- Purpose: Get movie detail +- Args: None +- Usage: `opencli douban subject [options] -f json` + +### top250 +- Purpose: Douban Top 250 movies +- Args: None +- Usage: `opencli douban top250 [options] -f json` diff --git a/skills/opencli-skill/references/commands/doubao-app.md b/skills/opencli-skill/references/commands/doubao-app.md new file mode 100644 index 00000000..02a5ef74 --- /dev/null +++ b/skills/opencli-skill/references/commands/doubao-app.md @@ -0,0 +1,42 @@ +# doubao-app + +## Commands + +### ask +- Purpose: Send a message to Doubao desktop app and wait for the AI response +- Args: + - `text`(required); Prompt to send + - `timeout`(optional; type: int; default: 30); Max seconds to wait for response +- Usage: `opencli doubao-app ask [options] -f json` + +### dump +- Purpose: Dump Doubao desktop app DOM and snapshot to /tmp for debugging +- Args: None +- Usage: `opencli doubao-app dump [options] -f json` + +### new +- Purpose: Start a new chat in Doubao desktop app +- Args: None +- Usage: `opencli doubao-app new [options] -f json` + +### read +- Purpose: Read chat history from Doubao desktop app +- Args: None +- Usage: `opencli doubao-app read [options] -f json` + +### screenshot +- Purpose: Capture a screenshot of the Doubao desktop app window +- Args: + - `output`(optional; default: /tmp/doubao-screenshot.png)'); Output file path (default: /tmp/doubao-screenshot.png) +- Usage: `opencli doubao-app screenshot [options] -f json` + +### send +- Purpose: Send a message to Doubao desktop app +- Args: + - `text`(required); Message text to send +- Usage: `opencli doubao-app send [options] -f json` + +### status +- Purpose: Check CDP connection to Doubao desktop app +- Args: None +- Usage: `opencli doubao-app status [options] -f json` diff --git a/skills/opencli-skill/references/commands/doubao.md b/skills/opencli-skill/references/commands/doubao.md new file mode 100644 index 00000000..2bd89522 --- /dev/null +++ b/skills/opencli-skill/references/commands/doubao.md @@ -0,0 +1,57 @@ +# doubao + +## Commands + +### ask +- Purpose: Send a prompt and wait for the Doubao response +- Args: + - `text`(required); Prompt to send + - `timeout`(optional; default: 60)'); Max seconds to wait (default: 60) +- Usage: `opencli doubao ask [options] -f json` + +### detail +- Purpose: Read a specific Doubao conversation by ID +- Args: + - `id`(required); Conversation ID (numeric or full URL) +- Usage: `opencli doubao detail [options] -f json` + +### history +- Purpose: List conversation history from Doubao sidebar +- Args: + - `limit`(optional; default: '50'); Max number of conversations to show +- Usage: `opencli doubao history [options] -f json` + +### meeting-summary +- Purpose: Get meeting summary and chapters from a Doubao conversation +- Args: + - `id`(required); Conversation ID (numeric or full URL) + - `chapters`(optional; default: 'false'); Also include AI chapters +- Usage: `opencli doubao meeting-summary [options] -f json` + +### meeting-transcript +- Purpose: Get or download the meeting transcript from a Doubao conversation +- Args: + - `id`(required); Conversation ID (numeric or full URL) + - `download`(optional; default: 'false'); Trigger browser file download instead of reading text +- Usage: `opencli doubao meeting-transcript [options] -f json` + +### new +- Purpose: Start a new conversation in Doubao web chat +- Args: None +- Usage: `opencli doubao new [options] -f json` + +### read +- Purpose: Read the current Doubao conversation history +- Args: None +- Usage: `opencli doubao read [options] -f json` + +### send +- Purpose: Send a message to Doubao web chat +- Args: + - `text`(required); Message to send +- Usage: `opencli doubao send [options] -f json` + +### status +- Purpose: Check Doubao chat page availability and login state +- Args: None +- Usage: `opencli doubao status [options] -f json` diff --git a/skills/opencli-skill/references/commands/douyin.md b/skills/opencli-skill/references/commands/douyin.md new file mode 100644 index 00000000..4a804819 --- /dev/null +++ b/skills/opencli-skill/references/commands/douyin.md @@ -0,0 +1,107 @@ +# douyin + +## Commands + +### activities +- Purpose: Get official activity list +- Args: None +- Usage: `opencli douyin activities [options] -f json` + +### collections +- Purpose: Get creator collections list +- Args: + - `limit`(optional; type: int; default: 20) +- Usage: `opencli douyin collections [options] -f json` + +### delete +- Purpose: Delete a published video +- Args: + - `aweme_id`(required); 作品 ID +- Usage: `opencli douyin delete [options] -f json` + +### draft +- Purpose: Upload a video and save it as draft +- Args: + - `video`(required); 视频文件路径 + - `title`(required); 视频标题(≤30字) + - `caption`(optional; default: ''); 正文内容(≤1000字,支持 #话题) + - `cover`(optional; default: ''); 封面图片路径 + - `visibility`(optional; default: 'public') +- Usage: `opencli douyin draft [options] -f json` + +### drafts +- Purpose: Get draft video list +- Args: + - `limit`(optional; type: int; default: 20) +- Usage: `opencli douyin drafts [options] -f json` + +### hashtag +- Purpose: Hashtag search, suggestion, or hot topics +- Args: + - `action`(required); search=关键词搜索 suggest=AI推荐 hot=热点词 + - `keyword`(optional; default: ''); 搜索关键词(search/hot 使用) + - `cover`(optional; default: ''); 封面 URI(suggest 使用) + - `limit`(optional; type: int; default: 10) +- Usage: `opencli douyin hashtag [options] -f json` + +### location +- Purpose: Search POI locations +- Args: + - `query`(required); 地名关键词 + - `limit`(optional; type: int; default: 20) +- Usage: `opencli douyin location [options] -f json` + +### profile +- Purpose: Get creator account profile information +- Args: None +- Usage: `opencli douyin profile [options] -f json` + +### publish +- Purpose: Upload and schedule a Douyin video post +- Args: + - `video`(required); 视频文件路径 + - `title`(required); 视频标题(≤30字) + - `schedule`(required); 定时发布时间(ISO8601 或 Unix 秒,2h ~ 14天后) + - `caption`(optional; default: ''); 正文内容(≤1000字,支持 #话题) + - `cover`(optional; default: ''); 封面图片路径(不提供时使用视频截帧) + - `visibility`(optional; default: 'public') + - `allow_download`(optional; type: bool; default: false); 允许下载 + - `collection`(optional; default: ''); 合集 ID + - `activity`(optional; default: ''); 活动 ID + - `poi_id`(optional; default: ''); 地理位置 ID + - `poi_name`(optional; default: ''); 地理位置名称 + - `hotspot`(optional; default: ''); 关联热点词 + - `no_safety_check`(optional; type: bool; default: false); 跳过内容安全检测 + - `sync_toutiao`(optional; type: bool; default: false); 同步发布到头条 +- Usage: `opencli douyin publish [options] -f json` + +### stats +- Purpose: Get analytics metrics for a specific video +- Args: + - `aweme_id`(required) +- Usage: `opencli douyin stats [options] -f json` + +### update +- Purpose: Update scheduled publish time or caption of a video +- Args: + - `aweme_id`(required) + - `reschedule`(optional; default: ''); 新的发布时间(ISO8601 或 Unix 秒) + - `caption`(optional; default: ''); 新的正文内容 +- Usage: `opencli douyin update [options] -f json` + +### user-videos +- Purpose: 获取指定用户的视频列表(含下载地址和热门评论) +- Args: + - `sec_uid`(required; type: string); 用户 sec_uid(URL 末尾部分) + - `limit`(optional; type: int; default: 20); 获取数量(最大 20) + - `with_comments`(optional; type: bool; default: true); 包含热门评论(默认: true) + - `comment_limit`(optional; type: int; default: 10); 每个视频获取多少条评论(最大 10) +- Usage: `opencli douyin user-videos [options] -f json` + +### videos +- Purpose: Get creator video list +- Args: + - `limit`(optional; type: int; default: 20); 每页数量 + - `page`(optional; type: int; default: 1); 页码 + - `status`(optional; default: 'all') +- Usage: `opencli douyin videos [options] -f json` diff --git a/skills/opencli-skill/references/commands/facebook.md b/skills/opencli-skill/references/commands/facebook.md new file mode 100644 index 00000000..db22b9d8 --- /dev/null +++ b/skills/opencli-skill/references/commands/facebook.md @@ -0,0 +1,53 @@ +# facebook + +## Commands + +### add-friend +- Purpose: Send a friend request on Facebook +- Args: None +- Usage: `opencli facebook add-friend [options] -f json` + +### events +- Purpose: Browse Facebook event categories +- Args: None +- Usage: `opencli facebook events [options] -f json` + +### feed +- Purpose: Get your Facebook news feed +- Args: None +- Usage: `opencli facebook feed [options] -f json` + +### friends +- Purpose: Get Facebook friend suggestions +- Args: None +- Usage: `opencli facebook friends [options] -f json` + +### groups +- Purpose: List your Facebook groups +- Args: None +- Usage: `opencli facebook groups [options] -f json` + +### join-group +- Purpose: Join a Facebook group +- Args: None +- Usage: `opencli facebook join-group [options] -f json` + +### memories +- Purpose: Get your Facebook memories (On This Day) +- Args: None +- Usage: `opencli facebook memories [options] -f json` + +### notifications +- Purpose: Get recent Facebook notifications +- Args: None +- Usage: `opencli facebook notifications [options] -f json` + +### profile +- Purpose: Get Facebook user/page profile info +- Args: None +- Usage: `opencli facebook profile [options] -f json` + +### search +- Purpose: Search Facebook for people, pages, or posts +- Args: None +- Usage: `opencli facebook search [options] -f json` diff --git a/skills/opencli-skill/references/commands/gemini.md b/skills/opencli-skill/references/commands/gemini.md new file mode 100644 index 00000000..319afdd0 --- /dev/null +++ b/skills/opencli-skill/references/commands/gemini.md @@ -0,0 +1,26 @@ +# gemini + +## Commands + +### ask +- Purpose: Send a prompt to Gemini and return only the assistant response +- Args: + - `prompt`(required); Prompt to send + - `timeout`(optional; default: 60)'); Max seconds to wait (default: 60) + - `new`(optional; default: false)'); Start a new chat first (true/false, default: false) +- Usage: `opencli gemini ask [options] -f json` + +### image +- Purpose: Generate images with Gemini web and save them locally +- Args: + - `prompt`(required); Image prompt to send to Gemini + - `rt`(optional; default: '1:1'); Ratio shorthand for aspect ratio (1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3) + - `st`(optional; default: ''); Style shorthand, e.g. anime, icon, watercolor + - `op`(optional; default: path.join(os.homedir()); Output directory shorthand + - `sd`(optional; type: boolean; default: false); Skip download shorthand; only show Gemini page link +- Usage: `opencli gemini image [options] -f json` + +### new +- Purpose: Start a new conversation in Gemini web chat +- Args: None +- Usage: `opencli gemini new [options] -f json` diff --git a/skills/opencli-skill/references/commands/google.md b/skills/opencli-skill/references/commands/google.md new file mode 100644 index 00000000..e522b3c1 --- /dev/null +++ b/skills/opencli-skill/references/commands/google.md @@ -0,0 +1,34 @@ +# google + +## Commands + +### news +- Purpose: Get Google News headlines +- Args: + - `keyword`(optional); Search query (omit for top stories) + - `limit`(optional; type: int; default: 10); Number of results + - `lang`(optional; default: 'en'); Language short code (e.g. en, zh) + - `region`(optional; default: 'US'); Region code (e.g. US, CN) +- Usage: `opencli google news [options] -f json` + +### search +- Purpose: Search Google +- Args: + - `keyword`(required); Search query + - `limit`(optional; type: int; default: 10); Number of results (1-100) + - `lang`(optional; default: 'en'); Language short code (e.g. en, zh) +- Usage: `opencli google search [options] -f json` + +### suggest +- Purpose: Get Google search suggestions +- Args: + - `keyword`(required); Search query + - `lang`(optional; default: 'zh-CN'); Language code +- Usage: `opencli google suggest [options] -f json` + +### trends +- Purpose: Get Google Trends daily trending searches +- Args: + - `region`(optional; default: 'US'); Region code (e.g. US, CN, JP) + - `limit`(optional; type: int; default: 20); Number of results +- Usage: `opencli google trends [options] -f json` diff --git a/skills/opencli-skill/references/commands/grok.md b/skills/opencli-skill/references/commands/grok.md new file mode 100644 index 00000000..de4d9db8 --- /dev/null +++ b/skills/opencli-skill/references/commands/grok.md @@ -0,0 +1,12 @@ +# grok + +## Commands + +### ask +- Purpose: Send a message to Grok and get response +- Args: + - `prompt`(required; type: string); Prompt to send to Grok + - `timeout`(optional; type: int; default: 120); Max seconds to wait for response (default: 120) + - `new`(optional; type: boolean; default: false); Start a new chat before sending (default: false) + - `web`(optional; type: boolean; default: false); Use the explicit grok.com consumer web flow (default: false) +- Usage: `opencli grok ask [options] -f json` diff --git a/skills/opencli-skill/references/commands/hackernews.md b/skills/opencli-skill/references/commands/hackernews.md new file mode 100644 index 00000000..7dcdb417 --- /dev/null +++ b/skills/opencli-skill/references/commands/hackernews.md @@ -0,0 +1,43 @@ +# hackernews + +## Commands + +### ask +- Purpose: Hacker News Ask HN posts +- Args: None +- Usage: `opencli hackernews ask [options] -f json` + +### best +- Purpose: Hacker News best stories +- Args: None +- Usage: `opencli hackernews best [options] -f json` + +### jobs +- Purpose: Hacker News job postings +- Args: None +- Usage: `opencli hackernews jobs [options] -f json` + +### new +- Purpose: Hacker News newest stories +- Args: None +- Usage: `opencli hackernews new [options] -f json` + +### search +- Purpose: Search Hacker News stories +- Args: None +- Usage: `opencli hackernews search [options] -f json` + +### show +- Purpose: Hacker News Show HN posts +- Args: None +- Usage: `opencli hackernews show [options] -f json` + +### top +- Purpose: Hacker News top stories +- Args: None +- Usage: `opencli hackernews top [options] -f json` + +### user +- Purpose: Hacker News user profile +- Args: None +- Usage: `opencli hackernews user [options] -f json` diff --git a/skills/opencli-skill/references/commands/hf.md b/skills/opencli-skill/references/commands/hf.md new file mode 100644 index 00000000..a0314f82 --- /dev/null +++ b/skills/opencli-skill/references/commands/hf.md @@ -0,0 +1,8 @@ +# hf + +## Commands + +### top +- Purpose: Top upvoted Hugging Face papers +- Args: None +- Usage: `opencli hf top [options] -f json` diff --git a/skills/opencli-skill/references/commands/imdb.md b/skills/opencli-skill/references/commands/imdb.md new file mode 100644 index 00000000..c5878b9d --- /dev/null +++ b/skills/opencli-skill/references/commands/imdb.md @@ -0,0 +1,42 @@ +# imdb + +## Commands + +### person +- Purpose: Get actor or director info +- Args: + - `id`(required); IMDb person ID (nm0634240) or URL + - `limit`(optional; type: int; default: 10); Max filmography entries +- Usage: `opencli imdb person [options] -f json` + +### reviews +- Purpose: Get user reviews for a movie or TV show +- Args: + - `id`(required); IMDb title ID (tt1375666) or URL + - `limit`(optional; type: int; default: 10); Number of reviews +- Usage: `opencli imdb reviews [options] -f json` + +### search +- Purpose: Search IMDb for movies, TV shows, and people +- Args: + - `query`(required); Search query + - `limit`(optional; type: int; default: 20); Number of results +- Usage: `opencli imdb search [options] -f json` + +### title +- Purpose: Get movie or TV show details +- Args: + - `id`(required); IMDb title ID (tt1375666) or URL +- Usage: `opencli imdb title [options] -f json` + +### top +- Purpose: IMDb Top 250 Movies +- Args: + - `limit`(optional; type: int; default: 20); Number of results +- Usage: `opencli imdb top [options] -f json` + +### trending +- Purpose: IMDb Most Popular Movies +- Args: + - `limit`(optional; type: int; default: 20); Number of results +- Usage: `opencli imdb trending [options] -f json` diff --git a/skills/opencli-skill/references/commands/instagram.md b/skills/opencli-skill/references/commands/instagram.md new file mode 100644 index 00000000..ec3a3473 --- /dev/null +++ b/skills/opencli-skill/references/commands/instagram.md @@ -0,0 +1,80 @@ +# instagram + +## Commands + +### comment +- Purpose: Comment on an Instagram post +- Args: None +- Usage: `opencli instagram comment [options] -f json` + +### download +- Purpose: Download images and videos from Instagram posts and reels +- Args: + - `url`(required); Instagram post / reel / tv URL + - `path`(optional; default: path.join(os.homedir()); Download directory +- Usage: `opencli instagram download [options] -f json` + +### explore +- Purpose: Instagram explore/discover trending posts +- Args: None +- Usage: `opencli instagram explore [options] -f json` + +### follow +- Purpose: Follow an Instagram user +- Args: None +- Usage: `opencli instagram follow [options] -f json` + +### followers +- Purpose: List followers of an Instagram user +- Args: None +- Usage: `opencli instagram followers [options] -f json` + +### following +- Purpose: List accounts an Instagram user is following +- Args: None +- Usage: `opencli instagram following [options] -f json` + +### like +- Purpose: Like an Instagram post +- Args: None +- Usage: `opencli instagram like [options] -f json` + +### profile +- Purpose: Get Instagram user profile info +- Args: None +- Usage: `opencli instagram profile [options] -f json` + +### save +- Purpose: Save (bookmark) an Instagram post +- Args: None +- Usage: `opencli instagram save [options] -f json` + +### saved +- Purpose: Get your saved Instagram posts +- Args: None +- Usage: `opencli instagram saved [options] -f json` + +### search +- Purpose: Search Instagram users +- Args: None +- Usage: `opencli instagram search [options] -f json` + +### unfollow +- Purpose: Unfollow an Instagram user +- Args: None +- Usage: `opencli instagram unfollow [options] -f json` + +### unlike +- Purpose: Unlike an Instagram post +- Args: None +- Usage: `opencli instagram unlike [options] -f json` + +### unsave +- Purpose: Unsave (remove bookmark) an Instagram post +- Args: None +- Usage: `opencli instagram unsave [options] -f json` + +### user +- Purpose: Get recent posts from an Instagram user +- Args: None +- Usage: `opencli instagram user [options] -f json` diff --git a/skills/opencli-skill/references/commands/jd.md b/skills/opencli-skill/references/commands/jd.md new file mode 100644 index 00000000..545afd0d --- /dev/null +++ b/skills/opencli-skill/references/commands/jd.md @@ -0,0 +1,10 @@ +# jd + +## Commands + +### item +- Purpose: Read JD product details (price, images, and specs) +- Args: + - `sku`(required); 商品 SKU ID(如 100291143898) + - `images`(optional; type: int; default: 10); AVIF 图片数量上限(默认10) +- Usage: `opencli jd item [options] -f json` diff --git a/skills/opencli-skill/references/commands/jike.md b/skills/opencli-skill/references/commands/jike.md new file mode 100644 index 00000000..416ed88e --- /dev/null +++ b/skills/opencli-skill/references/commands/jike.md @@ -0,0 +1,63 @@ +# jike + +## Commands + +### comment +- Purpose: Comment on a Jike post +- Args: + - `id`(required; type: string); 帖子 ID + - `text`(required; type: string); 评论内容 +- Usage: `opencli jike comment [options] -f json` + +### create +- Purpose: Create a Jike post +- Args: + - `text`(required; type: string); 动态正文内容 +- Usage: `opencli jike create [options] -f json` + +### feed +- Purpose: Jike home feed +- Args: + - `limit`(optional; type: int; default: 20) +- Usage: `opencli jike feed [options] -f json` + +### like +- Purpose: Like a Jike post +- Args: + - `id`(required; type: string); 帖子 ID +- Usage: `opencli jike like [options] -f json` + +### notifications +- Purpose: Jike notifications +- Args: + - `limit`(optional; type: int; default: 20) +- Usage: `opencli jike notifications [options] -f json` + +### post +- Purpose: Jike post detail with comments +- Args: None +- Usage: `opencli jike post [options] -f json` + +### repost +- Purpose: Repost a Jike post +- Args: + - `id`(required; type: string); 帖子 ID + - `text`(optional; type: string); 转发附言(可选) +- Usage: `opencli jike repost [options] -f json` + +### search +- Purpose: Search Jike posts +- Args: + - `query`(required; type: string) + - `limit`(optional; type: int; default: 20) +- Usage: `opencli jike search [options] -f json` + +### topic +- Purpose: Jike topic/circle posts +- Args: None +- Usage: `opencli jike topic [options] -f json` + +### user +- Purpose: Jike user posts +- Args: None +- Usage: `opencli jike user [options] -f json` diff --git a/skills/opencli-skill/references/commands/jimeng.md b/skills/opencli-skill/references/commands/jimeng.md new file mode 100644 index 00000000..c3c09a0d --- /dev/null +++ b/skills/opencli-skill/references/commands/jimeng.md @@ -0,0 +1,13 @@ +# jimeng + +## Commands + +### generate +- Purpose: Jimeng AI text-to-image generation from prompt +- Args: None +- Usage: `opencli jimeng generate [options] -f json` + +### history +- Purpose: View recent Jimeng AI generations +- Args: None +- Usage: `opencli jimeng history [options] -f json` diff --git a/skills/opencli-skill/references/commands/linkedin.md b/skills/opencli-skill/references/commands/linkedin.md new file mode 100644 index 00000000..f6dc9b8f --- /dev/null +++ b/skills/opencli-skill/references/commands/linkedin.md @@ -0,0 +1,24 @@ +# linkedin + +## Commands + +### search +- Purpose: Search LinkedIn jobs with optional filter combinations +- Args: + - `query`(required; type: string); Job search keywords + - `location`(optional; type: string); Location text such as San Francisco Bay Area + - `limit`(optional; type: int; default: 10); Number of jobs to return (max 100) + - `start`(optional; type: int; default: 0); Result offset for pagination + - `details`(optional; type: bool; default: false); Include full job description and apply URL (slower) + - `company`(optional; type: string); Comma-separated company names or LinkedIn company IDs + - `experience-level`(optional; type: string); Comma-separated: internship, entry, associate, mid-senior, director, executive + - `job-type`(optional; type: string); Comma-separated: full-time, part-time, contract, temporary, volunteer, internship, other + - `date-posted`(optional; type: string); One of: any, month, week, 24h + - `remote`(optional; type: string); Comma-separated: on-site, hybrid, remote +- Usage: `opencli linkedin search [options] -f json` + +### timeline +- Purpose: Read LinkedIn home timeline posts +- Args: + - `limit`(optional; type: int; default: 20); Number of posts to return (max 100) +- Usage: `opencli linkedin timeline [options] -f json` diff --git a/skills/opencli-skill/references/commands/linux-do.md b/skills/opencli-skill/references/commands/linux-do.md new file mode 100644 index 00000000..1b594526 --- /dev/null +++ b/skills/opencli-skill/references/commands/linux-do.md @@ -0,0 +1,59 @@ +# linux-do + +## Commands + +### categories +- Purpose: linux.do category list +- Args: None +- Usage: `opencli linux-do categories [options] -f json` + +### category +- Purpose: linux.do topics in a category +- Args: + - `slug`(required; type: str); Category slug (legacy compatibility argument) + - `id`(required; type: int); Category ID + - `limit`(optional; type: int; default: 20); Number of items (per_page) +- Usage: `opencli linux-do category [options] -f json` + +### feed +- Purpose: linux.do 话题列表(需登录;支持全站、标签、分类) +- Args: None +- Usage: `opencli linux-do feed [options] -f json` + +### hot +- Purpose: linux.do hot topics +- Args: + - `limit`(optional; type: int; default: 20); Number of items (per_page) + - `period`(optional; type: str; default: 'weekly'); Time period +- Usage: `opencli linux-do hot [options] -f json` + +### latest +- Purpose: linux.do latest topics +- Args: + - `limit`(optional; type: int; default: 20); Number of items (per_page) +- Usage: `opencli linux-do latest [options] -f json` + +### search +- Purpose: Search linux.do +- Args: None +- Usage: `opencli linux-do search [options] -f json` + +### tags +- Purpose: linux.do 标签列表 +- Args: None +- Usage: `opencli linux-do tags [options] -f json` + +### topic +- Purpose: linux.do topic detail with replies (homepage scope) +- Args: None +- Usage: `opencli linux-do topic [options] -f json` + +### user-posts +- Purpose: linux.do 用户的帖子 +- Args: None +- Usage: `opencli linux-do user-posts [options] -f json` + +### user-topics +- Purpose: linux.do 用户创建的话题 +- Args: None +- Usage: `opencli linux-do user-topics [options] -f json` diff --git a/skills/opencli-skill/references/commands/lobsters.md b/skills/opencli-skill/references/commands/lobsters.md new file mode 100644 index 00000000..471543a5 --- /dev/null +++ b/skills/opencli-skill/references/commands/lobsters.md @@ -0,0 +1,23 @@ +# lobsters + +## Commands + +### active +- Purpose: Lobste.rs most active discussions +- Args: None +- Usage: `opencli lobsters active [options] -f json` + +### hot +- Purpose: Lobste.rs hottest stories +- Args: None +- Usage: `opencli lobsters hot [options] -f json` + +### newest +- Purpose: Lobste.rs newest stories +- Args: None +- Usage: `opencli lobsters newest [options] -f json` + +### tag +- Purpose: Lobste.rs stories by tag +- Args: None +- Usage: `opencli lobsters tag [options] -f json` diff --git a/skills/opencli-skill/references/commands/medium.md b/skills/opencli-skill/references/commands/medium.md new file mode 100644 index 00000000..2457fa7e --- /dev/null +++ b/skills/opencli-skill/references/commands/medium.md @@ -0,0 +1,24 @@ +# medium + +## Commands + +### feed +- Purpose: Medium trending feed +- Args: + - `topic`(optional; default: ''); 话题标签(如 technology, programming, ai) + - `limit`(optional; type: int; default: 20); 返回的文章数量 +- Usage: `opencli medium feed [options] -f json` + +### search +- Purpose: Search Medium articles +- Args: + - `keyword`(required); 搜索关键词 + - `limit`(optional; type: int; default: 20); 返回的文章数量 +- Usage: `opencli medium search [options] -f json` + +### user +- Purpose: List articles from a Medium user +- Args: + - `username`(required); Medium 用户名(如 @username 或 username) + - `limit`(optional; type: int; default: 20); 返回的文章数量 +- Usage: `opencli medium user [options] -f json` diff --git a/skills/opencli-skill/references/commands/notebooklm.md b/skills/opencli-skill/references/commands/notebooklm.md new file mode 100644 index 00000000..e2741d35 --- /dev/null +++ b/skills/opencli-skill/references/commands/notebooklm.md @@ -0,0 +1,78 @@ +# notebooklm + +## Commands + +### current +- Purpose: Show metadata for the currently opened NotebookLM notebook tab +- Args: None +- Usage: `opencli notebooklm current [options] -f json` + +### get +- Purpose: Get rich metadata for the currently opened NotebookLM notebook +- Args: None +- Usage: `opencli notebooklm get [options] -f json` + +### history +- Purpose: List NotebookLM conversation history threads in the current notebook +- Args: None +- Usage: `opencli notebooklm history [options] -f json` + +### list +- Purpose: List NotebookLM notebooks via in-page batchexecute RPC in the current logged-in session +- Args: None +- Usage: `opencli notebooklm list [options] -f json` + +### note-list +- Purpose: List saved notes from the Studio panel of the current NotebookLM notebook +- Args: None +- Usage: `opencli notebooklm note-list [options] -f json` + +### notes-get +- Purpose: Get one note from the current NotebookLM notebook by title from the visible note editor +- Args: + - `note`(required); Note title or id from the current notebook +- Usage: `opencli notebooklm notes-get [options] -f json` + +### open +- Purpose: Open one NotebookLM notebook in the automation workspace by id or URL +- Args: + - `notebook`(required); Notebook id from list output, or a full NotebookLM notebook URL +- Usage: `opencli notebooklm open [options] -f json` + +### rpc +- Purpose: notebooklm rpc operation +- Args: None +- Usage: `opencli notebooklm rpc [options] -f json` + +### source-fulltext +- Purpose: Get the extracted fulltext for one source in the currently opened NotebookLM notebook +- Args: + - `source`(required); Source id or title from the current notebook +- Usage: `opencli notebooklm source-fulltext [options] -f json` + +### source-get +- Purpose: Get one source from the currently opened NotebookLM notebook by id or title +- Args: + - `source`(required); Source id or title from the current notebook +- Usage: `opencli notebooklm source-get [options] -f json` + +### source-guide +- Purpose: Get the guide summary and keywords for one source in the currently opened NotebookLM notebook +- Args: + - `source`(required); Source id or title from the current notebook +- Usage: `opencli notebooklm source-guide [options] -f json` + +### source-list +- Purpose: List sources for the currently opened NotebookLM notebook +- Args: None +- Usage: `opencli notebooklm source-list [options] -f json` + +### status +- Purpose: Check NotebookLM page availability and login state in the current Chrome session +- Args: None +- Usage: `opencli notebooklm status [options] -f json` + +### summary +- Purpose: Get the summary block from the currently opened NotebookLM notebook +- Args: None +- Usage: `opencli notebooklm summary [options] -f json` diff --git a/skills/opencli-skill/references/commands/notion.md b/skills/opencli-skill/references/commands/notion.md new file mode 100644 index 00000000..224e85dc --- /dev/null +++ b/skills/opencli-skill/references/commands/notion.md @@ -0,0 +1,47 @@ +# notion + +## Commands + +### export +- Purpose: Export the current Notion page as Markdown +- Args: + - `output`(optional; default: /tmp/notion-export.md)'); Output file (default: /tmp/notion-export.md) +- Usage: `opencli notion export [options] -f json` + +### favorites +- Purpose: List pages from the Notion Favorites section in the sidebar +- Args: None +- Usage: `opencli notion favorites [options] -f json` + +### new +- Purpose: Create a new page in Notion +- Args: + - `title`(optional); Page title (optional) +- Usage: `opencli notion new [options] -f json` + +### read +- Purpose: Read the content of the currently open Notion page +- Args: None +- Usage: `opencli notion read [options] -f json` + +### search +- Purpose: Search pages and databases in Notion via Quick Find (Cmd+P) +- Args: + - `query`(required); Search query +- Usage: `opencli notion search [options] -f json` + +### sidebar +- Purpose: List pages and databases from the Notion sidebar +- Args: None +- Usage: `opencli notion sidebar [options] -f json` + +### status +- Purpose: Check active CDP connection to Notion Desktop +- Args: None +- Usage: `opencli notion status [options] -f json` + +### write +- Purpose: Append text content to the currently open Notion page +- Args: + - `text`(required); Text to append to the page +- Usage: `opencli notion write [options] -f json` diff --git a/skills/opencli-skill/references/commands/ones.md b/skills/opencli-skill/references/commands/ones.md new file mode 100644 index 00000000..71230035 --- /dev/null +++ b/skills/opencli-skill/references/commands/ones.md @@ -0,0 +1,76 @@ +# ones + +## Commands + +### common +- Purpose: ones common operation +- Args: None +- Usage: `opencli ones common [options] -f json` + +### enrich-tasks +- Purpose: ones enrich-tasks operation +- Args: None +- Usage: `opencli ones enrich-tasks [options] -f json` + +### login +- Purpose: ONES Project API — login via Chrome Bridge (POST auth/login); stderr prints export hints for ONES_USER_ID / TOKEN +- Args: + - `email`(optional; type: str); Account email (or set ONES_EMAIL) + - `phone`(optional; type: str); Account phone (or set ONES_PHONE); ignored if email is set + - `password`(optional; type: str); Password (or set ONES_PASSWORD) +- Usage: `opencli ones login [options] -f json` + +### logout +- Purpose: ONES Project API — invalidate current token (GET auth/logout) via Chrome Bridge +- Args: None +- Usage: `opencli ones logout [options] -f json` + +### me +- Purpose: ONES Project API — current user (GET users/me) via Chrome Bridge +- Args: None +- Usage: `opencli ones me [options] -f json` + +### my-tasks +- Purpose: ONES — my work items (filters/peek + strict must query). Default: assignee=me. Use --mode if your site uses field004 for assignee. +- Args: + - `team`(optional; type: str); Team UUID from URL …/team//…, or set ONES_TEAM_UUID + - `limit`(optional; type: int; default: 100); Max rows (default 100, max 500) + - `mode`(optional; type: str; default: 'assign'); assign=负责人(顶层 assign);field004=负责人(筛选器示例里的 field004);owner=创建者;both=负责人∪创建者(两次 peek 去重) +- Usage: `opencli ones my-tasks [options] -f json` + +### resolve-labels +- Purpose: ones resolve-labels operation +- Args: None +- Usage: `opencli ones resolve-labels [options] -f json` + +### task +- Purpose: ONES — work item detail (GET team/:team/task/:id/info); id is URL segment after …/task/ +- Args: + - `id`(required; type: str); Work item UUID (often 16 chars) from …/task/ + - `team`(optional; type: str); Team UUID (8 chars from …/team//…), or set ONES_TEAM_UUID +- Usage: `opencli ones task [options] -f json` + +### tasks +- Purpose: ONES Project API — list work items (POST team/:team/filters/peek); use token-info -f json for team uuid +- Args: + - `team`(optional; type: str); Team UUID (8 chars), or set ONES_TEAM_UUID + - `project`(optional; type: str); Filter by project UUID (field006 / 所属项目) + - `assign`(optional; type: str); Filter by assignee user UUID (负责人 assign) + - `limit`(optional; type: int; default: 30); Max rows after flattening groups (default 30) +- Usage: `opencli ones tasks [options] -f json` + +### token-info +- Purpose: ONES Project API — session detail (GET auth/token_info) via Chrome Bridge: user, teams, org +- Args: None +- Usage: `opencli ones token-info [options] -f json` + +### worklog +- Purpose: ONES — log work hours on a task (defaults to today; use --date to backfill; endpoint falls back by deployment). +- Args: + - `task`(required; type: str); Work item UUID (usually 16 chars), from my-tasks or browser URL …/task/ + - `hours`(required; type: str); Hours to log for this entry (e.g. 2 or 1.5), converted with ONES_MANHOUR_SCALE + - `team`(optional; type: str); Team UUID from URL …/team//…, or set ONES_TEAM_UUID + - `date`(optional; type: str); Entry date YYYY-MM-DD, defaults to today (local timezone); use for backfill + - `note`(optional; type: str); Optional note (written to description/desc) + - `owner`(optional; type: str); Owner user UUID (defaults to current logged-in user) +- Usage: `opencli ones worklog [options] -f json` diff --git a/skills/opencli-skill/references/commands/paperreview.md b/skills/opencli-skill/references/commands/paperreview.md new file mode 100644 index 00000000..4eea7b42 --- /dev/null +++ b/skills/opencli-skill/references/commands/paperreview.md @@ -0,0 +1,29 @@ +# paperreview + +## Commands + +### feedback +- Purpose: Submit feedback for a paperreview.ai review token +- Args: + - `token`(required); Review token returned by paperreview.ai + - `helpfulness`(required; type: int); Helpfulness score from 1 to 5 + - `critical-error`(required); Whether the review contains a critical error + - `actionable-suggestions`(required); Whether the review contains actionable suggestions + - `additional-comments`(optional); Optional free-text feedback +- Usage: `opencli paperreview feedback [options] -f json` + +### review +- Purpose: Fetch a paperreview.ai review by token +- Args: + - `token`(required); Review token returned by paperreview.ai +- Usage: `opencli paperreview review [options] -f json` + +### submit +- Purpose: Submit a PDF to paperreview.ai for review +- Args: + - `pdf`(required); Path to the paper PDF + - `email`(required); Email address for the submission + - `venue`(optional); Optional target venue such as ICLR or NeurIPS + - `dry-run`(optional; type: bool; default: false); Validate the input and stop before remote submission + - `prepare-only`(optional; type: bool; default: false); Request an upload slot but stop before uploading the PDF +- Usage: `opencli paperreview submit [options] -f json` diff --git a/skills/opencli-skill/references/commands/pixiv.md b/skills/opencli-skill/references/commands/pixiv.md new file mode 100644 index 00000000..b85c6e90 --- /dev/null +++ b/skills/opencli-skill/references/commands/pixiv.md @@ -0,0 +1,42 @@ +# pixiv + +## Commands + +### detail +- Purpose: View illustration details (tags, stats, URLs) +- Args: None +- Usage: `opencli pixiv detail [options] -f json` + +### download +- Purpose: Download images from a Pixiv illustration +- Args: + - `illust-id`(required); Illustration ID + - `output`(optional; default: './pixiv-downloads'); Output directory +- Usage: `opencli pixiv download [options] -f json` + +### illusts +- Purpose: List illustrations by Pixiv artist +- Args: + - `user-id`(required); Pixiv user ID + - `limit`(optional; type: int; default: 20); Number of results +- Usage: `opencli pixiv illusts [options] -f json` + +### ranking +- Purpose: Get Pixiv illustration rankings +- Args: None +- Usage: `opencli pixiv ranking [options] -f json` + +### search +- Purpose: Search Pixiv illustrations by keyword or tag +- Args: + - `query`(required); Search keyword or tag + - `limit`(optional; type: int; default: 20); Number of results + - `order`(optional; type: str; default: 'date_d'); Sort order + - `mode`(optional; type: str; default: 'all'); Search mode + - `page`(optional; type: int; default: 1); Page number +- Usage: `opencli pixiv search [options] -f json` + +### user +- Purpose: View Pixiv artist profile +- Args: None +- Usage: `opencli pixiv user [options] -f json` diff --git a/skills/opencli-skill/references/commands/producthunt.md b/skills/opencli-skill/references/commands/producthunt.md new file mode 100644 index 00000000..46fa1e0b --- /dev/null +++ b/skills/opencli-skill/references/commands/producthunt.md @@ -0,0 +1,29 @@ +# producthunt + +## Commands + +### browse +- Purpose: Best products in a Product Hunt category +- Args: + - `category`(required; type: string); Category slug, e.g. vibe-coding, ai-agents, developer-tools + - `limit`(optional; type: int; default: 20); Number of results (max 50) +- Usage: `opencli producthunt browse [options] -f json` + +### hot +- Purpose: Today +- Args: + - `limit`(optional; type: int; default: 20); Number of results (max 50) +- Usage: `opencli producthunt hot [options] -f json` + +### posts +- Purpose: Latest Product Hunt launches (optional category filter) +- Args: + - `limit`(optional; type: int; default: 20); Number of results (max 50) + - `category`(optional; type: string; default: '') +- Usage: `opencli producthunt posts [options] -f json` + +### today +- Purpose: Today +- Args: + - `limit`(optional; type: int; default: 20); Max results +- Usage: `opencli producthunt today [options] -f json` diff --git a/skills/opencli-skill/references/commands/reddit.md b/skills/opencli-skill/references/commands/reddit.md new file mode 100644 index 00000000..b514097b --- /dev/null +++ b/skills/opencli-skill/references/commands/reddit.md @@ -0,0 +1,94 @@ +# reddit + +## Commands + +### comment +- Purpose: Post a comment on a Reddit post +- Args: + - `post-id`(required; type: string); Post ID (e.g. 1abc123) or fullname (t3_xxx) + - `text`(required; type: string); Comment text +- Usage: `opencli reddit comment [options] -f json` + +### frontpage +- Purpose: Reddit Frontpage / r/all +- Args: None +- Usage: `opencli reddit frontpage [options] -f json` + +### hot +- Purpose: Reddit hot posts +- Args: None +- Usage: `opencli reddit hot [options] -f json` + +### popular +- Purpose: Reddit Popular posts (/r/popular) +- Args: None +- Usage: `opencli reddit popular [options] -f json` + +### read +- Purpose: Read a Reddit post and its comments +- Args: + - `post-id`(required); Post ID (e.g. 1abc123) or full URL + - `sort`(optional; default: 'best'); Comment sort: best, top, new, controversial, old, qa + - `limit`(optional; type: int; default: 25); Number of top-level comments + - `depth`(optional; type: int; default: 2); Max reply depth (1=no replies, 2=one level of replies, etc.) + - `replies`(optional; type: int; default: 5); Max replies shown per comment at each level (sorted by score) + - `max-length`(optional; type: int; default: 2000); Max characters per comment body (min 100) +- Usage: `opencli reddit read [options] -f json` + +### save +- Purpose: Save or unsave a Reddit post +- Args: + - `post-id`(required; type: string); Post ID (e.g. 1abc123) or fullname (t3_xxx) + - `undo`(optional; type: boolean; default: false); Unsave instead of save +- Usage: `opencli reddit save [options] -f json` + +### saved +- Purpose: Browse your saved Reddit posts +- Args: + - `limit`(optional; type: int; default: 15) +- Usage: `opencli reddit saved [options] -f json` + +### search +- Purpose: Search Reddit Posts +- Args: None +- Usage: `opencli reddit search [options] -f json` + +### subreddit +- Purpose: Get posts from a specific Subreddit +- Args: None +- Usage: `opencli reddit subreddit [options] -f json` + +### subscribe +- Purpose: Subscribe or unsubscribe to a subreddit +- Args: + - `subreddit`(required; type: string); Subreddit name (e.g. python) + - `undo`(optional; type: boolean; default: false); Unsubscribe instead of subscribe +- Usage: `opencli reddit subscribe [options] -f json` + +### upvote +- Purpose: Upvote or downvote a Reddit post +- Args: + - `post-id`(required; type: string); Post ID (e.g. 1abc123) or fullname (t3_xxx) + - `direction`(optional; type: string; default: 'up'); Vote direction: up, down, none +- Usage: `opencli reddit upvote [options] -f json` + +### upvoted +- Purpose: Browse your upvoted Reddit posts +- Args: + - `limit`(optional; type: int; default: 15) +- Usage: `opencli reddit upvoted [options] -f json` + +### user +- Purpose: View a Reddit user profile +- Args: None +- Usage: `opencli reddit user [options] -f json` + +### user-comments +- Purpose: View a Reddit user's comment history +- Args: None +- Usage: `opencli reddit user-comments [options] -f json` + +### user-posts +- Purpose: View a Reddit user's submitted posts +- Args: None +- Usage: `opencli reddit user-posts [options] -f json` diff --git a/skills/opencli-skill/references/commands/reuters.md b/skills/opencli-skill/references/commands/reuters.md new file mode 100644 index 00000000..f46ce922 --- /dev/null +++ b/skills/opencli-skill/references/commands/reuters.md @@ -0,0 +1,10 @@ +# reuters + +## Commands + +### search +- Purpose: Search Reuters news +- Args: + - `query`(required); Search query + - `limit`(optional; type: int; default: 10); Number of results (max 40) +- Usage: `opencli reuters search [options] -f json` diff --git a/skills/opencli-skill/references/commands/sinablog.md b/skills/opencli-skill/references/commands/sinablog.md new file mode 100644 index 00000000..b8294766 --- /dev/null +++ b/skills/opencli-skill/references/commands/sinablog.md @@ -0,0 +1,29 @@ +# sinablog + +## Commands + +### article +- Purpose: Get a Sina Blog article detail +- Args: + - `url`(required); 文章URL(如 https://blog.sina.com.cn/s/blog_xxx.html) +- Usage: `opencli sinablog article [options] -f json` + +### hot +- Purpose: Get Sina Blog hot/recommended posts +- Args: + - `limit`(optional; type: int; default: 20); 返回的文章数量 +- Usage: `opencli sinablog hot [options] -f json` + +### search +- Purpose: Search Sina Blog posts (via Sina search) +- Args: + - `keyword`(required); 搜索关键词 + - `limit`(optional; type: int; default: 20); 返回的文章数量 +- Usage: `opencli sinablog search [options] -f json` + +### user +- Purpose: List posts from a Sina Blog user +- Args: + - `uid`(required); 新浪博客用户ID(如 1234567890) + - `limit`(optional; type: int; default: 20); 返回的文章数量 +- Usage: `opencli sinablog user [options] -f json` diff --git a/skills/opencli-skill/references/commands/sinafinance.md b/skills/opencli-skill/references/commands/sinafinance.md new file mode 100644 index 00000000..36d0ac70 --- /dev/null +++ b/skills/opencli-skill/references/commands/sinafinance.md @@ -0,0 +1,22 @@ +# sinafinance + +## Commands + +### news +- Purpose: Sina Finance 24/7 real-time news feed +- Args: + - `limit`(optional; type: int; default: 20); Max results (max 50) + - `type`(optional; type: int; default: 0); News type: 0=全部 1=A股 2=宏观 3=公司 4=数据 5=市场 6=国际 7=观点 8=央行 9=其它 +- Usage: `opencli sinafinance news [options] -f json` + +### rolling-news +- Purpose: 新浪财经滚动新闻 +- Args: None +- Usage: `opencli sinafinance rolling-news [options] -f json` + +### stock +- Purpose: 新浪财经行情(A股/港股/美股) +- Args: + - `key`(required; type: string); Stock name or code (e.g. 贵州茅台, 腾讯控股, AAPL) + - `market`(optional; type: string; default: 'auto'); Market: cn, hk, us, auto (default: auto searches cn → hk → us) +- Usage: `opencli sinafinance stock [options] -f json` diff --git a/skills/opencli-skill/references/commands/smzdm.md b/skills/opencli-skill/references/commands/smzdm.md new file mode 100644 index 00000000..a581d87b --- /dev/null +++ b/skills/opencli-skill/references/commands/smzdm.md @@ -0,0 +1,10 @@ +# smzdm + +## Commands + +### search +- Purpose: Search deals on SMZDM +- Args: + - `query`(required); Search keyword + - `limit`(optional; type: int; default: 20); Number of results +- Usage: `opencli smzdm search [options] -f json` diff --git a/skills/opencli-skill/references/commands/spotify.md b/skills/opencli-skill/references/commands/spotify.md new file mode 100644 index 00000000..a4e1ad35 --- /dev/null +++ b/skills/opencli-skill/references/commands/spotify.md @@ -0,0 +1,8 @@ +# spotify + +## Commands + +### spotify +- Purpose: Authenticate with Spotify (OAuth — run once) +- Args: None +- Usage: `opencli spotify spotify [options] -f json` diff --git a/skills/opencli-skill/references/commands/stackoverflow.md b/skills/opencli-skill/references/commands/stackoverflow.md new file mode 100644 index 00000000..9803c4ea --- /dev/null +++ b/skills/opencli-skill/references/commands/stackoverflow.md @@ -0,0 +1,23 @@ +# stackoverflow + +## Commands + +### bounties +- Purpose: Active bounties on Stack Overflow +- Args: None +- Usage: `opencli stackoverflow bounties [options] -f json` + +### hot +- Purpose: Hot Stack Overflow questions +- Args: None +- Usage: `opencli stackoverflow hot [options] -f json` + +### search +- Purpose: Search Stack Overflow questions +- Args: None +- Usage: `opencli stackoverflow search [options] -f json` + +### unanswered +- Purpose: Top voted unanswered questions on Stack Overflow +- Args: None +- Usage: `opencli stackoverflow unanswered [options] -f json` diff --git a/skills/opencli-skill/references/commands/steam.md b/skills/opencli-skill/references/commands/steam.md new file mode 100644 index 00000000..162e38af --- /dev/null +++ b/skills/opencli-skill/references/commands/steam.md @@ -0,0 +1,8 @@ +# steam + +## Commands + +### top-sellers +- Purpose: Steam top selling games +- Args: None +- Usage: `opencli steam top-sellers [options] -f json` diff --git a/skills/opencli-skill/references/commands/substack.md b/skills/opencli-skill/references/commands/substack.md new file mode 100644 index 00000000..bc8944b6 --- /dev/null +++ b/skills/opencli-skill/references/commands/substack.md @@ -0,0 +1,25 @@ +# substack + +## Commands + +### feed +- Purpose: Substack trending feed +- Args: + - `category`(optional; default: 'all'); 文章分类: all, tech, business, culture, politics, science, health + - `limit`(optional; type: int; default: 20); 返回的文章数量 +- Usage: `opencli substack feed [options] -f json` + +### publication +- Purpose: Get latest posts from a specific Substack newsletter +- Args: + - `url`(required); Newsletter URL(如 https://example.substack.com) + - `limit`(optional; type: int; default: 20); 返回的文章数量 +- Usage: `opencli substack publication [options] -f json` + +### search +- Purpose: Search Substack posts and newsletters +- Args: + - `keyword`(required); 搜索关键词 + - `type`(optional; default: 'posts'); 搜索类型(posts=文章, publications=Newsletter) + - `limit`(optional; type: int; default: 20); 返回结果数量 +- Usage: `opencli substack search [options] -f json` diff --git a/skills/opencli-skill/references/commands/tieba.md b/skills/opencli-skill/references/commands/tieba.md new file mode 100644 index 00000000..19159717 --- /dev/null +++ b/skills/opencli-skill/references/commands/tieba.md @@ -0,0 +1,33 @@ +# tieba + +## Commands + +### hot +- Purpose: Tieba hot topics +- Args: + - `limit`(optional; type: int; default: 20); Number of items to return +- Usage: `opencli tieba hot [options] -f json` + +### posts +- Purpose: Browse posts in a tieba forum +- Args: + - `forum`(required; type: string); Forum name in Chinese + - `page`(optional; type: int; default: 1); Page number + - `limit`(optional; type: int; default: 20); Number of items to return +- Usage: `opencli tieba posts [options] -f json` + +### read +- Purpose: Read a tieba thread +- Args: + - `id`(required; type: string); Thread ID + - `page`(optional; type: int; default: 1); Page number + - `limit`(optional; type: int; default: 30); Number of replies to return +- Usage: `opencli tieba read [options] -f json` + +### search +- Purpose: Search posts across tieba +- Args: + - `keyword`(required; type: string); Search keyword + - `page`(optional; type: int; default: 1); Page number (currently only 1 is supported) + - `limit`(optional; type: int; default: 20); Number of items to return +- Usage: `opencli tieba search [options] -f json` diff --git a/skills/opencli-skill/references/commands/tiktok.md b/skills/opencli-skill/references/commands/tiktok.md new file mode 100644 index 00000000..2d2215a7 --- /dev/null +++ b/skills/opencli-skill/references/commands/tiktok.md @@ -0,0 +1,78 @@ +# tiktok + +## Commands + +### comment +- Purpose: Comment on a TikTok video +- Args: None +- Usage: `opencli tiktok comment [options] -f json` + +### explore +- Purpose: Get trending TikTok videos from explore page +- Args: None +- Usage: `opencli tiktok explore [options] -f json` + +### follow +- Purpose: Follow a TikTok user +- Args: None +- Usage: `opencli tiktok follow [options] -f json` + +### following +- Purpose: List accounts you follow on TikTok +- Args: None +- Usage: `opencli tiktok following [options] -f json` + +### friends +- Purpose: Get TikTok friend suggestions +- Args: None +- Usage: `opencli tiktok friends [options] -f json` + +### like +- Purpose: Like a TikTok video +- Args: None +- Usage: `opencli tiktok like [options] -f json` + +### live +- Purpose: Browse live streams on TikTok +- Args: None +- Usage: `opencli tiktok live [options] -f json` + +### notifications +- Purpose: Get TikTok notifications (likes, comments, mentions, followers) +- Args: None +- Usage: `opencli tiktok notifications [options] -f json` + +### profile +- Purpose: Get TikTok user profile info +- Args: None +- Usage: `opencli tiktok profile [options] -f json` + +### save +- Purpose: Add a TikTok video to Favorites +- Args: None +- Usage: `opencli tiktok save [options] -f json` + +### search +- Purpose: Search TikTok videos +- Args: None +- Usage: `opencli tiktok search [options] -f json` + +### unfollow +- Purpose: Unfollow a TikTok user +- Args: None +- Usage: `opencli tiktok unfollow [options] -f json` + +### unlike +- Purpose: Unlike a TikTok video +- Args: None +- Usage: `opencli tiktok unlike [options] -f json` + +### unsave +- Purpose: Remove a TikTok video from Favorites +- Args: None +- Usage: `opencli tiktok unsave [options] -f json` + +### user +- Purpose: Get recent videos from a TikTok user +- Args: None +- Usage: `opencli tiktok user [options] -f json` diff --git a/skills/opencli-skill/references/commands/twitter.md b/skills/opencli-skill/references/commands/twitter.md new file mode 100644 index 00000000..619b954a --- /dev/null +++ b/skills/opencli-skill/references/commands/twitter.md @@ -0,0 +1,167 @@ +# twitter + +## Commands + +### accept +- Purpose: Auto-accept DM requests containing specific keywords +- Args: + - `query`(required; type: string); Keywords to match (comma-separated for OR, e.g. "群,微信") + - `max`(optional; type: int; default: 20); Maximum number of requests to accept (default: 20) +- Usage: `opencli twitter accept [options] -f json` + +### article +- Purpose: Fetch a Twitter Article (long-form content) and export as Markdown +- Args: + - `tweet-id`(required; type: string); Tweet ID or URL containing the article +- Usage: `opencli twitter article [options] -f json` + +### block +- Purpose: Block a Twitter user +- Args: + - `username`(required; type: string); Twitter screen name (without @) +- Usage: `opencli twitter block [options] -f json` + +### bookmark +- Purpose: Bookmark a tweet +- Args: + - `url`(required; type: string); Tweet URL to bookmark +- Usage: `opencli twitter bookmark [options] -f json` + +### bookmarks +- Purpose: Fetch Twitter/X bookmarks +- Args: + - `limit`(optional; type: int; default: 20) +- Usage: `opencli twitter bookmarks [options] -f json` + +### delete +- Purpose: Delete a specific tweet by URL +- Args: + - `url`(required; type: string); The URL of the tweet to delete +- Usage: `opencli twitter delete [options] -f json` + +### download +- Purpose: Download Twitter/X media (images and videos) +- Args: + - `username`(optional); Twitter username (downloads from media tab) + - `tweet-url`(optional); Single tweet URL to download + - `limit`(optional; type: int; default: 10); Number of tweets to scan + - `output`(optional; default: './twitter-downloads'); Output directory +- Usage: `opencli twitter download [options] -f json` + +### follow +- Purpose: Follow a Twitter user +- Args: + - `username`(required; type: string); Twitter screen name (without @) +- Usage: `opencli twitter follow [options] -f json` + +### followers +- Purpose: Get accounts following a Twitter/X user +- Args: + - `user`(optional; type: string) + - `limit`(optional; type: int; default: 50) +- Usage: `opencli twitter followers [options] -f json` + +### following +- Purpose: Get accounts a Twitter/X user is following +- Args: + - `user`(optional; type: string) + - `limit`(optional; type: int; default: 50) +- Usage: `opencli twitter following [options] -f json` + +### hide-reply +- Purpose: Hide a reply on your tweet (useful for hiding bot/spam replies) +- Args: + - `url`(required; type: string); The URL of the reply tweet to hide +- Usage: `opencli twitter hide-reply [options] -f json` + +### like +- Purpose: Like a specific tweet +- Args: + - `url`(required; type: string); The URL of the tweet to like +- Usage: `opencli twitter like [options] -f json` + +### likes +- Purpose: Fetch liked tweets of a Twitter user +- Args: + - `username`(optional; type: string); Twitter screen name (without @). Defaults to logged-in user. + - `limit`(optional; type: int; default: 20) +- Usage: `opencli twitter likes [options] -f json` + +### notifications +- Purpose: Get Twitter/X notifications +- Args: + - `limit`(optional; type: int; default: 20) +- Usage: `opencli twitter notifications [options] -f json` + +### post +- Purpose: Post a new tweet/thread +- Args: + - `text`(required; type: string); The text content of the tweet +- Usage: `opencli twitter post [options] -f json` + +### profile +- Purpose: Fetch a Twitter user profile (bio, stats, etc.) +- Args: + - `username`(optional; type: string); Twitter screen name (without @). Defaults to logged-in user. +- Usage: `opencli twitter profile [options] -f json` + +### reply +- Purpose: Reply to a specific tweet +- Args: + - `url`(required; type: string); The URL of the tweet to reply to + - `text`(required; type: string); The text content of your reply +- Usage: `opencli twitter reply [options] -f json` + +### reply-dm +- Purpose: Send a message to recent DM conversations +- Args: + - `text`(required; type: string); Message text to send (e.g. "我的微信 wxkabi") + - `max`(optional; type: int; default: 20); Maximum number of conversations to reply to (default: 20) + - `skip-replied`(optional; type: boolean; default: true); Skip conversations where you already sent the same text (default: true) +- Usage: `opencli twitter reply-dm [options] -f json` + +### search +- Purpose: Search Twitter/X for tweets +- Args: + - `query`(required; type: string) + - `filter`(optional; type: string; default: 'top') + - `limit`(optional; type: int; default: 15) +- Usage: `opencli twitter search [options] -f json` + +### thread +- Purpose: Get a tweet thread (original + all replies) +- Args: + - `tweet-id`(required; type: string) + - `limit`(optional; type: int; default: 50) +- Usage: `opencli twitter thread [options] -f json` + +### timeline +- Purpose: Fetch Twitter timeline (for-you or following) +- Args: + - `type`(optional; default: 'for-you'); Timeline type: for-you (algorithmic) or following (chronological) + - `limit`(optional; type: int; default: 20) +- Usage: `opencli twitter timeline [options] -f json` + +### trending +- Purpose: Twitter/X trending topics +- Args: + - `limit`(optional; type: int; default: 20); Number of trends to show +- Usage: `opencli twitter trending [options] -f json` + +### unblock +- Purpose: Unblock a Twitter user +- Args: + - `username`(required; type: string); Twitter screen name (without @) +- Usage: `opencli twitter unblock [options] -f json` + +### unbookmark +- Purpose: Remove a tweet from bookmarks +- Args: + - `url`(required; type: string); Tweet URL to unbookmark +- Usage: `opencli twitter unbookmark [options] -f json` + +### unfollow +- Purpose: Unfollow a Twitter user +- Args: + - `username`(required; type: string); Twitter screen name (without @) +- Usage: `opencli twitter unfollow [options] -f json` diff --git a/skills/opencli-skill/references/commands/v2ex.md b/skills/opencli-skill/references/commands/v2ex.md new file mode 100644 index 00000000..f177c7b2 --- /dev/null +++ b/skills/opencli-skill/references/commands/v2ex.md @@ -0,0 +1,59 @@ +# v2ex + +## Commands + +### daily +- Purpose: V2EX daily check-in and claim coins +- Args: None +- Usage: `opencli v2ex daily [options] -f json` + +### hot +- Purpose: V2EX hot topics +- Args: None +- Usage: `opencli v2ex hot [options] -f json` + +### latest +- Purpose: V2EX latest topics +- Args: None +- Usage: `opencli v2ex latest [options] -f json` + +### me +- Purpose: V2EX my profile (balance/unread notifications) +- Args: None +- Usage: `opencli v2ex me [options] -f json` + +### member +- Purpose: V2EX user profile +- Args: None +- Usage: `opencli v2ex member [options] -f json` + +### node +- Purpose: V2EX node topics +- Args: None +- Usage: `opencli v2ex node [options] -f json` + +### nodes +- Purpose: V2EX all nodes +- Args: None +- Usage: `opencli v2ex nodes [options] -f json` + +### notifications +- Purpose: V2EX notifications (replies/mentions) +- Args: + - `limit`(optional; type: int; default: 20); Number of notifications +- Usage: `opencli v2ex notifications [options] -f json` + +### replies +- Purpose: V2EX topic replies +- Args: None +- Usage: `opencli v2ex replies [options] -f json` + +### topic +- Purpose: V2EX topic detail with replies +- Args: None +- Usage: `opencli v2ex topic [options] -f json` + +### user +- Purpose: V2EX user topics +- Args: None +- Usage: `opencli v2ex user [options] -f json` diff --git a/skills/opencli-skill/references/commands/web.md b/skills/opencli-skill/references/commands/web.md new file mode 100644 index 00000000..c2d2efd1 --- /dev/null +++ b/skills/opencli-skill/references/commands/web.md @@ -0,0 +1,12 @@ +# web + +## Commands + +### read +- Purpose: Fetch any web page and export as Markdown +- Args: + - `url`(required); Any web page URL + - `output`(optional; default: './web-articles'); Output directory + - `download-images`(optional; type: boolean; default: true); Download images locally + - `wait`(optional; type: int; default: 3); Seconds to wait after page load +- Usage: `opencli web read [options] -f json` diff --git a/skills/opencli-skill/references/commands/weibo.md b/skills/opencli-skill/references/commands/weibo.md new file mode 100644 index 00000000..3cdefac9 --- /dev/null +++ b/skills/opencli-skill/references/commands/weibo.md @@ -0,0 +1,46 @@ +# weibo + +## Commands + +### comments +- Purpose: Get comments on a Weibo post +- Args: + - `id`(required); Post ID (numeric idstr) + - `limit`(optional; type: int; default: 20); Number of comments (max 50) +- Usage: `opencli weibo comments [options] -f json` + +### feed +- Purpose: Weibo home timeline (posts from followed users) +- Args: + - `limit`(optional; type: int; default: 15); Number of posts (max 50) +- Usage: `opencli weibo feed [options] -f json` + +### hot +- Purpose: Weibo trending topics +- Args: + - `limit`(optional; type: int; default: 30); Number of items (max 50) +- Usage: `opencli weibo hot [options] -f json` + +### me +- Purpose: My Weibo profile info +- Args: None +- Usage: `opencli weibo me [options] -f json` + +### post +- Purpose: Get a single Weibo post +- Args: + - `id`(required); Post ID (numeric idstr or mblogid from URL) +- Usage: `opencli weibo post [options] -f json` + +### search +- Purpose: Search Weibo +- Args: + - `keyword`(required); Search keyword + - `limit`(optional; type: int; default: 10); Number of results (max 50) +- Usage: `opencli weibo search [options] -f json` + +### user +- Purpose: Get Weibo user profile +- Args: + - `id`(required); User ID (numeric uid) or screen name +- Usage: `opencli weibo user [options] -f json` diff --git a/skills/opencli-skill/references/commands/weixin.md b/skills/opencli-skill/references/commands/weixin.md new file mode 100644 index 00000000..2f9b9208 --- /dev/null +++ b/skills/opencli-skill/references/commands/weixin.md @@ -0,0 +1,11 @@ +# weixin + +## Commands + +### download +- Purpose: Export WeChat Official Account article to Markdown +- Args: + - `url`(required); WeChat article URL (mp.weixin.qq.com/s/xxx) + - `output`(optional; default: './weixin-articles'); Output directory + - `download-images`(optional; type: boolean; default: true); Download images locally +- Usage: `opencli weixin download [options] -f json` diff --git a/skills/opencli-skill/references/commands/weread.md b/skills/opencli-skill/references/commands/weread.md new file mode 100644 index 00000000..cf6f83cd --- /dev/null +++ b/skills/opencli-skill/references/commands/weread.md @@ -0,0 +1,48 @@ +# weread + +## Commands + +### book +- Purpose: View book details on WeRead +- Args: + - `book-id`(required); Book ID from search or shelf results +- Usage: `opencli weread book [options] -f json` + +### highlights +- Purpose: List your highlights (underlines) in a book +- Args: + - `book-id`(required); Book ID (from shelf or search results) + - `limit`(optional; type: int; default: 20); Max results +- Usage: `opencli weread highlights [options] -f json` + +### notebooks +- Purpose: List books that have highlights or notes +- Args: None +- Usage: `opencli weread notebooks [options] -f json` + +### notes +- Purpose: List your notes (thoughts) on a book +- Args: + - `book-id`(required); Book ID (from shelf or search results) + - `limit`(optional; type: int; default: 20); Max results +- Usage: `opencli weread notes [options] -f json` + +### ranking +- Purpose: WeRead book rankings by category +- Args: + - `category`(optional; default: 'all'); Category: all (default), rising, or numeric category ID + - `limit`(optional; type: int; default: 20); Max results +- Usage: `opencli weread ranking [options] -f json` + +### search +- Purpose: Search books on WeRead +- Args: + - `query`(required); Search keyword + - `limit`(optional; type: int; default: 10); Max results +- Usage: `opencli weread search [options] -f json` + +### shelf +- Purpose: List books on your WeRead bookshelf +- Args: + - `limit`(optional; type: int; default: 20); Max results +- Usage: `opencli weread shelf [options] -f json` diff --git a/skills/opencli-skill/references/commands/wikipedia.md b/skills/opencli-skill/references/commands/wikipedia.md new file mode 100644 index 00000000..fe236d0e --- /dev/null +++ b/skills/opencli-skill/references/commands/wikipedia.md @@ -0,0 +1,31 @@ +# wikipedia + +## Commands + +### random +- Purpose: Get a random Wikipedia article +- Args: + - `lang`(optional; default: 'en'); Language code (e.g. en, zh, ja) +- Usage: `opencli wikipedia random [options] -f json` + +### search +- Purpose: Search Wikipedia articles +- Args: + - `query`(required); Search keyword + - `limit`(optional; type: int; default: 10); Max results + - `lang`(optional; default: 'en'); Language code (e.g. en, zh, ja) +- Usage: `opencli wikipedia search [options] -f json` + +### summary +- Purpose: Get Wikipedia article summary +- Args: + - `title`(required); Article title (e.g. "Transformer (machine learning model)") + - `lang`(optional; default: 'en'); Language code (e.g. en, zh, ja) +- Usage: `opencli wikipedia summary [options] -f json` + +### trending +- Purpose: Most-read Wikipedia articles (yesterday) +- Args: + - `limit`(optional; type: int; default: 10); Max results + - `lang`(optional; default: 'en'); Language code (e.g. en, zh, ja) +- Usage: `opencli wikipedia trending [options] -f json` diff --git a/skills/opencli-skill/references/commands/xiaohongshu.md b/skills/opencli-skill/references/commands/xiaohongshu.md new file mode 100644 index 00000000..ae46c459 --- /dev/null +++ b/skills/opencli-skill/references/commands/xiaohongshu.md @@ -0,0 +1,87 @@ +# xiaohongshu + +## Commands + +### comments +- Purpose: 获取小红书笔记评论(仅主评论,不含楼中楼) +- Args: + - `note-id`(required); Note ID or full URL (preserves xsec_token for access) + - `limit`(optional; type: int; default: 20); Number of top-level comments (max 50) + - `with-replies`(optional; type: boolean; default: false); Include nested replies (楼中楼) +- Usage: `opencli xiaohongshu comments [options] -f json` + +### creator-note-detail +- Purpose: Xiaohongshu single-note analytics detail (note info + engagement metrics + traffic sources + audience profile + trends) +- Args: + - `note-id`(required; type: string); Note ID (from creator-notes or note-detail page URL) +- Usage: `opencli xiaohongshu creator-note-detail [options] -f json` + +### creator-notes +- Purpose: Xiaohongshu creator notes list with per-note metrics (title/date/views/likes/favorites/comments) +- Args: + - `limit`(optional; type: int; default: 20); Number of notes to return +- Usage: `opencli xiaohongshu creator-notes [options] -f json` + +### creator-notes-summary +- Purpose: Batch summary for recent Xiaohongshu notes (list + key metrics) +- Args: + - `limit`(optional; type: int; default: 3); Number of recent notes to summarize +- Usage: `opencli xiaohongshu creator-notes-summary [options] -f json` + +### creator-profile +- Purpose: Xiaohongshu creator profile metrics (followers/following/likes received/creator level) +- Args: None +- Usage: `opencli xiaohongshu creator-profile [options] -f json` + +### creator-stats +- Purpose: Xiaohongshu creator analytics overview (views/likes/favorites/comments/shares/follower growth with daily trend) +- Args: + - `period`(optional; type: string; default: 'seven'); Stats period: seven or thirty +- Usage: `opencli xiaohongshu creator-stats [options] -f json` + +### download +- Purpose: Download images and videos from a Xiaohongshu note +- Args: + - `note-id`(required); Note ID, full URL, or short link + - `output`(optional; default: './xiaohongshu-downloads'); Output directory +- Usage: `opencli xiaohongshu download [options] -f json` + +### feed +- Purpose: Xiaohongshu home recommendation feed (via Pinia Store action) +- Args: None +- Usage: `opencli xiaohongshu feed [options] -f json` + +### note +- Purpose: 获取小红书笔记正文和互动数据 +- Args: + - `note-id`(required); Note ID or full URL (preserves xsec_token for access) +- Usage: `opencli xiaohongshu note [options] -f json` + +### notifications +- Purpose: Xiaohongshu notifications (mentions/likes/connections) +- Args: None +- Usage: `opencli xiaohongshu notifications [options] -f json` + +### publish +- Purpose: Publish Xiaohongshu image-text note (creator center UI automation) +- Args: + - `title`(required); 笔记标题 (最多20字) + - `content`(required); 笔记正文 + - `images`(required); 图片路径,逗号分隔,最多9张 (jpg/png/gif/webp) + - `topics`(optional); 话题标签,逗号分隔,不含 # 号 + - `draft`(optional; type: bool; default: false); 保存为草稿,不直接发布 +- Usage: `opencli xiaohongshu publish [options] -f json` + +### search +- Purpose: Search Xiaohongshu notes +- Args: + - `query`(required); Search keyword + - `limit`(optional; type: int; default: 20); Number of results +- Usage: `opencli xiaohongshu search [options] -f json` + +### user +- Purpose: Get public notes from a Xiaohongshu user profile +- Args: + - `id`(required; type: string); User id or profile URL + - `limit`(optional; type: int; default: 15); Number of notes to return +- Usage: `opencli xiaohongshu user [options] -f json` diff --git a/skills/opencli-skill/references/commands/xiaoyuzhou.md b/skills/opencli-skill/references/commands/xiaoyuzhou.md new file mode 100644 index 00000000..1bee7b82 --- /dev/null +++ b/skills/opencli-skill/references/commands/xiaoyuzhou.md @@ -0,0 +1,22 @@ +# xiaoyuzhou + +## Commands + +### episode +- Purpose: View details of a Xiaoyuzhou podcast episode +- Args: + - `id`(required); Episode ID (eid from podcast-episodes output) +- Usage: `opencli xiaoyuzhou episode [options] -f json` + +### podcast +- Purpose: View a Xiaoyuzhou podcast profile +- Args: + - `id`(required); Podcast ID (from xiaoyuzhoufm.com URL) +- Usage: `opencli xiaoyuzhou podcast [options] -f json` + +### podcast-episodes +- Purpose: List recent episodes of a Xiaoyuzhou podcast (up to 15, SSR limit) +- Args: + - `id`(required); Podcast ID (from xiaoyuzhoufm.com URL) + - `limit`(optional; type: int; default: 15); Max episodes to show (up to 15, SSR limit) +- Usage: `opencli xiaoyuzhou podcast-episodes [options] -f json` diff --git a/skills/opencli-skill/references/commands/xueqiu.md b/skills/opencli-skill/references/commands/xueqiu.md new file mode 100644 index 00000000..403abb30 --- /dev/null +++ b/skills/opencli-skill/references/commands/xueqiu.md @@ -0,0 +1,56 @@ +# xueqiu + +## Commands + +### comments +- Purpose: 获取单只股票的讨论动态 +- Args: + - `symbol`(required); Stock symbol, e.g. SH600519, AAPL, or 00700 + - `limit`(optional; type: int; default: 20); Number of discussion posts to return +- Usage: `opencli xueqiu comments [options] -f json` + +### earnings-date +- Purpose: Get expected earnings release dates +- Args: None +- Usage: `opencli xueqiu earnings-date [options] -f json` + +### feed +- Purpose: Get Xueqiu home feed (followed users) +- Args: None +- Usage: `opencli xueqiu feed [options] -f json` + +### fund-holdings +- Purpose: 获取蛋卷基金持仓明细(可用 --account 按子账户过滤) +- Args: + - `account`(optional; type: str; default: ''); 按子账户名称或 ID 过滤 +- Usage: `opencli xueqiu fund-holdings [options] -f json` + +### fund-snapshot +- Purpose: 获取蛋卷基金快照(总资产、子账户、持仓,推荐 -f json 输出) +- Args: None +- Usage: `opencli xueqiu fund-snapshot [options] -f json` + +### hot +- Purpose: Get Xueqiu hot feed +- Args: None +- Usage: `opencli xueqiu hot [options] -f json` + +### hot-stock +- Purpose: Get Xueqiu hot stocks ranking +- Args: None +- Usage: `opencli xueqiu hot-stock [options] -f json` + +### search +- Purpose: Search Xueqiu stocks (ticker or name) +- Args: None +- Usage: `opencli xueqiu search [options] -f json` + +### stock +- Purpose: Get Xueqiu real-time quote +- Args: None +- Usage: `opencli xueqiu stock [options] -f json` + +### watchlist +- Purpose: Get Xueqiu watchlist +- Args: None +- Usage: `opencli xueqiu watchlist [options] -f json` diff --git a/skills/opencli-skill/references/commands/yahoo-finance.md b/skills/opencli-skill/references/commands/yahoo-finance.md new file mode 100644 index 00000000..f0754577 --- /dev/null +++ b/skills/opencli-skill/references/commands/yahoo-finance.md @@ -0,0 +1,9 @@ +# yahoo-finance + +## Commands + +### quote +- Purpose: Yahoo Finance stock quote +- Args: + - `symbol`(required); Stock ticker (e.g. AAPL, MSFT, TSLA) +- Usage: `opencli yahoo-finance quote [options] -f json` diff --git a/skills/opencli-skill/references/commands/yollomi.md b/skills/opencli-skill/references/commands/yollomi.md new file mode 100644 index 00000000..e365ca60 --- /dev/null +++ b/skills/opencli-skill/references/commands/yollomi.md @@ -0,0 +1,109 @@ +# yollomi + +## Commands + +### background +- Purpose: Generate AI background for a product/object image (5 credits) +- Args: + - `image`(required); Image URL (upload via "opencli yollomi upload" first) + - `prompt`(optional; default: ''); Background description (optional) + - `output`(optional; default: './yollomi-output'); Output directory + - `no-download`(optional; type: boolean; default: false); Only show URL +- Usage: `opencli yollomi background [options] -f json` + +### edit +- Purpose: Edit images with AI text prompts (Qwen image edit) +- Args: + - `image`(required); Input image URL (upload via "opencli yollomi upload" first) + - `prompt`(required); Editing instruction (e.g. "Make it look vintage") + - `model`(optional; default: 'qwen-image-edit'); Edit model + - `output`(optional; default: './yollomi-output'); Output directory + - `no-download`(optional; type: boolean; default: false); Only show URL +- Usage: `opencli yollomi edit [options] -f json` + +### face-swap +- Purpose: Swap faces between two photos (3 credits) +- Args: + - `source`(required); Source face image URL + - `target`(required); Target photo URL + - `output`(optional; default: './yollomi-output'); Output directory + - `no-download`(optional; type: boolean; default: false); Only show URL +- Usage: `opencli yollomi face-swap [options] -f json` + +### generate +- Purpose: Generate images with AI (text-to-image or image-to-image) +- Args: + - `prompt`(required); Text prompt describing the image + - `model`(optional; default: 'z-image-turbo'); Model ID (z-image-turbo, flux-schnell, nano-banana, flux-2-pro, ...) + - `ratio`(optional; default: '1:1'); Aspect ratio + - `image`(optional); Input image URL for image-to-image (upload via "opencli yollomi upload" first) + - `output`(optional; default: './yollomi-output'); Output directory + - `no-download`(optional; type: boolean; default: false); Only show URLs, skip download +- Usage: `opencli yollomi generate [options] -f json` + +### models +- Purpose: List available Yollomi AI models (image, video, tools) +- Args: + - `type`(optional; default: 'all'); Filter by model type +- Usage: `opencli yollomi models [options] -f json` + +### object-remover +- Purpose: Remove unwanted objects from images (3 credits) +- Args: + - `image`(required); Image URL + - `mask`(required); Mask image URL (white = area to remove) + - `output`(optional; default: './yollomi-output'); Output directory + - `no-download`(optional; type: boolean; default: false); Only show URL +- Usage: `opencli yollomi object-remover [options] -f json` + +### remove-bg +- Purpose: Remove image background with AI (free) +- Args: + - `image`(required); Image URL to remove background from + - `output`(optional; default: './yollomi-output'); Output directory + - `no-download`(optional; type: boolean; default: false); Only show URL +- Usage: `opencli yollomi remove-bg [options] -f json` + +### restore +- Purpose: Restore old or damaged photos with AI (4 credits) +- Args: + - `image`(required); Image URL to restore + - `output`(optional; default: './yollomi-output'); Output directory + - `no-download`(optional; type: boolean; default: false); Only show URL +- Usage: `opencli yollomi restore [options] -f json` + +### try-on +- Purpose: Virtual try-on — see how clothes look on a person (3 credits) +- Args: + - `person`(required); Person photo URL (upload via "opencli yollomi upload" first) + - `cloth`(required); Clothing image URL + - `cloth-type`(optional; default: 'upper'); Clothing type + - `output`(optional; default: './yollomi-output'); Output directory + - `no-download`(optional; type: boolean; default: false); Only show URL +- Usage: `opencli yollomi try-on [options] -f json` + +### upload +- Purpose: Upload an image or video to Yollomi (returns URL for other commands) +- Args: + - `file`(required); Local file path to upload +- Usage: `opencli yollomi upload [options] -f json` + +### upscale +- Purpose: Upscale image resolution with AI (1 credit) +- Args: + - `image`(required); Image URL to upscale + - `scale`(optional; default: '2'); Upscale factor (2 or 4) + - `output`(optional; default: './yollomi-output'); Output directory + - `no-download`(optional; type: boolean; default: false); Only show URL +- Usage: `opencli yollomi upscale [options] -f json` + +### video +- Purpose: Generate videos with AI (text-to-video or image-to-video) +- Args: + - `prompt`(required); Text prompt describing the video + - `model`(optional; default: 'kling-2-1'); Model (kling-2-1, openai-sora-2, google-veo-3-1, wan-2-5-t2v, ...) + - `image`(optional); Input image URL for image-to-video + - `ratio`(optional; default: '16:9'); Aspect ratio + - `output`(optional; default: './yollomi-output'); Output directory + - `no-download`(optional; type: boolean; default: false); Only show URL, skip download +- Usage: `opencli yollomi video [options] -f json` diff --git a/skills/opencli-skill/references/commands/youtube.md b/skills/opencli-skill/references/commands/youtube.md new file mode 100644 index 00000000..a79c02e1 --- /dev/null +++ b/skills/opencli-skill/references/commands/youtube.md @@ -0,0 +1,43 @@ +# youtube + +## Commands + +### channel +- Purpose: Get YouTube channel info and recent videos +- Args: + - `id`(required); Channel ID (UCxxxx) or handle (@name) + - `limit`(optional; type: int; default: 10); Max recent videos (max 30) +- Usage: `opencli youtube channel [options] -f json` + +### comments +- Purpose: Get YouTube video comments +- Args: + - `url`(required); YouTube video URL or video ID + - `limit`(optional; type: int; default: 20); Max comments (max 100) +- Usage: `opencli youtube comments [options] -f json` + +### search +- Purpose: Search YouTube videos +- Args: + - `query`(required); Search query + - `limit`(optional; type: int; default: 20); Max results (max 50) + - `type`(optional; default: ''); Filter type: shorts, video, channel, playlist + - `upload`(optional; default: ''); Upload date: hour, today, week, month, year + - `sort`(optional; default: ''); Sort by: relevance, date, views, rating +- Usage: `opencli youtube search [options] -f json` + +### transcript +- Purpose: Get YouTube video transcript/subtitles +- Args: None +- Usage: `opencli youtube transcript [options] -f json` + +### transcript-group +- Purpose: youtube transcript-group operation +- Args: None +- Usage: `opencli youtube transcript-group [options] -f json` + +### video +- Purpose: Get YouTube video metadata (title, views, description, etc.) +- Args: + - `url`(required); YouTube video URL or video ID +- Usage: `opencli youtube video [options] -f json` diff --git a/skills/opencli-skill/references/commands/zhihu.md b/skills/opencli-skill/references/commands/zhihu.md new file mode 100644 index 00000000..5f8491dd --- /dev/null +++ b/skills/opencli-skill/references/commands/zhihu.md @@ -0,0 +1,28 @@ +# zhihu + +## Commands + +### download +- Purpose: Export Zhihu article to Markdown +- Args: + - `url`(required); Article URL (zhuanlan.zhihu.com/p/xxx) + - `output`(optional; default: './zhihu-articles'); Output directory + - `download-images`(optional; type: boolean; default: false); Download images locally +- Usage: `opencli zhihu download [options] -f json` + +### hot +- Purpose: Zhihu hot list +- Args: None +- Usage: `opencli zhihu hot [options] -f json` + +### question +- Purpose: Zhihu question detail and answers +- Args: + - `id`(required); Question ID (numeric) + - `limit`(optional; type: int; default: 5); Number of answers +- Usage: `opencli zhihu question [options] -f json` + +### search +- Purpose: Search Zhihu +- Args: None +- Usage: `opencli zhihu search [options] -f json` diff --git a/skills/opencli-skill/references/commands/zsxq.md b/skills/opencli-skill/references/commands/zsxq.md new file mode 100644 index 00000000..2d1c9691 --- /dev/null +++ b/skills/opencli-skill/references/commands/zsxq.md @@ -0,0 +1,37 @@ +# zsxq + +## Commands + +### dynamics +- Purpose: 获取所有星球的最新动态 +- Args: + - `limit`(optional; type: int; default: 20); Number of dynamics to return +- Usage: `opencli zsxq dynamics [options] -f json` + +### groups +- Purpose: 列出当前账号加入的星球 +- Args: + - `limit`(optional; type: int; default: 50); Number of groups to return +- Usage: `opencli zsxq groups [options] -f json` + +### search +- Purpose: 搜索星球内容 +- Args: + - `keyword`(required); Search keyword + - `limit`(optional; type: int; default: 20); Number of results to return + - `group_id`(optional); Optional group id; defaults to the active group in Chrome +- Usage: `opencli zsxq search [options] -f json` + +### topic +- Purpose: 获取单个话题详情和评论 +- Args: + - `id`(required); Topic ID + - `comment_limit`(optional; type: int; default: 20); Number of comments to fetch +- Usage: `opencli zsxq topic [options] -f json` + +### topics +- Purpose: 获取当前星球的话题列表 +- Args: + - `limit`(optional; type: int; default: 20); Number of topics to return + - `group_id`(optional); Optional group id; defaults to the active group in Chrome +- Usage: `opencli zsxq topics [options] -f json`