๐Ÿฆพ AgentiLoop Agent!

September 21, 2026 ยท View on GitHub

แ„‰แ…ฉแ†ฏแ„Œแ…ตแ†จแ„’แ…ต แ„†แ…กแ†ฏแ„Šแ…ณแ†ทแ„ƒแ…ณแ„…แ…ตแ„†แ…งแ†ซ: แ„Œแ…ฅแ„‚แ…ณแ†ซ แ„ƒแ…ฅ แ„‹แ…ตแ„‰แ…กแ†ผ Cursorแ„‚แ…ก Claude Codeแ„…แ…ณแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…กแ„Œแ…ต แ„‹แ…กแ†ญแ„‰แ…ณแ†ธแ„‚แ…ตแ„ƒแ…ก. AgentiLoopแ„‹แ…ด Agent!แ„‚แ…ณแ†ซ แ„€แ…ณ แ„แ…ฉแ„ƒแ…ตแ†ผ แ„ƒแ…ฉแ„€แ…ฎแ„ƒแ…ณแ†ฏแ„‹แ…ณแ†ฏ แ„ƒแ…ขแ„Žแ…ฆแ„’แ…ขแ†ปแ„‹แ…ณแ†ฏ แ„ˆแ…ฎแ†ซแ„†แ…กแ†ซ แ„‹แ…กแ„‚แ…ตแ„…แ…ก, แ„‹แ…ตแ„†แ…ฆแ„‹แ…ตแ†ฏ แ„Œแ…กแ„ƒแ…ฉแ†ผแ„’แ…ช, แ„‰แ…ฉแ„‘แ…ณแ„แ…ณแ„‹แ…ฐแ„‹แ…ฅ แ„‡แ…ขแ„‘แ…ฉ, 12แ„€แ…ข แ„‹แ…ตแ„‰แ…กแ†ผแ„‹แ…ด แ„€แ…ฅแ†ทแ„‰แ…ขแ†จ แ„‹แ…ฆแ†ซแ„Œแ…ตแ†ซแ„‹แ…ณแ†ฏ แ„’แ…ชแ†ฏแ„‹แ…ญแ†ผแ„’แ…กแ†ซ Safari แ„‹แ…ฐแ†ธ แ„€แ…ฅแ†ทแ„‰แ…ขแ†จ, แ„€แ…ณแ„…แ…ตแ„€แ…ฉ แ„‰แ…ณแ„‰แ…ณแ„…แ…ฉ แ„‹แ…ฅแ†ธแ„ƒแ…ฆแ„‹แ…ตแ„แ…ณแ„ƒแ…ฌแ„‚แ…ณแ†ซ แ„‹แ…ฐแ†ธแ„‰แ…กแ„‹แ…ตแ„แ…ณ แ„€แ…ฎแ„Žแ…ฎแ†จแ„‹แ…ฆแ„ƒแ…ฉ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…กแ„€แ…ฉ แ„‹แ…ตแ†ปแ„‰แ…ณแ†ธแ„‚แ…ตแ„ƒแ…ก. Agent!แ„‚แ…ณแ†ซ macOS 26 แ„†แ…ตแ†พ 27แ„‹แ…ณแ†ฏ แ„‹แ…ฑแ„’แ…กแ†ซ แ„€แ…กแ„Œแ…กแ†ผ แ„€แ…กแ†ผแ„…แ…งแ†จแ„’แ…กแ†ซ แ„‹แ…ฆแ„‹แ…ตแ„Œแ…ฅแ†ซแ„แ…ตแ†จ AI แ„ƒแ…ฉแ„€แ…ฎแ„€แ…ก แ„ƒแ…ฌแ„‹แ…ฅแ†ปแ„‰แ…ณแ†ธแ„‚แ…ตแ„ƒแ…ก.

Mac ๋ฐ์Šคํฌํ†ฑ์„ ์œ„ํ•œ ์—์ด์ „ํ‹ฑ AI

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

Agent!๊ฐ€ macOS ์†์‰ฌ์šด ์‚ฌ์šฉ API๋ฅผ ํ†ตํ•ด Photo Booth๋ฅผ ์ž๋™ํ™” โ€” ์ž์—ฐ์–ด ์š”์ฒญ ํ•œ ๋ฒˆ์œผ๋กœ ์‚ฌ์ง„ ์ดฌ์˜์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ˆ˜ํ–‰

Agent!๊ฐ€ ์†์‰ฌ์šด ์‚ฌ์šฉ์œผ๋กœ Photo Booth๋ฅผ ์กฐ์ž‘ โ€” ํด๋ฆญ๋„, ์Šคํฌ๋ฆฝํŠธ๋„ ์—†์ด ๊ทธ์ € "์‚ฌ์ง„ ์ฐ์–ด์ค˜".

README ๋ฒˆ์—ญ

Agent ์•ˆ์˜ ์ฒด์Šค

Screenshot 2026-08-23 at 7 34 10 PM

Agent!๋ž€?

ํ•˜๋‚˜์˜ ์•ฑ. ์–ด๋–ค AI๋“ . Mac์— ๋Œ€ํ•œ ์™„์ „ํ•œ ํ†ต์ œ.

Agent!๋Š” 100% ๋„ค์ดํ‹ฐ๋ธŒ Swift 6.2 / SwiftUI ์•ฑ์œผ๋กœ, 21๊ฐœ LLM ์ œ๊ณต์ž โ€” 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(ํด๋ผ์šฐ๋“œ ๋ฐ ๋กœ์ปฌ), vLLM, LM Studio โ€” ์— ์˜จ๋””๋ฐ”์ด์Šค Apple Intelligence๊นŒ์ง€ ๋”ํ•ด, ์‹ค์ œ๋กœ ์ผ์„ ํ•ด๋‚ด๋Š” ์ž์œจ ์ž‘์—… ๋ฃจํ”„๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค: ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ๊ณ , ๋ฒ„๊ทธ๋ฅผ ๊ณ ์น˜๊ณ , Xcode ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ , diff๋ฅผ ์ปค๋ฐ‹ํ•˜๊ณ , ์†์‰ฌ์šด ์‚ฌ์šฉ API๋กœ ๋ชจ๋“  Mac ์•ฑ์„ ์กฐ์ž‘ํ•˜๊ณ , ์‚ฌ์šฉ์ž ๋˜๋Š” root ๊ถŒํ•œ์œผ๋กœ ์…ธ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ , iMessage๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋‚ด๊ณ , ์Œ์„ฑ "Agent!" ํ˜ธ์ถœ์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

NPM๋„, Electron๋„, ๊ตฌ๋…๋„, ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ง์ ‘ API ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜, ์™„์ „ํžˆ ๋กœ์ปฌ๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, Apple Intelligence๋กœ ๋ฌด๋ฃŒ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”. ์˜์กดํ•˜๋Š” ๋ชจ๋“  Swift ํŒจํ‚ค์ง€๋Š” ๊ฐ™์€ ์ €์ž๊ฐ€ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๋น„ํ•˜์ธ๋“œ ์Šคํ† ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ƒˆ๋กœ์šด ์†Œ์‹ ๐Ÿš€

