見出し画像

AI LIFE OS POST-CAMP RUN|30分Runで、ローカルQwenからDeepSeek V4 Flash FreeへMissionが渡った 昨日のNight RunはReplay UIとなり、Mission ControlはProviderを越えて継続した

IO|AI航海士です。

昨日、AI LIFE OSのMission Controlは、13分31秒のNight Runを完走した。Local QwenからOpenCode / Kimi K3へMissionが渡り、133/133 tests、Production Build、Runtime HTTP 200を通過。最後はHuman Gateへ到達した。

ただし、後から行ったCodexのRetrospective G4判定はREVISEだった。実装の中心部分が動かなかったわけではない。Pre-run hash、git diff、runtime raw log、Provider / Model IDなど、Runを第三者が後から再検証するためのEvidenceが不足していた。

そこで今回は、同じRunを繰り返すのではなく、昨日のNight Runそのものを見える画面にすることにした。

作るものは、Night Run Replay UI。目標は30分。Hard Capは40分。

そして今回、Local QwenからDeepSeek V4 Flash FreeへMissionが渡り、昨日のRunがブラウザ上のUIとして現れた。さらにMission Controlは、途中でProviderを切り替えながら、同じMissionを継続した。

MIRA "RELAY"


4画面のMission Controlと、その外側にいる人間

今回もOrca上のHerdr 4画面構成で進めた。

Mission Control
左上 = Claude Sonnet 4.6    = Architect / POLARIS
右上 = Hermes / GLM-5.2     = Mission Control / HAZAR
左下 = OpenCode             = Cloud Builder / MIRA "RELAY"
右下 = Codex GPT-5.6        = Independent Reviewer / ARCA

Local Qwenは固定席を持たない。HAZARから必要なときだけ呼び出される、ローカル側のBuilderとして配置した。

この4画面を見ていて面白いのは、私はどの席にもいないことだ。4つのAgentが作業を進める画面とは別に、Cross View Chatで進行を確認し、起きていることの意味を整理し、必要なHuman Gateだけを握っている。

以前のCross Viewでは、人間側とAI側が二つの視点として並んでいた。今は、そのAI側の一面がさらに4分割され、内部に役割を持ったAIチームになっている。私はその外側から、Mission全体を見る。


実装前に始まった、ClaudeとCodexの設計改善ループ

今回は、すぐにはBuilderを動かさなかった。まずClaudeがNight Run Replay UIのArchitectureを作成し、CodexがPRE-G1 Reviewを行った。

最初に残った大きな論点は3つだった。

B-01 = M006_RECORDを誰が、いつ更新するのか
B-02 = 現在RunのテストGateを固定値で判定してよいのか
B-03 = Provider / Model ID確認のために、設定ファイルやcredential-bearing fileを読んでよいのか

M006_RECORDのWriterはSupervisorだけに限定した。

現在のRunで使うテストGateは、87、133、143といった過去の固定値ではなく、WP-00で取得するBaseline Bからの相対値で判定する。

Post-WP-01 = passed >= B + 3, failed = 0
Post-WP-02 = passed >= B + 10, failed = 0

Provider / Model IDは、identifier-only CLI、sanitized log、IOから与えられたID、runtime-confirmed identityだけで確認する。auth.json やProvider設定など、secretを含む可能性のあるファイルは開かない。

ClaudeがArchitectureを修正し、Codexが差し戻す。Claudeがまた直し、Codexが確認する。

途中では、40分Hard CapとM006_RECORDのFreeze境界にも矛盾が見つかった。時間切れになったからといって、最終検証開始後のSourceを更新してはならない。

数回の改善ループを経て、Codexの判定が変わった。

B-01 = RESOLVED
B-02 = RESOLVED
B-03 = RESOLVED

FINAL PRE-G1 verdict = APPROVE
Human G1 may be approved = Yes

以前、Mythos to Fableシリーズの頃の指示の渡し方は、Fableの出力に対して私自身が修正指示を加えていた。今回は、その修正のやり取り自体がClaudeとCodexの間へ移っている。

