<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Harness on KnightLiブログ</title>
        <link>https://knightli.com/ja/tags/harness/</link>
        <description>Recent content in Harness on KnightLiブログ</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Mon, 27 Apr 2026 08:19:02 +0800</lastBuildDate><atom:link href="https://knightli.com/ja/tags/harness/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Ralph とマルチエージェント協調：AI を長時間安定して働かせるには</title>
        <link>https://knightli.com/ja/2026/04/27/ralph-multi-agent-long-running-ai-workflows/</link>
        <pubDate>Mon, 27 Apr 2026 08:19:02 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/04/27/ralph-multi-agent-long-running-ai-workflows/</guid>
        <description>&lt;p&gt;最近 coding agent を使っていると、すぐにひとつの現実的な問題にぶつかります。&lt;strong&gt;AI は確かに仕事をしてくれる。でも、どうすれば何時間も動かし続けても途中で脱線せず、要件を忘れず、同じ作業をやり直さずに済むのか。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Ralph&lt;/code&gt; やマルチエージェント協調をめぐる議論で本当に重要なのも、まさにこの点です。単にどのモデルが強いかを比べる話ではありません。より実用的な問いは、&lt;strong&gt;長いタスクでも AI が安定して動けるように、どうワークフローを設計するか&lt;/strong&gt; です。&lt;/p&gt;
