description optimizerのANTHROPIC_API_KEY依存を廃止し`claude -p`サブプロセス方式に統一
skill-creatorのdescription optimizerが、anthropic Pythonライブラリによる直接API呼び出しからclaude -pサブプロセス呼び出しに変更されました。これにより、ANTHROPIC_API_KEYの個別設定なしにClaude Codeの認証セッションをそのまま再利用できるようになります。
背景
description optimizerのスクリプト群(improve_description.py、run_loop.py)は、これまでanthropicライブラリを直接インポートし、anthropic.Anthropic()クライアントを生成してAPIを呼び出していました。この方式では、Claude Codeのセッション内で動作するskillでありながら、別途ANTHROPIC_API_KEY環境変数の設定が必要という矛盾した状態でした。
同じリポジトリのrun_eval.pyはすでにclaude -pサブプロセス方式を採用しており、Claude Codeの認証をそのまま使う設計が確立されていました。今回の変更はその設計をimprove_description.pyにも適用し、ツール群全体の認証パターンを統一するものです。
技術的な変更
improve_description.pyに_call_claudeヘルパー関数が新設され、anthropicライブラリへの依存が完全に除去されました。
変更前:
import anthropic
# ...
client = anthropic.Anthropic()
# client を引数として improve_description() に渡していた
変更後:
import os
import subprocess
def _call_claude(prompt: str, model: str | None, timeout: int = 300) -> str:
cmd = ["claude", "-p", "--output-format", "text"]
if model:
cmd.extend(["--model", model])
env = {k: v for k, v in os.environ.items() if k != "CLAUDECODE"}
result = subprocess.run(
cmd,
input=prompt,
capture_output=True,
text=True,
env=env,
timeout=timeout,
)
if result.returncode != 0:
raise RuntimeError(
f"claude -p exited {result.returncode}\nstderr: {result.stderr}"
)
return result.stdout
run_loop.py側でもanthropic.Anthropic()クライアントの生成とclient引数の受け渡しが削除されています。プロンプトはargvではなくstdinで渡す設計になっており、SKILL.mdの全文を含むような長いプロンプトでも引数長の制限を受けません。
注目すべきはCLAUDECODE環境変数の除去です。Claude Codeのインタラクティブセッション内でさらにclaude -pをネストして呼び出すと競合が生じる可能性があるため、サブプロセス起動前にCLAUDECODEをenv dictから除外しています。run_eval.pyで確立された同じパターンを踏襲しています。
設計判断
anthropicライブラリを捨ててclaude -pに統一するという判断には、認証の一元化という明確な動機があります。
skill-creatorはClaude Codeのセッション内で動作することを前提とした設計であり、そのコンテキストではclaude -pが認証を自動的に引き継ぎます。anthropicライブラリを使う場合は別途ANTHROPIC_API_KEYが必要になり、ユーザーに余分なセットアップを強いることになります。run_eval.pyとの統一により、すべての外部API呼び出しが同じサブプロセスパターンを使うことになりました。
また、SKILL.mdの説明文も「extended thinkingを使ってClaudeを呼び出す」という記述から「Claudeを呼び出す」というシンプルな表現に変更されており、実装詳細への依存を減らしたドキュメント方針も読み取れます。
まとめ
本PRは、description optimizerの認証方式をrun_eval.pyと同じclaude -pサブプロセスパターンに統一したリファクタリングです。ANTHROPIC_API_KEYという外部依存を排除することで、Claude Codeのセッションのみで完結する一貫した実行環境が実現されています。