私は細部を書き直すのではなく、その改善ループを少し離れた場所から見ていた。少しずつ、手が離れている。


T0|Local Qwenが動き始めた

Human G2を承認し、Local QwenへのWP-01 Dispatchが始まった。

正式な実行T0は、LM Studioのログに残った時刻を採用した。

2026-08-05 02:03:45 JST

実行環境は次のとおり。

MacBook Pro M1 Max 64GB
LM Studio
Qwen3.5-35B-A3B
Q4_K_M
22.07GB
Context Length 8192
GPU Offload 40

昨日のRunで判明した重要設定も引き継いだ。

Endpoint = /api/v0/chat/completions
Field    = reasoning_effort: none

Qwenの最初の応答は、約72秒で返ってきた。

reasoning_tokens = 0
finish_reason    = stop
content          = 11,111 characters
valid JSON

reasoning_effort: none が実際に効き、reasoning tokenを消費せずに構造化された出力を返した。

ただし、HAZARはその結果をそのまま採用しなかった。Harnessによる検証でlazy importに関する問題を発見し、Qwenへ修正要求を返した。

2回目の生成と再検証の結果は、

Baseline B = 87
90/90 tests PASS
failed = 0

Architectureで定義した B + 3 Gateを通過した。


QwenからDeepSeek V4 Flash FreeへRelay

WP-01完了後、HAZARはQwen-to-Cloud Builder Relay Packetを組み立てた。

今回のPrimary Cloud Builderは、昨日使ったKimi K3ではない。OpenCodeで設定していたDeepSeek V4 Flash FreeをPrimaryにした。

実際にDispatchされたコマンドも画面に残った。

opencode run --format json --model opencode/deepseek-v4-flash-free

これによって、OpenCodeのTUI上に何が表示されているかではなく、実際にどのモデルがDispatchされたかが明確になった。

Runtime  = OpenCode
Model ID = opencode/deepseek-v4-flash-free
Primary  = DeepSeek V4 Flash Free
Fallback = Kimi K3

左下のOpenCode TUIは待機画面のままだった。実際のBuilderは、HAZARが右上からHeadless CLIとして起動した別プロセスで動いていたからだ。

HAZARは60秒ごとにプロセスを監視した。途中のログでは、応答ファイルが約182KBまで増え、CPUもActiveで、ファイル書き込みが継続していることが確認された。

その後、DeepSeekは8ファイルを書き終えた。


昨日のNight Runが、ブラウザへ飛び出した

Run開始から約13分。突然、Safariが開いた。表示されたのは、昨日のNight Runを再構成したReplay画面だった。

Night Run Replay
REPLAYED RUN = NR3 / MISSION-005

画面には、二つの実行時間が並んでいた。

13m 31s = REPORTED
49m 1s  = RECORDED

13分31秒は、昨日のMissionで報告された実行時間。49分1秒は、SAFE_STOP後の待機時間なども含むwall-clockの記録だった。

二つを無理に統合せず、異なる根拠を持つDuration Claimとして表示した。49分1秒には、SAFE_STOPからRESUMEまでの約19.5分のidle時間が含まれている。

実行主体も明示された。

Local first leg      = Qwen3.5-35B-A3B
Primary cloud builder = Kimi K3
Fallback cloud builder = DeepSeek V4 Flash Free(configured; NOT dispatched in NR3)

これは、昨日のNR3で実際に使われた経路だ。

Replay画面には、Qwenの4回のAttemptも残っていた。最初の3回はSAFE_STOP。4回目でEndpointと reasoning_effort: none が確定し、reasoning token 0でPASSした。

さらにページをスクロールすると、

133/133 PASS
Production Build exit 0
Runtime HTTP 200
Codex G4 REVISE
Human Gate
Evidence References

まで、一つの長い画面として確認できた。

ログやJSONではなく、昨日のRunがUIになった。これが今回求めていた、目に見える成果物だった。


109/109、Build、6/6 HTTP 200

DeepSeekの実装完了後、Deterministic Verificationが実行された。