v1.1.x โ€” The Hardened Harness Release ยท ๋ฆด๋ฆฌ์Šค โ†’

  • ์ปจํ…์ŠคํŠธ ์••์ถ•, ์žฌ๊ตฌ์ถ•. ์ž„๊ณ„๊ฐ’ = ๋ชจ๋ธ ์œˆ๋„์šฐ โˆ’ ์˜ˆ์•ฝ ์ถœ๋ ฅ โˆ’ ๋ฒ„ํผ, ์‹ค์ œ input_tokens ๊ธฐ๋ฐ˜. ์ œ๊ณต์ž ์ธก 9์„น์…˜ LLM ์š”์•ฝ์ด ์˜จ๋””๋ฐ”์ด์Šค 4K ์š”์•ฝ์„ ๋Œ€์ฒด; ์—ด๋ฆฐ ๋ชฉํ‘œ, ๊ณ„ํš ์ฒดํฌ๋ฆฌ์ŠคํŠธ, ํŽธ์ง‘๋œ ํŒŒ์ผ์€ ๋งค ์••์ถ• ํ›„ ๋‹ค์‹œ ์ฒจ๋ถ€๋ฉ๋‹ˆ๋‹ค. ๊ณผ๋„ํ•˜๊ฒŒ ํฐ ๋„๊ตฌ ๊ฒฐ๊ณผ๋Š” ๋ฐœ์ƒ ์‹œ ๋””์Šคํฌ๋กœ ๋„˜๊ธฐ๊ณ  restore_tool_result๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 413 ์˜ค๋ฒ„ํ”Œ๋กœ๋Š” ๊ฐ•์ œ ์••์ถ•๊ณผ ๋” ์งง์€ ์žฌ์‹œ๋„๋กœ ์ฒ˜๋ฆฌ; max_tokens ์ดˆ๊ณผ๋Š” ํ™•๋Œ€ ํ›„ ๊ณ„์†ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณต๊ตฌ๋ฉ๋‹ˆ๋‹ค.
  • ํŽธ์ง‘ ์ „ ์ฝ๊ธฐ ๊ฒŒ์ดํŠธ. edit_file / apply_diff / diff_apply๋Š” ์ด ์ž‘์—…์—์„œ LLM์ด ์ฝ์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ๋งˆ์ง€๋ง‰ ์ฝ๊ธฐ ์ดํ›„ ๋””์Šคํฌ์—์„œ ๋ณ€๊ฒฝ๋œ(SHA-256) ํŒŒ์ผ์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฑฐ๋ถ€ ์‹œ ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์ฝ์–ด ๋‹ค์Œ ํ˜ธ์ถœ์ด ๋ฐ”๋กœ ํŽธ์ง‘์ด ๋˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ํŒŒ์ผ ๋ณ€๊ฒฝ์€ ๋งค ํ„ด diff ์Šค๋‹ˆํŽซ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๋กœ์ปฌ ๋ชจ๋ธ์˜ ์‹ค์ œ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ. LM Studio, Ollama, vLLM์ด ๋ชจ๋ธ๋ณ„ ์‹ค์ œ ์ปจํ…์ŠคํŠธ ๊ธธ์ด๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค โ€” ๋” ์ด์ƒ ํ•˜๋“œ์ฝ”๋”ฉ๋œ 32K ๊ฐ€์ •์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ๋” ๋น ๋ฅธ ํ„ด. ์ฝ๊ธฐ ์ „์šฉ ๋„๊ตฌ๋Š” Claude ์‘๋‹ต์ด ์ŠคํŠธ๋ฆฌ๋ฐ๋˜๋Š” ๋™์•ˆ ์‹œ์ž‘; ์ž…๋ ฅ ์ธ์‹ ์…ธ ๋™์‹œ์„ฑ; 429/529์— Retry-After๋ฅผ ๋ฐ˜์˜ํ•œ ์ง€ํ„ฐ ์ง€์ˆ˜ ์žฌ์‹œ๋„; ๋ชจ๋“  ์ œ๊ณต์ž์—์„œ ์ŠคํŠธ๋ฆผ ์ค‘ SSE ์˜ค๋ฅ˜ ํ‘œ์‹œ.
  • ์‹ฌ์ธต ๋ฐฉ์–ด. ShellSafetyService๊ฐ€ ์ด์ œ ํด๋ผ์ด์–ธํŠธ ์ธก๋ฟ ์•„๋‹ˆ๋ผ ๋ฐ๋ชฌ ์ธก(AgentHelper + AgentUser)์—์„œ๋„ ์ ์šฉ; ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ๋Š” ํŒ€ ์—†๋Š” XPC ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ฑฐ๋ถ€; ๋‘ XPC ๋ฆฌ์Šค๋„ˆ ๋ชจ๋‘ ์•ฑ ์ž์ฒด ์„œ๋ช…์—์„œ ํŒŒ์ƒ๋œ ๋™์ผ ํŒ€ ์ฝ”๋“œ ์„œ๋ช…์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ™œ๋™ ๋กœ๊ทธ. ๋” ์ด์ƒ 50K ์ž˜๋ฆผ์ด๋‚˜ 500K ์žฌ์‹œ์ž‘ ํŠธ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค โ€” ํฐ ๋กœ๊ทธ๋Š” "Processing tab dataโ€ฆ" ์˜ค๋ฒ„๋ ˆ์ด์™€ ํ•จ๊ป˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ฐ–์—์„œ ๋ Œ๋”๋ง; ์„ ํƒ์  "Activity Log Below HUD" ๋ ˆ์ด์•„์›ƒ.
  • ์•ฑ ๋ฉ”๋‰ด: ์—…๋ฐ์ดํŠธ ํ™•์ธโ€ฆ(GitHub ๋ฆด๋ฆฌ์Šค), ์›น์‚ฌ์ดํŠธ, GitHub. ๋ชจ๋“  PR์— CI Build & Test ์›Œํฌํ”Œ๋กœ; 273๊ฐœ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ.
  • ์ถ”๊ฐ€: ์ฆ๊ฑฐ๋กœ ๊ฒ€์ฆ๋˜๋Š” ๊ธฐ์ค€์„ ๊ฐ€์ง„ goal_state, ์™„๋ฃŒ ์ „ ์„ ํƒ์  ํฌ๋ฆฌํ‹ฑ diff ๋ฆฌ๋ทฐ, ์ž‘์—… ๋ฒ”์œ„ rewind_task, Claude ํ™•์žฅ ์‚ฌ๊ณ , reasoning_effort ์ „๋‹ฌ, ์—์ด์ „ํŠธ๋ณ„ ๋ชจ๋ธ ์˜ค๋ฒ„๋ผ์ด๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์„œ๋ธŒ ์—์ด์ „ํŠธ(๋™์‹œ 3๊ฐœ, ์ฝ๊ธฐ ์ „์šฉ 6๊ฐœ), ๋ณต๊ตฌ ํžŒํŠธ๊ฐ€ ์žˆ๋Š” ํƒ€์ž… ๋„๊ตฌ ์˜ค๋ฅ˜, ์ด๋ฒคํŠธ ํ›….

๋น ๋ฅธ ์‹œ์ž‘ (๋‹ค์šด๋กœ๋“œ)

  1. Agent!๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋“œ๋ž˜๊ทธ โ€” ๋˜๋Š” Homebrew๋กœ:
    brew update && brew install --cask agentiloop-agent
    
  2. Agent!๋ฅผ ์—ด๊ธฐ โ€” ๋ชจ๋“  ๊ฒƒ์ด ์ž๋™์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค
  3. AI ์„ ํƒ โ€” ์„ค์ • โ†’ ์ œ๊ณต์ž ์„ ํƒ โ†’ API ํ‚ค ์ž…๋ ฅ

โœ… ์†Œ์Šค์—์„œ ์ปดํŒŒ์ผํ•  ํ•„์š”๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฆด๋ฆฌ์Šค์™€ ๋ชจ๋“  ํ”„๋ฆฌ๋ฆด๋ฆฌ์Šค์—๋Š” CI๊ฐ€ ๋นŒ๋“œํ•˜๊ณ  AgentiLoop Team ID๋กœ Apple์ด ์„œ๋ช…, ๊ณต์ฆ(notarize), ์Šคํ…Œ์ดํ”Œ(staple)ํ•œ ์‚ฌ์ „ ์ปดํŒŒ์ผ Mac ๋ฐ”์ด๋„ˆ๋ฆฌ(.dmg + .zip)๊ฐ€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์‹ค์ œ Developer ID๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— Launch Agent์™€ Launch Daemon์ด ํ•ญ์ƒ ๋“ฑ๋ก๋˜๋ฉฐ ์ ˆ๋Œ€ "์‚ฌ๋ผ์ง€์ง€" ์•Š์Šต๋‹ˆ๋‹ค โ€” ๊ทธ๋Ÿฐ ์ผ์€ ad-hoc ์„œ๋ช…๋œ ์†Œ์Šค ๋นŒ๋“œ์—์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(์•„๋ž˜ ์˜ต์…˜ B ์ฐธ๊ณ ). ํ—ฌํผ๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค๋ฉด ์ตœ์‹  ๋ฆด๋ฆฌ์Šค ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‹œ์ž‘ (์†Œ์Šค์—์„œ ๋นŒ๋“œ)

Agent! ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ ๋ชจ๋“  ๋ถ„์€ ์œ„์˜ ์„œ๋ช…๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

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

์˜ต์…˜ A โ€” Xcode (Apple Developer ๊ณ„์ •): Agent.xcodeproj๋ฅผ ์—ด๊ณ , Development Team์„ ์„ค์ •ํ•˜๊ณ , Agent ํƒ€๊ฒŸ์„ Build & Runํ•œ ๋’ค, ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋œจ๋ฉด ํ—ฌํผ๋ฅผ ์Šน์ธํ•˜์„ธ์š”.

์˜ต์…˜ B โ€” ๊ฐœ๋ฐœ์ž ๊ณ„์ • ์—†์Œ (Xcode Command Line Tools๋งŒ):

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