&lt;p&gt;この問題を分解すると、よく出てくるルートは大きく 2 つあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ralph&lt;/code&gt; 方式：新しいセッションを繰り返し起動し、ファイルシステムで文脈をつなぐ&lt;/li&gt;
&lt;li&gt;マルチエージェント方式：リード Agent が調整し、子 Agent が分担して実行する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;もっと平たく言えば、問われているのは「どのモデルが強いか」ではなく、「どう AI を組織して、継続的に成果を出す小さなチームのように動かすか」です。&lt;/p&gt;
&lt;h2 id=&#34;01-なぜ長時間タスクは崩れやすいのか&#34;&gt;01 なぜ長時間タスクは崩れやすいのか
&lt;/h2&gt;&lt;p&gt;短いタスクでは、多くの問題は表に出ません。指示を 1 つ出し、モデルが数ファイルを読み、少しコードを書き換えれば終わります。&lt;/p&gt;
&lt;p&gt;ところがタスクが長くなると、問題が一気に表面化します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;会話が伸び続けてコンテキストが膨らむ&lt;/li&gt;
&lt;li&gt;初期の要件が新しい情報に押し流される&lt;/li&gt;
&lt;li&gt;ひとつの Agent が設計、実装、テストまで全部抱える&lt;/li&gt;
&lt;li&gt;明確な受け入れ確認がないと、「終わった」と「終わったと言っているだけ」が混ざる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そのため、長時間 AI を動かすときに本当に問われるのは単発の出力性能ではなく、&lt;strong&gt;タスク分割、状態の受け渡し、役割分担、フィードバックループ&lt;/strong&gt; です。&lt;/p&gt;
&lt;h2 id=&#34;02-ralph-方式長いタスクを短いラウンドに分ける&#34;&gt;02 Ralph 方式：長いタスクを短いラウンドに分ける
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Ralph&lt;/code&gt; の考え方は、まず「コンテキストがどんどん汚れていく」問題を解くのに向いています。&lt;/p&gt;
&lt;p&gt;やっていることはシンプルです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ループで新しい agent セッションを何度も起動する&lt;/li&gt;
&lt;li&gt;各ラウンドでは十分小さなタスクを 1 つだけ扱う&lt;/li&gt;
&lt;li&gt;ラウンドをまたぐ状態は会話ではなくファイルに置く&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;利点は明快です。毎回 fresh context から始まるので、1 ラウンドごとの集中が保ちやすく、過去の履歴に引きずられにくくなります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Ralph&lt;/code&gt; 系のプロジェクトを見たことがあるなら、構造はかなり一貫しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;現在のタスクは構造化ファイルに書く&lt;/li&gt;
&lt;li&gt;途中の学びは進捗ファイルに残す&lt;/li&gt;
&lt;li&gt;コードの変化は git 履歴に残す&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり &lt;code&gt;Ralph&lt;/code&gt; は、1 つの Agent に「全部を永遠に覚えさせる」ことを目指していません。記憶を意図的に外へ逃がし、セッションそのものを軽く保とうとします。&lt;/p&gt;
&lt;p&gt;この種の方式は、特に次のような条件で相性がいいです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;作業がすでに小さな story に分けられている&lt;/li&gt;
&lt;li&gt;各 story が 1 つの context window に収まる&lt;/li&gt;
&lt;li&gt;プロジェクトに tests、typecheck、その他のチェックがある&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは &lt;strong&gt;AI を一歩ずつ安定して前に進めるにはどうするか&lt;/strong&gt; という問題への答えです。&lt;/p&gt;
&lt;h2 id=&#34;03-マルチエージェント方式1-人では抱えきれない仕事を分担する&#34;&gt;03 マルチエージェント方式：1 人では抱えきれない仕事を分担する
&lt;/h2&gt;&lt;p&gt;もうひとつのルートがマルチエージェント協調です。&lt;/p&gt;
&lt;p&gt;この種のワークフロー設計でより有望なのは、リード Agent が自分で全部やるのではなく、調整役に回り、ほかの Agent が実装、テスト、確認、受け入れを分担する形です。&lt;/p&gt;
&lt;p&gt;ここが &lt;code&gt;Ralph&lt;/code&gt; との大きな違いです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ralph&lt;/code&gt; は直列の反復に近い&lt;/li&gt;
&lt;li&gt;マルチエージェントは並列の分業に近い&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;タスクの中に自然な役割分担があるなら、マルチエージェントのほうが扱いやすくなります。たとえば次のように分けられます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ひとりがタスク分解と実行計画を担当する&lt;/li&gt;
&lt;li&gt;ひとりが実装する&lt;/li&gt;
&lt;li&gt;ひとりがテストして検証する&lt;/li&gt;
&lt;li&gt;ひとりが結果が最初の要件に合っているか見直す&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;大事なのは、ただウィンドウを増やすことではありません。価値があるのは役割を分離することです。もともと 1 つの Agent に押し込んでいた仕事を、より明確な段階に分けられます。&lt;/p&gt;
&lt;p&gt;役割の境界がはっきりすると、いくつかの問題が軽くなります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;書く人とレビューする人を分けられる&lt;/li&gt;
&lt;li&gt;テストする側が毎回ゼロから要件を再構築しなくていい&lt;/li&gt;
&lt;li&gt;リード Agent が実装詳細に埋もれにくい&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは &lt;strong&gt;AI を小さなチームのように協調させるにはどうするか&lt;/strong&gt; という問題への答えです。&lt;/p&gt;
&lt;h2 id=&#34;04-本当に重要なのは並列化ではなくどう分けるか&#34;&gt;04 本当に重要なのは並列化ではなく、どう分けるか
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Ralph&lt;/code&gt; を使うにしてもマルチエージェントを使うにしても、見落とされやすいのはこの点です。&lt;strong&gt;大事なのは Agent の数より、ワークフロー設計の質です。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;タスク分解が悪ければ、Agent を増やしても混乱を並列化するだけです。&lt;/p&gt;
&lt;p&gt;より安定しやすい分け方には、だいたい次の特徴があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 タスクに 1 つの明確な目標がある&lt;/li&gt;
&lt;li&gt;1 役割に 1 種類の出力責任がある&lt;/li&gt;
&lt;li&gt;各ラウンドに明確な完了条件がある&lt;/li&gt;
&lt;li&gt;前のラウンドの成果が次のラウンドでそのまま使える&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;たとえば「機能を全部作って」と一気に投げるより、次のように段階を切るほうが安定しやすいです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;まず要件と境界を分ける&lt;/li&gt;
&lt;li&gt;次に実装を分ける&lt;/li&gt;
&lt;li&gt;次にテストを分ける&lt;/li&gt;
&lt;li&gt;最後に受け入れ確認を独立させる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この分け方の利点は、問題が起きたときに、理解、実装、テスト、受け入れ基準のどこに原因があるのか見つけやすいことです。&lt;/p&gt;
&lt;h2 id=&#34;05-なぜ受け入れ確認が重要なのか&#34;&gt;05 なぜ受け入れ確認が重要なのか
&lt;/h2&gt;&lt;p&gt;多くの AI ワークフローが崩れるのは、前半で何もしていないからではありません。最後に、本当に独立した確認ステップがないからです。&lt;/p&gt;
&lt;p&gt;長いタスクでは、「結果が生成された」と「その結果が本当に使える」のあいだに、かなり大きな差があることがよくあります。&lt;/p&gt;
&lt;p&gt;だからこそ、開発と受け入れを分けて考える方向が重要です。複雑な仕組みにしなくても、少なくとも次の問いは独立して投げる価値があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最初のタスクを本当に完了しているか&lt;/li&gt;
&lt;li&gt;表面だけ直して根本原因を残していないか&lt;/li&gt;
&lt;li&gt;テストが都合のいい経路だけを見ていないか&lt;/li&gt;
&lt;li&gt;上流の要件を途中で勝手に変えていないか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この層が欠けると、AI は長いフローの中で何度でも「成功した」と自己申告しがちです。&lt;/p&gt;
&lt;h2 id=&#34;06-どう選ぶべきか&#34;&gt;06 どう選ぶべきか
&lt;/h2&gt;&lt;p&gt;手早い目安としては、次のように考えられます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;いちばん痛いのがコンテキスト肥大化や長セッションの失焦なら &lt;code&gt;Ralph&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;いちばん痛いのが 1 つの Agent に役割を詰め込みすぎていることならマルチエージェント&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;もう少し具体的に言うと、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ralph&lt;/code&gt; は、流れが明快で、粒度が細かく、ラウンド単位で進めやすい仕事に向く&lt;/li&gt;
&lt;li&gt;マルチエージェントは、役割分担が明確で、並行処理や相互検証が必要な仕事に向く&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;実際には、この 2 つは対立するものではありません。むしろ成熟したやり方は組み合わせです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;外側は &lt;code&gt;Ralph&lt;/code&gt; のような反復ループで大きなタスクを進める&lt;/li&gt;
&lt;li&gt;内側は各ラウンドでマルチエージェントを使い、調査、実装、テスト、受け入れを分担する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;こうすれば、長いコンテキストの制御と、1 ラウンド内の協調効率を両方取りにいけます。&lt;/p&gt;
&lt;h2 id=&#34;07-ひとことでまとめると&#34;&gt;07 ひとことでまとめると
&lt;/h2&gt;&lt;p&gt;これらの方法が重要なのは、&lt;code&gt;Ralph&lt;/code&gt; やマルチエージェントそのものを単独で推しているからではありません。むしろ、ひとつの現実的な事実をはっきりさせているからです。&lt;strong&gt;AI を長時間安定して働かせる鍵は、モデル単体の強さよりも、コンテキスト、タスク、役割、受け入れ確認をどう設計したかにある。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;すでに &lt;code&gt;Claude Code&lt;/code&gt;、&lt;code&gt;Codex&lt;/code&gt;、そのほかの coding agent に長めの実タスクを任せ始めているなら、こうしたワークフロー発想は「もっと強いモデルに替える」より優先して学ぶ価値があります。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Anthropic の Harness アイデア: エージェント インフラストラクチャはエージェント OS に移行しています</title>
        <link>https://knightli.com/ja/2026/04/10/anthropic-harness-agent-os/</link>
        <pubDate>Fri, 10 Apr 2026 09:22:56 +0800</pubDate>
        
        <guid>https://knightli.com/ja/2026/04/10/anthropic-harness-agent-os/</guid>
        <description>&lt;p&gt;Anthropic は最近、Harness のエンジニアリング実践に関する記事を公開しました。表面的には製品の実装について話しているように見えますが、本質的には長期的な質問に答えています。&lt;/p&gt;
