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による停止条件を組み合わせて、意図しないコスト増加を防ぐことを推奨する。