Tests            = 109/109 PASS
TypeScript       = exit 0
Production Build = exit 0
Runtime Routes    = 6/6 HTTP 200
OpenCode stderr  = empty
OpenCode exit    = 0

Kimi K3へのFallbackは発動しなかった。

ブラウザの下部には、Replayを作成した今回のMISSION-006も表示された。

RENDERING MISSION = MISSION-006
Local first leg       = Qwen3.5-35B-A3B
Primary cloud builder  = DeepSeek V4 Flash Free
Fallback cloud builder = Kimi K3

WP-01 = PASS
WP-02 = PASS
WP-03 = PASS
G4    = PENDING / MISSING_EVIDENCE

Replay対象のNR3と、画面を生成したM006が別Contextとして記録されている。

ここで実装Runは PAUSED_FOR_HUMAN_GATE に到達した。昨日の13分31秒を超えていた。

ただし今回は、ブラウザが表示されたところでは止めない。Codex G4まで含むEnd-to-End Missionとして継続した。


Codexは、109/109をそのまま信用しなかった

右下のCodexは、HAZARが報告した結果をそのまま採用しなかった。自分でファイルを読み、テストを実行し、Production Buildを確認し、6つのRouteへHTTP Probeを行った。Independent Reviewerとして、Mission Controlとは別経路で検証した。

実装品質については、大部分が肯定された。

Production Build         = PASS
TypeScript compilation   = PASS
6/6 routes               = HTTP 200
Provider / Model identity = confirmed
Kimi K3 fallback         = unused

しかし、G4の判定はREVISEだった。残った問題は、実装そのものではなくEvidence Packagingだった。

immutable V1–V7 evidence bundle
raw stdout / stderr
original runtime logs
original screenshots
exact verification commands
Supervisor hotfix disclosure

今回、HAZARはWP-03検証中に、Qwenが作ったテストファイルへ不足していたVitest importを1行追加している。

import { describe, it, expect } from "vitest";

技術的には小さな修正だ。しかしMission ControlがSourceを直接変更した以上、Author、Timestamp、Rationale、Before / After HashをEvidenceとして残さなければならない。

ここで新しい運用境界が現れた。

Mission Controlは不具合を発見してよい。 では、どこまで自分で修正してよいのか。

今後Supervisor Hotfixを許可するなら、例外処理ではなく正式なProtocolにする必要がある。


30分Runの途中で、Mission ControlにProvider Relayが発生した

Evidence remediationへ進んだところで、Z.ai側のGLM-5.2が5時間枠へ到達した。

HTTP 429
Usage limit reached for 5 hour

最終レスポンスの時刻は、

2026-08-05 02:28:02 JST

Local Qwen DispatchのT0、02:03:45から24分17秒の地点だった。

ただし、これはMissionの失敗ではない。QwenとDeepSeekによる実装は完了している。109/109 tests、Production Build、6/6 HTTP 200、Night Run Replayのブラウザ描画も成立している。

停止したのは、Codexの指摘をEvidence Bundleへ反映するMission Control工程だった。

今回は、定額の利用枠があるProviderを組み合わせて運用しているため、Runの途中で上限へ到達した。従量課金APIを使う構成であれば、そのまま同じ経路で継続する場面だろう。

しかし、OpenCode Go側にも同じGLM-5.2があった。そこで、Modelの役割を変えずにProviderだけを切り替えた。

Previous Provider = Z.ai
New Provider      = OpenCode Go
Model             = GLM-5.2

右上には、次の表示が出た。

Model switched = glm-5.2
Provider       = OpenCode Go
Context        = 1,000,000 tokens
Max output     = 131,072 tokens

これはBuilderのFallbackではない。

Mission ControlそのもののProvider Relayだった。


Contextを失っても、Missionは失わなかった

新しいOpenCode Go側のGLM-5.2は、前のSessionの会話履歴を持っていない。それでも、Repository、Mission State、既存Evidence、CodexのTranscriptを読み直し、停止地点からHAZARの仕事を再開した。

Z.ai / GLM-5.2
    ↓ HTTP 429
OpenCode Go / GLM-5.2
    ↓
MISSION-006のControl Planeを再構成

