Bienvenue sur le blog d'Agent! : une app, n'importe quelle IA, le contrôle total de votre Mac
Ce qu'est AgentiLoop Agent!, pourquoi je l'ai conçu ainsi et ce que vous trouverez ici, directement à partir du code source.
Bonjour, je m'appelle Todd. Je développe AgentiLoop Agent!, un agent d'IA natif pour macOS, et vous êtes sur son blog.
Je voulais un endroit pour expliquer les aspects d'Agent! qui ne tiennent pas dans un README ou dans des notes de version. Pourquoi tel garde-fou a cette forme-là. Pourquoi la boucle de l'agent vérifie son propre travail. Ce qui a cassé dans une release candidate, et comment on l'a réparé. L'essentiel de ce que vous lirez ici vient tout droit du code, parce que c'est ce que je connais le mieux. De temps en temps, je jetterai aussi un œil à l'univers plus large des agents d'IA et à ce qu'il implique pour votre Mac.
Si vous découvrez Agent!, commencez ici. Voyez cet article comme la carte.
Qu'est-ce qu'Agent! ?
Agent! est 100 % natif, en Swift et SwiftUI. Vous tapez (ou dites) ce que vous voulez, et il fait vraiment le travail sur votre Mac au lieu de vous expliquer comment le faire :
- Il écrit du vrai code. Il lit votre projet, modifie les fichiers avec des diffs par remplacement de chaînes, compile dans Xcode, lit les erreurs, les corrige et commit avec git.
- Il pilote n'importe quelle app Mac via l'API d'accessibilité, ainsi qu'AppleScript, JXA et 51 passerelles ScriptingBridge vers des apps.
- Il exécute des commandes shell en votre nom ou en tant que root, via un Launch Agent et un Launch Daemon enregistrés avec SMAppService et joignables par XPC.
- Il fonctionne avec 23 fournisseurs de LLM, plus Apple Intelligence sur l'appareil : Claude, Codex, OpenAI, Gemini, Grok, Mistral, DeepSeek, Qwen, Z.ai, OpenRouter, Ollama, vLLM, LM Studio et bien d'autres.
- Il vous écoute. Dites « Agent! » suivi d'une tâche, ou envoyez-lui un message depuis votre iPhone via iMessage (expéditeurs approuvés uniquement).
Le README le résume en quatre mots : Siri répond. Agent! agit.
Pas de NPM, pas d'Electron
C'est ce qui surprend le plus les gens. Pas d'enveloppe Electron. Pas de runtime Node. Pas de dossier node_modules qui grignote discrètement votre disque. J'ai écrit moi-même chaque package Swift dont dépend Agent!, et chacun vit dans son propre dépôt au sein de l'organisation AgentiLoop :
| Package | Rôle |
|---|---|
| AgentTools | Schémas d'outils, prompts système et gestion des fournisseurs |
| AgentLLM | Protocoles, types et registre des fournisseurs de LLM |
| AgentMCP | Client MCP (stdio et HTTP) |
| AgentAccess | Automatisation de l'accessibilité |
| AgentEventBridges | Protocoles ScriptingBridge pour plus de 50 apps Mac |
| AgentD1F | Moteur de diff multiligne |
| AgentSwift | Analyse de code avec SwiftSyntax |
| AgentColorSyntax · AgentTerminalNeo | Coloration syntaxique · markdown de terminal rétro |
| AgentAudit | Journalisation d'audit via os.log |
Au final, vous avez une app qui consomme très peu de RAM et qui embarque pourtant d'emblée l'automatisation de Xcode, l'analyse syntaxique Swift, l'accessibilité, AppleScript, l'automatisation de Safari et MCP.
La boucle au cœur de tout
Dans Agent!, tout découle d'une seule idée : une boucle de tâches auto-vérifiée. Le modèle réfléchit, appelle un outil, regarde le résultat réel et se corrige. Ça ne marche que si on peut lui faire confiance, alors quelques règles sont gravées dans le marbre :
- Impossible de faire semblant d'utiliser un outil. Chaque appel passe par un répartiteur unique et renvoie une sortie réelle. Si le modèle affirme « j'ai cliqué » sans avoir réellement appelé d'outil, Agent! le relève et lui envoie une correction.
- « Terminé » exige des preuves. Une tâche ne peut se déclarer achevée tant que ses critères
goal_statene sont pas cochés, preuves à l'appui, comme un build au vert ou un test qui passe. - On lit avant de modifier. Agent! refuse de modifier un fichier que le modèle n'a pas lu, ou qui a changé sur le disque depuis sa lecture (vérifié par SHA-256). Le refus fournit au modèle le fichier à jour, pour que la tentative suivante porte sur les bonnes lignes.
- Tout peut être annulé. Chaque modification est conservée en instantané pendant une semaine. Restaurez un seul fichier, ou rembobinez une tâche entière avec
rewind_task.
Je décortiquerai chacune de ces règles dans de prochains articles.
AgentScript : du Swift avec toutes les autorisations
AgentScript fait partie de mes briques préférées. Les scripts sont de simples fichiers Swift. Agent! compile chacun d'eux en .dylib avec SwiftPM et le charge dans son propre processus avec dlopen : votre script obtient donc les mêmes autorisations macOS qu'Agent! possède déjà (Accessibilité, Automatisation, Calendrier, Contacts, Mail, Photos et tout le reste). Il vous suffit d'un seul point d'entrée :
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
}
Tout ce que le script affiche est renvoyé au modèle, et la valeur de retour sert de code de sortie. L'app est livrée avec environ 35 exemples, dont TodayEvents, NowPlaying, CheckMail et CreateDmg.
Une sécurité que vous pouvez lire
Agent! peut exécuter des commandes en tant que root. C'est demander beaucoup de confiance, donc la sécurité ne peut pas se résumer à une diapositive dans une présentation. C'est du code, et vous pouvez le lire sur GitHub. Un ShellSafetyService codé en dur refuse les commandes catastrophiques avant même qu'elles soient envoyées, et le daemon privilégié refait la même vérification de son côté. Il existe aussi un second avis optionnel, baptisé Jev, qui évalue la probabilité qu'une commande détruise des données. La première analyse approfondie explique précisément comment tout cela fonctionne.
La famille s'agrandit
La même boucle d'agent tourne désormais aussi dans le terminal, sous macOS, Windows et Linux. Il existe deux CLI aux capacités identiques : AgentiLoopCLI en Rust et AgentiLoopGo en Go. Mon anecdote préférée du README : c'est Agent! pour Mac qui a écrit ses propres petits frères.
Ce que vous trouverez ici
- Fonctionnement interne : la boucle de l'agent, la compaction du contexte, la répartition des outils, les sous-agents, la mémoire et les plans.
- Sécurité : les garde-fous, le modèle de confiance XPC et ce que les récents incidents impliquant des agents nous apprennent à tous.
- Des notes de version qui expliquent le pourquoi : ce qui a changé dans chaque build, et le bug qui l'a rendu nécessaire.
- Tutoriels : recettes AgentScript, choisir un fournisseur avec un petit budget, tout faire tourner en local.
- L'univers des agents au sens large : actualités et tests, toujours ramenés à ce qu'ils signifient pour votre Mac.
Agent! fonctionne sous macOS 14.6 ou version ultérieure, sur Apple Silicon comme sur Intel, et il est gratuit pour un usage personnel. Téléchargez-le ci-dessous, confiez-lui une vraie tâche, et racontez-moi comment ça s'est passé.