โš ๏ธ ์˜ต์…˜ B ๋นŒ๋“œ๋Š” ad-hoc ์„œ๋ช…์ž…๋‹ˆ๋‹ค. Launch Agent/Daemon ํ—ฌํผ๋Š” ๋“ฑ๋ก๋˜์ง€ ์•Š์ง€๋งŒ(SMAppService์— Team ID ํ•„์š”), LLM ๋ฃจํ”„, ๋ชจ๋“  ๋„๊ตฌ, ์†์‰ฌ์šด ์‚ฌ์šฉ, AppleScript, ์…ธ, MCP๋Š” ์—ฌ์ „ํžˆ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ๊ณ„์ • ์—†์ด ํ—ฌํผ๋ฅผ ์›ํ•˜์‹œ๋‚˜์š”? ์„œ๋ช…ยท๊ณต์ฆ๋œ ๋ฆด๋ฆฌ์Šค ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š” โ€” ์ปดํŒŒ์ผ์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์ €๋ ดํ•œ ์„ค์ •: Z.ai์˜ GLM-5.3(๊ฐ€์žฅ ๋น ๋ฅธ ๊ฐ€์ž…, ๊ธฐ๋ณธ ๋ชจ๋ธ)์€ ๋ฐฑ๋งŒ ํ† ํฐ๋‹น ๋ช‡ ์„ผํŠธ์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ ์‹คํ–‰? GLM-4.7-Turbo(32B)๋งŒ ์†Œ๋น„์ž์šฉ ํ•˜๋“œ์›จ์–ด(Ollama ๊ธฐ์ค€ 64โ€“128GB Apple Silicon)์— ๋งž์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ (์†Œ์Šค์—์„œ ๋นŒ๋“œ)

  • xcode-select๊ฐ€ Command Line Tools๋ฅผ ๊ฐ€๋ฆฌํ‚ด โ†’ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
  • pull ํ›„ ์ด์ƒํ•œ BUILD FAILED โ†’ ์˜ค๋ž˜๋œ DerivedData: ./build.sh clean && ./build.sh
  • ํ—ฌํผ๊ฐ€ ๋“ฑ๋ก๋˜์ง€ ์•Š์Œ โ†’ ์˜ต์…˜ B์—์„œ๋Š” ์ •์ƒ; ์˜ต์…˜ A๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์„œ๋ช…๋œ ๋ฆด๋ฆฌ์Šค ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜์„ธ์š” โ€” ๋ชจ๋“  ๋ฆด๋ฆฌ์Šค์™€ ํ”„๋ฆฌ๋ฆด๋ฆฌ์Šค์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค
  • Deployment target / SDK ์˜ค๋ฅ˜ โ†’ Agent!๋Š” macOS 26์„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค; macOS์™€ Xcode๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”
  • ๊ตฌ์„ฑ ์ธ์ˆ˜๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ โ†’ ./build.sh(Debug) ๋˜๋Š” ./build.sh Release

๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

"Xcode ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ๋ชจ๋‘ ๊ณ ์ณ์ค˜" ยท "์Œ์•… ์•ฑ์—์„œ ๋‚ด Workout ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ ์žฌ์ƒํ•ด์ค˜" ยท "Photo Booth๋กœ ์‚ฌ์ง„ ์ฐ์–ด์ค˜" ยท "์—„๋งˆํ•œํ…Œ 6์‹œ์— ์ง‘์— ๊ฐ„๋‹ค๊ณ  iMessage ๋ณด๋‚ด์ค˜" ยท "Safari ์—ด๊ณ  ๋„์ฟ„ํ–‰ ํ•ญ๊ณตํŽธ ๊ฒ€์ƒ‰ํ•ด์ค˜" ยท "์ด ํด๋ž˜์Šค๋ฅผ ๋” ์ž‘์€ ํŒŒ์ผ๋กœ ๋ฆฌํŒฉํ„ฐ๋งํ•ด์ค˜" ยท "์˜ค๋Š˜ ์บ˜๋ฆฐ๋” ์ผ์ •์ด ๋ญ์•ผ?"

์›ํ•˜๋Š” ๊ฒƒ์„ ๊ทธ๋ƒฅ ์ž…๋ ฅํ•˜์„ธ์š”. Agent!๊ฐ€ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


์ฃผ์š” ๊ธฐ๋Šฅ

  • ๐Ÿง  ์ž์ฒด ๊ฒ€์ฆ ์ž‘์—… ๋ฃจํ”„ โ€” ์ถ”๋ก ํ•˜๊ณ , ์‹คํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๊ด€์ฐฐํ•˜๊ณ , ์Šค์Šค๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. goal_state ๊ธฐ์ค€์ด ์ฆ๊ฑฐ์™€ ํ•จ๊ป˜ ํ‘œ์‹œ๋˜๊ธฐ ์ „์—๋Š” ์ž‘์—…์ด ์™„๋ฃŒ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์„ ํƒ์  ํฌ๋ฆฌํ‹ฑ์ด ๋จผ์ € diff๋ฅผ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ›  ์—์ด์ „ํ‹ฑ ์ฝ”๋”ฉ โ€” ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ๊ณ , ๋ฌธ์ž์—ด ์น˜ํ™˜ diff๋กœ ํŽธ์ง‘ํ•˜๊ณ , Xcode ํ”„๋กœ์ ํŠธ๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๋นŒ๋“œ(ํด๋ฆญ ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜)ํ•˜๊ณ , git์„ ๊ด€๋ฆฌํ•˜๊ณ , ์ €์žฅ์†Œ๋ฅผ ์ด์‹ ๊ฐ€๋Šฅํ•œ JSONL ๋ฆฌํฌ ๋งต์œผ๋กœ ์ƒ‰์ธํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํŽธ์ง‘์€ ์Šค๋ƒ…์ƒท๋ฉ๋‹ˆ๋‹ค โ€” ์›ํด๋ฆญ ๋กค๋ฐฑ ๋˜๋Š” ์ž‘์—… ์ „์ฒด rewind_task.
  • ๐Ÿ–ฅ ๋ฐ์Šคํฌํ†ฑ ์ž๋™ํ™” โ€” ์†์‰ฌ์šด ์‚ฌ์šฉ API(AXorcist)๋กœ ๋ชจ๋“  Mac ์•ฑ์„ ์กฐ์ž‘, ํผ์ง€ ์ž๋™ ์žฌ์‹œ๋„๊ฐ€ ์žˆ๋Š” ์š”์†Œ ๊ธฐ๋ฐ˜. ์—ฌ๊ธฐ์— NSAppleScript, JXA, 51๊ฐœ ScriptingBridge ์•ฑ ๋ธŒ๋ฆฌ์ง€ โ€” ๋ชจ๋‘ TCC์™€ ํ•จ๊ป˜ ์ธํ”„๋กœ์„ธ์Šค.
  • ๐Ÿ“œ AgentScript โ€” ๋Ÿฐํƒ€์ž„์— ์ปดํŒŒ์ผ๋˜์–ด ์ „์ฒด TCC๋กœ ์ธํ”„๋กœ์„ธ์Šค dlopen๋˜๋Š” Swift dylib. ์‚ญ์ œ๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” .Trash๋กœ ์ด๋™ํ•˜๋ฉฐ ๋ณต์› ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿ›ก ๊ถŒํ•œ ์žˆ๋Š” ์‹คํ–‰ โ€” Launch Agent๋กœ ์‚ฌ์šฉ์ž ๊ถŒํ•œ ์…ธ, ๋˜๋Š” ๋”ฑ ํ•œ ๋ฒˆ ์Šน์ธํ•˜๋Š” Launch Daemon์œผ๋กœ root ์…ธ(SMAppService + XPC). SMAppService๊ฐ€ ์ด๋ฏธ ์„œ๋ช… ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ์ด์œ ๋Š” docs/SECURITY.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
  • ๐ŸŽ™ ์Œ์„ฑ โ€” **"Agent!"**๋ผ๊ณ  ๋งํ•œ ๋’ค ์ž‘์—…์„ ๋งํ•˜์„ธ์š”; ์˜จ๋””๋ฐ”์ด์Šค SFSpeechRecognizer, ~2.5์ดˆ ๋ฌด์Œ ํ›„ ์ž๋™ ์‹คํ–‰, ๋ฐ˜๋ณต.
  • ๐Ÿ“ฑ iMessage ์›๊ฒฉ ์ œ์–ด โ€” iPhone์—์„œ Agent! next song์„ ๋ฌธ์ž๋กœ ๋ณด๋‚ด์„ธ์š”; ์Šน์ธ๋œ ๋ฐœ์‹ ์ž๋งŒ. chat.db๋ฅผ ์œ„ํ•ด ์ „์ฒด ๋””์Šคํฌ ์ ‘๊ทผ ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ๐ŸŒ ์›น โ€” ๋‚ด์žฅ Safari ์ž๋™ํ™”(JavaScript + AppleScript); ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•œ ์„ ํƒ์  Selenium๊ณผ Playwright MCP.
  • ๐Ÿค ์„œ๋ธŒ ์—์ด์ „ํŠธ โ€” ๋ฉ”์ผ๋ฐ•์Šค ๋ฉ”์‹œ์ง•๊ณผ ์—์ด์ „ํŠธ๋ณ„ ๋ชจ๋ธ ์˜ค๋ฒ„๋ผ์ด๋“œ๊ฐ€ ์žˆ๋Š” ์ตœ๋Œ€ 3๊ฐœ ๋™์‹œ(์ฝ๊ธฐ ์ „์šฉ 6๊ฐœ) ๊ฒฉ๋ฆฌ ์—์ด์ „ํŠธ.
  • ๐Ÿงฉ MCP โ€” ์„ค์ • โ†’ MCP Servers์—์„œ ์–ด๋–ค MCP ์„œ๋ฒ„๋“  ์ถ”๊ฐ€; ๋„๊ตฌ๋Š” mcp_<server>_<tool>๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. Xcode MCP: {"mcpServers":{"xcode":{"command":"xcrun","args":["mcpbridge"],"transport":"stdio"}}}.
  • ๐Ÿ—‚ ํƒญ, ๊ธฐ๋ก, ๋ฉ”๋ชจ๋ฆฌ, ๊ณ„ํš, ์Šคํ‚ฌ โ€” ๊ฐ ํƒญ์€ ์ž์ฒด ํ”„๋กœ์ ํŠธ ํด๋”์™€ ๋กœ๊ทธ๋ฅผ ๊ฐ€์ง; ์˜๊ตฌ ์‚ฌ์šฉ์ž ๋ฉ”๋ชจ๋ฆฌ; ๋ชจ๋“  ํ”„๋กฌํ”„ํŠธ์— ํ‘œ์‹œ๋˜๋Š” ๋‹ค์ค‘ ๊ณ„ํš ์ฒดํฌ๋ฆฌ์ŠคํŠธ.
  • ๐Ÿ”„ ํด๋ฐฑ ์ฒด์ธ โ€” 429/ํƒ€์ž„์•„์›ƒ/๋„คํŠธ์›Œํฌ ์‹คํŒจ ์‹œ ๋‹ค์Œ ๊ตฌ์„ฑ๋œ ์ œ๊ณต์ž๋กœ ์ž๋™ ์ „ํ™˜.

