opencli-generate
CLI-GENERATE — Verified CLI Generation Skill
One-shot automated CLI generation: give a URL, get a verified command or a structured explanation of why not.
When to Use This Skill
- User says "帮我生成 xxx.com 的 cli" or similar
- User wants to add a website to opencli automatically
- User provides a URL and expects a working CLI command
Not for: manual API exploration (use opencli-explorer), single-page quick generation (use opencli-oneshot), or browser-based debugging (use opencli-operate).
Input
| Field | Required | Type | Description |
|---|---|---|---|
url |
Yes | string | Target website URL |
goal |
No | string | Natural language intent hint (e.g. "热榜", "搜索", "最新帖子") |
goal is a user-intent hint, not a command name, capability schema, or execution parameter.
How to Invoke
opencli generate <url> [--goal <goal>] [--format json]
The skill calls generateVerifiedFromUrl internally. The agent does not need to know about explore, synthesize, cascade, or verify stages.
Output: SkillOutput
interface SkillOutput {
// Machine-readable decision fields (agent uses these for routing)
conclusion: 'success' | 'blocked' | 'needs-human-check';
reason?: StopReason | EscalationReason;
suggested_action?: SuggestedAction;
reusability?: Reusability;
// Structured data
command?: string; // e.g. "demo/hot"
strategy?: string; // "public" | "cookie"
path?: string; // YAML artifact path
// Human-readable summary (agent can relay to user directly)
message: string;
}
Decision Language (shared with code layer)
StopReason (blocked):
no-viable-api-surface— site has no discoverable JSON APIsauth-too-complex— all endpoints require auth beyond PUBLIC/COOKIEno-viable-candidate— APIs found but no valid CLI candidate synthesizedexecution-environment-unavailable— browser not connected
EscalationReason (needs-human-check):
empty-result— pipeline ran but returned nothingsparse-fields— result has too few populated fieldsnon-array-result— result is not an arrayunsupported-required-args— candidate needs args we can't auto-filltimeout— execution timed outselector-mismatch— DOM/JSON path didn't matchverify-inconclusive— catch-all for ambiguous verify failures
SuggestedAction (what to do next):
stop— nothing more to tryinspect-with-operate— use opencli-operate skill to debugask-for-login— user needs to log in firstask-for-sample-arg— user needs to provide a real argument valuemanual-review— general human review needed
Reusability (is the artifact worth keeping?):
verified-artifact— fully verified, can be used directlyunverified-candidate— candidate exists but not verifiednot-reusable— nothing worth keeping
Decision Tree
Input: url + goal?
|
v
Call generateVerifiedFromUrl(url, goal)
|
v
Receive GenerateOutcome
|
+-- status = 'success'
| conclusion: 'success'
| reusability: 'verified-artifact'
| command: outcome.adapter.command
| strategy: outcome.adapter.strategy
| path: outcome.adapter.path
| message: "已生成 {command},可直接使用 (策略: {strategy})"
| → END
|
+-- status = 'blocked'
| conclusion: 'blocked'
| reason: outcome.reason
| message: (see message templates below)
| → END
|
+-- status = 'needs-human-check'
conclusion: 'needs-human-check'
reason: outcome.escalation.reason
suggested_action: outcome.escalation.suggested_action
reusability: outcome.reusability
path: outcome.escalation?.candidate?.path (optional, only when reusable candidate exists)
message: (see message templates below)
→ END (upper-level agent decides next step)
Message Templates
| conclusion | reason | message |
|---|---|---|
success |
— | "已生成 {command},可直接使用。策略: {strategy}" |
blocked |
no-viable-api-surface |
"该站点没有发现可用的 JSON API 接口,无法自动生成 CLI" |
blocked |
auth-too-complex |
"所有接口都需要超出自动化能力的认证方式(如 signature/bearer),无法自动生成" |
blocked |
no-viable-candidate |
"发现了 API 接口,但未能合成有效的 CLI 候选" |
blocked |
execution-environment-unavailable |
"浏览器未连接,请先运行 opencli doctor 检查环境" |
needs-human-check |
unsupported-required-args |
"候选需要参数 {args},请提供示例值后重试" |
needs-human-check |
empty-result |
"候选验证返回空结果,建议用 opencli-operate 检查" |
needs-human-check |
sparse-fields |
"候选验证结果字段不足,建议人工检查" |
needs-human-check |
non-array-result |
"返回结果不是数组格式,建议用 opencli-operate 检查接口返回结构" |
needs-human-check |
timeout |
"验证超时,建议用 opencli-operate 手动检查接口响应" |
needs-human-check |
selector-mismatch |
"数据路径不匹配,建议用 opencli-operate 检查实际返回结构" |
needs-human-check |
verify-inconclusive |
"验证结果不确定,候选已保存在 {path},需要人工审查" |
Guardrails
-
Skill does not orchestrate internal pipeline stages. It does not decide whether to explore, synthesize, cascade, or verify. That is the code layer's job.
-
Skill does not auto-escalate to operate. When
needs-human-check, skill reports the recommendation but does not automatically invokeopencli-operate. The upper-level agent decides. -
No new taxonomy. All
reason,suggested_action,reusabilityvalues are shared with the code layer (GenerateOutcome). Skill does not invent new status words. -
Machine-readable fields are the contract;
messageis just a summary. Callers must not parsemessagefor decision-making. -
goalis a natural language intent hint. Not a command name, not a capability schema, not an execution parameter.
Relationship to Other Primitives
P1: Terminal Contract (GenerateOutcome)
- Skill's single source of truth for final decisions
- Skill maps
GenerateOutcome→SkillOutput(thin translation, no re-orchestration)
P2: Early-Hint Contract (EarlyHint)
- Lives inside the orchestrator, transparent to skill
- Drives early exit (cost optimization) before verify stage
- Skill does not consume
EarlyHintdirectly in v1 - May be exposed as optional progress channel in future versions
v1 Scope
- JSON API + PUBLIC/COOKIE auth + structured array result + read-only list-like capabilities
- Single browser session lifecycle (probe + verify share one session)
- Bounded repair: only itemPath relocation, one attempt
More from jackwener/opencli
opencli-usage
Use at the start of any OpenCLI session — this is the top-level map of what `opencli` can do, how to discover adapters, what flags and output formats are universal, and which specialized skill to load next. Point here when an agent asks "what can opencli do?" or "how do I find the right command?".
7.1Ksmart-search
基于 opencli 命令的智能搜索路由器。当用户想要使用 OpenCLI、CLI 或 API 搜索、查询、查找或研究信息时,尤其是涉及指定网站、社交媒体、技术资料、新闻、购物、旅游、求职、金融或中文内容时,务必使用此 skill
6.6Kopencli-browser
Use when an agent needs to drive a real Chrome window via opencli — inspect a page, fill forms, click through logged-in flows, or extract data ad-hoc. Covers the selector-first target contract, compound form fields, stale-ref handling, network capture, and the agent-native envelopes the CLI returns. Not for writing adapters — see opencli-adapter-author for that.
5.2Kopencli-autofix
Automatically fix broken OpenCLI adapters when commands fail. Load this skill when an opencli command fails — it guides you through collecting a trace artifact, patching the adapter, retrying, and filing an upstream GitHub issue after a verified fix. Works with any AI agent.
5.2Kopencli-explorer
Use when creating a new OpenCLI adapter from scratch, adding support for a new website or platform, exploring a site's API endpoints via browser DevTools, or when a user asks to automatically generate a CLI for a website (e.g. "帮我生成 xxx.com 的 cli"). Covers automated generation, API discovery workflow, authentication strategy selection, TS adapter writing, and testing.
4.0Kopencli-oneshot
Use when quickly generating a single OpenCLI command from a specific URL and goal description. 4-step process — open page, capture API, write TS adapter, test. For full site exploration, use opencli-explorer instead.
3.9K