opencli-generate について
opencli-generateは、WebサイトのURLと任意の意図ヒントからOpenCLIコマンドを生成し、検証するスキルです。生成できない場合や人による確認が必要な場合は、手動調査を行わず構造化された結果を返します。
主な機能
- 01URLからCLIコマンドを生成
- 02任意の自然言語ゴールを受け付け
- 03生成した候補コマンドを検証
- 04成功または失敗理由を構造化して返却
- 05人による確認の次の手順を提示
活用シーン
- 01WebサイトのURLからコマンドを作成
- 02生成コマンドが利用可能な結果を返すか確認
- 03ログインやサンプル引数が必要か判断
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jackwener/ opencli --skill opencli-generateインストール後、Claude Code で/opencli-generateを入力して読み込まれたか確認します。
詳細
CLI-GENERATE — 検証済み CLI 生成スキル
ワンショットの CLI 自動生成:URL を渡すと、検証済みのコマンド、または生成できない理由を構造化して説明します。
このスキルを使う場面
- ユーザーが「帮我生成 xxx.com 的 cli」などと言った場合
- ユーザーが opencli にウェブサイトを自動で追加したい場合
- ユーザーが URL を提示し、動作する CLI コマンドを期待している場合
対象外:手動での API 調査(opencli-explorer を使用)、単一ページのクイック生成(opencli-oneshot を使用)、ブラウザーを使ったデバッグ(opencli-operate を使用)。
入力
| フィールド | 必須 | 型 | 説明 |
|---|---|---|---|
url | はい | 文字列 | 対象ウェブサイトの URL |
goal | いいえ | 文字列 | 自然言語による意図のヒント(例:「热榜」、「搜索」、「最新帖子」) |
goal はユーザーの意図を示すヒントであり、コマンド名、機能スキーマ、実行パラメーターではありません。
呼び出し方法
opencli generate <url> [--goal <goal>] [--format json]
このスキルは内部で generateVerifiedFromUrl を呼び出します。エージェントが explore、synthesize、cascade、verify の各ステージについて把握する必要はありません。
出力: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;
}
判定に使う語句(コードレイヤーと共通)
StopReason(ブロックされた場合):
no-viable-api-surface— サイトで検出可能な JSON API がありませんauth-too-complex— すべてのエンドポイントで PUBLIC/COOKIE を超える認証が必要ですno-viable-candidate— API は見つかりましたが、有効な CLI 候補を合成できませんでしたexecution-environment-unavailable— ブラウザーが接続されていません
EscalationReason(人による確認が必要な場合):
empty-result— パイプラインは実行されましたが、結果がありませんsparse-fields— 結果のフィールドがほとんど入力されていませんnon-array-result— 結果が配列ではありませんunsupported-required-args— 候補に自動入力できない引数が必要ですtimeout— 実行がタイムアウトしましたselector-mismatch— DOM/JSON パスが一致しませんでしたverify-inconclusive— 判定が曖昧な場合の包括的な理由です
SuggestedAction(次に行うこと):
stop— これ以上試すことはありませんinspect-with-operate— opencli-operate スキルを使ってデバッグしますask-for-login— ユーザーに先にログインしてもらう必要がありますask-for-sample-arg— ユーザーに実際の引数値を提示してもらう必要がありますmanual-review— 人による一般的な確認が必要です
Reusability(成果物を保持する価値があるか):
verified-artifact— 検証済みで、そのまま使用できますunverified-candidate— 候補はありますが、検証されていませんnot-reusable— 保持する価値のあるものはありません
判定ツリー
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)
メッセージテンプレート
| 結論 | 理由 | メッセージ |
|---|---|---|
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},需要人工审查" |
ガードレール
-
スキルは内部パイプラインの各ステージをオーケストレーションしません。 探索、統合、カスケード、検証のいずれを行うかは判断しません。それはコード層の役割です。
-
スキルは操作へ自動的にエスカレーションしません。
needs-human-checkの場合、スキルは推奨事項を報告しますが、opencli-operateを自動的に呼び出しません。判断するのは上位レベルのエージェントです。 -
新しい分類体系は導入しません。 すべての
reason、suggested_action、reusabilityの値は、コード層(GenerateOutcome)と共通です。スキルは新しいステータス用語を作りません。 -
機械可読フィールドが契約であり、
messageは単なる要約です。 呼び出し側は、意思決定のためにmessageを解析してはなりません。 -
goalは自然言語による意図のヒントです。 コマンド名でも、機能スキーマでも、実行パラメーターでもありません。
他のプリミティブとの関係
P1:ターミナル契約(GenerateOutcome)
- 最終判断におけるスキルの唯一の信頼できる情報源
- スキルは
GenerateOutcome→SkillOutputにマッピングします(薄い変換のみで、再オーケストレーションは行いません)
P2:早期ヒント契約(EarlyHint)
- オーケストレーター内に存在し、スキルからは透過的です
- 検証ステージの前に早期終了(コスト最適化)を促します
- スキルは v1 では
EarlyHintを直接利用しません - 将来のバージョンでは、オプションの進捗チャネルとして公開される可能性があります
v1 の範囲
- JSON API + PUBLIC/COOKIE 認証 + 構造化配列結果 + 読み取り専用のリスト型機能
- 単一のブラウザーセッションのライフサイクル(probe と verify でセッションを共有)
- 範囲を限定した修復:itemPath の再配置のみ、試行は 1 回