指示の書き方
mtb を入れたエージェントに、人間がどう頼むかの例です。 コマンドを書かせるのではなく、やりたいことを書きます。
指示に含める3要素
| 例 | |
|---|---|
| どのサイトか | 「ステージング(プロファイル stg)のブログ(サイトID 4)で」 |
| 何をしたいか | 「2026年の記事のカテゴリを『お知らせ』に付け替えたい」 |
| どこで止まるか | 「まず対象の件数と一覧を見せて。実行はそのあと」 |
3つ目が抜けると、エージェントは調べた直後にそのまま書き換えます。 止まる場所を先に決めておくのが、最も効果があります。
そのまま使えるひな形
調べる
ステージング(プロファイル stg)のサイト一覧を出して。IDと名前とURLだけでいい。
エージェントが打つもの
mtb sites list --profile stg --fields id,name,url--fields が無いと全属性が返り、サイト2件で 5KB になります。 スキルでは --fields を付けることを既定の手順にしています。
サイト4の記事で「料金」を含むものを探して。タイトルと公開状態、あわせて件数も。
mtb sites entries list 4 --search 料金 --limit 50 --fields id,title,status作る
サイト4に、次の内容で下書きの記事を作って。本文は ./draft.md の中身を使って。 タイトル: 2026年の料金改定について
注意していること
status を省くと下書きになります。本文をファイルから渡すときは --set entry.body=@draft.md を使います。作成したら --fields id で ID だけ受け取ります。
./images/2026 の画像を全部サイト4にアップロードして、/2026 の下に入れて。 同じ名前のものがあれば差し替えていい。
mtb assets upload --site-id 4 --dir ./images/2026 --path /2026 --replace --yes--replace は既存のファイルを削除してからアップロードする操作です。--yes を書かせるかどうかは、 人間が決めてください。
直す
サイト4の記事42の本文で、旧URL(old.example.com)を新URL(example.com)に 置き換えて。書式を壊さないように、編集用の本文を取ってから戻して。
この一言が必要です
get が返す body は変換後の HTML です。Markdown やブロックエディタの 記事にそのまま書き戻すと原稿が HTML に置き換わります。しかも format は 変わらないので、応答も見た目も正常です。
編集のために取り出すときは --no-text-filter 1 を付けます。
mtb sites entries get 4 42 --no-text-filter 1 --extract body --out body.txt
# 置換してから
mtb sites entries update 4 42 --set entry.body=@body.txt反映する
いまの変更がサイトに出ているか確かめて。出ていなければ再構築して。
mtb publish entries --ids 42,43 --wait「保存できた」と「サイトに反映された」は別です。 反映まで確認するなら --verify-publish を付けさせてください(公開と再構築)。
環境をまたぐ
ステージング(stg)と本番(prod)で、テンプレートとカテゴリが どう違うか出して。まだ何も変えないで。
mtb dump --profile stg --dir ./dump/stg
mtb dump --profile prod --dir ./dump/prod
diff -ru ./dump/prod ./dump/stg差分を読んでから「このうちテンプレートの2件だけ本番へ当てて」と次の指示を出します。
段階を踏ませる
大きい仕事ほど、1回の指示で最後までやらせないほうが速く終わります。
- 調べる:「対象が何件あるか、一覧で見せて」
- 計画する:「どういう手順で当てるか、先に書いて」
- 試す:「まず1件だけやって、結果を見せて」
- 残りを処理する:「同じ手順で残りを」
テンプレートの修正なら、保存せずに試せます。
このテンプレートの断片が動くか、サイト6で試して。保存はしないで。
mtb sites templates preview 6 --set template.text=@snippet.mtml \
--set template.type=index --raw 1 --extract preview使い捨てのテンプレートもサンドボックスのサイトも必要ありません。 実データに対して試すので、タグが実際に動くかをその場で確認できます。
意図が伝わらない指示
| 書き方 | 何が起きるか |
|---|---|
| 「MTの記事を直して」 | どのサーバのどのサイトか決まらず、聞き返されるか、既定の接続先で実行される |
| 「全部消して作り直して」 | サイトの削除は --confirm でサイト名を入力する操作。人間が入力することになる |
| 「早くやって」「確認は要らない」 | --yes を無条件に付けさせることになる。取り違えると戻せません |
| 「jq で整形して」 | 要りません。--fields と --extract で足ります |
前提を1行で渡しておく
プロジェクトの CLAUDE.md や AGENTS.md に書いておくと、毎回指示に含めずに済みます。
## Movable Type
- 操作は `mtb` を使う。先に `mtb llm` を読むこと
- 既定の接続先はステージング(プロファイル stg / サイトID 4)
- **本番(prod)に当てる前は、必ず差分を見せて人間の承認を取る**
- 削除は人間がやる。`--yes` を自分で付けない