← 記事一覧

Agent! ブログへようこそ:ひとつのアプリで、あらゆる AI を使い、Mac を完全に操る

AgentiLoop Agent! とは何か、なぜこういう作りにしたのか、そしてここで何を読めるのかを、ソースコードから直接お伝えします。

小さな Mac があなたに地図を手渡す にっこり笑った Mac が机の上に立ち、広げた地図を手にしています。地図には点線の道でつながった 4 つの地点があります:あらゆる AI、ループ、AgentScript、安全性。 あらゆる AI ループ AgentScript 安全性 あなたの地図 Agent! for Mac
どんなブログにも最初の記事が必要です。この記事は、その地図です。

こんにちは、Todd です。ネイティブ macOS AI エージェント AgentiLoop Agent! を作っていて、ここはそのブログです。

README やリリースノートには収まりきらない Agent! の話をする場所が欲しかったんです。あるガードレールがなぜその形になっているのか。エージェントループがなぜ自分の仕事をチェックするのか。リリース候補で何が壊れて、どうやって直したのか。ここで読める内容の多くは、コードベースから直接持ってきたものです。それが私の一番よく知っているものだからです。ときどきは、AI エージェントを取り巻くもっと広い世界にも目を向けて、それがあなたの Mac にとってどんな意味を持つのかも考えていきます。

初めての方は、ここから始めてください。この記事を地図だと思ってもらえればと思います。

Agent! とは

Agent! は 100% ネイティブの Swift と SwiftUI で作られています。やりたいことを入力する(あるいは話しかける)と、やり方を説明するのではなく、あなたの Mac 上で実際に作業をこなしてくれます。

  • 本物のコードを書きます。 プロジェクトを読み込み、文字列置換方式の diff でファイルを編集し、Xcode でビルドし、エラーを読んで直し、git でコミットします。
  • あらゆる Mac アプリを操作します。 アクセシビリティ API に加えて、AppleScript、JXA、51 個の ScriptingBridge アプリブリッジを使います。
  • あなたとして、あるいは root としてシェルコマンドを実行します。 SMAppService で登録し、XPC 経由でアクセスする Launch Agent と Launch Daemon を通して動きます。
  • 23 の LLM プロバイダーに対応しています。 さらにオンデバイスの Apple Intelligence も。Claude、Codex、OpenAI、Gemini、Grok、Mistral、DeepSeek、Qwen、Z.ai、OpenRouter、Ollama、vLLM、LM Studio などが使えます。
  • ちゃんと聞いています。 "Agent!" と呼びかけてからタスクを伝えるか、iPhone から iMessage で送ってください(承認済みの送信者のみ)。

README ではひとことでこうまとめています。Siri は答える。Agent! は動く。

NPM も Electron もなし

ここはよく驚かれるところです。Electron のシェルはありません。Node ランタイムもありません。いつの間にかディスクを食いつぶしていく node_modules フォルダもありません。Agent! が依存している Swift パッケージはすべて私が書いたもので、それぞれ AgentiLoop organization の下にある独立したリポジトリに置いてあります。

パッケージ役割
AgentToolsツールスキーマ、システムプロンプト、プロバイダー管理
AgentLLMLLM プロバイダーのプロトコル、型、レジストリ
AgentMCPMCP クライアント(stdio と HTTP)
AgentAccessアクセシビリティによる自動化
AgentEventBridges50 以上の Mac アプリ向け ScriptingBridge プロトコル
AgentD1F複数行 diff エンジン
AgentSwiftSwiftSyntax によるコード解析
AgentColorSyntax · AgentTerminalNeoシンタックスハイライト · レトロなターミナル風 Markdown
AgentAuditos.log による監査ログ

その結果、メモリはほんの少ししか使わないのに、Xcode の自動化、Swift の構文解析、アクセシビリティ、AppleScript、Safari の自動化、MCP が最初から全部そろったアプリになりました。

中心にあるループ

