๐Ÿฆพ AgentiLoop Agent!

September 21, 2026 ยท View on GitHub

Full disclosure: I don't use Cursor or Claude Code anymore. Agent! by AgentiLoop hasn't just replaced those coding tools โ€” I use it to automate email, deploy software, search the web in Safari with over 12 search engines, and build websites that update themselves. Agent! has become the most powerful agentic AI tool for macOS 26 and 27.

Agentic AI for your Mac Desktop

Latest Release GitHub Stars GitHub Forks macOS 26.4+ Swift 6.2 Tip Jar

Agent! automating Photo Booth through the macOS Accessibility API โ€” takes a photo end-to-end from a single natural-language request

Agent! driving Photo Booth via Accessibility โ€” no clicks, no scripts, just "take a photo".

README Translations

Chess within Agent

Screenshot 2026-08-23 at 7 34 10 PM

What is Agent!?

One app. Any AI. Total command over your Mac.

Agent! is a 100% native Swift 6.2 / SwiftUI app that wires 21 LLM providers โ€” Claude, Codex, OpenAI, Gemini, Grok, Mistral, Mistral Vibe, DeepSeek, Hugging Face, Z.ai, BigModel, Alibaba DashScope, Qwen, Qwen Code, MiniMax, OpenRouter, Requesty, A2Agent, OrcaRouter, Ollama (cloud and local), vLLM, and LM Studio โ€” plus on-device Apple Intelligence โ€” into an autonomous task loop that actually does things: reads your codebase, fixes the bug, builds the Xcode project, commits the diff, drives any Mac app through the Accessibility API, runs shell commands as you or as root, texts you results over iMessage, and answers to a spoken "Agent!".

No NPM, no Electron, no subscription, no telemetry. Bring your own API key, run fully local, or run free on Apple Intelligence. Every Swift package it depends on was written by the same author. See Backstory below.

What's New ๐Ÿš€

v1.1.x โ€” The Hardened Harness Release ยท Releases โ†’

  • Context compaction, rebuilt. Threshold = model window โˆ’ reserved output โˆ’ buffer, driven by real input_tokens. Provider-side 9-section LLM summary replaces on-device 4K summaries; open goal, plan checklist and edited files are re-attached after every compaction. Oversized tool results are spilled to disk at emission and recoverable via restore_tool_result. 413 overflow routes through forced compaction with a shorter retry; max_tokens overruns recover by escalating, then continuing.
  • Read-before-edit gate. edit_file / apply_diff / diff_apply refuse to touch a file the LLM hasn't read this task, or that changed on disk since the last read (SHA-256). The refusal auto-reads the file so the next call is the edit. External file changes are surfaced each turn as diff snippets.
  • Real context windows for local models. LM Studio, Ollama and vLLM report their actual per-model context length โ€” no more hardcoded 32K assumption.
  • Faster turns. Read-only tools start while the Claude response is still streaming; input-aware shell concurrency; jittered exponential retry with Retry-After on 429/529; mid-stream SSE errors surfaced on every provider.
  • Defense-in-depth. ShellSafetyService is now enforced daemon-side (AgentHelper + AgentUser) as well as client-side; release builds reject un-teamed XPC clients; both XPC listeners require same-team code signing derived from the app's own signature.
  • Activity log. No more 50K truncation or 500K relaunch trim โ€” large logs render off-main with a "Processing tab dataโ€ฆ" overlay; optional "Activity Log Below HUD" layout.
  • App menu: Check for Updatesโ€ฆ (GitHub releases), Website, GitHub. CI Build & Test workflow on every PR; 273 passing tests.
  • Plus: goal_state with evidence-verified criteria, opt-in critic diff review before completion, task-scoped rewind_task, extended thinking for Claude, reasoning_effort pass-through, sub-agents with per-agent model override (3 concurrent, 6 read-only), typed tool errors with recovery hints, event hooks.

Quick Start (Download)

  1. Download Agent! and drag to Applications โ€” or with Homebrew:
    brew update && brew install --cask agentiloop-agent
    
  2. Open Agent! โ€” it sets up everything automatically
  3. Pick your AI โ€” Settings โ†’ choose a provider โ†’ enter API key