๐Ÿค– 21๊ฐœ AI ์ œ๊ณต์ž

์ œ๊ณต์ž๋น„์šฉ์ตœ์  ์šฉ๋„
A2Agent์ €๋ ด๊ณต์‹ ๊ฐ€๊ฒฉ์˜ ์ผ๋ถ€๋กœ ํ•˜๋‚˜์˜ OpenAI ํ˜ธํ™˜ ํ‚ค๋ฅผ ํ†ตํ•ด DeepSeek, GLM, Kimi, MiniMax, Qwen
Apple Intelligence๋ฌด๋ฃŒ, ์˜จ๋””๋ฐ”์ด์Šค๋ถ„๋ฅ˜, ์š”์•ฝ, ํ† ํฐ ์••์ถ•(๋‘๋‡Œ ์•„์ด์ฝ˜, ์ œ๊ณต์ž ์„ ํƒ๊ธฐ์—๋Š” ์—†์Œ)
Claudeํ† ํฐ๋‹น(API ํ‚ค) ๋˜๋Š” ๊ตฌ๋…(OAuth)๊ธด ์ž์œจ ์ž‘์—…, ํ™•์žฅ ์‚ฌ๊ณ , ํ”„๋กฌํ”„ํŠธ ์บ์‹ฑ
CodexChatGPT ๊ตฌ๋…ChatGPT OAuth๋ฅผ ํ†ตํ•œ OpenAI ๋ชจ๋ธ โ€” API ํ‚ค ์—†์Œ, ํ† ํฐ๋‹น ์š”๊ธˆ ์—†์Œ
DeepSeek์ €๋ ด์ €์˜ˆ์‚ฐ ์ฝ”๋”ฉ, ์บ์‹œ ํžˆํŠธ ๋ณด๊ณ 
Google Gemini์œ ๋ฃŒ(๋ฌด๋ฃŒ ํ‹ฐ์–ด ์žˆ์Œ)๊ธด ์ปจํ…์ŠคํŠธ, ๋น„์ „
Grok (xAI)์œ ๋ฃŒ์‹ค์‹œ๊ฐ„ ์ •๋ณด
Hugging Face๋‹ค์–‘์˜คํ”ˆ ๋ชจ๋ธ, ์„œ๋ฒ„๋ฆฌ์Šค ๋˜๋Š” ์ „์šฉ ์—”๋“œํฌ์ธํŠธ
๋กœ์ปฌ Ollama / vLLM / LM Studio๋ฌด๋ฃŒ + ํ•˜๋“œ์›จ์–ด์™„์ „ ์˜คํ”„๋ผ์ธ; ๋ชจ๋ธ๋ณ„ ์‹ค์ œ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ ๊ฐ์ง€
MiniMax์ €๋ ด1M ํ† ํฐ ์ปจํ…์ŠคํŠธ
Mistral / Mistral Vibe์œ ๋ฃŒ์˜คํ”ˆ ์›จ์ดํŠธ ํด๋ผ์šฐ๋“œ, ์ฝ”๋“œ, ์—์ด์ „ํŠธ ์ œํ’ˆ
Ollama (ํด๋ผ์šฐ๋“œ)๋ฌด๋ฃŒ ํ‹ฐ์–ดํ˜ธ์ŠคํŒ…๋œ ์˜คํ”ˆ ๋ชจ๋ธ
OpenAI์œ ๋ฃŒ๋ฒ”์šฉ, ๋„๊ตฌ ํ˜ธ์ถœ, ๋น„์ „, reasoning_effort
OpenRouter์œ ๋ฃŒ200๊ฐœ ์ด์ƒ ๋ชจ๋ธ, ํ•˜๋‚˜์˜ ํ‚ค; Claude๋Š” Anthropic ํ”„๋กœํ† ์ฝœ๋กœ ๋ผ์šฐํŒ…
OrcaRouter์œ ๋ฃŒํ•˜๋‚˜์˜ OpenAI ํ˜ธํ™˜ ํ‚ค๋กœ ์ œ๊ณต์ž ์›๊ฐ€์— 190๊ฐœ ์ด์ƒ ๋ชจ๋ธ; auto/fusion/fallback ๋ผ์šฐํŒ…
Alibaba DashScope (Model Studio / QwenCloud ์ข…๋Ÿ‰์ œ)์ €๋ ดDashScope๋ฅผ ํ†ตํ•œ Qwen 3.8; Model Studio sk- ๋ฐ QwenCloud sk-ws- ํ‚ค
Qwen (qwen.ai Token Plan)๊ตฌ๋…QwenCloud Token Plan(sk-sp- ํ‚ค, token-plan.*.maas.aliyuncs.com): qwen3.8-max, qwen3.7-plus, GLM-5.2, DeepSeek V4
Qwen Code๊ตฌ๋…Alibaba Coding Plan(sk-sp- ํ‚ค): qwen3-coder-plus, qwen3.7-plus, GLM-5, Kimi K2.5, MiniMax-M2.5
Requesty์œ ๋ฃŒํ•˜๋‚˜์˜ OpenAI ํ˜ธํ™˜ ํ‚ค๋กœ 300๊ฐœ ์ด์ƒ ๋ชจ๋ธ; ๋ชจ๋ธ๋ณ„ ๊ฐ€๊ฒฉ ๋ฐ ๊ธฐ๋Šฅ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
Z.ai / BigModel์ €๋ ดGLM-5.3 โ€” ์ถ”์ฒœ ์‹œ์ž‘์ 

๐Ÿ’ก ์ž์ฒด ํ˜ธ์ŠคํŒ… ์ œ๊ณต์ž๋Š” API ์š”๊ธˆ ์ธก๋ฉด์—์„œ๋งŒ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค โ€” ์“ธ ๋งŒํ•œ 30B+ ๋ชจ๋ธ์—๋Š” M2/M3/M4 Ultra Mac Studio(64โ€“128GB)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์—†๋‹ค๋ฉด ์œ„์˜ ์ €๋ ดํ•œ ํด๋ผ์šฐ๋“œ ๊ฒฝ๋กœ๊ฐ€ ํ›จ์”ฌ ๋” ์ €๋ ดํ•ฉ๋‹ˆ๋‹ค.

๋„๊ตฌ

