---
title: "会話セッションと対話モード（lait chat）"
description: "REPL と --session による会話の保存・再開。"
---

## `lait chat`（インタラクティブなマルチターン会話）

`lait chat` は会話履歴を保持したままターンを重ねられる REPL（対話モード）を起動します。
応答は既定でストリーミング表示されます。

```sh
lait chat --model "モデル ID"
```

引数もプロンプトも与えずに `lait` を実行した場合も、標準入力が端末（TTY）であれば同じ REPL が
起動します。標準入力がパイプで内容が空の場合は、スクリプトからの誤用を検知するためエラーになります。

REPL 内のメタコマンド:

| コマンド | 説明 |
| --- | --- |
| `/exit` | REPL を終了する（標準入力の終端(Ctrl-D)でも終了します） |
| `/clear` | インメモリの会話履歴をクリアする（`--session` のファイルへの追記には影響しません） |
| `/model <name>` | このターン以降に使うモデルを切り替える |
| `/system <text>` | システムプロンプトを差し替える |
| `/undo` | 直前のやり取り（ユーザーメッセージとモデルの応答）をインメモリの会話履歴から取り除く（`--session` のファイルには影響しません） |
| `/retry` | 直前のユーザーメッセージを送り直す。成功していたターンは応答を置き換え、失敗していたターンはそのまま再試行します |
| `/usage` | この REPL でこれまでに記録されたトークン使用量を表示する |
| `/help` | メタコマンドの一覧を表示する |

`"""` だけの行を入力すると複数行入力モードになり、次に `"""` だけの行を入力するまでの
内容を改行を保ったまま1つのメッセージとして送信します。複数行入力の中では、`/` で始まる行も
メタコマンドとしては扱わずメッセージの一部として送ります。

```text
> """
... 次のコードをレビューしてください:
... fn main() {}
... """
```

`/usage` は、サーバーが報告した使用量だけを集計します。ストリーミング時は `--show-usage` を
付けない限りサーバーに使用量の報告を要求しないため、何も表示されないことがあります。

Ctrl-C は実行中の要求・ツール処理を中断し、接続などの後始末を行ってから REPL 全体を
終了します。終了コードは `130` です。入力待ちの間も Ctrl-C で終了できます。

ツールやセッションを使う場合の動作は次のとおりです。

- `--mcp`/`--subagent` を指定してもストリーミング表示は続きます。モデルがツールを呼び出すと、
  そのラウンドのテキスト（あれば）を表示してからツールを実行し、次のラウンドに進みます。
- `--session` を指定すると、REPL の各ターンが同じセッションファイルに記録されます。`/retry` で
  送り直したターンも、成功すれば新しいターンとして追記されます（元のターンは残ります）。
- `--show-usage` を指定すると、ターンごとにそのセッション開始からの累積トークン使用量が表示されます。

## `--session`（会話の保存と再開）

`--session <NAME>` を指定すると、単発の `lait` 呼び出しでも会話履歴を引き継げます。

```sh
lait --model "モデル ID" --session demo "1+1は?"
lait --model "モデル ID" --session demo "それに2を足すと?"
```

### 保存と読み込み

- 保存先はプロジェクトローカルの `.lait/sessions/<NAME>.jsonl` です。1行につき1メッセージを
  保存する JSON Lines 形式です。
- リクエスト送信前に、保存済みの全ターンを読み込みます。履歴はシステムプロンプトの直後、
  今回のプロンプトの直前に挿入されます。
- リクエストが成功した場合だけ、今回のユーザーメッセージとモデルの応答を追記します。
  失敗したターンは記録されません。

### 制限と注意

- `--stream` と併用できます。ストリーミング中に表示された内容全体が、その回のモデル応答として
  記録されます。
- システムプロンプト（`--system`/`--system-file`/`default.system`）はセッションファイルに
  保存されません。次回も必要な場合は、オプションまたは設定ファイルで指定してください。
- セッション名に使えるのは英数字・`_`・`-` のみです。

## `lait sessions`（セッションの一覧・確認・削除）

```sh
lait sessions list              # 保存されている全セッションとターン数を表示
lait sessions show demo         # demo セッションの全ターンを表示
lait sessions delete demo       # demo セッションを削除
```