โœ… You never need to compile from source. Every release and every pre-release ships a pre-compiled Mac binary (.dmg + .zip), built by CI and signed, notarized, and stapled by Apple with the AgentiLoop Team ID. Because the official binaries carry a real Developer ID, the Launch Agent and Launch Daemon always register and never get "lost" โ€” that only happens with ad-hoc source builds (see Option B below). If your helpers disappeared, just install the latest release binary.

Quick Start (Build from Source)

Only needed if you want to hack on Agent! itself. Everyone else: use the signed binary above.

git clone https://github.com/AgentiLoop/agent.git
cd Agent

Option A โ€” Xcode (Apple Developer account): open Agent.xcodeproj, set your Development Team, Build & Run the Agent target, approve the helper when prompted.

Option B โ€” no developer account (Xcode Command Line Tools only):

./build.sh              # Debug
./build.sh Release      # Release
open "build/DerivedData/Build/Products/Debug/Agent!.app"

โš ๏ธ Option B builds are ad-hoc signed. The Launch Agent/Daemon helpers won't register (SMAppService needs a Team ID), but the LLM loop, all tools, Accessibility, AppleScript, shell, and MCP still work. Want the helpers without a developer account? Use the signed, notarized release binary โ€” no compiling required.

๐Ÿ’ก Cheap setup: GLM-5.3 via Z.ai (fastest signup, default model) costs pennies per million tokens. Running locally? Only GLM-4.7-Turbo (32B) fits consumer hardware (64โ€“128GB Apple Silicon via Ollama).

Troubleshooting (Build from Source)

  • xcode-select points at Command Line Tools โ†’ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
  • Odd BUILD FAILED after pulling โ†’ stale DerivedData: ./build.sh clean && ./build.sh
  • Helpers never register โ†’ expected on Option B; use Option A, or simply install the signed release binary โ€” every release and pre-release ships one
  • Deployment target / SDK errors โ†’ Agent! targets macOS 26; update macOS and Xcode
  • Config argument is case-sensitive โ†’ ./build.sh (Debug) or ./build.sh Release

What Can It Do?

"Build the Xcode project and fix any errors" ยท "Play my Workout playlist in Music" ยท "Take a photo with Photo Booth" ยท "Send an iMessage to Mom saying I'll be home at 6" ยท "Open Safari and search for flights to Tokyo" ยท "Refactor this class into smaller files" ยท "What calendar events do I have today?"

Just type what you want. Agent! figures out how and makes it happen.


Key Features

  • ๐Ÿง  Self-verifying task loop โ€” reasons, executes, observes results, self-corrects. A task can't declare itself done until goal_state criteria are marked with evidence; an opt-in critic reviews the diff first.
  • ๐Ÿ›  Agentic coding โ€” reads codebases, edits with string-replace diffs, builds Xcode projects natively (clickable errors), manages git, indexes repos into a portable JSONL repo-map. Every edit is snapshotted โ€” one-click rollback or whole-task rewind_task.
  • ๐Ÿ–ฅ Desktop automation โ€” drives any Mac app through the Accessibility API (AXorcist), element-based with fuzzy auto-retry. Plus NSAppleScript, JXA and 51 ScriptingBridge app bridges, all in-process with TCC.
  • ๐Ÿ“œ AgentScript โ€” Swift dylibs compiled at runtime and dlopen'd in-process with full TCC. Deleted scripts go to .Trash and are restorable.
  • ๐Ÿ›ก Privileged execution โ€” shell as you via a Launch Agent, or as root via a Launch Daemon you approve exactly once (SMAppService + XPC). See docs/SECURITY.md for why SMAppService already enforces signing identity.
  • ๐ŸŽ™ Voice โ€” say "Agent!" followed by your task; on-device SFSpeechRecognizer, auto-runs after ~2.5s of silence, loops.
  • ๐Ÿ“ฑ iMessage remote control โ€” text Agent! next song from your iPhone; approved senders only. Needs Full Disk Access for chat.db.
  • ๐ŸŒ Web โ€” built-in Safari automation (JavaScript + AppleScript); optional Selenium and Playwright MCP for cross-browser.
  • ๐Ÿค Sub-agents โ€” up to 3 concurrent (6 read-only) isolated agents with mailbox messaging and per-agent model override.
  • ๐Ÿงฉ MCP โ€” add any MCP server in Settings โ†’ MCP Servers; tools appear as mcp_<server>_<tool>. Xcode MCP: {"mcpServers":{"xcode":{"command":"xcrun","args":["mcpbridge"],"transport":"stdio"}}}.
  • ๐Ÿ—‚ Tabs, history, memory, plans, skills โ€” each tab has its own project folder and log; persistent user memory; multi-plan checklists surfaced in every prompt.
  • ๐Ÿ”„ Fallback chain โ€” auto-switch to the next configured provider on 429/timeout/network failure.