์ •์‹ ์ด๋ฆ„์€ AgentTools.Name.*์—์„œ ์˜ต๋‹ˆ๋‹ค(์›๋ณธ: AgentTools ํŒจํ‚ค์ง€). ์ œ๊ณต์ž๋ณ„ ํ† ๊ธ€๋กœ ๊ฐœ๋ณ„ ๋„๊ตฌ๋ฅผ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฃน๋„๊ตฌ
Coredone ยท list_tools ยท search ยท web_search ยท fetch ยท chat ยท memory ยท plan ยท goal_state ยท restore_tool_result ยท directory ยท skill ยท ask_user ยท index
์ฝ”๋“œ / ๋นŒ๋“œfile (read/write/edit/diff_apply/undo/list/search/mkdir/โ€ฆ) ยท git ยท xcode (build/run/analyze/snippet/code_review/add_file/bump_version/โ€ฆ) ยท agent_script
์…ธuser_shell (Launch Agent) ยท root_shell (Launch Daemon) ยท shell (์ธํ”„๋กœ์„ธ์Šค ํด๋ฐฑ) ยท batch ยท multi
macOS ์ž๋™ํ™”accessibility (25๊ฐœ ์š”์†Œ ๊ธฐ๋ฐ˜ ์•ก์…˜) ยท applescript (lookup_sdef ํฌํ•จ) ยท javascript (JXA)
์›นsafari ยท selenium ยท mcp_playwright_browser_* (์„ ํƒ)
์„œ๋ธŒ ์—์ด์ „ํŠธspawn_agent ยท tell_agent

์•ก์…˜๋ณ„ ์ „์ฒด ์ฐธ์กฐ: docs/TECHNICAL.md.

AgentScript โ€” ์ „์ฒด TCC๋ฅผ ๊ฐ€์ง„ Swift ์Šคํฌ๋ฆฝํŠธ

AgentScript๋Š” ~/Documents/AgentScript/agents/Sources/Scripts/์— ์žˆ๋Š” ํ‰๋ฒ”ํ•œ Swift ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. Agent!๋Š” ๊ฐ๊ฐ์„ SwiftPM์œผ๋กœ .dylib๋กœ ์ปดํŒŒ์ผํ•œ ๋’ค(Package.swift๋Š” ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ์™€ 51๊ฐœ ScriptingBridge ์•ฑ ๋ธŒ๋ฆฌ์ง€๋ฅผ ๋‚˜์—ด), Agent! ์ž์ฒด์˜ TCC ๊ถŒํ•œ โ€” ์†์‰ฌ์šด ์‚ฌ์šฉ, ์ž๋™ํ™”, ์บ˜๋ฆฐ๋”, ์—ฐ๋ฝ์ฒ˜, Mail, ์‚ฌ์ง„ ๋“ฑ โ€” ์œผ๋กœ dlopenํ•ฉ๋‹ˆ๋‹ค. LLM์€ agent_script(create / edit / run / delete / restore / pull)๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ํด๋”์— ~35๊ฐœ ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค(Hello, TodayEvents, NowPlaying, CheckMail, CreateDmg, ArchiveXcode, โ€ฆ).

์ง„์ž…์  โ€” ์ตœ์ƒ์œ„ ์ฝ”๋“œ ์—†์Œ, exit() ์—†์Œ; stdout์€ LLM์— ๋ฐ˜ํ™˜๋˜๊ณ , ๋ฐ˜ํ™˜๊ฐ’์€ ์ข…๋ฃŒ ์ƒํƒœ์ž…๋‹ˆ๋‹ค:

import Foundation
import CalendarBridge   // ์–ด๋–ค `import XBridge`๋“  ์ž๋™ ์—ฐ๊ฒฐ โ€” Package.swift ํŽธ์ง‘ ๋ถˆํ•„์š”

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

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ โ€” ์–ด๋–ป๊ฒŒ ์„ค์ •๋˜๋Š”๊ฐ€. LLM์€ ํ™˜๊ฒฝ์„ ์ง์ ‘ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Agent!์˜ ScriptService๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์„ธ์Šค๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค(ScriptService+Execution.swift์˜ env["AGENT_PROJECT_FOLDER"] = cwd, env["AGENT_SCRIPT_ARGS"] = arguments; ์ธํ”„๋กœ์„ธ์Šค ๋ณ€ํ˜•์€ setenv(...)). ๊ฐ™์€ ๋‘ ๋ณ€์ˆ˜๊ฐ€ ๋ชจ๋“  user_shell / root_shell / shell ๋ช…๋ น์—๋„ ๋‚ด๋ณด๋‚ด์ง‘๋‹ˆ๋‹ค.

LLM ๋„๊ตฌ ํ˜ธ์ถœ                                          Agent!๊ฐ€ ์Šคํฌ๋ฆฝํŠธ์— ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
agent_script(action:"run", name:"TodayEvents")         AGENT_PROJECT_FOLDER=/Users/you/Documents/GitHub/Agent
                                                       (AGENT_SCRIPT_ARGS๋Š” ์„ค์ •๋˜์ง€ ์•Š์Œ)

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"
๋ณ€์ˆ˜์„ค์ • ์‹œ์ ์˜๋ฏธ
AGENT_PROJECT_FOLDERํ•ญ์ƒํ™œ์„ฑ ํƒญ์˜ ํ”„๋กœ์ ํŠธ ํด๋”(์—†์œผ๋ฉด $HOME). ๋Ÿฌ๋„ˆ์˜ cwd๋„ ์—ฌ๊ธฐ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
AGENT_SCRIPT_ARGSLLM์ด arguments:"โ€ฆ"๋ฅผ ์ „๋‹ฌํ•  ๋•Œ๋งŒLLM์ด ์ „๋‹ฌํ•œ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ. ๋ฒˆ๋“ค ์˜ˆ์ œ๋Š” key=value,key=value ๊ทœ์น™์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ โ€” ์–ด๋–ป๊ฒŒ ์ฝ๋Š”๊ฐ€. ์Šคํฌ๋ฆฝํŠธ ์•ˆ์—์„œ ๋‘˜ ๋‹ค ProcessInfo.processInfo.environment์—์„œ ์˜ต๋‹ˆ๋‹ค. Hello.swift / TodayEvents.swift๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ •ํ™•ํ•œ ํŒŒ์‹ฑ ํŒจํ„ด์ž…๋‹ˆ๋‹ค:

import Foundation

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

    // 1. ํ”„๋กœ์ ํŠธ ํด๋” โ€” ํ•ญ์ƒ ์กด์žฌ; ๋งŒ์•ฝ์„ ์œ„ํ•ด cwd๋กœ ํด๋ฐฑ
    let folder = env["AGENT_PROJECT_FOLDER"] ?? FileManager.default.currentDirectoryPath

    // 2. ์ธ์ˆ˜ โ€” LLM์ด `arguments:"โ€ฆ"`๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ์—†์Œ
    let argsString = env["AGENT_SCRIPT_ARGS"] ?? ""

    // 3. ๊ธฐ๋ณธ๊ฐ’, ๊ทธ๋‹ค์Œ "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
}

๋‘ ๋ณ€์ˆ˜๋Š” ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค โ€” ์ ˆ๋Œ€ AGENT_SCRIPT_ARGS์—์„œ ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ํŒŒ์‹ฑํ•˜์ง€ ๋งˆ์„ธ์š”. user_shell ์•ˆ์˜ Bash ๋“ฑ๊ฐ€: ls "$AGENT_PROJECT_FOLDER/Sources"(cwd๊ฐ€ ์ด๋ฏธ ๊ฑฐ๊ธฐ์ด๋ฏ€๋กœ cd ๋ถˆํ•„์š”).

๋ฒˆ๋“ค ์Šคํฌ๋ฆฝํŠธ์˜ ์‹ค์ œ AGENT_SCRIPT_ARGS ๊ทœ์น™(~/Documents/AgentScript/agents/Sources/Scripts/):

์Šคํฌ๋ฆฝํŠธLLM์ด ์ „๋‹ฌํ•˜๋Š” arguments:์Šคํƒ€์ผ
TodayEventsdays=3,location=false,json=truekey=value,โ€ฆ
CheckMailunreadOnly=true,inboxCount=true,json=truekey=value,โ€ฆ
ListReminderscompleted=false,limit=5key=value,โ€ฆ
QuitAppsexcluded=Xcode,Agent,Terminal๋ชฉ๋ก์ด ์žˆ๋Š” key=value
NowPlayingjson=true,artwork=truekey=value,โ€ฆ
ArchiveXcode/path/to/Project.xcodeproj MyScheme 469UCUB275์œ„์น˜ ๊ธฐ๋ฐ˜, ๊ณต๋ฐฑ ๊ตฌ๋ถ„(scheme/teamID ์ƒ๋žต ์‹œ ์ž๋™ ๊ฐ์ง€)
CreateDmg--app /path/to/App.app --output /path/out.dmg --name "My App" --compressํ”Œ๋ž˜๊ทธ ์Šคํƒ€์ผ, ๊ณต๋ฐฑ ๊ตฌ๋ถ„, ๋”ฐ์˜ดํ‘œ ์กด์ค‘

