dwgx@blog:~$dwgx
> cd ../posts

SmartCLI:Agent に本当にターミナルを使わせる、やみくもに sleep させない

// created

SmartCLI は agent に本当にターミナルの使い方を身につけさせる Python ツールキットだ。やることは三つだけ。インタラクティブなプログラムを driving する、画面を読む、画面をレンダリングして返す。核心は、やみくもに sleep して待たないこと。実際に画面を見てから次に何を打つかを決める。

土台は smartcli_core、プラガブルな PTY バックエンドに pyte のスクリーンモデルを組み合わせたものだ。ポイントは、ターミナルをバイトストリームではなくセルのグリッドとして読む点にある。だからどの行がハイライトされているか、カーソルがどこに止まっているかを見分けられる。PTY レイヤは tmux に固定していない。

本物の tmux はまだ検証していない。README にもはっきり「未検証」と書いてある。開発機のスクリーンショットには pyte-simulation と付いていて、本物の tmux のキャプチャではない。ここは隠さない。

その上に skill が三つ乗る。cmd-art はターミナルエフェクトエンジンで、30 種のエフェクト、donut、fire、plasma、rain を 8 テーマ横断で備える。tui-ui はレイアウトエンジンで、tmux-safe な ANSI frames を吐き出す。本命は drive-tui だ。REPL、メニュー、pager、prompt を driving し、perceive → decide → act → wait → confirm のループを回して、決してやみくもに sleep しない。demo では本物の lazygit TUI をエンドツーエンドで動かしている。

インストール時に注意。配布名と import 名が違う。

pip install smartcli-toolkit

import できるパッケージ名は smartcli_core だ。短い名前は取られていた。skills は checkout 内でその場で動き、システムレベルにはインストールしない。

依存については、pyte は全プラットフォーム対応、pywinpty は Windows のみ、POSIX は stdlib の pty をそのまま使う。さらに 122 件のノートからなるナレッジグラフも同梱していて、レンダリングの数式、ANSI シーケンス、定数がそこに入っている。MCP server も用意してあり、drive-tui のアクションは任意の MCP クライアントから呼べる。CPython 3.14.6 でテスト済み、CI は Windows、Linux、macOS をカバーする。MIT。