Skip to main content

MoAI Web Console

5 つの領域(概要・カンバン・SPEC・モニター・設定)で構成されたローカル運用コンソール — リアルタイム更新、読み取り専用の観測、設定編集。

更新 2026-08-15 10分で読めます GitHub で編集 ↗

MoAI Web Console

MoAI Web Consolemoai web で起動するローカル運用画面です。プロジェクトの SPEC カタログ、カンバンチェーン、セッションとゴール、検証履歴を一か所で確認でき、同じ画面から設定も編集できます。ブラウザは 127.0.0.1 にのみ接続し、データベースもログインもありません。

情報
一言でいうと: コンソールは 4 つの観測領域と 1 つの設定領域を左レールにまとめた運用シェルです。観測領域は読み取りのみを行い、設定領域はターミナルウィザードと同じ検証・永続化レイヤーを使います。

運用シェル — 左レールとアプリバー

画面は 3 つに分かれます。左のレールに 5 つの領域が縦に並び、上のアプリバーに現在の画面タイトルと状態が乗り、残りが本文です。どの領域にいてもレールとアプリバーは同じ位置に残ります。

領域ルート役割
概要(Overview)/プロジェクト全体の要約 — 統計タイル、カンバンチェーン、進行中 SPEC、注意リスト、セッション
カンバン(Kanban)/kanbanチェーンセッションボード + SPEC パイプライン 4 カラム
SPEC(Specs)/specsSPEC カタログの検索・フィルタ・詳細、クローズ負債と MUST-FIX drift
モニター(Monitor)/monitorセッション・ゴール・検証・エピックの 4 パネル
設定(Settings)/settingsプロファイル設定とプロジェクトセクションの編集(9 タブ)

アプリバー右側に何が出るかは領域によって変わります。観測領域 4 つではリアルタイム表示灯が、設定領域では保存クラスター(変更件数と保存ボタン)が置かれます。コンテキストチップ(lang · model · effort · dev)は設定領域だけにレンダーされます — 編集中のプロファイルの主要な値を保存前に目で確認するためのものだからです。

レールの下部にはプロファイルボタン、プロジェクト名、インターフェース言語セレクター、終了ボタンが集まっています。プロファイルボタンを押すとポップオーバーが開き、切り替え・作成・名前変更・削除が一か所で完結します。どの画面から開いても同じポップオーバーなので、プロファイルを扱う面はコンソール全体で 1 つだけです。