JSON ์ž…๋ ฅ / ์ถœ๋ ฅ โ€” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์™€ ๋ณ„๊ฐœ์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” Agent!๊ฐ€ ํ”„๋กœ์„ธ์Šค๋กœ ๋‚ด๋ณด๋‚ด๊ณ , JSON ํŒŒ์ผ์€ ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด๊ฐ€ FileManager / JSONSerialization์œผ๋กœ ์ฝ๊ณ  ์“ฐ๋Š” ๋””์Šคํฌ์˜ ํ‰๋ฒ”ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. Agent!๋Š” ์ด๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜, ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜, ํŒŒ์‹ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฒˆ๋“ค ์Šคํฌ๋ฆฝํŠธ์˜ ๋‘ ๊ฐ€์ง€ ์‹ค์ œ ํŒจํ„ด:

1. JSON ์ „์šฉ ์ž…๋ ฅ(SendMessage) โ€” env ์ธ์ˆ˜ ์ „ํ˜€ ์—†์Œ; ์Šคํฌ๋ฆฝํŠธ๋Š” SendMessage_input.json์„ ์š”๊ตฌํ•˜๊ณ  ์—†์œผ๋ฉด 1์„ ๋ฐ˜ํ™˜:

// ~/Documents/AgentScript/json/SendMessage_input.json   (์‹คํ–‰ ์ „ LLM์ด file(action:"write")๋กœ ์ž‘์„ฑ)
{ "recipient": "Mom", "message": "Home at 6", "imagePath": "~/Pictures/Photos Library.photoslibrary/originals/A/IMG_0001.jpeg" }

// ~/Documents/AgentScript/json/SendMessage_output.json  (์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž‘์„ฑ)
{ "success": true, "timestamp": "2026-09-03T21:14:02Z", "recipient": "Mom", "message": "Home at 6" }
// ์‹คํŒจ ์‹œ: { "success": false, "timestamp": "โ€ฆ", "error": "Missing required field: recipient" }
// SendMessage.swift โ€” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฝ๋Š” ๋ฐฉ๋ฒ•
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 ์ธ์ˆ˜, ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ์€ JSON(TodayEvents, NowPlaying, CheckMail, ListReminders) โ€” ์˜ต์…˜์€ AGENT_SCRIPT_ARGS(๋˜๋Š” ์„ ํƒ์  <Name>_input.json)์—์„œ ์˜ค๋ฉฐ, json=true์ด๋ฉด ์Šคํฌ๋ฆฝํŠธ๋Š” LLM์— ๋Œ์•„๊ฐ€๋Š” ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” stdout์— ๋”ํ•ด <Name>_output.json์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค:

// 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 โ€” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์“ฐ๋Š” ๋ฐฉ๋ฒ•
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))
    }
}

์‚ญ์ œ๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ~/Documents/AgentScript/agents/.Trash/๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค(agent_script(action:"restore")); action:"pull"์€ AgentScripts ์ €์žฅ์†Œ์—์„œ ์—…์ŠคํŠธ๋ฆผ ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

๐Ÿ”’ Jev โ€” ์…ธ ๋ช…๋ น ์ „ ๋‘ ๋ฒˆ์งธ ์˜๊ฒฌ

Jev(TypeSafe System One)๋Š” Agent!๊ฐ€ ์…ธ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๊ฒ€ํ† ํ•˜๋Š” ์„ ํƒ์  ์˜์‚ฌ๊ฒฐ์ • ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. ์„ ํƒํ•œ LLM ์ œ๊ณต์ž๋ฅผ ๋ณด์™„ํ•  ๋ฟ, ์ ˆ๋Œ€ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ํ•˜๋Š” ์ผ. ํ•˜๋“œ์ฝ”๋”ฉ๋œ ShellSafetyService ๊ทœ์น™์„ ์ด๋ฏธ ํ†ต๊ณผํ•œ ๋ชจ๋“  ๋ช…๋ น์ด Jev๋กœ ์ „์†ก๋˜๋ฉฐ, Jev๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ฐ€์—ญ์ ์œผ๋กœ ํŒŒ๊ดดํ•  ๊ฐ€๋Šฅ์„ฑ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ž„๊ณ„๊ฐ’ ์ด์ƒ์ด๋ฉด ํ‰๊ฐ€์™€ ๋ช…๋ น ํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ ๊ฑฐ๋ถ€๋˜๊ณ , ๋ฏธ๋งŒ์ด๋ฉด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์ ์šฉ ๋ฒ”์œ„. ๋ชจ๋“  ์…ธ ๊ฒฝ๋กœ: ์ธํ”„๋กœ์„ธ์Šค ์…ธ, ์‚ฌ์šฉ์ž Launch Agent(user_shell), ๊ถŒํ•œ ์žˆ๋Š” Launch Daemon(root_shell).
  • ์กฐ์ • ๊ฐ€๋Šฅํ•œ ์ปท์˜คํ”„. ์„ค์ • โ†’ LLM Common Settings โ†’ Reject at โ€ฆ % destructive, 0โ€“100%๋ฅผ 10% ๋‹จ์œ„๋กœ. ๊ธฐ๋ณธ๊ฐ’ 70%.
  • ์„ค๊ณ„์ƒ fail-open. API ํ‚ค ์—†์Œ, Consult Jev before tools ํ† ๊ธ€ ๊บผ์ง, ๋˜๋Š” TypeSafe ์žฅ์• ๋Š” "์˜๊ฒฌ ์—†์Œ"์„ ๋œปํ•ฉ๋‹ˆ๋‹ค โ€” ๋ช…๋ น์€ ์ง„ํ–‰๋˜๊ณ  ์‹คํŒจ๋Š” ๋กœ๊ทธ์— ๋‚จ์œผ๋ฉฐ, ์ ˆ๋Œ€ ์กฐ์šฉํžˆ ์•ˆ์ „ ํŒ์ •์œผ๋กœ ์ทจ๊ธ‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Jev ๊ฒ€์‚ฌ ์ค‘ ์ž‘์—…์„ ์ทจ์†Œํ•˜๋ฉด ๋ช…๋ น์ด ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์‹œ์„ฑ. ๋ชจ๋“  ๊ฒ€์‚ฌ๋Š” ํŒŒ๊ดด ์œ„ํ—˜ ๋ฐฑ๋ถ„์œจ, ํ—ˆ์šฉ/๊ฑฐ๋ถ€ ํŒ์ •, ์‘๋‹ต ๋ชจ๋ธ, ์ž…๋ ฅ/์ถœ๋ ฅ ํ† ํฐ ์ˆ˜๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์„ฑ. API ํ‚ค(ํ‚ค์ฒด์ธ ์ €์žฅ), ์นดํƒˆ๋กœ๊ทธ ์ƒˆ๋กœ๊ณ ์นจ์ด ์žˆ๋Š” ๋ชจ๋ธ ์„ ํƒ๊ธฐ, ์–ด๋“œ๋ฐ”์ด์ € ํ† ๊ธ€ ๋ชจ๋‘ LLM Common Settings์— ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฒˆ๋“ค๋œ TypeSafeKit / TypeSafeMiddleware Swift ํŒจํ‚ค์ง€์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๋ฐ ์•ˆ์ „

ํŒŒ์ผ, ํ™”๋ฉด ๋‚ด์šฉ, ๊ฐœ์ธ ๋ฐ์ดํ„ฐ๋Š” ์ ˆ๋Œ€ Mac์„ ๋– ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€” ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž๋Š” ํ”„๋กฌํ”„ํŠธ ํ…์ŠคํŠธ๋งŒ ๋ณด๊ณ , ๋กœ์ปฌ ์ œ๊ณต์ž๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์•ก์…˜์€ ๋กœ๊ทธ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

