Skilldo CLI
Skilldo は、ソフトウェアライブラリの SKILL.md ファイルを生成する7段階のLLMパイプラインです: 抽出 → マッピング → 学習 → 事実 → 生成 → レビュー → テスト
ステージ1〜3 でライブラリのメタデータ(ソースファイル、ドキュメント、依存関係、バージョン)を収集します。 ステージ4(事実)では、ステージ1〜3から否定的なアサーションを含むコンパクトな真偽値表を抽出します。 ステージ5で SKILL.md を生成し、ステージ6で正確性と安全性をレビュー、ステージ7で生成されたテストコードを使って検証します。
インストール
# Homebrew
brew install skilldoai/tap/skilldo
# ソースから
cargo install --path .
クイックスタート
# 現在のリポジトリの SKILL.md を生成
skilldo generate
# 特定のリポジトリパスを指定
skilldo generate /path/to/library
# 言語を明示的に指定
skilldo generate --language python
# 特定の設定ファイルを使用
skilldo generate --config skilldo.toml
設定 (skilldo.toml)
Skilldo は TOML 設定ファイルを使用します。skilldo.toml をリポジトリのルートに配置するか、--config で指定します。
最小設定 (単一プロバイダ)
[llm]
provider_type = "anthropic" # anthropic, openai, gemini, openai-compatible, chatgpt
model = "claude-sonnet-4-6"
api_key_env = "ANTHROPIC_API_KEY" # キーを含む環境変数名
[generation]
max_retries = 10 # lint/テスト失敗時の再試行回数
# telemetry = true # オプトイン: 実行ログを ~/.skilldo/runs.csv に記録
ステージごとのモデル上書き
レビューステージとテストステージで異なるモデルを使用できます:
[llm]
provider_type = "anthropic"
model = "claude-sonnet-4-6"
api_key_env = "ANTHROPIC_API_KEY"
[generation]
enable_test = true
enable_review = true
test_mode = "thorough" # thorough, quick, adaptive, minimal
[generation.review_llm]
provider_type = "openai"
model = "gpt-5.2"
api_key_env = "OPENAI_API_KEY"
[generation.test_llm]
provider_type = "openai"
model = "gpt-5.2"
api_key_env = "OPENAI_API_KEY"
ローカルモデル (Ollama)
[llm]
provider_type = "openai-compatible"
model = "qwen3-coder:latest"
base_url = "http://localhost:11434/v1"
api_key_env = "none" # Ollama はキーを必要としません
CLI プロバイダ (既存のCLIツールをLLMバックエンドとして使用)
[llm]
provider_type = "cli"
model = "claude-sonnet-4-6"
cli_command = "claude"
cli_args = ["-p", "--no-session-persistence", "--output-format", "text", "--dangerously-skip-permissions"]
request_timeout_secs = 900
サポートされているCLIツール:claude、codex、gemini。プロンプトは標準入力からパイプされ、応答は標準出力から取得されます。
オプション:CLI がシステムプロンプトをネイティブに受け入れる方法を宣言します:
cli_system_args = ["--system-prompt-file"] # claude の場合(一時ファイルから読み取る)
# cli_system_args = ["-s"] # codex の場合
cli_system_args が設定されている場合、指示は標準入力に連結される代わりに、ネイティブのシステムチャンネルを通じて送信されます。
カスタムベースURL (Bedrock、Vertex AI、プロキシ)
すべてのプロバイダはカスタムエンドポイント用のオプションの base_url をサポートしています:
# AWS Bedrock 経由の Anthropic
[llm]
provider_type = "anthropic"
base_url = "https://bedrock-runtime.us-east-1.amazonaws.com"
# Google Vertex AI 経由の Gemini
[llm]
provider_type = "gemini"
base_url = "https://us-central1-aiplatform.googleapis.com"
コンテナ設定 (オプション)
[generation.container]
runtime = "podman" # docker または podman
timeout = 120 # 秒
cleanup = true
# setup_commands = ["apt-get update && apt-get install -y cmake"] # 依存関係/テストの前に実行
コマンド
skilldo generate [PATH]
ライブラリリポジトリの SKILL.md を生成します。\n主要なフラグ:
--language <LANG>— 言語を強制指定 (python, javascript, rust, go, java)。省略時は自動検出--config <PATH>— 設定ファイルのパス(デフォルト:./skilldo.tomlまたは~/.config/skilldo/config.toml)--model <MODEL>— LLMモデルを上書き--provider <PROVIDER>— LLMプロバイダ: anthropic, openai, chatgpt, gemini, openai-compatible--base-url <URL>— openai-compatible プロバイダのベースURL-i, --input <PATH>— 既存の SKILL.md を参照用として更新に使用-o <PATH>— 出力ファイル(デフォルト: SKILL.md)--debug-stage-files <DIR>— デバッグ用に各パイプラインステージの生出力をダンプ--replay-from <DIR>— 以前の--debug-stage-files実行から抽出/マッピング/学習のキャッシュされた出力を読み込み、それらのLLM呼び出しをスキップ。反復時間を約15分から約5分に短縮--no-test— テスト検証をスキップ--no-review— レビュー検証をスキップ--no-security-scan— YARA/Unicode/インジェクションスキャンをスキップ--no-parallel— 抽出/マッピング/学習を逐次実行(ローカルモデル用)--best-effort— エラーが発生しても終了コード0で終了--telemetry/--no-telemetry— 実行ログのオン/オフ--container— テストエージェントをコンテナ内で実行(デフォルト: uv/cargo を使用したベアメタル)--install-source <MODE>— テストエージェントがコード検証のためにライブラリをインストールする方法:registry(crates.io/PyPI/npm から、デフォルト)、local-install(ローカルリポジトリをマウントしてパッケージマネージャ経由でビルド)、local-mount(リポジトリをマウントしてモジュールパスを直接設定、ビルドステップなし)--source-path <PATH>— local-install/local-mount モード用のローカルソースパス--test-mode <MODE>—thoroughはすべてのパターンをテスト(デフォルト)、quickは最大3つをテストして高速反復、minimalは1つをテスト、adaptiveは1つから開始して拡大--review-model <MODEL>/--review-provider <PROVIDER>— レビューステージのみのモデル/プロバイダを上書き--test-model <MODEL>/--test-provider <PROVIDER>— テストコード生成ステージのみのモデル/プロバイダを上書き--max-retries <N>— 生成→検証の最大再試行回数(デフォルト: 設定ファイルの値)--skill-version <VER>— 自動検出の代わりにフロントマターで特定のライブラリバージョンを強制指定(例: "2.1.0")--version-from <STRATEGY>— バージョン検出方法:package(Cargo.toml/pyproject.toml)、git-tag、branch、commit-q, --quiet— 情報出力を抑制(警告/エラーのみ表示)-v, --verbose— 詳細なデバッグ出力を表示(RUST_LOG=debug と同等)--request-timeout <SECS>— LLMリクエストのタイムアウトを秒単位で上書き(デフォルト: 120)--dry-run— テスト用にモックLLMクライアントを使用(API呼び出しなし)
skilldo lint <PATH>
SKILL.md の構造エラー(フロントマター、セクション、コードブロック)をリントします。
skilldo review <PATH>
既存の SKILL.md を正確性と安全性についてLLM駆動でレビューします。
主要なフラグ:
--config <PATH>— LLM設定を含む設定ファイル
skilldo config check --config <PATH>
設定ファイルの正しさを検証します。
skilldo auth login|status|logout
OAuthを使用するプロバイダ(例: ChatGPT)のOAuthトークンを管理します。
サポートされている言語
| 言語 | エコシステム | 検出方法 |
|---|---|---|
| Python | pip/uv, pyproject.toml, setup.py | *.py, pyproject.toml |
| JavaScript/TypeScript | npm, package.json | *.js, *.ts, package.json |
| Go | go modules, go.mod | *.go, go.mod |
| Rust | cargo, Cargo.toml | *.rs, Cargo.toml |
| Java | Maven/Gradle, pom.xml, build.gradle | *.java, pom.xml, build.gradle |
設定 (skilldo.toml)
主要な [generation] フィールド:
| フィールド | 値 | 説明 |
|---|---|---|
language | python, javascript (または typescript/ts/js)、rust、go、java | 自動検出を上書き |
security_context | "api-client" または省略 | APIクライアントSDK(認証情報/認証について扱う)のセキュリティスキャンを緩和 |
redact_env_vars | ["VAR_NAME", ...] | テスト出力/ログで環境変数の値を ***REDACTED*** でマスク |
custom_instructions | """...""" | 生成ステージのリポジトリ固有の指示(スタイル/コンテンツルールを上書き) |
enable_test | true/false | テスト検証の有効/無効(デフォルト: true) |
enable_review | true/false | レビュー検証の有効/無効(デフォルト: true) |
test_mode | thorough/quick/minimal/adaptive | すべて/最大3/1/1つ以上のパターンをテスト |
max_retries | 整数 | 生成→検証の最大再試行回数(デフォルト: 10) |
モデル通信
モデルは出力内のHTMLコメントを通じて不確実性を報告します(最終的な SKILL.md の前に削除されます):
<!-- SKILLDO-CONFLICT: description -->— ドキュメントとコードの競合を発見<!-- SKILLDO-UNVERIFIED: description -->— モデルがソースから検証できなかったAPI
これらを表示するには RUST_LOG=info または RUST_LOG=debug を使用してください。CONFLICT は info レベルで、UNVERIFIED は warn レベルでログ出力されます。
一般的なワークフロー
Anthropic で生成
source ~/.anthropic
skilldo generate --provider anthropic --model claude-sonnet-4-6
OpenAI で生成
source ~/.openai
skilldo generate --provider openai --model gpt-5.2
ローカル Ollama で生成
skilldo generate --provider openai-compatible --model qwen3-coder:latest --base-url http://localhost:11434/v1
バッチ生成(複数リポジトリ)
for repo in /path/to/repos/*/; do
skilldo generate "$repo" --config shared-config.toml --best-effort
done
APIクライアントSDKの生成
# skilldo.toml — APIキー/認証を扱うライブラリ向け
[generation]
security_context = "api-client"
redact_env_vars = ["MY_API_KEY"]
export MY_API_KEY="..." # テスト検証に必要
skilldo generate . --config skilldo.toml
リプレイによる高速プロンプト反復
# キャッシュを一度取得
skilldo generate /path/to/lib --debug-stage-files /tmp/cache -o /tmp/baseline.md
# プロンプトを反復(生成ステージのみ実行、約5分 vs 約15分)
skilldo generate /path/to/lib --replay-from /tmp/cache -o /tmp/variant.md
パイプラインステージのデバッグ
skilldo generate . --debug-stage-files ./debug-output/
# 書き出されるファイル: 1-extract.md, 2-map.md, 3-learn.md, 4-create-raw.md, 4-create-system.md, facts.md,
# 5-review-*.txt, 6-normalized.md
既存の SKILL.md をレビュー
skilldo review SKILL.md --config skilldo.toml
テレメトリ
telemetry = true の場合、各実行は ~/.skilldo/runs.csv に行を追加します:
- タイムスタンプ、言語、ライブラリ名、バージョン
- 使用されたモデルとプロバイダ(生成、レビュー、テスト)
- 成功/失敗、再試行回数、実行時間、失敗の詳細
データはローカルのみに保存され、どこにも送信されません。
トラブルシューティング
- 「テストファイルが見つかりません」 — 警告でありエラーではありません。パイプラインはテスト由来のパターンなしで続行します。検出が間違っている場合は
--languageを使用して上書きしてください。 - テスト失敗がループする — 最初のパスでは
--test-mode minimalまたは--no-testを試してください。 - レート制限 — 設定の
retry_delayを増やすか、ローカルモデルに切り替えてください。 - OAuthエラー —
skilldo auth status --config <path>を実行してトークンの状態を確認してください。 - install_source エラー(非Python) —
local-install/local-mountはPythonでのみ機能します。他の言語ではデフォルトのregistryを使用してください。
ドキュメント
完全なドキュメント — 設定、言語、アーキテクチャ、認証、ベストプラクティス、テレメトリ: docs/