大規模なエージェント開発の検証(8 分読了)
Cognition のエンジニアが、AI エージェント「Devin」の自律的な検証能力を大規模に実装する際の学習と、非同期処理環境での信頼性確保に向けた取り組みについて解説している。
キーポイント
Devin の自律的検証メカニズム
Devin がクラウド上の仮想マシン内で自身の作業を自動的に検証し、複雑な機能テスト(Windsurf など)を行う仕組みが確立されている。
非同期処理への移行とマイルストーン
イベント、自動化スクリプト、スケジュール、および他の Devin エージェントによってトリガーされる非同期処理の導入により、大規模な並行実行が可能になった。
開発者体験とマージ品質の確保
非同期環境への移行に伴い、開発者が戻ってきた際に即座にマージ可能な検証済み結果を提供することが最重要課題となっている。
影響分析・編集コメントを表示
影響分析
この記事は、AI エージェントが単発的なタスク実行から、複雑で自律的な検証プロセスを内包した「開発者」としての成熟段階へと移行していることを示唆しています。特に非同期処理環境での信頼性確保という課題への取り組みは、将来的に AI による大規模ソフトウェア開発プロジェクトの実現に向けた重要な指針となります。
編集コメント
Devin が単なるコード生成ツールを超え、自ら検証を行う自律型開発者として進化している過程が明確に描かれています。特に「非同期処理における結果の信頼性」という実務的な課題への言及は、現場の開発者が直面する現実的な壁を示しており非常に示唆に富んでいます。
Article
Conversation
Verifying Agentic Development at Scale
Devin の仮想マシンにおけるエンドツーエンドのテスト機能構築から得た教訓。
3 ヶ月前、私はソフトウェアエンジニアリングの未来を築くために Cognition に入社しました。AI ソフトウェアエンジニアとして初めて登場して以来、Devin は大きく進化しましたが、その背後にあるチームが実際に毎日 Devin を使用している姿を目の当たりにし、驚嘆しています。
特筆すべきは、Devin がクラウド上でコンピュータを使用して作業を自律的に検証する方法です。テストモードで動作する Devins の軍団が常に存在し、複雑な Windsurf 機能のテストから始まり、チームは常にその能力を活用しています。本稿では、なぜ私たちはエンドツーエンドのクラウドエージェント検証にこれほど注力しているのか、またそれをどのように構築しようとしているのかについて共有します。
Cognition では最近、新たなマイルストーンを達成しました。初めて、より多くの Devin が非同期でトリガーされるようになりました。イベント、自動化、スケジュール、そして他の Devins によってです。最近のリリースに伴い、この加速はさらに進むと予想しています。
この非同期の世界への移行において、開発者がマージ可能な検証済みの結果にいつでもアクセスできることが極めて重要です。今年初めに、複雑なコード差分に対する人間の理解を拡張するコードレビューツールが導入されました。単にバグを指摘するだけでなく、各発見事項を修正して差分がクリーンになるまで繰り返すことで、問題を解決します。しかし、クリーンなレビューだけでは不十分な場合が多く、エンジニアは自分たちが行うのと同じように、変更内容をエンドツーエンドでテストした結果を確認したいと考えています。
Devin が、バグチャンネルのメッセージを確認する前にユーザーからの苦情を修正する PR を提出してくれたときは、とても素晴らしい気分になります。その魔法のような体験がさらに高まるのは、その修正が実際に機能しているという証明付きで PR が提出されたときです。そしてこの魔法は、まもなく必須となるかもしれません。能動的なエージェントによる PR が増加するにつれて、検証されていない変更はすぐに管理不能なものになってしまうからです。
メディアを再生できませんでした。
Devin のセッションにおいて、対話型ではなく非同期トリガーで開始されるものが初めて、対話型のものよりも多くなりました。
Devin が登場して以来、クラウド上の仮想マシン上でその作業を実演できる能力を持ってきました。約 6 ヶ月前に、
機能を開発しました。これは実務的には、Devin のハネス(枠組み)にスクリーンショットの取得、マウスの移動、クリック、ドラッグ、タイピング、キー押下、スクロール、待機、ズーム、録画の開始/停止などのツールを追加したことを意味します。コンピュータ操作はすでに存在する技術ですが、私たちは最先端研究所から登場した最新のモデル群が、これらのツールの活用において本当に上達し始めたと感じています。
コンピューター操作機能により、Devin にはデスクトップゲームの構築やプレイ、ブラウザを使用して Amazon で商品を購入するといった、いくつかの楽しい新機能が解放されました。しかし、私たちが実際に発見した真の突破点は、Devin が自身の作業を検証できる能力です。Devin はアプリを起動し、その中をクリックして確認し、変更が実際に機能していることを検証します。これはエンジニアが行うのと同じ方法です。すべての処理はクラウド上で実行され、並列にスケールアウト可能です。エンジニアたちが 10 から 20 の Devin を並列で実行し、それぞれが独自の開発サーバーを持ちながら変更作業を進めている姿を見たとき、この事実を強く実感しました。これは単一のラップトップでは絶対にできないことです。自動化されたクラウドテストにより、コードをローカルで実行して検証する必要がなくなったため、膨大な時間を節約できるようになりました。
正直に言って、ここに至るまでにはスムーズな道ではありませんでした。その過程で多くの失敗モードに直面し、それぞれがこのシステムをより信頼性の高いものにするために何が必要かを教えてくれました。
初期バージョンでは、テスト中に Devin が本来の軌道から外れることが非常に一般的でした。その原因は様々です:製品の無関係な部分を過剰にテストしたり、機能に到達する前にセットアップで迷ったり、あるいは PR が実際に意図して変更すべき中核的な挙動を見落としたりすることなどが起こりました。
これに対処するため、Devin がテストモードに入ると、まず何をテストするかという明確な目標を詳細に記したテストプランを作成するようにしています。このプランは仮説ではなく、ソースコードに基づいたものである必要があります。コードに基づく根拠がない場合、モデルは存在しないアプリ内のパスを進んでしまう傾向があることがわかりました。さらに、テストプランにより Devin が成功裏にテストできる変更の複雑さが大幅に向上します。私たちの最も野心的なリクエストの中には、動作が到達可能になる前に複数のサービスが実行され、特定の管理設定が構成され、適切なフラグが有効化される必要がある機能も含まれていました。事前にコードを読み込むことで、Devin はテストの途中で何か見落としていることに気づくのではなく、環境を正しくセットアップする可能性が高まります。テストプランは事前のアライメントの一形態として機能し、実際のテスト中に Devin が逸脱する可能性を低減します。
Devin がプランを進める過程で、タイムラインに独自の注釈を追加します。これにはセットアップのメモ、各名前付きテストの開始、および「合格」「不合格」「未テスト」としてマークされたアサーションなどが含まれます。Devin は行動を実行する直前に期待される動作を注釈として記述することで、発見内容について嘘をつく頻度が低減することがわかりました。これはテスト駆動開発と同様の原理で、事前に期待値にコミットすることで、予期しない結果を合格と合理化するのがはるかに難しくなります。
テストフローのいくつかの部分は、ほぼすべての実行で繰り返されます。ログインはその典型例です:コンピュータ操作を通じてログインフォームを処理するには、電子メールの入力、SSO の完了、リダイレクトのクリック、そしてページ読み込みごとのスクリーンショットごとの待機が必要になります。これは時間とトークンの両面でコストがかかる可能性があります。これらのアクションに対する信頼性とコストを改善するために、Devin はこの作業を、当社のリポジトリ内のテストスキルとして存在する決定論的スクリプトに抽出しました。これにより、Devin はスクリプトを実行して数秒で認証済みブラウザセッションを取得し、テストの核心部分に直接進むことができます。これらのスクリプトの決定論的な性質は、フラッキネス(不安定さ)を劇的に減少させるのに役立ちました。私たちはまた、Devin 自身がこのループを閉じるように更新しました。Devin が設定ステップを苦労して見つけた場合、その知識をリポジトリ内のテストスキルとして保存することを提案し、ワンクリックの PR として修正をユーザーに提案します。
メディアは再生できませんでした。
ログインスキルにより、Devin は数秒で認証済みセッションを取得するため、実行時間は変更を検証するクリック/スクリーンショット/アサートループに集中されます。
また、テストフェーズを異なるモデルにルーティングすることを実験しています。テストはコード作成とは異なる強みを必要とするため、例えばスクリーンショットの読み取り、UI 状態の追跡、次のブラウザアクションの決定などです。そのため、コード編集用に通常選択されるモデルよりも、特定のモデルの方がこのタスクに適している場合があります。
Devin は現在、2 つの方法でテストモードに入ります。変更をテストするよう明示的に依頼する場合か、または Devin が PR を作成した後に、該当する場合はその変更をテストする提案を行う場合です。そこから、テストプランを作成し、作業を開始します。
Devin のテスト機能を使い始めたばかりの頃は、しばしばあなたの支援が必要です。例えば、ローカルでアプリを実行する際にシークレットが必要となるケースが典型的な例です。このプロセスをよりスムーズにするため、Devin は不足している情報を取得したり、他の必要な情報を入力したりすることが可能です。より困難なケースでは、あなたが Devin のコンピュータを引き継ぎ、OTP コードなどの入力を行うことができます。好消息は、Devin がリポジトリのセットアップを終えた後、その設定を YAML ブループリントという形式で保存し、今後のすべてのセッションがそこから起動できるスナップショットを生成できるようになることです。
Devin がテストを終了した際、単にアプリが動作したかどうかを伝えるだけではありません。生のスクリーンレコーディングは有用ですが、それだけでは不十分だと私たちは考えました。あなたは自分が何を見ているのかを理解し、なぜ Devin が各アクションを実行したのか、そしてテストのどの部分が成功または失敗したのかを知る必要があります。
迅速なレビューのために、Devin は実行中の重要な瞬間からラベル付きスクリーンショットを含むテストレポートを返します。これにより、Devin が何をテストしたか、その過程でアプリがどのように見えたかを素早く確認できます。
より詳細なレビューをご希望の場合は、Devin は章付きの豊富なプレイヤー UI を備えたテスト動画も生成します。これにより、テストセクション間をジャンプしたり、実行全体をスクラブして再生したり、時系列リストビューで通過または失敗したアサーションを検査したりできます。後処理では、アクション間の無効な時間が圧縮され、アクション周辺の瞬間は通常速度で再生されます。これにより、長時間の実行が実際に視聴可能な録画に凝縮されます。これらのアーティファクトは当社の Web インターフェースで利用可能であり、Devin が Slack から起動された場合は Slack にも配布されます。
メディアを再生できませんでした。
Devin はアプリを実行し、フローを試し、章と合格/不合格アサーションを含む録画を返します。
コンピュータ操作には依然として明確な限界があります。一例としてタイミングが挙げられます。もし Devin がトースト通知のテストを行っている場合、早すぎたり遅すぎたりして撮影されたスクリーンショットではトースト自体を見逃す可能性があり、モデルは期待される動作が実際に発生したかどうかについて混乱する可能性があります。
もう一つの失敗モードは不正行為です。自己判断に任せた場合、モデルは時として UI を通じてクリックする代わりに、ブラウザ内で JavaScript を実行して状態をプログラム的にトリガーすることに過度に依存することがあります。これは機能テストには役立ちますが、ユーザーは多くの場合、Devin が実際のユーザーと同じようにアプリを操作している様子を確認したいと考えています。
私たちは、評価の改善、ハネス内のより厳格なガードレール、およびコンピュータ操作能力が向上する新しい世代のモデルを通じて、これらの課題に取り組んでいます。
過去数ヶ月間、Devin で承認されたテスト実行の1日あたりの回数は2倍以上に増加しました。この成長は単純な事実を反映しています:非同期エージェントが有用なのは、開発者がその結果を信頼できる場合に限られます。多くの場合、コードだけでは信頼を得ることはできません。多くの変更において、アプリが実際に実行され、重要なフローが検証され、結果が容易に検査可能な形で記録されたことを知りたいものです。
それがDevinの自律型テストが提供しようとしているものです。Devinはテストを計画し、アプリを操作し、発生した内容を記録・注釈付けし、最終的にレビュー可能な成果物を返します。まだ改善すべき点は多くありますが、私たちはこれが未来の正しい形だと考えています:単に非同期で作業を完了するだけでなく、証拠を持って戻ってくるエージェントです。
Devinが自身の作業を検証することで節約される時間の多さに常に驚かされており、多くの顧客がDevinの自動テスト機能を十分に活用していないと感じています。実験をサポートするため、現在テストモード中は通常の使用料金の1/5で課金しています。
私たちの取り組みは以下のリンクでお試しください:
または
もしこのような問題に取り組むことが楽しいと思われる場合は、ido [at]
までご連絡ください。
原文を表示
Article
Conversation
Verifying Agentic Development at Scale
What we’ve learned building end-to-end testing capabilities in Devin’s virtual machine.
3 months ago, I joined Cognition to help build the future of software engineering. Devin has come a long way since launching as the first AI software engineer, and I’ve been blown away watching the team behind it actually use Devin every day.
One thing that stood out was how Devin uses its computer to verify work autonomously in the cloud. From
to testing complex Windsurf features, the team always has an army of Devins in test mode. In this post, I’ll share why we are so focused on end-to-end cloud agent verification and how we’re approaching building it.
At Cognition, we recently reached a new milestone. For the first time, more Devins are being triggered asynchronously, via events, automations, schedules, and other Devins. We expect this to continue to accelerate with our recent launch of
.
As we transition to this async world, it is crucial developers are able to come back to verified results that are ready to be merged. Earlier this year
, a code review tool that scales human understanding of complex code diffs. It doesn’t just flag bugs -
by fixing each finding until the diff comes back clean. But a clean review alone often isn’t enough - engineers want to see the change tested end to end, the same way they would test it themselves.
It’s a great feeling when Devin puts up a PR fixing a user complaint before you had the chance to even see the message in the bug channel. What makes it magical is when that PR comes with proof that the fix actually works. And this magic may soon become a necessity - as more PRs come from the rise of proactive agents, unverified changes will quickly become unmanageable.
The media could not be played.
For the first time, more Devin sessions are triggered asynchronously than interactively.
Since Devin launched, it has always been able to demonstrate its work on a cloud virtual machine. Around 6 months ago,
capabilities. What this means in practice is that we added tools to Devin’s harness to take screenshots, move the mouse, click, drag, type, press keys, scroll, wait, zoom, and start/stop recording. Computer use has been around for a while now, but we felt the latest cohort of models from the frontier labs has started to really get good at utilizing these tools.
The computer use unlocked some fun new capabilities for Devin, like building and playing a desktop game, or using its browser to order products on Amazon. But the real unlock we noticed was Devin’s ability to test its own work. Devin will spin up the app, click through it, and confirm its changes actually work, the same way an engineer would. Everything runs in the cloud and can scale out in parallel. This really hit me when I saw engineers running 10 to 20 Devins in parallel, each with its own dev server, working through changes – this is something you simply can’t do on a single laptop. Automated cloud testing started saving us an enormous amount of time, since we no longer have to run and verify the code locally.
To be honest, getting here wasn’t smooth. We hit plenty of failure modes along the way that each taught us something about what it takes to make this system more reliable.
In early versions, it was very common for Devin to go off track during testing. It happened in all sorts of ways: over-testing unrelated parts of the product, getting lost in setup before reaching the feature, or simply missing the core behavior the PR was actually meant to change.
To address this, when Devin enters test mode we have it first write out a test plan detailing a clear target about what to test. This plan must be grounded in source, not assumptions. Without grounding in code, we found the models like to assume they can go down paths in the app that don’t exist. Furthermore, the test plan greatly increases the complexity of changes Devin can successfully test. Some of our most ambitious requests included features that required multiple services running, specific admin settings configured, and the right flags enabled before the behavior was even reachable. When reading the code upfront, Devin is much more likely to set up the environment correctly instead of discovering something missing halfway through the test. The test plan acts as a form of pre-alignment and makes Devin less likely to drift when actively testing.
As Devin works through the plan, it adds its own annotations into the timeline. These include things like setup notes, the start of each named test, and assertions marked as passed, failed, or untested. We found that Devin will lie less about its findings if it annotates its expected behavior right before performing an action - much like test-driven development, if you commit to the expectation upfront it makes it much harder to rationalize an unexpected result as a pass.
Some parts of the testing flow repeat in almost every run. Logging in is the classic example: driving a login form through computer use often means typing an email, completing SSO, clicking through redirects, and waiting on every page load, screenshot by screenshot. This can be costly both in time and tokens. To improve the reliability and cost for these actions, Devin extracted the work to a deterministic script that lives in a testing skill in our repo. This way, Devin can run the script and get an authenticated browser session in seconds and jump into the core part of the test. The deterministic nature of these scripts helped decrease flakiness dramatically. We updated Devin to also close this loop itself. When it figures out a setup step the hard way, Devin can suggest saving that knowledge as a testing skill in the repo and propose the fix back to the user as a one-click PR.
The media could not be played.
A login skill gets Devin an authenticated session in seconds, so the run spends its time in the click / screenshot / assert loop that proves the change.
We’re also experimenting with routing the testing phase to different models. Since testing leans on different strengths than writing code, like reading screenshots, tracking UI state, and deciding the next browser action, some models are simply better at this than the typical one you’d pick for editing code.
Devin currently enters test mode in two ways: an explicit ask to test a change, or, after Devin creates a PR it will offer to test the change if applicable. From there, it will create the test plan and start getting to work.
Oftentimes when you are first starting to use Devin’s testing capabilities it will need your assistance. A good example is if it requires secrets when running your app locally. To make this process smoother, Devin is able to
or other information that may be missing. For more difficult cases, you can take over Devin’s computer and enter things like OTP codes. The good news is once Devin is done setting up your repo, it is able to save a
in the form of a YAML blueprint that produces a snapshot for every future session to boot from.
When Devin finishes testing, it doesn’t just tell you whether the app worked. A raw screen recording is useful but we felt it wasn’t enough on its own - you need to understand what you’re looking at, why Devin took each action, and which parts of the test passed or failed.
For a quick review, Devin will return a test report with labeled screenshots from key moments in the run so you can quickly see what Devin tested and what the app looked like along the way.
If you want a deeper review, Devin also produces a test video with a rich player UI that has chapters to let you jump between testing sections, scrub through the full run, and inspect the assertions that passed or failed in a chronological list view. In post processing, the dead time between actions is compressed while the moments around actions play back at normal speed. This makes it so a long run condenses into a recording you can actually watch. These artifacts are available in our web interface and also distributed to Slack if Devin was started from there.
The media could not be played.
Devin runs the app, exercises the flow, and returns a recording with chapters and pass/fail assertions.
Computer use still has hard edges. One example is timing - if Devin is testing a toast notification, a screenshot taken too early or too late can miss the toast entirely and the models can get confused about whether the expected behavior actually happened.
Another failure mode is cheating. Left to their own devices, the models may sometimes lean too heavily on executing JavaScript in the browser to trigger states programmatically instead of clicking through the UI. This can be helpful to test functionality, but users will often want to see Devin exercise the app the way a real user would.
We’re actively working on these issues through improved evals, tighter guardrails in the harness, and each new generation of models that gets better at computer use.
In the past couple of months, test runs approved per day on Devin have more than doubled. That growth reflects something simple: async agents are only useful if developers can trust what they come back with. Often that trust can’t come from code alone: for many changes, you want to know that the app was actually run, the important flows were exercised, and the result was captured in a way you can easily inspect.
That’s what autonomous testing in Devin is designed to provide. Devin plans the test, operates the app, records and annotates what happened, and finally returns artifacts that make the result reviewable. There’s still a lot to improve, but we think this is the right shape of the future: agents that don’t just complete work asynchronously, but come back with proof.
We’re constantly surprised by how much time Devin saves us by testing its own work, and feel that many customers still underutilize Devin’s automated testing feature. To support experimentation, we are currently billing at 1/5th the normal usage cost while in test mode.
Try our work at
or
. And if working on problems like these sounds fun, reach out to ido [at]
関連記事
GitHubの利用状況に関する最新情報
GitHubは、最近の2件のインシデントを受け、サービスの信頼性向上と障害時のフェイルオーバー能力を大幅に改善するため、2025年10月から容量を10倍にする計画を実行中であると発表した。
自律型コードレビュー(15 分読了)
Faros AI の 2026 年データによると、コーディングエージェントの普及により開発者の信頼判断が重要となり、コード変更量が 861% 増加し、不具合率も 9% から 54% に上昇した。
Claude Code ガイド 2026:例付き 25 の機能とデモ
MarkTechPost は、メモリやサブエージェントなど多層構造を持つ Claude Code の 25 の機能と戦略を、AI エンジニア向けに解説している。
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み