incur: エージェントが使いやすい CLI を TypeScript で作る(スキル生成・MCP 化・次のコマンド案内つき)
incur(wevm/incur)は TypeScript の CLI フレームワークで、1つの定義から人間向けの CLI、エージェント向けのスキルファイル、MCP サーバーを同時に用意できる。実行結果に「次に呼ぶとよいコマンド」を添える仕組みや、出力のトークンを減らす形式も最初から入っている。
どんな問題を解決する?
- 自作の CLI をエージェントに使わせたいが、使い方を毎回説明するか、別途 SKILL.md や MCP サーバーを書く必要がある
- JSON の出力が大きく、エージェントのコンテキストを圧迫する
- エージェントが次に何を呼べばいいか分からず、試行錯誤する
使い方
ts
// npm i incur
import { Cli, z } from 'incur'
Cli.create('greet', {
args: z.object({ name: z.string() }),
run(c) {
return { message: `hello ${c.args.name}` }
},
}).serve()作った CLI には、次の組み込みコマンド・フラグが自動で付く。
skills add: コマンド定義からスキルファイルを生成し、エージェントの設定に入れる(定義を変えたら同期し直せる)mcp add: エージェントに MCP サーバーとして登録する。--mcpで stdio の MCP サーバーとして起動--llms: エージェント向けのマニフェストを出力。--schemaで引数のスキーマ--format toon|json|yaml|md|jsonl: 出力形式を選ぶ。--filter-outputで必要な項目だけ、--token-limit/--token-offset/--token-countで長い出力をトークン単位で区切って読む
次のコマンドを案内する(CTA)
ts
run(c) {
return c.ok(data, {
cta: { commands: [{ command: 'deploy', args: { env: 'staging' }, description: 'ステージングに反映する' }] },
})
}実行結果と一緒に「次はこれを呼ぶ」が返るので、エージェントが手順を迷いにくい。エラー(c.error() や IncurError)にも同じように CTA を付けられ、「先に auth login を」と案内できる。
注意点
- トークン比較(20コマンドの CLI を1セッション使う場合、incur が約$0.0131、MCP+JSON が約$0.0325、1つのスキル+JSON が約$0.0410)は作者側の試算。自分の CLI で同じになるとは限らない
- 生成されるコマンドに使うパッケージ名は
packageで固定できる。スキル連携が不要ならsync: false - 既存の CLI の使い方をスキルとして渡す方法は よく使う CLI の「利用者向けリファレンス」をスキルにして持たせる。incur は「これから作る CLI」向け
- MIT ライセンス
出典
- @_kaiinui · 2026-02-28
- @wevm_dev 2026-02-28(公開告知): @wevm_dev · 2026-02-28
- GitHub: github.com/wevm/incur