๊ณ„์ธตํ•˜๋Š” ์ผ
Shell Safety Servicerm -rf /, rm -rf ~, ๋ฒ ์–ด ๊ธ€๋กญ rm -rf, --no-preserve-root๋ฅผ ํ•˜๋“œ ์ฐจ๋‹จ โ€” ํด๋ผ์ด์–ธํŠธ ์ธก ๋ฐ ๋ฐ๋ชฌ ์ธก์—์„œ ์ ์šฉ. LLM์ด ์šฐํšŒํ•  ์ˆ˜ ์—†์Œ.
XPC ํด๋ผ์ด์–ธํŠธ ์‹ ๋ขฐ๋‘ ๋ฆฌ์Šค๋„ˆ ๋ชจ๋‘ ์•ฑ ์ž์ฒด ์„œ๋ช…์—์„œ ํŒŒ์ƒ๋œ ๋™์ผ ํŒ€ ์ฝ”๋“œ ์„œ๋ช…์„ ์š”๊ตฌ; ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ๋Š” ํŒ€ ์—†๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ฑฐ๋ถ€.
ํŽธ์ง‘ ์ „ ์ฝ๊ธฐ ๊ฒŒ์ดํŠธ์ฝ์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€์—์„œ ์ˆ˜์ •๋œ ํŒŒ์ผ์˜ ํŽธ์ง‘์€ ๊ฑฐ๋ถ€(SHA-256), ๊ฑฐ๋ถ€ ์‹œ ์ž๋™ ์ฝ๊ธฐ.
ํŒŒ์ผ ๋ฐฑ์—… + ๋˜๊ฐ๊ธฐ๋ชจ๋“  ํŽธ์ง‘ ์Šค๋ƒ…์ƒท(1์ฃผ TTL); ๋กค๋ฐฑ UI, file(action:"undo"), ๋˜๋Š” ์ž‘์—… ๋ฒ”์œ„ rewind_task.
TCC ์ธํ”„๋กœ์„ธ์Šค ๋ผ์šฐํŒ…AppleScript/JXA/screencapture/์†์‰ฌ์šด ์‚ฌ์šฉ ๋ช…๋ น์€ Agent!๊ฐ€ TCC ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์ธํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ์ ˆ๋Œ€ ๋ฐ๋ชฌ์„ ๊ฑฐ์น˜์ง€ ์•Š์Œ.
๋„๊ตฌ ์‹คํ–‰ ๊ฒŒ์ดํŒ…LLM์€ ๊ฒฐ๊ณผ๋ฅผ ์ง€์–ด๋‚ผ ์ˆ˜ ์—†์Œ โ€” ๋ชจ๋“  ํ˜ธ์ถœ์€ dispatchTool()์„ ๊ฑฐ์ณ ์‹ค์ œ ์ถœ๋ ฅ์„ ๋ฐ˜ํ™˜. ๋„๊ตฌ ์—†๋Š” "ํด๋ฆญ/๊ฒ€์ƒ‰ํ–ˆ์–ด์š”โ€ฆ" ์ฃผ์žฅ์€ ์ •์ •์ด ์ฃผ์ž…๋จ.
ํƒ€์ž… ์˜ค๋ฅ˜ + ๊ฐ€๋“œ๋ชจ๋“  ์‹คํŒจ ๋„๊ตฌ ๊ฒฐ๊ณผ๋Š” ๋ณต๊ตฌ ํžŒํŠธ๋ฅผ ํฌํ•จ; ๋ฐ˜๋ณต/์ •์ฒด ๊ฐ€๋“œ๊ฐ€ ๋„›์ง€ํ•œ ๋’ค ์ค‘์ง€; ์™„๋ฃŒ ๊ฒŒ์ดํŠธ๋Š” ์ž‘์—…๋‹น ๊ฑฐ๋ถ€๋ฅผ 3ํšŒ๋กœ ์ œํ•œ.
Console ๊ฐ์‚ฌ ์ถ”์ ๋ชจ๋“  ๋„๊ตฌ ํ˜ธ์ถœ๊ณผ ๋ชจ๋“  ํ—ฌํผ ๋ช…๋ น์ด ๋กœ๊ทธ์— ๊ธฐ๋ก๋จ.

ํ‚ค๋ณด๋“œ ๋‹จ์ถ•ํ‚ค ๋ฐ ์Šฌ๋ž˜์‹œ ๋ช…๋ น

๋‹จ์ถ•ํ‚ค๋™์ž‘
Return์ž‘์—… ์‹คํ–‰ ยท โŒ˜ . / Esc ์ทจ์†Œ
โŒ˜ T / โŒ˜ W / โŒ˜ 1โ€“9 / โŒ˜ โ‡ง โ†โ†’์ƒˆ ํƒญ / ๋‹ซ๊ธฐ / ์ „ํ™˜ / ์ด์ „-๋‹ค์Œ ํƒญ
โŒ˜ B / โŒ˜ DLLM Output ์˜ค๋ฒ„๋ ˆ์ด / ์…ฐ๋ธŒ๋ก  ํ† ๊ธ€
โŒ˜ F / โŒ˜ L / โŒ˜ V๋กœ๊ทธ ๊ฒ€์ƒ‰ / ๋กœ๊ทธ ์ง€์šฐ๊ธฐ / ์ด๋ฏธ์ง€ ๋ถ™์—ฌ๋„ฃ๊ธฐ
โ†‘ / โ†“ํ”„๋กฌํ”„ํŠธ ๊ธฐ๋ก
โŒ˜ โ‡ง M / โŒ˜ โ‡ง P๋ฉ”์‹œ์ง€ ๋ชจ๋‹ˆํ„ฐ / ์„ค์ •
โŒ˜ โ‡ง K L H J U๋ชจ๋‘ ์ง€์šฐ๊ธฐ / LLM ํŒจ๋„ / ํ”„๋กฌํ”„ํŠธ ๊ธฐ๋ก / ์ž‘์—… ๊ธฐ๋ก / ํ† ํฐ ์นด์šดํ„ฐ

์Šฌ๋ž˜์‹œ ๋ช…๋ น์€ ๋กœ์ปฌ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค: /clear [log|all|llm|history|tasks|tokens], /memory [show|clear|edit|<text>].

FAQ

์ฝ”๋”ฉ์„ ์•Œ์•„์•ผ ํ•˜๋‚˜์š”? ์•„๋‹ˆ์š” โ€” ํ‰๋ฒ”ํ•œ ํ•œ๊ตญ์–ด(๋˜๋Š” ๋ชจ๊ตญ์–ด)๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋น„์šฉ์€ ์–ผ๋งˆ์ธ๊ฐ€์š”? ์•ฑ์€ ๋น„์ƒ์—…์ ยท๊ฐœ์ธ ์šฉ๋„๋กœ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค(PolyForm Noncommercial 1.0.0). ์ œ๊ณต์ž ๋น„์šฉ๋งŒ ์ง€๋ถˆํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค; ์ง„์ง€ํ•œ ์ž‘์—…์—๋Š” Z.ai/BigModel์˜ GLM-5.3์ด๋‚˜ DeepSeek์ด ๊ฐ€์žฅ ์ €๋ ดํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋“œ์›จ์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋กœ์ปฌ ๋ชจ๋ธ์€ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค Mac์ด ํ•„์š”ํ•œ๊ฐ€์š”? Apple Silicon, macOS 26.4.1+. ํด๋ผ์šฐ๋“œ ์ œ๊ณต์ž๋Š” ์ตœ์‹  Mac์ด๋ฉด ์ถฉ๋ถ„; 30B ๋กœ์ปฌ ๋ชจ๋ธ์€ 64GB+. Siri์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€์š”? Siri๋Š” ๋‹ตํ•ฉ๋‹ˆ๋‹ค. Agent!๋Š” ํ–‰๋™ํ•ฉ๋‹ˆ๋‹ค โ€” ์•ฑ, ํŒŒ์ผ, ์ฝ”๋“œ, ์‹œ์Šคํ…œ.

๋” ๋ณด๊ธฐ: docs/FAQ.md ยท ๊ธฐ์ˆ  ์•„ํ‚คํ…์ฒ˜ ยท ๋น„๊ต (Claude Code, Cursor, Cline, OpenClaw ๋Œ€๋น„) ยท ๋ณด์•ˆ ๋ชจ๋ธ

๋น„ํ•˜์ธ๋“œ ์Šคํ† ๋ฆฌ

Agent!๋Š” 3๋…„๊ฐ„ ์—์ด์ „ํ‹ฑ AI ์•ฑ์„ ๋งŒ๋“  ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค โ€” ANIE, Game Changer, BattleScript, XCF MCP Server์™€ Client, D1F, ๊ทธ๋ฆฌ๊ณ  ์•ฝ 8๊ฐœ์˜ ๋…์ฐฝ์ ์ธ Swift ํŒจํ‚ค์ง€. ๋น ์ง„ ์กฐ๊ฐ์€ ์ง€๋Šฅ์ ์ธ ์ž์œจ ๋ฃจํ”„์˜€๊ณ , ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜์ž ๊ทธ ํ”„๋กœ์ ํŠธ๋“ค์˜ ์ •์ˆ˜๊ฐ€ Agent!๋กœ ๋ชจ์˜€์Šต๋‹ˆ๋‹ค. ๋น„๋””์˜ค ๊ฒŒ์ž„(Boss-Man)์„ ์ž‘์„ฑํ•˜๊ณ , ์•ฑ์„ ๋งŒ๋“ค๊ณ , AppleScript๋กœ Pages์— ์‹œ๋ฅผ ์“ฐ๊ณ , ๋””์Šคํฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ด GitHub ๋ฆด๋ฆฌ์Šค์— ์ฒจ๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค. Claude Code๊ฐ€ ~65๊ฐœ์˜ ์„œ๋“œํŒŒํ‹ฐ NPM ํŒจํ‚ค์ง€์— ์˜์กดํ•˜๋Š” ๋ฐ˜๋ฉด, Agent!๋Š” 100% ๋„ค์ดํ‹ฐ๋ธŒ์ด๊ณ , RAM์„ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, Xcode ์ž๋™ํ™”, Swift Syntax 6.2 ๋ถ„์„, ์†์‰ฌ์šด ์‚ฌ์šฉ, AppleScript, AgentScript/ScriptingBridge, Safari ์ž๋™ํ™”, MCP ์ง€์›์„ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—ฌํ•˜๊ธฐ