flowchart TD
    Rail["左レール
概要 · カンバン · SPEC · モニター · 設定"] Top["アプリバー
タイトル · リアルタイム表示灯 / 保存クラスター"] Body["本文
領域ごとの画面"] Read["読み取り専用領域
概要 · カンバン · SPEC · モニター"] Write["設定領域
検証・永続化レイヤー経由"] Files["プロジェクトファイル
.moai/ 配下の状態と設定"] Rail --> Body Top --> Body Body --> Read Body --> Write Read -->|読み取りのみ| Files Write -->|保存| Files style Read fill:#E3F2FD,stroke:#1565C0 style Write fill:#FFF3E0,stroke:#E65100

概要 — 今プロジェクトはどんな状態か

概要は 4 つの統計タイルから始まります。SPEC(全体件数と進行中の件数)、drift(MUST-FIX 件数)、session(PID 確認済みの数 / レジストリ登録数)、verify(最後の検証結果とキー数)です。

その下のカンバンチェーンバーは、現在のカードが lead → plan → run → review → sync の 5 役割をどこまで通過したかを 1 行で示します。セッションのない役割があれば、その地点をチェーンが止まった場所として表示します。続いて進行中 SPEC の一覧、要注意パネル(MUST-FIX drift・失敗した検証・停滞したゴール・空の役割だけを集めます)、右側にセッションパネルが置かれます。

カンバン — 2 つのボード

カンバン領域には性格の異なるボードが 2 つ、上下に置かれます。

チェーンセッションボードは 5 つの役割をカードとして並べ、各役割のセッション id、バックエンド、モデル、推論強度、コンテキスト使用量、最後のハートビートを記録します。ステージ状態はハートビートから推定した値なので推定マークが付き、モデル・推論強度・コンテキストはまだ記録されない値なので空のままにします — 埋めないことが規律です。

SPEC パイプラインは SPEC を status 基準の 4 カラム(draft · in-progress · implemented · completed)に並べます。superseded · archived · rejected はこのボードには来ず、SPEC 領域のフィルタからのみ確認します。

SPEC — カタログと 2 つの警告パネル

SPEC 領域の先頭には検索ボックスと status フィルタチップがあります。その直後、一覧より先に警告パネルが 2 つ来ます。

  • クローズ負債(Close debt) — 実装は終わっているのに(implemented)lifecycle が completed に閉じられていない SPEC です。件数が多いときは更新の新しい数件だけを表示し、切り詰めた事実と全体件数を併記します。
  • MUST-FIX drift — 対処コマンドを伴う drift です。コマンドはコピーのみされます。コンソールはサーバー上でいかなるコマンドも実行しません — コピーして自分のターミナルで実行する構造です。

2 つのパネルが一覧の上に来る理由は単純です。カタログが数百行になると、下に置いたものは画面のはるか下方に押しやられ、事実上存在しないのと同じになるからです。

一覧は ID・タイトル・status・Tier・era・更新日・drift の列で構成されます。行を選ぶと右側に詳細パネルが開き、ドキュメント一覧、ファイルパス、drift の詳細を表示します。

モニター — 4 つの観測パネル

パネル読むもの
セッション(Sessions)セッション id、SPEC、バックエンド、ハートビート、作業ディレクトリ
ゴール(Goals)設定されたゴールの条件、経過ターン数、停滞の有無、判定
検証(Verification)キーごとの直近履歴スパークラインと合否
エピック(Epics)moai epic status が計算したエピックごとの進捗率

リアルタイム更新 — 信号だけ送り、取り直す

観測領域はファイルが変わると自ら更新されます。サーバーは GET /events に SSE(Server-Sent Events — サーバーからブラウザへ一方向にイベントを流す標準)ストリームを開いたまま .moai/ 配下を監視し、変更を 250 ミリ秒単位でまとめて送出します。

要点はイベントがデータを運ばないことです。サーバーは「この領域が変わった」という名前だけを送り、ブラウザはその信号を受けて現在の画面を取り直し、本文だけを差し替えます。レンダリングの真実がサーバー 1 か所にのみ残るので、画面とファイルが食い違う状態は生まれません。

イベント監視対象
spec.moai/specs
session.moai/state
goal.moai/state/goal
verify.moai/state/verify
kanban.moai/state/kanban
config.moai/config/sections

config イベントだけは扱いが異なります。設定を編集している最中に画面が下から変わると入力中の値が消えてしまうため、更新はせず「設定ファイルが変わった」というバナーだけを出します。

接続が切れても黙って止まりません。アプリバーの表示灯が切断状態に変わり、ブラウザの再接続が 3 回失敗すると 30 秒間隔のポーリングに落ちます。ポーリング中であることは表示灯にそのまま残ります。

知らないことを知っているように書かない

コンソールが守る規律が画面のあちこちに現れます。

  • セッションの活性はプロセスの生存を確認したものだけを活性に上げます。レジストリに記録が残っていてもプロセスが既に終了している場合があるため、確認できない項目は古いものとして表示します。
  • ステージ状態はハートビートからの推定値であり、推定であるという事実をマークで併記します。
  • 記録されていない値(役割ごとのモデル・推論強度・コンテキスト使用量)はもっともらしい値で埋めず、空のままにします。
  • 空のリストは空のままにせず「ない」と書きます。空のパネルは「まだ読めていない」と読まれるからです。

設定 — 同じ検査、同じファイル

設定領域はコンソールで唯一ファイルを書く場所です。コンソールは独自の検証ルールを持たず、ターミナルウィザード(moai profilemoai update -c)と同じ検証・永続化レイヤーを呼びます。どちらから直しても結果が同じになる理由です。

レールで設定を選ぶと、その下に 9 つのタブが縦のリストとして開きます。

  1. ユーザー情報(Identity) — 表示名とプロジェクト単位の identity フィールド
  2. 言語(Language) — 会話・コミットメッセージ・コードコメント・ドキュメントの言語
  3. LLM — 権限モード・モデル・推論強度
  4. サードパーティ LLM(3rd Party LLM) — ティアごとの GLM モデル、ティアごとの推論強度、GLM API キー
  5. ワークフロー(Workflow) — 実行モード・既定モード・agentic-loop・loop-prevention
  6. Git・ワークツリー(Git & Worktree)git_strategy.mode、プロファイルごとの merge_method、ワークツリーと branch-guard のトグル
  7. 監査(Audit) — 監査モデルとバックエンドごとのゲート
  8. エージェント(Agents) — エージェントごとのプロファイル・モデル割り当て
  9. レポート(Report) — レポート形式と出力の設定

各タブの横の数字は、そのタブがレンダーするフィールド数です。エラーのあるタブには数字の代わりに警告マークが付くので、どのタブを開くべきかが一覧からすぐ分かります。

ウィジェットの正直さ

フィールドは値の実際のドメインに合ったウィジェットでレンダーされます。bool フィールドはチェックボックスではなく 2 択のラジオグループで描きます — チェックボックスは現在の選択を隠しますが、ラジオの対は明示します。execution_modeaudit.model のような閉じた集合は select かラジオにし、集合外の値は保存時に拒否します。リポジトリパスや API キーのようにドメインが本当に開いている値だけが自由テキストとして残ります。

GLM 正直バッジ

推論強度のランタイム伝達チャネルはセッション単位の環境変数 1 つだけなので、ティアごとに書いた推論強度は保存専用です。設定には残りますが、ランタイムはセッション単位の値だけを読みます。サードパーティ LLM タブには適用元を明示するバッジがあり、この事実が示唆ではなく明示として現れます。

編集範囲

編集できる範囲は単一の真実の情報源で決まっており、コンソールはその中にだけ書き込みます。user · language · quality · git-convention · git-strategy · llm は typed 検証パスで保存され、workflowreport はファイル内のコメントと行順を保つ seam で保存されます。マシン・状態セクションと大型ポリシーファイルは除外群であり、新しいセクションも明示的に登録されるまでは既定で拒否されます。各セクションのキーは config セクションリファレンス で扱います。

セキュリティモデル

ループバック専用。 コンソールは 127.0.0.1 にのみバインドされます。同じマシンの別アカウントやリモートホストからは届きません。

データベースなし。 別途 DB を立てません。読み書きする値は現在のプロジェクトの .moai/ 配下のファイルがすべてです。

認証なし。 ループバック専用が前提なので、ログインやトークンのレイヤーはありません。

コマンド実行なし。 観測領域は GET 以外のメソッドを拒否し、どの画面もサーバー上でコマンドを実行しません。SPEC の status 遷移もコンソールは行いません — 遷移の所有者は各フェーズのマネージャーエージェントです。

情報
ループバック専用が認証なしの前提です。リバースプロキシや 0.0.0.0 バインドで外部に公開する構成はサポートしません。リモートから見る必要があれば SSH トンネルでローカルポートを転送してください。

4 ロケールインターフェース

インターフェース言語はレール下部のセレクターから English · 한국어 · 日本語 · 中文 のいずれかを選びます。選んだ言語はブラウザに残り、次に開くときは最初のレンダーから適用されます。docs-site の 4 ロケールドキュメント と同じ言語セットなので、画面とドキュメントを同じ言語で並べて読めます。

起動と終了

プロジェクトディレクトリで moai web を実行すると 127.0.0.1:3041 にバインドされ、ブラウザが自動的に開きます。

フラグ既定値動作
--port <int>3041バインドするループバックポート
--no-openfalseブラウザの自動起動を無効にします
--no-reusefalseポートを使う古い moai インスタンスを回収せず、衝突として終了します

終了はターミナルで Ctrl+C、またはレール下部の終了ボタンです。詳細は CLI リファレンス — moai web を参照してください。

関連ドキュメント