ここで重要なのは、同じSessionが維持されたことではない。

Sessionが変わっても、同じMissionが維持されたことだ。

モデルのContextが失われても、MissionのContextがRepository側に残っていれば再開できる。これは、今後Night Run Supervisorを長時間動かすうえで重要な条件になる。


Screenshot Evidenceも、OriginalとSupplementalに分けた

実行中に撮影していたScreenshotは、最初のViewportを写した1枚だけだった。そこにはNight Run ReplayのHeader、Duration、Provider Routing、Preflight Checksが写っていた。

その後、凍結済みのSourceから同じページを開き、下部までスクロールして追加のScreenshotを撮影した。さらにページ全体をPDFとして保存した。

ここでも、後から撮った画像を「実行中に撮った」と扱ってはいけない。

Original Runtime Capture       = 実行中に撮影した1枚
Supplemental Post-run Captures = 凍結済みSourceから追加撮影した複数枚
Full-page Supplemental Capture = Underground Model Port.pdf

OriginalとSupplementalを分け、実際のCapture TimestampとHashを残す。

Evidenceは数が多ければよいのではない。

何が、いつ、どの状態から取得されたものなのかが重要になる。


最終的に残った、4つのEvidence Gap

Provider Relay後のHAZARは、CodexのTranscriptとEvidence Packageを確認し、最終結果をまとめた。

READY_FOR_CODEX_G4_EVIDENCE_REVIEW
Codex verdict         = REVISE — evidence only
Implementation defect = None
Source state          = Frozen

残っているのは、4つのEvidence Gapだった。

F-EV-1 = V4–V7に対応するexit code記録が不足
F-EV-2 = 事前状態とuntracked filesを含む差分証跡が不足
F-EV-3 = Evidence Indexが全Artifactを網羅していない
F-EV-4 = wp-03/state.jsonが修正前の失敗状態を保持している

修正対象はEvidence Packageだけだ。実装Sourceは変更しない。Builderも再Dispatchしない。

G5は、G4 Evidence Reviewが閉じるまでBLOCKEDのまま保持された。

これは「動くものが完成したか」という判定と、「その成立過程を第三者が再検証できるか」という判定が、別のGateとして機能した結果だった。

Codexは、Evidenceが不足した状態でAPPROVEを出さなかった。HAZARも、実装が動いていることだけを理由にMissionを完了扱いしなかった。


HermesをMission Controlに置く意味

現在のHermesは、外から見るとGLM-5.2を呼び出すAgent Shellに見える。しかし今回、HAZARが担当した範囲は広かった。

Repository確認
Worktree管理
Architecture Packet管理
Gate制御
Local Qwen Dispatch
Qwen Harness
DeepSeek Relay
Process監視
Deterministic Verification
Runtime起動
Evidence収集
Codex Dispatch
Provider Limit停止
Provider Relay

Claudeは設計を知る。Builderはコードを知る。Codexは品質を知る。HAZARは、チームが今どこにいて、次に誰を動かし、どの状態で止めるべきかを知る。

実際のITチームでいえば、PM、Traffic Manager、Delivery Manager、General Managerの機能が混ざっている。

将来的にHermes側へMission MemoryやKarpathy WikiのようなContext管理を載せれば、HAZARの価値はGLM-5.2というモデルそのものから、HermesというControl Planeへ移っていく。

Mission History
Gate State
Provider Route
Evidence Index
Failure Pattern
Human Decision

これらがHermes側に残れば、ModelやProviderが変わってもMissionは続けられる。今回、その最初の形が実際に起きた。


Context Budgetに加えて、Provider BudgetもGateになる

今回、ClaudeはArchitecture作業中にAuto-Compactへ入った。成果物を作るためではなく、長くなった会話Contextを維持するためにtokenを使っていた。

Claudeは今後、次のように扱った方がよい。

1 Session = 1 Deliverable

Contextが大きくなりすぎる前に成果物を保存し、新しいSessionへRelayする。

そしてGLM-5.2は、5時間枠へ到達してHTTP 429で停止した。今後はContextだけでなく、Providerの利用枠もMission Gateとして管理する必要がある。

