← All skills
opencli-adapter-author
97 / 100 · Low risk
Fine to try.
By Treasoni/kaoyan (GitHub) · coding · 13 stars · scanned at commit 2d1ca8d
Use when writing an OpenCLI adapter for a new site or adding a new command to an existing site. Guides end-to-end from first recon through field decoding, adapter coding, and verify. Replaces opencli-oneshot / opencli-explorer. For ad-hoc browser driving (no adapter), see opencli-browser instead; for a top-level orientation to opencli, see opencli-usage.
Works with any agent that supports SKILL.md skills.
What this skill can do
Sends data to these websites: push2.eastmoney.com
This is disclosed by the author in the skill's SKILL.md or README.
Found in 22 places.
Show 17 more
- .agents/skills/opencli-adapter-author/references/adapter-template.md, line 237
### 为什么不走 `page.evaluate(fetch(...))` - .agents/skills/opencli-adapter-author/references/api-discovery.md, line 33
opencli browser eval "fetch('https://<target-subdomain>/api/...', {credentials:'include'}).then(r=>r.status).catch(e=>'cors:'+e.message)" - .agents/skills/opencli-adapter-author/references/api-discovery.md, line 98
`browser network` 当前只抓响应(body + status + ct),抓不到请求头。要看请求头就在 DevTools Network 面板里点这条 request,或用 `browser eval` 手动 `fetch(url)` 复现一次观察浏览器发出去的头: - .agents/skills/opencli-adapter-author/references/api-discovery.md, line 172
opencli browser eval "(async()=>{const s=[...document.querySelectorAll('script[src]')].map(e=>e.src).find(s=>/main|app|index|bundle|chunk/.test(s));if(!s)return - .agents/skills/opencli-adapter-author/references/api-discovery.md, line 182
opencli browser eval "fetch('https://push2.eastmoney.com/api/qt/clist/get?fs=m:1+t:2&pn=1&pz=5&fltt=2&fid=f3&po=1&fields=f2,f3,f12,f14').then(r=>r.json())" - .agents/skills/opencli-adapter-author/references/api-discovery.md, line 196
opencli browser eval "fetch(location.pathname.replace(/\\/$/,'')+'.json').then(r=>r.ok?r.json():'no')" - .agents/skills/opencli-adapter-author/references/api-discovery.md, line 230
opencli browser eval "(async()=>{const s=[...document.querySelectorAll('script[src]')].map(e=>e.src).find(s=>/main|app|bundle/.test(s));const t=await fetch(s).t - .agents/skills/opencli-adapter-author/references/coverage-matrix.md, line 24
| 鉴权 | 裸 `fetch()` 拿到(PUBLIC) | ✅ | `Strategy.PUBLIC + browser:false`(coingecko dry run 验证) | - .agents/skills/opencli-adapter-author/references/field-decode-playbook.md, line 71
opencli browser eval "fetch('<url>&fid=f2&po=1').then(r=>r.json()).then(d=>d.data.diff.slice(0,3))" - .agents/skills/opencli-adapter-author/references/field-decode-playbook.md, line 72
opencli browser eval "fetch('<url>&fid=f3&po=1').then(r=>r.json()).then(d=>d.data.diff.slice(0,3))" - .agents/skills/opencli-adapter-author/references/field-decode-playbook.md, line 84
opencli browser eval "fetch('<url>&fid=f6&po=1').then(r=>r.json()).then(d=>d.data.diff.slice(0,3))" # 成交额 - .agents/skills/opencli-adapter-author/references/field-decode-playbook.md, line 93
opencli browser eval "fetch('https://push2.eastmoney.com/api/qt/clist/get?fs=b:MK0354&pn=1&pz=1&fid=f2&po=1&fltt=2&fields=f12,f14,f2,f3,f236,f237,f239').then(r= - .agents/skills/opencli-adapter-author/references/field-decode-playbook.md, line 97
opencli browser eval "fetch('...&fid=f237&po=1...').then(...)" - .agents/skills/opencli-adapter-author/references/field-decode-playbook.md, line 114
opencli browser eval "fetch('<url>').then(r=>r.json()).then(j=>({keys:Object.keys(j), type:Array.isArray(j)?'array':'object'}))" - .agents/skills/opencli-adapter-author/references/field-decode-playbook.md, line 120
opencli browser eval "fetch('<url>').then(r=>r.json()).then(j=>{const d=j.data; return {keys:Object.keys(d), sample: d[Object.keys(d)[0]]}})" - .agents/skills/opencli-adapter-author/references/field-decode-playbook.md, line 131
opencli browser eval "fetch('<url>').then(r=>r.json()).then(d=>d.data.diff.slice(0,3).map(x=>({f2:x.f2,f3:x.f3,f152:x.f152})))" - .agents/skills/opencli-adapter-author/references/site-memory/xueqiu.md, line 15
- `page.evaluate` 里 `fetch(url, { credentials: 'include' })` 带 cookie
and 2 more places
Install
Paste this into your terminal. It downloads exactly the version we scanned, not whatever is newest.
if [ -e ~/.agents/skills/'opencli-adapter-author' ] || [ -L ~/.agents/skills/'opencli-adapter-author' ]; then echo 'A skill folder named opencli-adapter-author already exists — not replacing it' >&2; false; else d=$(mktemp -d) && git clone --quiet --filter=blob:none --no-checkout 'https://github.com/Treasoni/kaoyan' "$d" && git -C "$d" checkout --quiet '2d1ca8d59f73216f0d827f24c383057ee37940d3' -- '.agents/skills/opencli-adapter-author' && mkdir -p ~/.agents/skills && cp -R "$d"/'.agents/skills/opencli-adapter-author' ~/.agents/skills/'opencli-adapter-author' && rm -rf "$d"; fi
Codex reads ~/.agents/skills directly. For Claude Code, Cursor, Copilot, Gemini CLI, Antigravity or OpenCode, also link it. For Claude Code: ln -s ~/.agents/skills/'opencli-adapter-author' ~/.claude/skills/'opencli-adapter-author' (other agents: ~/.cursor/skills, ~/.copilot/skills, ~/.gemini/skills, ~/.gemini/config/skills, ~/.config/opencode/skills). Or install through the finder skill, which does both.
Badge for your README
The badge for Treasoni/kaoyan shows the score of its lowest-scoring skill.

[](https://zalavijaysinh.github.io/skilltrust/repos/Treasoni/kaoyan/)
Score history
| Date | Version | Score |
|---|
| 2026-11-13 | 2d1ca8d | 97 |
| 2026-11-08 | 581285f | 97 |
Also found in
Identical copies of this skill exist at:
- Treasoni/kaoyan/.claude/skills/opencli-adapter-author
- Treasoni/kaoyan/.codebuddy/skills/opencli-adapter-author