๐Ÿค– 21 AI Providers

ProviderCostBest for
A2AgentCheapDeepSeek, GLM, Kimi, MiniMax and Qwen via one OpenAI-compatible key at a fraction of official pricing
Apple IntelligenceFree, on-deviceTriage, summaries, token compression (brain icon, not available on the provider picker)
ClaudePer-token (API key) or subscription (OAuth)Long autonomous tasks, extended thinking, prompt caching
CodexChatGPT subscriptionOpenAI models via ChatGPT OAuth โ€” no API key, no per-token charges
DeepSeekCheapBudget coding, cache-hit reporting
Google GeminiPaid (free tier)Long context, vision
Grok (xAI)PaidReal-time info
Hugging FaceVariesOpen models, serverless or dedicated endpoints
Local Ollama / vLLM / LM StudioFree + hardwareFully offline; real per-model context window detected
MiniMaxCheap1M-token context
Mistral / Mistral VibePaidOpen-weight cloud, code, agent product
Ollama (cloud)Free tierHosted open models
OpenAIPaidGeneral purpose, tool calling, vision, reasoning_effort
OpenRouterPaid200+ models, one key; Claude routed via Anthropic protocol
OrcaRouterPaid190+ models via one OpenAI-compatible key at provider cost; auto/fusion/fallback routing
Alibaba DashScope (Model Studio / QwenCloud pay-as-you-go)CheapQwen 3.8 via DashScope; Model Studio sk- and QwenCloud sk-ws- keys
Qwen (qwen.ai Token Plan)SubscriptionQwenCloud Token Plan (sk-sp- key, token-plan.*.maas.aliyuncs.com): qwen3.8-max, qwen3.7-plus, GLM-5.2, DeepSeek V4
Qwen CodeSubscriptionAlibaba Coding Plan (sk-sp- key): qwen3-coder-plus, qwen3.7-plus, GLM-5, Kimi K2.5, MiniMax-M2.5
RequestyPaid300+ models via one OpenAI-compatible key; per-model pricing and capability metadata
Z.ai / BigModelCheapGLM-5.3 โ€” recommended starting point

๐Ÿ’ก Self-hosted providers are free only in the API-fee sense โ€” a usable 30B+ model needs an M2/M3/M4 Ultra Mac Studio (64โ€“128GB). Without that hardware, the cheap cloud paths above are dramatically cheaper.

Tools

Canonical names come from AgentTools.Name.* (source of truth: the AgentTools package). Per-provider toggles can hide individual tools.

GroupTools
Coredone ยท list_tools ยท search ยท web_search ยท fetch ยท chat ยท memory ยท plan ยท goal_state ยท restore_tool_result ยท directory ยท skill ยท ask_user ยท index
Code / buildfile (read/write/edit/diff_apply/undo/list/search/mkdir/โ€ฆ) ยท git ยท xcode (build/run/analyze/snippet/code_review/add_file/bump_version/โ€ฆ) ยท agent_script
Shelluser_shell (Launch Agent) ยท root_shell (Launch Daemon) ยท shell (in-process fallback) ยท batch ยท multi
macOS automationaccessibility (25 element-based actions) ยท applescript (with lookup_sdef) ยท javascript (JXA)
Websafari ยท selenium ยท mcp_playwright_browser_* (optional)
Sub-agentsspawn_agent ยท tell_agent