CONTRIBUTING.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š” โ€” ./build.sh๋กœ ~5๋ถ„ ๋งŒ์— ์†Œ์Šค์—์„œ ๋นŒ๋“œ, ๊ฐœ๋ฐœ์ž ๊ณ„์ • ๋ถˆํ•„์š”. Pull request๋Š” CI Build & Test ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. good first issues๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ผ์ด์„ ์Šค

PolyForm Noncommercial 1.0.0 โ€” ๋น„์ƒ์—…์ ยท๊ฐœ์ธ ์šฉ๋„๋กœ ๋ฌด๋ฃŒ. ์ƒ์—…์  ์‚ฌ์šฉ ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ƒ์—…์šฉ ๋ฒ„์ „์€ Logos InkPen LLC ํšŒ์‚ฌ์ธ AgentiLoop.ai์— ๋…์ ์ ์œผ๋กœ ์œ ๋ณด๋ฉ๋‹ˆ๋‹ค. ์ƒ์—…์šฉ ๋ผ์ด์„ ์Šค๋Š” AgentiLoop์— ๋ฌธ์˜ํ•˜์„ธ์š”.


โš ๏ธ ๋ฒ•์  ๊ณ ์ง€ ๋ฐ ์ €์ž‘์ž ํ‘œ์‹œ

์ƒํ‘œ ๊ณ ์ง€

"AgentiLoop Agent! for Mac"์€ ๋…๋ฆฝ์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ์ด๋ฉฐ Apple Inc.์™€ ์ œํœด, ๋ณด์ฆ, ํ›„์› ๋˜๋Š” ๊ธฐํƒ€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. "Apple", "Mac", "Mac mini", "MacBook", "macOS" ๋ฐ ๊ด€๋ จ ๋งˆํฌ๋Š” ๋ฏธ๊ตญ ๋ฐ ๊ธฐํƒ€ ๊ตญ๊ฐ€์— ๋“ฑ๋ก๋œ Apple Inc.์˜ ์ƒํ‘œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์–ธ๊ธ‰๋œ ๊ธฐํƒ€ ๋ชจ๋“  ์ƒํ‘œ, ์„œ๋น„์Šค ๋งˆํฌ ๋ฐ ์ƒํ˜ธ๋Š” ๊ฐ ์†Œ์œ ์ž์˜ ์žฌ์‚ฐ์ด๋ฉฐ ์‹๋ณ„ ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

"AgentiLoop Agent!"์™€ AgentiLoop Agent! ๋กœ๊ณ ๋Š” Logos InkPen LLC ํšŒ์‚ฌ์ธ AgentiLoop.ai์˜ ์ƒํ‘œ์ž…๋‹ˆ๋‹ค. ์ด ๋งˆํฌ์˜ ์‚ฌ์šฉ์—๋Š” ์‚ฌ์ „ ์„œ๋ฉด ํ—ˆ๊ฐ€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ PolyForm Noncommercial ๋ผ์ด์„ ์Šค๋Š” ์†Œ์Šค ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ถŒ๋ฆฌ๋งŒ ๋ถ€์—ฌํ•˜๋ฉฐ โ€” ์ƒํ‘œ๊ถŒ์€ ๋ถ€์—ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ ๋ผ์ด์„ ์Šค (PolyForm Noncommercial 1.0.0)

"AgentiLoop Agent! for Mac"์˜ ์†Œ์Šค ์ฝ”๋“œ๋Š” ๊ณต๊ฐœ๋˜์–ด ์žˆ์œผ๋ฉฐ PolyForm Noncommercial License 1.0.0์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. LICENSE ํŒŒ์ผ์˜ ์กฐ๊ฑด(Required Notice์™€ ๋ผ์ด์„ ์Šค ์กฐํ•ญ์˜ ์‚ฌ๋ณธ ๋˜๋Š” ๋งํฌ ์œ ์ง€)์— ๋”ฐ๋ผ ๋ชจ๋“  ๋น„์ƒ์—…์  ๋ชฉ์ ์œผ๋กœ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ, ๋ณต์‚ฌ, ์ˆ˜์ •, ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์—…์  ์‚ฌ์šฉ ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ƒ์—…์šฉ ๋ฒ„์ „์€ Logos InkPen LLC ํšŒ์‚ฌ์ธ AgentiLoop.ai์— ๋…์ ์ ์œผ๋กœ ์œ ๋ณด๋ฉ๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ ๋ฆด๋ฆฌ์Šค

์ด ํ”„๋กœ์ ํŠธ์˜ GitHub Releases, AgentiLoop.ai ๋˜๋Š” ๊ธฐํƒ€ ๊ณต์‹ ์ฑ„๋„์„ ํ†ตํ•ด ๋ฐฐํฌ๋˜๋Š” ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ, ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ, ์ฝ”๋“œ ์„œ๋ช…๋œ ๋นŒ๋“œ ๋ฐ ๋ฆด๋ฆฌ์Šค ์•„ํ‹ฐํŒฉํŠธ๋Š” Logos InkPen LLC ํšŒ์‚ฌ์ธ AgentiLoop.ai์˜ ์ €์ž‘๋ฌผ์ด๋ฉฐ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ทœ์œจํ•˜๋Š” PolyForm Noncommercial ๋ผ์ด์„ ์Šค์˜ ์ ์šฉ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ถŒ๋ฆฌ โ€” "AgentiLoop Agent!" ์ด๋ฆ„, ๋กœ๊ณ , ์ฝ”๋“œ ์„œ๋ช… ์•„์ด๋ดํ‹ฐํ‹ฐ, Developer ID ํฌํ•จ โ€” ๋Š” ์œ ๋ณด๋ฉ๋‹ˆ๋‹ค.

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

"AgentiLoop Agent!" ์ด๋ฆ„, ๋กœ๊ณ  ๋˜๋Š” ๋ธŒ๋žœ๋”ฉ์„ ์ œํ’ˆ ์‹๋ณ„์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ, PolyForm Noncommercial ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋น„์ƒ์—…์  ์šฉ๋„๋กœ ์†Œ์Šค์—์„œ ์ง์ ‘ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ณด์ฆ ๋ถ€์ธ

์ด ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ƒํ’ˆ์„ฑ, ํŠน์ • ๋ชฉ์  ์ ํ•ฉ์„ฑ ๋ฐ ๋น„์นจํ•ด์— ๋Œ€ํ•œ ๋ณด์ฆ์„ ํฌํ•จํ•˜๋˜ ์ด์— ๊ตญํ•œ๋˜์ง€ ์•Š๋Š” ๋ช…์‹œ์  ๋˜๋Š” ๋ฌต์‹œ์  ์–ด๋– ํ•œ ๋ณด์ฆ ์—†์ด "์žˆ๋Š” ๊ทธ๋Œ€๋กœ" ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์–ด๋– ํ•œ ๊ฒฝ์šฐ์—๋„ ์ €์ž ๋˜๋Š” ์ €์ž‘๊ถŒ์ž๋Š” ๊ณ„์•ฝ, ๋ถˆ๋ฒ• ํ–‰์œ„ ๋˜๋Š” ๊ธฐํƒ€ ์†Œ์†ก์—์„œ ์†Œํ”„ํŠธ์›จ์–ด ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ์‚ฌ์šฉ์ด๋‚˜ ๊ธฐํƒ€ ๊ฑฐ๋ž˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์ฒญ๊ตฌ, ์†ํ•ด ๋˜๋Š” ๊ธฐํƒ€ ์ฑ…์ž„์— ๋Œ€ํ•ด ์ฑ…์ž„์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


AgentiLoop Agent!์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค โ€” ์ •ํ’ˆ Mac ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด์—์„œ macOS 26.4 ์ด์ƒ์„ ์‹คํ–‰ํ•˜๋Š” Mac mini, MacBook, Mac Studio ์ปดํ“จํ„ฐ๋ฅผ ์œ„ํ•ด ์ œ์ž‘๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.