利用枠80% = 新しいScopeを追加しない
利用枠90% = 現在のGateを閉じる作業だけ行う
利用枠95% = Evidence保存、Relay、停止のみ

Mission Controlは、時間だけを管理するものではない。Context、Token、Provider Limit、Fallback Routeも、Missionを運ぶための資源になる。


手を動かす開発から、Missionを観測する開発へ

今回、私はコードをほとんど書いていない。

Qwenが最初の実装を作った。HAZARが検証し、Qwenへ修正を戻した。DeepSeek V4 Flash FreeへMissionをRelayした。Codexが独立して再検証した。HAZARのProviderが利用枠へ到達し、Z.aiからOpenCode GoへControl PlaneをRelayした。

私は4画面を見ながら、このChatで起きていることを整理していた。

実行する

違和感を見つける

意味を言語化する

運用ルールへ変換する

次のMissionへ残す

通常は、作業が終わってから振り返る。今回はMissionが進んでいる途中で、Mission Controlそのものが更新されていった。4画面の中では実装が進み、このChatではMission Runtimeが進化していた。

昨日は、13分31秒でLocal QwenからKimi K3へMissionが渡った。今日は30分Runに入り、Local QwenからDeepSeek V4 Flash FreeへMissionが渡り、昨日のRunがブラウザUIとして現れた。さらにMission Controlは、Z.aiからOpenCode GoへProviderを切り替えながら、同じHAZARの役割を継続した。

今回完成したのは、Night Run Replayという画面だけではない。

Model Relay
Provider Relay
Independent Review
Evidence-only REVISE
Frozen Source
Human Gate

これらを一つのMissionとして扱うControl Planeが、実際のRunの中で形になった。


NEXT RUN|人間不在の1時間自律駆動設計へ

次は、この30分Runを二つに分けない。ひとつのMissionを、途中で人間へ戻さず、1時間動かし続ける設計に挑戦する。

今回もAIチームは長く動いた。しかし途中では、私が何度かHuman Gateへ戻っている。

Codexのローカルサーバー起動を承認した。Screenshotを追加で取得した。Z.aiからOpenCode GoへProviderを切り替えた。新しいHAZARへResume Packetを渡した。

AIチームは自律化され始めているが、Supervisorを監督する人間が、まだ必要だった

次回は、この介入点をSupervisor Policyへ移す。

Human Launch
    ↓
60-minute Autonomous Run
├─ Local Builder
├─ Cloud Builder Relay
├─ Verification
├─ Repair Loop
├─ Provider Budget Control
├─ Provider Relay
├─ Context Relay
├─ Evidence Capture
├─ Reviewer Dispatch
└─ Safe Stop / Final Human Gate

人間が行うのは、原則として開始と終了の2回だけにする。

1. 開始時 = APPROVE 60-MINUTE AUTONOMOUS RUN
2. 終了時 = FINAL HUMAN GATE

Providerの利用枠が近づけば、自分で航路を変える。Contextが尽きれば、Mission Stateを保存し、新しいSessionへRelayする。軽微な不具合なら、事前に許可された範囲で修正し、Hotfix Evidenceを生成して再検証する。

Runtimeが立ち上がれば、自動でScreenshotとFull-page Captureを取得し、URL、Timestamp、HEAD、SHA-256をEvidence Indexへ登録する。

重要なのは、同じAI Sessionを1時間維持することではない。

SessionやProviderが変わっても、同じMissionを1時間失わずに運び続けることだ。

Night Run Supervisorは、AIを夜に動かすためだけの機能ではない。人間がその場にいなくても、Missionを失わないためのControl Planeである。

Campは終わった。しかしMission Controlは、実装を動かす仕組みから、実装の来歴まで運ぶ仕組みへ進み始めている。

次の航路は、1時間自律駆動設計になる。

#AI #AILIFEOS #Qwen #DeepSeek #NightRun #ProviderRelay #AI航海士

いいなと思ったら応援しよう!

IO|AI航海士 Buy me a coffee ☕ 役に立ったら応援よろしくお願いします!