Full per-action reference: docs/TECHNICAL.md.

AgentScript โ€” Swift scripts with full TCC

AgentScripts are plain Swift files in ~/Documents/AgentScript/agents/Sources/Scripts/. Agent! compiles each one to a .dylib with SwiftPM (Package.swift lists every script plus the 51 ScriptingBridge app bridges), then dlopens it with Agent!'s own TCC grants โ€” Accessibility, Automation, Calendar, Contacts, Mail, Photos, etc. The LLM manages them with agent_script (create / edit / run / delete / restore / pull); ~35 examples ship in the folder (Hello, TodayEvents, NowPlaying, CheckMail, CreateDmg, ArchiveXcode, โ€ฆ).

Entry point โ€” no top-level code, no exit(); stdout is returned to the LLM, the return value is the exit status:

import Foundation
import CalendarBridge   // any `import XBridge` auto-wires โ€” no Package.swift edits needed

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

Environment variables โ€” how they are SET. The LLM never touches the environment itself. It calls the tool, and Agent!'s ScriptService exports the variables into the script's process (env["AGENT_PROJECT_FOLDER"] = cwd, env["AGENT_SCRIPT_ARGS"] = arguments in ScriptService+Execution.swift; setenv(...) for the in-process variant). The same two variables are exported to every user_shell / root_shell / shell command.

LLM tool call                                          What Agent! exports to the script
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
agent_script(action:"run", name:"TodayEvents")         AGENT_PROJECT_FOLDER=/Users/you/Documents/GitHub/Agent
                                                       (AGENT_SCRIPT_ARGS is NOT set)

agent_script(action:"run", name:"TodayEvents",         AGENT_PROJECT_FOLDER=/Users/you/Documents/GitHub/Agent
             arguments:"days=3,location=false,json=true")   AGENT_SCRIPT_ARGS="days=3,location=false,json=true"
VariableWhen setMeaning
AGENT_PROJECT_FOLDERAlwaysThe active tab's project folder (or $HOME if none). The runner's cwd is set to it as well.
AGENT_SCRIPT_ARGSOnly when the LLM passes arguments:"โ€ฆ"Whatever string the LLM passed, verbatim. The bundled examples use the key=value,key=value convention.

Environment variables โ€” how they are READ IN. Inside the script, both come from ProcessInfo.processInfo.environment. This is the exact parsing pattern used by Hello.swift / TodayEvents.swift:

import Foundation

@_cdecl("script_main")
public func scriptMain() -> Int32 {
    let env = ProcessInfo.processInfo.environment

    // 1. Project folder โ€” always present; fall back to cwd just in case
    let folder = env["AGENT_PROJECT_FOLDER"] ?? FileManager.default.currentDirectoryPath

    // 2. Arguments โ€” absent unless the LLM passed `arguments:"โ€ฆ"`
    let argsString = env["AGENT_SCRIPT_ARGS"] ?? ""

    // 3. Defaults, then parse "key=value,key=value"
    var daysAhead    = 0
    var showLocation = true
    var outputJSON   = false

    for pair in argsString.split(separator: ",") {
        let parts = pair.split(separator: "=", maxSplits: 1).map { \$0.trimmingCharacters(in: .whitespaces) }
        guard parts.count == 2 else { continue }
        switch parts[0] {
        case "days":     daysAhead    = Int(parts[1]) ?? 0
        case "location": showLocation = parts[1].lowercased() == "true"
        case "json":     outputJSON   = parts[1].lowercased() == "true"
        default: break
        }
    }

    print("Project folder: \(folder)")
    print("days=\(daysAhead) location=\(showLocation) json=\(outputJSON)")
    return 0
}

The two variables are independent โ€” never parse the project folder out of AGENT_SCRIPT_ARGS. Bash equivalent inside user_shell: ls "$AGENT_PROJECT_FOLDER/Sources" (cwd is already there, no cd needed).

Real AGENT_SCRIPT_ARGS conventions from the shipped scripts (~/Documents/AgentScript/agents/Sources/Scripts/):