&lt;p&gt;**モデルの機能が変化し続ける場合、エージェント システムのどのレイヤーが安定している必要があり、どのレイヤーが迅速な置き換えを可能にする必要がありますか? **&lt;/p&gt;
&lt;h2 id=&#34;核心判断&#34;&gt;核心判断
&lt;/h2&gt;&lt;p&gt;この記事に関する私の基本的な理解は、エージェント インフラストラクチャがますます軽量の &lt;strong&gt;エージェント OS&lt;/strong&gt; に近づいていくだろうということです。&lt;/p&gt;
&lt;p&gt;焦点は「今日の最良のプロセスをハードコーディングする」ことではなく、「長期的に安定したシステム抽象化を定義する」ことにあります。&lt;/p&gt;
&lt;h2 id=&#34;これがなぜ重要なのでしょうか&#34;&gt;これがなぜ重要なのでしょうか?
&lt;/h2&gt;&lt;p&gt;多くのエージェント フレームワークに共通する問題は次のとおりです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;モデルの一時的な欠点を永続的な構造に統合します。&lt;/li&gt;
&lt;li&gt;プロンプトプロジェクトをシステム境界と間違えた&lt;/li&gt;
&lt;li&gt;長期的な依存関係として一度有効なパッチを作成する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;モデルはより強力になり、今日合理的なパッチが明日には技術的負債になる可能性があります。&lt;/p&gt;
&lt;h2 id=&#34;人間的ソリューション-コンクリートハーネスからメタハーネスへ&#34;&gt;人間的ソリューション: コンクリートハーネスからメタハーネスへ
&lt;/h2&gt;&lt;p&gt;このアイデアは、固定された配置方法を約束するものではありませんが、安定したインターフェイスの 3 つの層を抽象化します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;session&lt;/code&gt;: 回復可能なイベントとステータスの履歴&lt;/li&gt;
&lt;li&gt;&lt;code&gt;harness&lt;/code&gt;: 推論とスケジューリングのループ (脳)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sandbox&lt;/code&gt;: 実行環境とツールの機能 (ハンド)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;分離すると、システムの交換、復旧、拡張が容易になります。&lt;/p&gt;
&lt;h2 id=&#34;1-セッションはコンテキスト-ウィンドウではありません&#34;&gt;1) セッションはコンテキスト ウィンドウではありません
&lt;/h2&gt;&lt;p&gt;重要な点は次のとおりです。 **セッションはモデル コンテキストと等しくありません。 **&lt;/p&gt;
&lt;p&gt;セッションは、モデルに直接接続された履歴のスプライシングではなく、クエリ可能、再生可能、および回復可能なイベント ログである必要があります。&lt;/p&gt;
&lt;p&gt;これを行うことの価値:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;トリミングは歴史の消滅を意味するものではありません&lt;/li&gt;
&lt;li&gt;圧縮は事実の損失と同等ではない&lt;/li&gt;
&lt;li&gt;クラッシュリカバリは、サマリーメモリに依存するのではなく、イベントレイヤーに戻ることができます&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2-ハーネスは交換可能なオーケストレーション-レイヤーです&#34;&gt;2) ハーネスは交換可能なオーケストレーション レイヤーです
&lt;/h2&gt;&lt;p&gt;ハーネスは、ビジネス ステータスを保持することよりも、スケジュールを管理することに重点を置く必要があります。&lt;/p&gt;
&lt;p&gt;理想的なインターフェイスは次のようなものです。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;execute(name, input) -&amp;gt; string&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;これは、モデルが「どの機能を呼び出すことができるか」のみを考慮しており、特定のデバイス、コンテナー、オペレーティング システムに強く束縛されていないことを意味します。&lt;/p&gt;
&lt;h2 id=&#34;3-サンドボックスは頭脳ではなく手です&#34;&gt;3) サンドボックスは「頭脳」ではなく「手」です。
&lt;/h2&gt;&lt;p&gt;脳と手が切り離されると:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ツール環境は独立して進化できる&lt;/li&gt;
&lt;li&gt;異なるインフラストラクチャに並行してアクセス可能&lt;/li&gt;
&lt;li&gt;セッションごとに実行環境全体をウォームアップする必要はありません&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは、起動および拡張のパフォーマンスの向上に直接つながります。&lt;/p&gt;
&lt;h2 id=&#34;パフォーマンスとセキュリティのインスピレーション&#34;&gt;パフォーマンスとセキュリティのインスピレーション
&lt;/h2&gt;&lt;p&gt;多くの場合、この分割によりパフォーマンスとセキュリティの両方が向上します。&lt;/p&gt;
&lt;p&gt;パフォーマンス：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最初に脳を起動し、必要に応じて手を引き上げることができます&lt;/li&gt;
&lt;li&gt;最初のトークンの遅延を減らす (TTFT)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;安全性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;機密性の高い認証情報をモデルに直接公開しないでください&lt;/li&gt;
&lt;li&gt;間接的な資格情報アクセスには制御されたプロキシ/ボールトを使用する&lt;/li&gt;
&lt;li&gt;安全境界はシステムの制約に基づいており、「モデルが実行できないこと」ではありません。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;関連リンク&#34;&gt;関連リンク
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://claude.com/blog/claude-managed-agents&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Usage patterns and customer examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.anthropic.com/engineering/managed-agents&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;The design of Claude Managed Agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://platform.claude.com/docs/en/managed-agents/quickstart&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Onboarding, quickstart, overview of the CLI and SKDs &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
