複数のAIコーディングエージェントを同時に動かすと、ボトルネックは生成速度よりも「人間の注意」になります。
- 実行中だと思っていたタスクが承認待ちだった
- 認証エラーと通信停止が同じ「止まった」に見えた
- 完了したタスクを見落とし、次の仕事が発生しなかった
この問題を、Knotframe Studio / Latticeの試作でどのように整理したかを共有します。
まずイベントと状態を分ける
CodexやClaude Codeなど、各ツール固有のイベントをそのままUIへ出すと、ユーザーは毎回意味を解釈しなければなりません。最初に共通イベントへ正規化します。
type AgentEvent = {
source: "codex" | "claude-code" | "other";
kind:
| "started"
| "output"
| "approval-required"
| "auth-error"
| "network-error"
| "completed";
occurredAt: string;
};
type TaskState =
| "running"
| "waiting-for-human"
| "blocked"
| "done";
ポイントは「実行中」と「人間待ち」と「障害停止」を別状態にすることです。
状態から次のアクションを一意にする
| 状態 | 意味 | ユーザーの次の行動 |
|---|---|---|
| running | AI側で処理中 | 待つ/進捗を見る |
| waiting-for-human | Go承認・選択待ち | 内容を確認して承認する |
| blocked | 認証・通信・環境で停止 | 原因別の復旧手順を実行する |
| done | 今回の仕事が完了 | 結果確認、または次タスクを生成する |
「停止中」だけでは判断できません。たとえば認証エラーなら再ログイン、通信エラーなら接続確認、Go待ちなら承認ボタン、とUI上の行動まで対応させます。
見た目も状態に対応させる
色だけに頼ると、一覧を流し見したときに判別しづらくなります。そこでLatticeでは、状態を数学的な軌道の動きにも割り当てています。
| 状態 | 動き |
|---|---|
| running | 開いた軌道が連続して流れる |
| waiting-for-human | 軌道が一点で呼吸するように待機する |
| blocked | 位相が崩れ、断続的に停止する |
| done | 軌道が閉じて収束する |
装飾ではなく、3秒以内に「どれが人間待ちか」を見分けるための符号です。
3秒認識テスト
試作では、画面を3秒だけ見てもらい、次の2点を確認します。
- どのタスクが人間の入力待ちか分かるか
- 次に押す場所が分かるか
正解率だけでなく、回答時間と迷った理由を記録します。動画保存やSNS上の反応は認知の参考にはなりますが、実務上の有効性とは分けて計測します。
端末外へ出す情報を最小化する
AIセッションにはプロンプト、ファイル名、顧客名などが含まれる可能性があります。可視化側へ渡すのは、原則として次のような状態メタデータだけにします。
type PublicTaskSignal = {
taskId: string; // ランダムID
state: TaskState;
updatedAt: string;
needsAction: boolean;
};
本文、ファイルパス、APIキー、会話ログは既定で渡しません。ローカルのアダプターが正規化し、表示側は必要最小限の信号だけを受け取る境界です。
試作を公開しています
状態を眺めて判別する無料プロトタイプと、15分の実地テスト募集を公開しています。
実地テストでは、Codex / Claude Codeなど複数タスク利用時に「Go待ち」を見落とすか、3秒で状態が伝わるかを確認します。