← Blog
2026-07-28 · 7 min read · English

Sente(先手)— teai.ioのコーディングエージェントCLIを作り、
Claude Code・Codexと比べた

teai.io に、ターミナルで動くコーディングエージェント Sente(先手) を追加しました。 1行で入り、teai.io の全モデルをエージェントとして使えます。 作るにあたって Claude Code・Codex と同じタスクで比較したところ、 「どのモデルが賢いか」ではなく「teai 経由でツールが崩れず最後まで打ち切れるか」で はっきり差が出ました。その実測と、精度を磨いた過程を残します。

採用
Sente
teai 経由で唯一崩れず完走。安定
次点
Claude Code
glm-5.2は動作/kimi-k3で崩壊。モデル依存
不採用
Codex
全モデルでシェル崩壊。非互換
3行まとめ

使い方

curl -fsSL https://teai.io/te | sh te # カレントディレクトリでエージェント起動 te run "このリポを説明して" te max run "..." # 最高性能モード = Kimi K3(2.8T・1M context) te -m teai/<model> # モデル切替(te models で一覧)

Sente は OpenCode をベースにした薄いランチャーで、フォークはしていません。 OPENCODE_CONFIG を teai.io 生成の設定に向けるだけなので、OpenCode 本体の進化にそのまま乗れます。 モデルカタログ(現在95+)は起動ごとに /te/config から自動同期されます。

なぜ「先手」か

teai.io は「AI」。その「手」を継いで、囲碁の 先手(せんて) から名付けました。 あなたより先に、エージェントが手を動かす。"Always keep sente" — 主導権を手放さない、という意味も込めています。 コマンドは短く te(sente エイリアスも入ります)。

最高性能モード:te max = Kimi K3

当初 Sente の既定は安定重視で glm-5.2 にしていました。理由は、Moonshot の主力 Kimi K3(2.8T・1Mコンテキスト)を OpenCode 経由でストリーミングすると、以前は 応答が返らずハングしていたためです。ところがその後 teai 側のストリーミング/フォールバック処理が 改善され、今は Kimi K3 が完全に動きます — 実測で確認しました:

そこで te max を追加しました。既定のコスト効率(glm-5.2)は保ちつつ、 一言で最高性能に切り替えられます:

te max run "この関数をリファクタして、テストも書いて" te max # 対話モードを K3 で
Kimi K3 は入力 $3 / 出力 $15(per 1M トークン)と glm-5.2 より高価な代わり、 2.8T パラメータ・1M コンテキストの地力で難しいタスクに強い。 日常は te(glm-5.2)、勝負どころは te max(K3)という使い分けです。

Sente 対 Claude Code 対 Codex — 同じ盤で比べる

公平にするため3クライアントとも teai バックエンド経由に揃え、自社コード (Rust axum・2.5万行の http.rs)のセキュリティ監査を実際にやらせました。 「.unwrap() のうち攻撃者入力で panic しうる1件を見つけて FINDING.md に書け」という実タスクです。

クライアントteai経由の挙動結果
Sente(OpenCode)OpenAI互換をそのまま送る。変換ゼロ崩れず完走
Claude CodeAnthropic tool_use を teai が変換kimi-k3で崩壊
Codex独自function-call+サンドボックスシェル崩壊

Claude Code は teai/kimi-k3 で <ctrl46> という制御トークンをテキスト出力してツールが発火せず、 Codex は生成したシェルコマンドが壊れて execvp() failed で即死しました。 いずれも「クライアントが悪い」のではなく、各社のツール様式(Anthropic の tool_use、Codex 独自形式)を teai の OpenAI互換変換層が完全再現できないために起きます。

構造的な結論: teai は元々 OpenAI 互換。だから OpenCode ベースの Sente は変換層を挟まず、 崩れどころが無い。「teai を使って開発する」前提では Sente が最も安定する — これは偶然ではなく設計の必然でした。
追記(2026-07-28 夜): Claude Code の <ctrl46> 崩壊は、このベンチ実施に teai 側で原因が特定され修正されました(真因は tool_choice の未伝播で、Claude Code や Kimi K3 の 問題ではありません)。本番で再検証したところ、Claude Code + teai/kimi-k3 は正常にファイルを生成し、 <ctrl46> は再現しませんでした。上のベンチはあくまでその時点の記録です。 なお「Sente は変換層ゼロだから構造的に崩れどころが少ない」という利点自体は変わりません。

正直な話:指摘の"質"はモデルの天井に当たる

ただし完走 = 良い監査、ではありません。統一モデル glm-5.2 では、3クライアントとも テストコード内の .unwrap() を脆弱性と誤認しました(#[test] の中は攻撃者入力が届かないので脆弱性ではない)。 これはクライアントの差ではなく、モデルの監査能力の限界です。全 FINDING を実コードと照合して確認しました。

磨く:抽象ルールより「機械的手順」

そこで Sente にコーディング規律を組み込みました。起動ごとに ~/.config/teai/sente-rules.md を書き出し、設定の instructions で全セッションに注入します。 調査(AGENTS.md ベストプラクティス)でも「抽象原則より、機械的に従える具体手順の方が効く」と一致したので、 判定を手順に落としました:

効果は割れました。規律注入前は「読む前に憶測で行番号を書く」失敗がありましたが、注入後は 実コードを読んでから、実在する .unwrap() の行を指してFINDINGを書く挙動に変わりました — read-before-write は実証的に直りました

一方で、テストコード除外だけは機械的手順を書いても直りませんでした。 「直上が #[test] ならスキップ」「ファイル後半で assert_eq! に囲まれていればテスト」と 明示しても、glm-5.2 は末尾のテストモジュール内の .unwrap() を選び続けます。 これはルールの書き方の問題ではなく、モデルの判断力の天井です。

教訓: 規律ルールは「読んでから書く/必ず成果物を出す」といった手続きは矯正できるが、 「これは到達可能コードか?」という判断はモデルの地力を超えられない。 高精度が要る監査には、より強いコーディングモデルを選ぶのが正解です(Sente は te -m で切替可能)。

おまけ:比較の準備中に本番バグを1つ直した

この比較の下ごしらえ中に、teai の /v1/chat/completionsrole:"tool" のメッセージと アシスタントの tool_calls を捨てていたバグを発見・修正しました(本番デプロイ済み)。 これはツールを往復させる全エージェントのループを壊す不具合で、Sente に限らず効きます。

まとめ

無料APIキーを取得して Sente を試す →
Sente(先手)· powered by OpenCode · 統一モデル z-ai/glm-5.2 · 全FINDINGは実コード照合済み · 隔離git worktreeで実行 · 2026-07-28