Scriptarguments: the LLM passesStyle
TodayEventsdays=3,location=false,json=truekey=value,โ€ฆ
CheckMailunreadOnly=true,inboxCount=true,json=truekey=value,โ€ฆ
ListReminderscompleted=false,limit=5key=value,โ€ฆ
QuitAppsexcluded=Xcode,Agent,Terminalkey=value with a list
NowPlayingjson=true,artwork=truekey=value,โ€ฆ
ArchiveXcode/path/to/Project.xcodeproj MyScheme 469UCUB275positional, space-separated (scheme/teamID auto-detected if omitted)
CreateDmg--app /path/to/App.app --output /path/out.dmg --name "My App" --compressflag-style, space-separated, quotes respected

JSON input / output โ€” a SEPARATE mechanism from the env vars. Env vars are exported by Agent! into the process; JSON files are plain files on disk that the script itself reads and writes with FileManager / JSONSerialization. Agent! does not create, pass, or parse them. Two real patterns from the shipped scripts:

1. JSON-only input (SendMessage) โ€” no env args at all; the script requires SendMessage_input.json and returns 1 if it's missing:

// ~/Documents/AgentScript/json/SendMessage_input.json   (written by the LLM via file(action:"write") before the run)
{ "recipient": "Mom", "message": "Home at 6", "imagePath": "~/Pictures/Photos Library.photoslibrary/originals/A/IMG_0001.jpeg" }

// ~/Documents/AgentScript/json/SendMessage_output.json  (written by the script)
{ "success": true, "timestamp": "2026-09-03T21:14:02Z", "recipient": "Mom", "message": "Home at 6" }
// on failure: { "success": false, "timestamp": "โ€ฆ", "error": "Missing required field: recipient" }
// SendMessage.swift โ€” how the script reads it
let inputPath  = "\(NSHomeDirectory())/Documents/AgentScript/json/SendMessage_input.json"
guard let inputData = FileManager.default.contents(atPath: inputPath) else {
    writeOutput(outputPath, success: false, error: "Input file not found: \(inputPath)"); return 1
}
guard let json = try? JSONSerialization.jsonObject(with: inputData) as? [String: Any],
      let recipientHandle = json["recipient"] as? String else { /* โ€ฆ */ return 1 }
let message   = json["message"]   as? String
let imagePath = json["imagePath"] as? String

2. Env args for options, JSON for structured output (TodayEvents, NowPlaying, CheckMail, ListReminders) โ€” options come from AGENT_SCRIPT_ARGS (or the optional <Name>_input.json); when json=true the script writes <Name>_output.json in addition to the human-readable stdout that goes back to the LLM:

// agent_script(action:"run", name:"TodayEvents", arguments:"days=3,json=true")
// โ†’ ~/Documents/AgentScript/json/TodayEvents_output.json
{ "success": true, "timestamp": "โ€ฆ", "count": 2,
  "events": [ { "summary": "Standup", "calendar": "Work", "startTime": "โ€ฆ", "endTime": "โ€ฆ", "allDay": false, "location": "โ€ฆ" }, โ€ฆ ] }

// agent_script(action:"run", name:"NowPlaying", arguments:"json=true,artwork=true")
// โ†’ ~/Documents/AgentScript/json/NowPlaying_output.json
{ "success": true, "playerState": "playing",
  "track": { "name": "โ€ฆ", "artist": "โ€ฆ", "album": "โ€ฆ", "duration": 240 },
  "artwork": { "saved": true, "path": "~/Documents/AgentScript/images/โ€ฆ.png", "width": 500, "height": 500 } }
// TodayEvents.swift โ€” how the script writes it
func writeTodayEventsOutput(_ path: String, success: Bool, error: String? = nil,
                            events: [[String: Any]]? = nil, count: Int? = nil, outputJSON: Bool) {
    guard outputJSON else { return }
    var result: [String: Any] = ["success": success, "timestamp": ISO8601DateFormatter().string(from: Date())]
    if !success, let error { result["error"] = error }
    if success { if let events { result["events"] = events }; if let count { result["count"] = count } }
    try? FileManager.default.createDirectory(atPath: (path as NSString).deletingLastPathComponent, withIntermediateDirectories: true)
    if let out = try? JSONSerialization.data(withJSONObject: result, options: .prettyPrinted) {
        try? out.write(to: URL(fileURLWithPath: path))
    }
}

