Claude CodeでFable 5をローカル運用する|cronの下書き生成だけMythosクラスへ切り替える

朝稿の下書きだけ、いちばん強いモデルに書かせたいときがあります。私は対話での修正や調査にまで Fable 5 を使う気はありません。単価も応答時間も、仕事の中身に釣り合わないからです。
Claude Code には、この使い分けをコマンド 1 行で表す方法があります。claude -pの print モードで 1 回のタスクとして実行し、--model claude-fable-5でそのセッションだけモデルを上書きします。hibanas-net の毎晩の下書き生成を、この形へ置き換えます。
前回から今回への差分
前回のAIエージェントの公開事故を防ぐでは、生成済みの記事をdraft: trueのまま content branch と PR でレビューし、公開を別操作に分けました。
| 前回完了時 | 今回完了後 |
|---|---|
| 生成済みの記事をPRでレビューします | 生成そのものをClaude Codeのprintモードで実行します |
| 生成に使うモデルは各ツールのデフォルトのままです | 下書き生成だけclaude-fable-5を明示します |
公開はdraftの1行を別操作で変えます | この境界は変えず、生成側の入口だけ差し替えます |
すでに--model claude-fable-5の応答を手元で確認済みなら、モデル名の確認は飛ばして print モードの組み立てから読めます。
なぜデフォルトモデルをFable 5にしないのか
Fable 5 は、Anthropic の Claude 5 世代で Opus より上位の Mythos クラスに置かれたモデルです。一般提供されるのは追加の安全対策を含む Fable 5 で、対策を外した Mythos 5 は承認済みの組織だけが使えます。つまり、ローカルの Claude Code から日常的に呼べる最上位はclaude-fable-5です。
強いモデルほど、すべての作業に使いたくなります。しかしHermes Agentのモデル選びと同じで、私は高性能モデルを常用しません。理由は 2 つあります。
まず影響範囲です。settings.jsonのmodelを書き換えると、そのプロジェクトで開くすべてのセッションが Fable 5 になります。対話の 1 往復にも最上位の単価がかかります。--modelフラグなら、上書きは起動した 1 プロセスで閉じます。設定ファイルはデフォルトのまま残ります。
次に失敗時の切り分けです。モデル指定は CLI フラグが設定ファイルより優先されます。cron ジョブの指定をスクリプトの--modelに一本化しておけば、どのモデルで走ったのかを調べる場所は 1 か所です。デフォルト設定と環境変数とフラグを混ぜると、その特定から始まります。
用語表
| 用語 | この記事での意味 |
|---|---|
| Fable 5 | Claude 5 世代の一般提供される最上位モデルです。モデルIDはclaude-fable-5です |
| Mythosクラス | Opusより上位に新設されたモデル階層です。Fable 5とMythos 5が属します |
| printモード | claude -pで対話せず、1回のタスクを実行して終了する動かし方です |
--model | そのセッションだけデフォルトモデルを上書きするCLIフラグです |
--max-turns | printモードでエージェントが使えるターン数の上限です |
draft: true | Astroの公開対象から記事を外すfrontmatterの状態です |
全体の構成
手順の画面はまだ増えないので、生成画像は使わずテキスト図だけにします。
cron(毎日23:00) または Hermes Agent のスケジューラー
└─ claude-draft.sh
├─ git status --porcelain=v1 が空であることを確認します
├─ claude -p "$(cat prompts/morning-draft.md)" \
│ --model claude-fable-5 --max-turns 30
│ └─ src/content/posts/ へ draft: true の記事を1本保存します
├─ 品質ゲート(frontmatter、文体、型、build)を実行します
└─ content branch へ commit し、PR でレビューへ渡します
生成から先の content branch、PR、公開の分離は前回のままです。今回変えるのは、この図のclaude -pの 1 段だけです。
モデル名が通ることを確認する
2026 年 8 月 22 日時点の手元のバージョンを確認します。
claude --version
実行結果です。
2.1.227 (Claude Code)
次に、このバージョンがclaude-fable-5を受け付けるかを、いちばん小さいタスクで確かめます。
claude -p "ok とだけ返してください" --model claude-fable-5
実行結果です。
ok
--modelへ存在しない名前を渡すと、Claude Code はタスクを始める前にエラーで止まります。このokは、モデル ID が有効で、課金される実リクエストが Fable 5 へ届いたことの確認となります。エイリアスのfableでも同じokが返りますが、cron へ置く指定は完全な ID とします。エイリアスは、次の世代が出たときに指す先が変わるためです。
printモードを1回のタスクにする
対話モードのclaudeは、終わりをユーザーの判断に任せます。cron には、終わりを自分で決める形が必要です。-p(--print)を付けると、Claude Code はプロンプトを 1 つ受け取り、必要なファイルを操作して、最終応答を標準出力へ書いて終了します。失敗した場合は 0 以外の終了コードを返すので、cron 側で成否を分けられます。
下書き生成で使う形は次のとおりです。
claude -p "$(cat prompts/morning-draft.md)" \
--model claude-fable-5 \
--max-turns 30 \
--permission-mode acceptEdits
prompts/morning-draft.mdには、題材の起点、frontmatter の必須項目、draft: trueを維持することを書いておきます。プロンプトを cron 行へ直接書かないのは、変更を Git の履歴へ残すためです。
--max-turns 30は保険です。print モードでもエージェントはファイルの読み書きとコマンド実行を繰り返します。上限がないと、詰まったタスクが API を消費し続けます。逆に小さすぎると記事が途中で終わります。私は平常時のターン数を数回分見てから、その 2 倍程度を置いています。
--permission-mode acceptEditsは、ファイル編集だけを自動承認する設定です。無人実行の権限をデフォルトよりどこまで広げるかは、ヘッドレス実行の権限設計で扱った範囲なので、ここでは繰り返しません。
cronとHermes Agentから起動する
スクリプトは、clean 確認と print 実行の 2 段だけにします。
#!/usr/bin/env bash
set -euo pipefail
cd "$HOME/gitrepos/hibanas-net"
test -z "$(git status --porcelain=v1)"
"$HOME/.local/bin/claude" -p "$(cat prompts/morning-draft.md)" \
--model claude-fable-5 \
--max-turns 30 \
--permission-mode acceptEdits
claudeはwhich claudeで調べた絶対パスを書きます。cron の PATH は対話 shell と違うため、裸のコマンド名は見つからないことがあります。crontab には次の 1 行を置きます。
0 23 * * * $HOME/bin/claude-draft.sh >> $HOME/log/claude-draft.log 2>&1
日本時間の 23 時に動かす場合は、先にサーバーの timezone を確認します。hibanas-net の下書き branch 名は日付を含むので、時刻がずれると branch 名と記事のdateが食い違います。今回の branch はcontent/2026-08-22-claude-code-fable-draft-writingです。
Hermes Agent から動かす場合は、cron 行の代わりにスケジューラーのジョブへ同じスクリプトを渡します。cron自動運用で書いた記録の作法はそのまま使えます。エージェントがエージェントを起動する形になりますが、Claude Code 側から見れば、ただの 1 回の print 実行です。決めておくのはモデルの決定権だけです。私は Hermes 側の設定ではなく、スクリプトの--modelを正としています。
生成物はdraft: trueのまま前回のゲートへ
生成された記事はdraft: trueを維持し、content branch へ commit します。モデルを Fable 5 へ上げても、公開判定は変わりません。強いモデルの文章は一見きれいで、レビューを省きたくなります。そこで省くと、前回作った境界が崩れます。
品質ゲートも同じ 5 コマンドです。
node scripts/audit-frontmatter.mjs
node scripts/check-humanization.mjs
node_modules/.bin/textlint "src/content/**/*.{md,mdx}"
node_modules/.bin/astro check
node_modules/.bin/astro build
5 つすべてが終了コード 0 になってから push します。この記事自体も、同じ手順でdraft: trueのままレビューへ渡します。
よくあるエラー
| 症状 | 原因 | 対応 |
|---|---|---|
| モデル名が無効だと言われます | claude-fable5のような表記ゆれです | claude-fable-5とハイフン2か所で指定します |
-pを付けたのに終了しません | プロンプトを渡さず標準入力を待っています | 引数か標準入力でプロンプトを渡します |
| 記事が途中で終わります | --max-turnsの上限に当たっています | 上限を増やすか、生成と検証をジョブごと分けます |
| cronでcommand not foundになります | cronのPATHにclaudeがありません | which claudeの絶対パスをスクリプトへ書きます |
| cron実行だけ認証エラーになります | 認証情報が対話ユーザーの環境にあります | 認証を済ませたユーザーと同じユーザーでcronを動かします |
| いつの間にかデフォルトモデルへ戻っています | settings.json側の変更で運用していました | デフォルトは触らず、ジョブ側の--model指定を正とします |
出典
| 一次情報 | 確認した内容 |
|---|---|
| Anthropic: Claude Fable 5とMythos 5 | Mythosクラスの位置づけとclaude-fable-5の提供範囲 |
| Claude Code docs: CLI reference | -p、--model、--max-turns、--permission-modeの仕様 |
| Claude Code docs: Model configuration | モデル指定の優先順位とエイリアスの扱い |
| hibanas-net docs/guidelines.md | です・ます調、連載ハンズオン、画像の基準 |
