OpenRouterが「create-agent-tui」というスキルを2026年4月に公開した。AIコーディングエージェントに一言指示するだけで、TypeScript製のターミナルAIエージェントが丸ごと生成される。
この記事でわかること:
- create-agent-tuiの概要と使いどころ
- インストール方法と起動手順
- 生成されるプロジェクト構造
- ターミナルUIのカスタマイズ方法
- 組み込みツールとモジュールの選び方
create-agent-tuiとは
https://openrouter.ai/docs/guides/coding-agents/create-agent-harness-tui
OpenRouterが提供するコーディングエージェント向けスキルで、npm startで動くターミナルUIエージェントのプロジェクトを丸ごと生成する。create-react-appのエージェント版と理解するとイメージしやすい。
内部では@openrouter/agent SDKが動作し、モデル呼び出し・ツール実行・マルチターンのループ制御を担う。このスキルが提供するのはその外側—設定ファイル、ツール定義、セッション管理、エントリーポイント、ターミナルUI—の全体だ。300以上のモデルに対応するOpenRouter経由でどのモデルでも動かせる。
どんな場面で使うか
Claude Code、Codex CLI、CursorなどのAIエージェントをそのまま使うなら、このスキルは不要だ。次のような目的があるときに価値が出る。
- 独自APIやデータベースにアクセスするカスタムツールを持つエージェントを作りたい
- 停止条件・承認フロー・コスト上限を自分で制御したい
- CLIやAPIサーバーとして製品に組み込みたい
- エージェントのループ処理をコードで深く理解したい
エージェントの内側を握ることで、汎用エージェントでは難しい要件を実現できる。
インストールと起動
必要なのはNode.js 18以上とOpenRouter APIキーだけだ。使用中のAIコーディングエージェントに対して、Skills CLIでスキルを追加する。
npx skills add OpenRouterTeam/skills
インストール後、エージェントに「build me an agent TUI」や「scaffold a coding assistant」と指示するとスキルが起動する。チェックリスト形式でオプションを選択すると、プロジェクトが生成される。
生成後は以下で起動できる。
export OPENROUTER_API_KEY="sk-or-..."
npm start
起動時にCLIフラグでスタイルを上書きすることも可能だ。
npm start -- --banner "MyBot" --model anthropic/claude-sonnet-4 --input bordered --tool-display emoji
生成されるプロジェクト構造
デフォルト設定で生成されるファイル構成は以下のとおり。
my-agent/
├── package.json
├── tsconfig.json
├── .env.example
└── src/
├── config.ts 設定(デフォルト→ファイル→環境変数の優先順)
├── agent.ts エージェントコアとリトライ処理
├── cli.ts ストリーミング対応のインタラクティブREPL
├── session.ts JSONL形式での会話ログ永続化
├── renderer.ts ツール表示レンダラー
├── loader.ts ローダーアニメーション
├── commands.ts スラッシュコマンド
└── tools/
├── index.ts ツールレジストリ
├── file-read.ts
├── file-write.ts
├── file-edit.ts
├── glob.ts
├── grep.ts
├── list-dir.ts
└── shell.ts
ファイル読み書き・編集・Glob・Grep・シェル実行といった開発に必要な基本ツールがデフォルトで含まれる。ここにドメイン固有のツールを追加する形で拡張していく。
ターミナルUIのカスタマイズ
UIの見た目はスキャフォールド時に選択でき、起動時のCLIフラグや設定ファイルでも変更できる。
ツール表示スタイル
エージェントがツールを呼び出したときの見せ方を4種類から選ぶ。
| スタイル | 説明 |
|---|---|
| grouped(デフォルト) | 太字ラベルとツリー形式の出力 |
| emoji | 呼び出しごとにマーカー・ツール名・引数・実行時間を表示 |
| minimal | 要約した1行サマリーをまとめて表示 |
| hidden | ツール出力を非表示 |
独自スタイルの説明文を渡せば、スキルがカスタム実装を生成する。
入力欄スタイル
display.inputStyleまたは--inputで3種類から選択できる。
- block(デフォルト): フル幅の背景色付き入力欄。ターミナルの配色に自動適応する
- bordered: 上下に水平線を引くシンプルなスタイル。どのターミナルでも動作する
- plain:
>プロンプトのみのシンプルなreadline
ローダーアニメーション
モデルの応答を待つ間に表示するアニメーションを3種類から選べる。
- gradient(デフォルト): テキストにカラーシマーを表示
- spinner: ブライユ点字の回転アニメーション(⠋⠙⠹…)
- minimal: 末尾のドット点滅(Working···)
showBannerを有効にすると、起動時にプロジェクト名のASCIIアートが表示される。
組み込みツールとモジュール選択
スキャフォールド時のチェックリストから必要な機能を選択する。
サーバーサイドツールはOpenRouter側で実行されるため、クライアントにコードを書く必要がない。Webサーチと現在時刻取得がデフォルトで有効になっており、画像生成はオプションだ。
ハーネスモジュールはアーキテクチャレベルの機能拡張を担う。セッション永続化(会話ログをJSONL形式で保存)はデフォルト有効で、コンテキスト圧縮・ツール承認フロー・構造化イベントログはオプションで追加できる。
エントリーポイントはデフォルトのCLI REPLのほか、Express/HonoのHTTP APIサーバー、または両方を選択できる。開発時はCLI、本番はAPIサーバーという構成が一般的だ。
スラッシュコマンドはデフォルトで/model(モデル切り替え)・/new(会話リセット)・/helpが生成される。/compactや/exportはオプションで追加できる。
注意点
OpenRouter APIキーは環境変数で管理し、コードにハードコードしない。.env.exampleが生成されるので、.envにコピーしてキーを設定する。
モデルIDは変更されることがあるため、コードにハードコードせずopenrouter/autoを使うか、OpenRouterのModels APIで動的に取得するのが望ましい。
curl https://openrouter.ai/api/v1/models | jq '.data[].id'
ツール数や最大ステップ数が多いほどAPIコストが増える。maxStepsの設定とmaxCostによる停止条件を組み合わせて、意図しないコスト増加を防ぐことを推奨する。