Deleted scripts go to ~/Documents/AgentScript/agents/.Trash/ (agent_script(action:"restore")); action:"pull" fetches the upstream version from the AgentScripts repo.

๐Ÿ”’ Jev โ€” a second opinion before shell commands

Jev (TypeSafe System One) is an optional decision layer that reviews shell commands before Agent! runs them. It supplements your selected LLM provider โ€” it never replaces it.

  • What it does. Every command that already passed the hard-coded ShellSafetyService rules is sent to Jev, which rates how likely it is to irreversibly destroy data. Above your threshold the command is refused with the rating and the command text; below it, the command runs.
  • Where it applies. All shell paths: the in-process shell, the user Launch Agent (user_shell), and the privileged Launch Daemon (root_shell).
  • Tunable cut-off. Settings โ†’ LLM Common Settings โ†’ Reject at โ€ฆ % destructive, 0โ€“100% in 10% steps. Default 70%.
  • Fail-open by design. No API key, the Consult Jev before tools toggle off, or a TypeSafe outage means "no opinion" โ€” the command proceeds and the failure is logged, never silently treated as a safe verdict. Cancelling a task during a Jev check stops the command.
  • Visible. Every check logs the destructive-risk percentage, the allowed/refused verdict, the answering model, and input/output token counts.
  • Configuration. API key (stored in the Keychain), model picker with catalog refresh, and the advisory toggle all live in LLM Common Settings. The client lives in the bundled TypeSafeKit / TypeSafeMiddleware Swift package.

Privacy & Safety

Your files, screen contents and personal data never leave your Mac โ€” cloud providers only see prompt text; local providers keep everything offline. Every action is logged.

LayerWhat it does
Shell Safety ServiceHard-blocks rm -rf /, rm -rf ~, bare-glob rm -rf, --no-preserve-root โ€” enforced client-side and daemon-side. Cannot be bypassed by the LLM.
XPC client trustBoth listeners require same-team code signing derived from the app's own signature; release builds reject un-teamed clients.
Read-before-edit gateEdits to unread or externally-modified files are refused (SHA-256), with auto-read on refusal.
File backups + rewindEvery edit snapshotted (1-week TTL); Rollback UI, file(action:"undo"), or task-scoped rewind_task.
TCC in-process routingAppleScript/JXA/screencapture/accessibility commands run in-process where Agent! holds TCC grants, never through the daemons.
Tool execution gatingThe LLM cannot fabricate results โ€” every call flows through dispatchTool() and returns real output. Tool-less "I clicked/searchedโ€ฆ" claims get a correction injected.
Typed errors + guardsEvery failing tool result carries a recovery hint; broken-record and stuck guards nudge, then stop; completion gates cap refusals at 3 per task.
Console audit trailEvery tool call and every helper command is logged.

Keyboard Shortcuts & Slash Commands

ShortcutAction
ReturnRun task ยท โŒ˜ . / Esc cancel
โŒ˜ T / โŒ˜ W / โŒ˜ 1โ€“9 / โŒ˜ โ‡ง โ†โ†’New / close / switch / prev-next tab
โŒ˜ B / โŒ˜ DToggle LLM Output overlay / chevrons
โŒ˜ F / โŒ˜ L / โŒ˜ VSearch log / clear log / paste image
โ†‘ / โ†“Prompt history
โŒ˜ โ‡ง M / โŒ˜ โ‡ง PMessages Monitor / Settings
โŒ˜ โ‡ง K L H J UClear all / LLM panel / prompt history / task history / token counters

Slash commands run locally: /clear [log|all|llm|history|tasks|tokens], /memory [show|clear|edit|<text>].

FAQ

Do I need to know how to code? No โ€” plain English (or your native language). How much does it cost? The app is free for noncommercial and personal use (PolyForm Noncommercial 1.0.0). You pay your provider; GLM-5.3 via Z.ai/BigModel or DeepSeek are the cheapest for serious work. Local models are free if you own the hardware. What Mac do I need? Apple Silicon, macOS 26.4.1+. Any modern Mac for cloud providers; 64GB+ for 30B local models. How is this different from Siri? Siri answers. Agent! acts โ€” apps, files, code, system.