Agent! のすべては、ひとつの考え方から成り立っています。自己検証型のタスクループ です。モデルが考え、ツールを呼び出し、実際の結果を見て、自分で軌道修正する。これは信頼できてこそ意味があるので、いくつかのルールを最初から組み込んであります。

  • ツール呼び出しはごまかせません。 すべての呼び出しは単一のディスパッチャーを通り、実際の出力を返します。モデルが実際にはツールを呼ばずに 「クリックしました」 と言ったら、Agent! はそれを指摘して訂正を送ります。
  • 「完了」には証拠が必要です。 goal_state の基準が、ビルド成功やテスト合格といった証拠つきでチェックされるまで、タスクは自分で完了を名乗れません。
  • 編集の前に読む。 モデルがまだ読んでいないファイルや、読んだ後にディスク上で変わったファイル(SHA-256 で確認)への編集は、Agent! が拒否します。拒否するときに最新のファイルをモデルに渡すので、次の試行では正しい行が使われます。
  • 何でも元に戻せます。 すべての編集は 1 週間スナップショットとして残ります。1 つのファイルだけロールバックすることも、rewind_task でタスク全体を巻き戻すこともできます。

これらは今後の記事で 1 つずつ分解して解説していきます。

AgentScript:フル権限を持つ Swift

AgentScript は、私のお気に入りの部分のひとつです。スクリプトはただの Swift ファイルです。Agent! は SwiftPM で各スクリプトを .dylib にコンパイルし、dlopen でプロセス内にロードします。だからあなたのスクリプトは、Agent! がすでに持っている macOS の権限をそのまま使えます。アクセシビリティ、オートメーション、カレンダー、連絡先、メール、写真などです。必要なのはエントリーポイント 1 つだけ。

import Foundation
import CalendarBridge   // any `import XBridge` auto-wires, no Package.swift edits

@_cdecl("script_main")
public func scriptMain() -> Int32 {
    print("Hello from AgentScript! 👋")
    return 0
}

スクリプトが出力したものはすべてモデルに返り、戻り値が終了ステータスになります。アプリには TodayEvents、NowPlaying、CheckMail、CreateDmg など、約 35 個のサンプルが付属しています。

読んで確かめられる安全性

Agent! は root としてコマンドを実行できます。これはかなりの信頼をお願いすることなので、安全性をプレゼン資料の 1 枚のスライドで済ませるわけにはいきません。安全性はコードであり、GitHub で実際に読めます。ハードコードされた ShellSafetyService が、壊滅的なコマンドを送信される前に拒否し、特権デーモンの側でも同じチェックをもう一度行います。さらに、Jev というオプションのセカンドオピニオンがあり、コマンドがデータを破壊する可能性がどれくらいあるかを評価します。その仕組みは 最初の詳細解説 でじっくり紹介しています。

広がり続けるファミリー

同じエージェントループが、今ではターミナルでも、macOS、Windows、Linux で動きます。同じ機能を持つ CLI が 2 つあって、Rust 製の AgentiLoopCLI と Go 製の AgentiLoopGo です。README の中で私が一番好きな小ネタは、この小さな弟妹たちを Mac 版 Agent! が自分で書いた、という話です。

ここで読めること

  • 内部構造: エージェントループ、コンテキスト圧縮、ツールのディスパッチ、サブエージェント、メモリ、プラン。
  • セキュリティ: ガードレール、XPC の信頼モデル、そして最近のエージェント関連のインシデントから私たちみんなが学べること。
  • 「なぜ」まで伝えるリリースノート: 各ビルドで何が変わったのか、そしてそれを必要にしたバグ。
  • ハウツー: AgentScript のレシピ、予算に合わせたプロバイダーの選び方、完全ローカルでの動かし方。
  • エージェントを取り巻く広い世界: ニュースやレビューを、いつも「あなたの Mac にとってどういう意味があるか」に引き戻してお届けします。

Agent! は macOS 14.6 以降で、Apple Silicon と Intel の両方で動き、個人利用は無料です。下から入手して、何か本当にやりたいことを任せてみてください。どうだったか、ぜひ教えてくださいね。