Agent! はこうして始まった:3月の3日間
3年分の部品、足りなかったループがひとつ、そして2日足らずで177コミット。git から読み解いた Agent! 本当の誕生物語。
どんなアプリにも最初の日があります。Agent! の最初の日は水曜日でした。2026年3月11日、午後3時7分 です。分まで分かるのは、git が書き残してくれたからです。
でも、ブロックはそのずっと前から、あちこちに転がっていました。
3年分の部品
Agent! の前にも、いくつものアプリがありました。ANIE、Game Changer、BattleScript、XCF MCP サーバーとクライアント、そしてファイルのたくさんの行を一度に書き換えるツール D1F。さらに Swift パッケージが8つほど。すべて同じ一人の人が書いたものです。
どれも仕事のひとかけらはこなせました。AI と話せるもの、コードを編集できるもの、Xcode をいじれるもの。でも、いちばん大事なこと、つまり 自分で続けていくこと は、どれにもできませんでした。
ぜんまいのおもちゃを思い浮かべてください。ぜんまいを巻くと、三歩歩いて止まります。かわいい。でも役には立たない。足りなかったのはループでした。問題を見て、道具を選んで、使って、何が起きたか確かめて、仕事が終わるまでまた繰り返す。(このループにはロボットとサンドイッチが出てくる専用の記事があります。)
ループが動いた瞬間、古い部品のいいところが、その上にカチッとはまるようになりました。これが誕生の物語を一文で言ったものです。残りは細かい話で、細かい話こそ面白いのです。
1日目:頭脳ひとつ、ヘルパーひとつ、そしてキャンセルボタン
最初の本格的なコミットの名前は 「Autonomous Agent with privileged launch daemon.」 です。ファイル20個、Swift で 1,765 行。箱の中身はこうでした。
- やりたいことを打ち込む SwiftUI のウィンドウ。
- 考える役の AI 頭脳、Claude。
- Launch Daemon:家じゅうの鍵を持ってバックグラウンドで働く小さなヘルパー。これでエージェントが大人向けのシステム作業をこなせます。
- タスク履歴、スクリーンショット、ペースト。
1時間後、最初のクラッシュ修正が入りました(スクリーンショットを貼り付けると落ちていたのです)。その数分後には、Esc キーに割り当てられた大きな赤い キャンセル ボタン。自分で動くものを作ると、停止ボタンは早めにやってきます。
午後5時27分には、2人目のヘルパー Launch Agent が登場しました。万能の root ではなく あなた としてコマンドを実行するヘルパーです。フォルダの中身を見るためだけにマスターキーを求めるのは、ろうそく1本に火をつけるために消防車を呼ぶようなものです。その6分後、Agent! は2つ目の頭脳を手に入れました。Ollama です。これで、あなたの Mac の中に住む AI モデルでも動けるようになりました。
その日が終わる前に、Swift スクリプトを書いて実行すること、Xcode を操作すること、ビジョンモデルで画像を見ること、スプラッシュ画面を出すこともできるようになりました。信号機みたいな小さなステータスドットもつきましたが、緑・黄・赤に落ち着くまでにコミットが十数個かかりました。エージェントループより難しいこともあるのです。
2日目:「いいですか?」
3月12日は、Agent! が「Mac は礼儀正しく、しかもそこにとても厳しい」と学んだ日です。
ミュージックや Pages のような別のアプリを操作するとき、macOS はまずこう聞きます。「Agent! が"ミュージック"を制御しようとしています。許可しますか?」 この小さなウィンドウを実際に出すまでに、夜がまるごとかかりました。だいたい午後8時20分から9時40分までの履歴は、数分おきの試行の山です。この方法で試す、メインスレッドで試す、システム設定を開く、osascript を試す、every window を頼んでみる、name だけで試す。しかも Keynote、Numbers、Pages はバンドル ID が変わっていて、間違った名前でドアをノックしていました。
最後にはうまくいきました。同じ夜、画像や Web ページを自分のログの中にそのまま表示する方法も覚えました。だからアルバムアートを作ると、そのアルバムアートが目の前に見えます。
3日目:名前とバージョン番号
3月13日の朝、アプリに名前がつきました。午前9時6分のコミットは 「rename app to Agent!」 です。びっくりマークも、わざとです。
20分後、今でも大事な変更が入りました。スクリプトが別々のプログラムではなくなり、アプリの中に直接読み込まれる 動的ライブラリ になったのです。だから AgentScripts は、もう一度許可を求めなくても、Agent! と同じ Mac の権限を持てます。
その日のうちに 1.0.0 のタグが打たれました。最初のコミットから数えて、2日足らずで177コミット です。1.0.1 から 1.0.16 までは、その後の8日間で続きました。
小さな話をひとつ。初期のコミットの作者名は人ではありません。「Agent! for MacOS」 です。
大きくなる
最初の全力疾走のあと、物語はスピードを上げます。
- 4月6日。 ほぼ1か月分の履歴が、きれいな最初のコミット1つにまとめられました。完全な履歴はバックアップに残してあります。
- 4月7日。 「コーディングモード」「自動化モード」「標準モード」がまるごと取り外されました。エージェントはひとつ、道具は全部、いつでも。
- 4月。 Mac の上で直接、無料で動く頭脳として Apple Intelligence が仲間入りしました。
- 8月31日。 プロジェクトは GitHub の組織
macOS26から AgentiLoop へ引っ越し、Web サイトは agentiloop.ai になりました。 - 最近。 Agent! は macOS 14.6 と Intel Mac で動くことを覚え、自分のターミナル版の弟妹づくりも手伝いました。Rust の AgentiLoopCLI と Go の AgentiLoopGo です。
始まりは頭脳ひとつでした。今では Apple Intelligence に加えて 23の AI プロバイダー と一緒に働いています。4月の大掃除以来、メインブランチには 1,300 を超えるコミットが積み重なりました。
今の形になった理由
Agent! のちょっと変わったところは、ほとんどが最初の3日間にさかのぼります。
ヘルパーが2つあって、1つはあなた用、1つは root 用なのは、1日目に両方が必要だったからです。100% Swift なのは、材料になった部品が Swift だったからです。65個の NPM パッケージの山ではなく、オリジナルのコードでできています。アクセシビリティと AppleScript で他のアプリを名前で操作するのは、2日目をまるごと使って Mac に礼儀正しくお願いする方法を学んだからです。そして今でも、大きなキャンセルボタンがあります。
大きなものはみんな、小さなブロックの山から始まります。この山は3年かけて積み上がりました。そして3月11日、ついに誰かが、ほかのブロックをまとめてつなぎとめるブロックを見つけました。それがループです。