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

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.jsonmodelを書き換えると、そのプロジェクトで開くすべてのセッションが Fable 5 になります。対話の 1 往復にも最上位の単価がかかります。--modelフラグなら、上書きは起動した 1 プロセスで閉じます。設定ファイルはデフォルトのまま残ります。

次に失敗時の切り分けです。モデル指定は CLI フラグが設定ファイルより優先されます。cron ジョブの指定をスクリプトの--modelに一本化しておけば、どのモデルで走ったのかを調べる場所は 1 か所です。デフォルト設定と環境変数とフラグを混ぜると、その特定から始まります。

用語表

用語この記事での意味
Fable 5Claude 5 世代の一般提供される最上位モデルです。モデルIDはclaude-fable-5です
MythosクラスOpusより上位に新設されたモデル階層です。Fable 5とMythos 5が属します
printモードclaude -pで対話せず、1回のタスクを実行して終了する動かし方です
--modelそのセッションだけデフォルトモデルを上書きするCLIフラグです
--max-turnsprintモードでエージェントが使えるターン数の上限です
draft: trueAstroの公開対象から記事を外す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

claudewhich 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 5Mythosクラスの位置づけとclaude-fable-5の提供範囲
Claude Code docs: CLI reference-p--model--max-turns--permission-modeの仕様
Claude Code docs: Model configurationモデル指定の優先順位とエイリアスの扱い
hibanas-net docs/guidelines.mdです・ます調、連載ハンズオン、画像の基準
この記事をシェア