More: docs/FAQ.md ยท Technical Architecture ยท Comparisons (vs Claude Code, Cursor, Cline, OpenClaw) ยท Security Model

Backstory

Agent! is the result of three years of building agentic AI apps โ€” ANIE, Game Changer, BattleScript, XCF MCP Server and Client, D1F, and about eight original Swift packages. The missing piece was an intelligent autonomous loop; once achieved, the best of those projects came together into Agent!. It has written video games (Boss-Man), created apps, written poetry into Pages via AppleScript, generated disk images and attached them to GitHub releases. Where Claude Code relies on ~65 third-party NPM packages, Agent! is 100% native, uses very little RAM, and ships Xcode automation, Swift Syntax 6.2 analysis, Accessibility, AppleScript, AgentScript/ScriptingBridge, Safari automation and MCP support out of the box.

Contributing

See CONTRIBUTING.md โ€” build from source in ~5 minutes with ./build.sh, no developer account needed. Pull requests run the CI Build & Test workflow and require a one-time CLA signature. Check the good first issues.

Sponsoring

Companies and LLM providers who want to support the project: see docs/SPONSORSHIP.md (levels, placements) and docs/PROVIDER_PROGRAM.md (LLM provider integration), or sponsor directly via GitHub Sponsors. All billing via GitHub Sponsors.

License

PolyForm Noncommercial 1.0.0. You may use, modify, and share this software for noncommercial and personal purposes. Commercial use โ€” including building or distributing commercial versions โ€” is reserved exclusively to AgentiLoop.ai, a Logos InkPen LLC company. Contact AgentiLoop for a commercial license.


โš ๏ธ Legal Notice & Attribution

Trademark Notice

"AgentiLoop Agent! for Mac" is an independent software project and is not affiliated with, endorsed by, sponsored by, or otherwise associated with Apple Inc. "Apple," "Mac," "Mac mini," "MacBook," "macOS," and related marks are trademarks of Apple Inc., registered in the U.S. and other countries. All other trademarks, service marks, and trade names referenced herein are the property of their respective owners and are used for identification purposes only.

"AgentiLoop Agent!" and the AgentiLoop Agent! logo are trademarks of AgentiLoop.ai, a Logos InkPen LLC company. Use of these marks requires prior written permission. The PolyForm Noncommercial license below grants rights to the source code only โ€” it does not grant any trademark rights.

Source Code License (PolyForm Noncommercial 1.0.0)

The source code of "AgentiLoop Agent! for Mac" is source-available and licensed under the PolyForm Noncommercial License 1.0.0. You are free to use, copy, modify, and distribute the source code for any noncommercial purpose, subject to the conditions in the LICENSE file (retain the Required Notice and a copy of, or link to, the license terms). Commercial use and commercial versions of the software are reserved exclusively to AgentiLoop.ai, a Logos InkPen LLC company.

Compiled Binaries & Releases

Compiled binaries, installers, code-signed builds, and release artifacts distributed through this project's GitHub Releases, AgentiLoop.ai, or any other official channel are the copyrighted work of AgentiLoop.ai, a Logos InkPen LLC company and are not covered by the PolyForm Noncommercial license that governs the source code. All rights to the official binaries โ€” including the "AgentiLoop Agent!" name, logo, code-signing identity, and Developer ID โ€” are reserved.

Copyright ยฉ 2026 AgentiLoop.ai, a Logos InkPen LLC company. All rights reserved.

You are welcome to build your own binaries from source for noncommercial use under the PolyForm Noncommercial license, provided you do not use the "AgentiLoop Agent!" name, logo, or branding to identify your product.

Warranty Disclaimer

This software is provided "AS IS," without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and non-infringement. In no event shall the author or copyright holder be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software.


Thank you for your interest in AgentiLoop Agent! โ€” an application crafted for Mac mini, MacBook, and Mac studio computers running macOS 26.4 or later on genuine Mac hardware and software.