はじめに
インストール、最短手順、接続先の準備、主要な CLI オプション。
lait は OpenAI Compatible API にプロンプトを送信する CLI です。LM Studio のようなローカルサーバーにも、認証が必要なクラウド API にも接続できます。
インストール
通常利用では、次のいずれかを選んでください。
-
バイナリ: GitHub Releases から、お使いの OS 向けのアーカイブを取得します。
-
Homebrew(macOS):
brew install SuzumiyaAoba/tap/lait -
cargo binstall:cargo binstall lait
ソースコードを変更しながら試す場合は、リポジトリを取得して cargo run -- を使います。Rust の導入やリリース手順は 開発 を参照してください。
最短手順
次の4段階で最初のリクエストを送れます。
laitをインストールする(開発中はこのページの例のcargo run --に置き換える)。- LM Studio などの OpenAI Compatible API を起動し、使用するモデル ID を確認する。
lait --model "<MODEL_ID>" "こんにちは。"を実行する。- 接続先やモデルを毎回指定したくなったら、
lait initでlait.config.ymlを作成する。
インストール済みのバイナリを実行する例:
lait --model "<MODEL_ID>" "Rustについて一文で説明してください。"
ソースから開発中に実行する例:
cargo run -- --model "<MODEL_ID>" "Rustについて一文で説明してください。"
必要な環境
- 実行時: LM Studio などの OpenAI Compatible API と、そこで利用できるモデル。
- ソースからビルドする場合: Rust stable、
rustfmt、clippy(rust-toolchain.tomlにより自動的に指定されます)。
makers を使う場合
cargo-make の makers をインストール済みなら、CLI の引数を run タスクの後ろに渡せます。通常の利用では lait、ソース開発では cargo run -- を使えば十分です。
makers run -- --model <MODEL_ID> "プロンプト"
makers run は macOS では Apple Clang(/usr/bin/clang、/usr/bin/clang++)と
xcrun --sdk macosx --show-sdk-path の SDK を自動的に設定してから cargo run を実行します。
Nix など別の cc が PATH にあっても、aws-lc-sys のリンクに必要な macOS SDK が使われます。
接続先の準備(LM Studio の例)
実行前に、次の状態にしてください。
- LM Studio を起動し、使用するモデルをロードする。
- LM Studio の Developer(Local Server)画面からサーバーを起動する。
- ロードしたモデルの ID(
<MODEL_ID>)を確認する。
LM Studio の既定のエンドポイントは http://localhost:1234/v1 です。別のホストやポートで起動している場合は、--base-url または OPENAI_BASE_URL で変更できます。LM Studio 以外を使う場合も、接続先が案内する OpenAI Compatible API のベース URL を同じ方法で指定してください。
CLI 引数と環境変数
よく使うものから順にまとめています。ワークフローや agent 固有のオプションは、それぞれの専門ページを参照してください。
接続と入力
| CLI 引数 | 環境変数 | 説明 |
|---|---|---|
--model <MODEL_ID_OR_ALIAS> |
LLM_MODEL |
モデル ID または設定ファイルの alias。未指定時は default.model を使います。 |
--base-url <URL> |
OPENAI_BASE_URL |
API のベース URL。未指定時は http://localhost:1234/v1 です。 |
--api-key <KEY> |
OPENAI_API_KEY |
認証が必要なサーバーの API キー。不要なサーバーでは省略できます。 |
<PROMPT> |
— | 送信するプロンプト。省略時は標準入力から読み込みます(下記)。 |
出力・入力の形式
| CLI 引数 | 説明 |
|---|---|
--stream |
応答を生成された部分から表示します。--json とは併用できません。MCP や subagent のツール呼び出しとも併用できます。 |
--json |
CLI の応答を JSON(content、reasoning、usage)で出力します。Structured Outputs の指定とは別の機能です。 |
--json-schema <FILE> |
API の Structured Outputs に使う JSON Schema ファイルです。スキーマ名は --schema-name <NAME>(既定値 structured_output)で変更できます。詳しくは 出力例 を参照してください。 |
--show-reasoning |
対応サーバーが返す reasoning(旧形式の reasoning_content を含む)を回答前に表示します。 |
--show-usage |
トークン使用量を標準エラー出力に表示します。lait run や lait agent run でも使えます。モデルにpricing:(設定ファイル)が設定されていれば概算USDコストも併記されます。 |
-o, --output <PATH> |
応答を PATH に書き込みます。-o - は標準出力です。非ストリーミング時は成功後に書き込み、ストリーミング時は生成中に書き込みます。 |
--render |
端末で応答を Markdown として表示します。詳しくは 出力例 を参照してください。 |
--quiet |
reasoning や usage など本文以外の注記を抑制します。 |
--file <PATH> |
ファイルの内容をプロンプトに添付します(繰り返し可)。詳しくは ファイル・画像の添付 を参照してください。 |
--image <PATH_OR_URL> |
画像を添付します(繰り返し可)。vision 対応モデルが必要です。 |
--session <NAME> |
会話を保存・再開します。詳しくは 会話セッションと対話モード を参照してください。 |
-p, --prompt-name <NAME> |
prompts: の名前付きテンプレートを使います。--var KEY=VALUE で変数を渡せます(名前付きプロンプト)。 |
モデル・ツール・設定の詳細
| CLI 引数 | 環境変数 | 説明 |
|---|---|---|
--reasoning-effort <EFFORT> |
LLM_REASONING_EFFORT |
推論レベル(none、minimal、low、medium、high、xhigh)。 |
--temperature <FLOAT> |
LLM_TEMPERATURE |
サンプリング温度(0.0〜2.0)。 |
--top-p <FLOAT> |
LLM_TOP_P |
nucleus sampling の確率質量(0.0〜1.0)。 |
--max-tokens <INT> |
LLM_MAX_TOKENS |
生成トークン数の上限(1以上)。 |
--system <TEXT> |
— | システムプロンプトを指定します。--system-file と同時には使えません。 |
--system-file <FILE> |
— | システムプロンプトをファイルから読み込みます。 |
--mcp <NAME> |
— | mcp_servers: の MCP サーバーをツールとして渡します(繰り返し可)。--stream と併用できます(MCP)。 |
--subagent <NAME> |
— | agents: の agent を subagent ツールとして渡します(繰り返し可)。--stream と併用できます(サブエージェント)。 |
--tool <NAME> |
— | tools: のカスタムシェルツールを渡します(繰り返し可、カスタムシェルツール)。 |
--var KEY=VALUE |
— | 名前付きプロンプトのテンプレート変数を指定します(ワークフローの入力は lait run --input KEY=VALUE で渡します。ワークフロー)。 |
--config <PATH> |
— | 指定した設定ファイルだけを読み込みます。 |
--no-config |
— | 設定ファイルを読み込みません。 |
--no-env |
— | カレントディレクトリの .env を読み込みません(設定ファイル)。 |
--cache / --no-cache |
— | 応答キャッシュを有効化/無効化します(--stream はキャッシュされません)。 |
-v, --verbose |
LAIT_LOG |
詳細ログを標準エラー出力に出します。-vv ではリクエスト/レスポンス JSON も表示します(トラブルシュート)。 |
--approve-tools |
— | ツール実行前に対話的な承認を求めます(MCP)。 |
標準入力からのプロンプト(パイプ対応)
標準入力が TTY でない場合、lait は標準入力を読み込みます。
| 条件 | 動作 |
|---|---|
| プロンプト引数がない場合 | 標準入力全体をプロンプトとして送信します。 |
| プロンプト引数がある場合 | 標準入力をコンテキストとしてプロンプトの後ろに連結します。 |
lait - と書いた場合 |
標準入力をプロンプトとして明示的に読み込みます。 |
標準入力の読み込み中も Ctrl-C で実行を中断できます。パイプの入力が終了するまで待っている場合も、 後続のモデル呼び出しへ進まずに終了します。
git diff | lait "この変更をレビューして"
cat question.txt | lait
同じ規則は lait run <FILE> [PROMPT] と lait agent run <FILE> [INPUT] にも適用されます。agent の入力は JSON として解釈できる場合があり、その場合はシステムプロンプトから {{ input.field }} のように参照できます。
そのほかのサブコマンド
| コマンド | 説明 |
|---|---|
lait models |
lait.config.yml の models: alias を一覧表示します(default.model に * マーク)。--remote でサーバーの GET /v1/models を照会、--json で機械可読出力。 |
lait init |
最小の lait.config.yml を生成します。lait init workflow [PATH] / lait init agent [PATH] はコメント付きの雛形を生成します(既存ファイルは上書きしません)。 |
lait completions <SHELL> |
bash / zsh / fish / powershell / elvish の補完スクリプトを標準出力へ生成します。 |
lait man --dir <DIR> |
lait.1、lait-run.1 などの man ページを生成します。 |
lait decide -q <FILE> [STATE] |
Jev 互換 API に型付きの質問を送り、答えを JSON で表示します(詳細は Jev 互換 API で判定する)。 |
lait cache clear |
.lait/cache/ の内容をすべて削除します(詳細は 設定ファイル)。 |
詳細なオプションは次のコマンドで確認できます。
cargo run -- --help # ソースから開発中の場合
cargo run -- --version
lait --help # インストール済みの場合
lait --version
makers --list-all-steps
ビルドと実行
開発中は cargo run で実行できます。
cargo run -- --model "モデル ID" "Rustについて一文で説明してください。"
同じリクエストを makers から実行する場合は次のようにします。-- より後ろの引数は
そのまま lait に転送されるため、プロンプト中の空白や日本語も保持されます。
makers run -- --model "モデル ID" "Rustについて一文で説明してください。"
推論モデルに推論の実行レベルを指定する場合は、--reasoning-effort に次のいずれかを渡します。
| 値 | 説明 |
|---|---|
none |
推論を行わない指定です(サーバーとモデルが対応している場合)。 |
minimal / low / medium / high / xhigh |
推論の実行レベル(低 → 高の順)。 |
未指定時は reasoning_effort フィールドを送信せず、サーバー側の既定値を使用します。
cargo run -- --model "モデル ID" --reasoning-effort high "複雑な問題を解いてください。"
環境変数でも指定できます。CLI 引数と環境変数の両方を指定した場合は CLI 引数が優先されます。
export LLM_REASONING_EFFORT="medium"
cargo run -- --model "モデル ID" "複雑な問題を解いてください。"
サンプリング温度・nucleus sampling・最大トークン数を指定する場合は、--temperature・--top-p・
--max-tokens(環境変数では LLM_TEMPERATURE・LLM_TOP_P・LLM_MAX_TOKENS)をそれぞれ渡します。
いずれも未指定時は API リクエストにフィールドを追加せず、サーバー側の既定値を使用します。範囲外の
値(temperature が 0.0〜2.0 の外、top_p が 0.0〜1.0 の外、max_tokens が 0)はモデルを
呼び出す前にエラーになります。
cargo run -- --model "モデル ID" --temperature 0.7 --top-p 0.9 --max-tokens 512 "アイデアを出してください。"
対応サーバーから返された推論内容を回答前に表示する場合は、--show-reasoning を指定します。推論内容が返されない場合は、従来どおり回答のみが表示されます。
cargo run -- --show-reasoning --model "モデル ID" "Rustについて一文で説明してください。"
モデル ID に空白が含まれる場合は、上の例のように引用符で囲んでください。環境変数を使う場合は、次のように設定してからプロンプトだけを指定できます。
export LLM_MODEL="モデル ID"
cargo run -- "Rustについて一文で説明してください。"
リリースビルドを作成して実行する場合は、次のコマンドを使います。
cargo build --release --locked
./target/release/lait --model "モデル ID" "こんにちは。"
認証なし/認証あり
LM Studio のローカルサーバーで認証を無効にしている場合は、API キーを指定せずに実行できます。
cargo run -- --model "モデル ID" "こんにちは。"
サーバー側で認証を有効にしている場合は、OPENAI_API_KEY または --api-key でキーを指定します。シェルの履歴にキーを残したくない場合は環境変数を使ってください。
export OPENAI_API_KEY="your-api-key"
cargo run -- --model "モデル ID" "認証付きでリクエストしてください。"
makers で実行する場合も同じ環境変数を利用できます。
export OPENAI_API_KEY="your-api-key"
makers run -- --model "モデル ID" "認証付きでリクエストしてください。"
一時的に CLI 引数で指定することもできます。
cargo run -- --api-key "your-api-key" --model "モデル ID" "こんにちは。"
一時的な指定は makers でも可能です。
makers run -- --api-key "your-api-key" --model "モデル ID" "こんにちは。"
Ctrl-C(SIGINT)による中断
実行中に Ctrl-C を押すと、lait は進行中のモデルリクエスト・MCP サーバーとの通信・
command の実行、設定・workflow・agent・schema・eval/test 定義・checkpoint の読み込み、
標準入力の待機などをキャンセルしてから終了します(--stream で出力の途中だった場合、
そこまでの出力はそのまま残ります)。lait run --checkpointを付けていた
場合は、中断された時点までの状態がチェックポイントとして保存され、--resume で
再開できます。終了コードはシェルの慣習に合わせて 130 になります。
後始末が固まってしまった場合に備えて、Ctrl-C をもう一度押すと後始末を待たずに 即座に終了します。