Agent skill

AgentSquad for Swift

by 2FastLabs in 2FastLabs/agent-squad

Guides building on-device multi-agent apps in Swift with the AgentSquad framework: which agent, orchestrator, classifier, storage or voice type fits each situation.

Apache-2.0Auto-check passedAI & LLM Engineering

Install AgentSquad for Swift

skills CLI
$ npx skills add 2FastLabs/agent-squad --skill agent-squad-swift -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install 2FastLabs/agent-squad agent-squad-swift --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/2FastLabs/agent-squad.git skills-src && mkdir -p .claude/skills && cp -r skills-src/swift .claude/skills/agent-squad-swift && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
agent-squad-swift
GitHub stars
7.8k
Token cost
~3.5k tokens
SKILL.md length
1,487 words
Files
121
Skills in repo
3
Repo updated
First seen
Licence
Apache-2.0

At a glance

Guides building on-device multi-agent apps in Swift with the AgentSquad framework: which agent, orchestrator, classifier, storage or voice type fits each situation.

  • Building a Swift app that runs several AI agents on the device
  • SKILL.md covers When to use what, Modules (import only what you…, How a turn works and The pieces, plus 3 more sections
  • Runs Swift scripts from its folder; calls npm
  • Adding a classifier that routes each turn to the right specialist agent

What it does

This is an assistant guide for Swift apps built on AgentSquad, a protocol-driven, on-device multi-agent framework for iOS 16+ and macOS 14+. It works as a map of what to use and when rather than an API reference, so the agent is told to read exact signatures from the package source and worked recipes from the project's docs.

Components are chosen by situation. One assistant is an Agent or GroundedAgent with an Orchestrator and no classifier. Several specialists add an LLMClassifier that routes each turn. Answers that must not drift from data such as prices or balances use GroundedAgent, where a Brain calls tools and a separate Presenter speaks only from the curated results. Voice uses a VoiceAssistant, either OpenAIVoiceAssistant or OpenAIGroundedVoiceAssistant.

Modules are imported separately: AgentSquad has no external dependencies, AgentSquadMCP adds the MCP Swift SDK, and AgentSquadAudio uses AVFoundation and needs NSMicrophoneUsageDescription. A turn is consumed as an AsyncThrowingStream of AgentEvent. Persistence uses FileChatStorage on iOS 16+ and DeviceChatStorage on iOS 17+.

When your agent uses it

  • Building a Swift app that runs several AI agents on the device
  • Adding a classifier that routes each turn to the right specialist agent
  • Keeping answers tied to curated tool data such as prices or balances
  • Adding a voice assistant or an MCP tool provider to an iOS or macOS app

Example prompts

  • “Set up an Orchestrator with a billing agent and a shipping agent for my iOS app.”
  • “Make the stock price answers come only from tool results by using a GroundedAgent.”
  • “Store chat history on the device and summarize older turns.”
  • “Add the AgentSquadMCP module and connect an MCP server as a tool provider.”

Requirements

  • A Swift project targeting iOS 16+ or macOS 14+
  • An OpenAI-compatible chat completions endpoint

What it can do on your machine

Read from SKILL.md and the folder at commit 729d5f5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (Swift, from the files we listed), which the agent can run.

    Shell commands in SKILL.md call:

    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • dakera.ai

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

AgentSquad for Swift loads about 3.5k tokens when it runs. Until then it costs about 99 tokens; SKILL.md has 1,487 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~99
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from 2FastLabs/agent-squad at commit 729d5f5, republished under its Apache-2.0 licence (© 2FastLabs). 1,487 words, ~3,463 tokens.

Download SKILL.mdSave it as .claude/skills/agent-squad-swift/SKILL.md (or your agent's skills folder). This skill also uses 120 other files; get the full folder from GitHub.
name
agent-squad-swift
description
Use when building or modifying a Swift app that uses the AgentSquad Swift framework — on-device multi-agent orchestration for iOS 16+ / macOS 14+: orchestrator, agents (Agent, GroundedAgent), classifier routing, LLM clients (OpenAI-compatible), tools (native + MCP), tool UIs/widgets, on-device storage, tracing, and realtime voice — built-in types and custom implementations.

AgentSquad Swift — assistant guide

Protocol-driven, on-device multi-agent framework (Swift 6.2, iOS 16+ / macOS 14+; persistence via FileChatStorage on iOS 16+, DeviceChatStorage on iOS 17+). This is guidance and a map — not an API reference. Read the exact signatures from the source (swift/Sources/AgentSquad/) and the worked recipes from the docs site sources (docs/src/content/docs/swift/); this file tells you what to use, when, and what to watch out for.

When to use what

  • One assistant → an Agent (or GroundedAgent) + an Orchestrator with no classifier. No routing hop.
  • Several specialists → multiple agents + an LLMClassifier; the orchestrator routes each turn.
  • Answers must not drift from data (prices, stock, balances) → GroundedAgent: a Brain calls tools, an isolated Presenter speaks only from the curated results (it can be a smaller/local model).
  • Voice → a VoiceAssistant (a peer of the orchestrator, not an agent): OpenAIVoiceAssistant (single LLM + tools, speaks directly — the spoken analog of Agent) or OpenAIGroundedVoiceAssistant (Brain → Presenter, can't drift from data — analog of GroundedAgent).

Every component is a Sendable protocol with one built-in implementation — swap in your own anywhere.

Modules (import only what you use)

ImportPulls inContents
AgentSquadnothing externalprotocols, Agent, GroundedAgent, Orchestrator, LLMClassifier, ChatCompletionsClient, DakeraRetriever, FileChatStorage, DeviceChatStorage, InMemoryChatStorage, TransformingChatStorage, SummarizingChatStorage, OSLogTracer, OTLP export
AgentSquadMCPMCP Swift SDKMCPServer (= MCPToolProvider), SDKMCPClient
AgentSquadAudioAVFoundationVoiceProcessedAudioIO (capture+playback, one engine, AEC — the recommended wiring), MicCapture (voice-processed/AEC by default), AudioPlayback, VoiceProcessing, AudioSessionPolicy (needs NSMicrophoneUsageDescription)

SwiftPM: .package(url: "https://github.com/2FastLabs/agent-squad", branch: "main").

How a turn works

Two peer runtimes share contracts but not a control loop: a turn-based Orchestrator (classify? → run agent → stream → persist) and a long-lived VoiceAssistant for voice. Either way you consume an AsyncThrowingStream<AgentEvent, any Error> — the one idiom worth memorizing:

swift
for try await event in orchestrator.route(.text("hello"), userId: "u1", sessionId: "s1") {
    switch event {
    case .textDelta(let token): /* stream tokens */
    case .final(let message):   /* the message that was persisted */
    case .toolCall, .widget, .thinking, .error: break   // .error is a user-facing string
    }
}

.error carries a user-facing message; real programmer/transport failures throw through the stream. .final is what the orchestrator persists. Inputs/messages are value types (AgentInput.text, ConversationMessage, ContentPart, JSONValue) in Sources/AgentSquad/Core/.

The pieces

  • Orchestrator drives a turn. The classifier is optional — omit it for a single agent.
  • Agent is one LLM with an internal tool loop. GroundedAgent is two LLMs (Brain + isolated Presenter) for answers that must stay grounded in tool results. The Presenter never sees chat history or the Brain's transcript; presenterInput picks .questionAndData (default) or .dataOnly.
  • ChatCompletionsClient speaks the OpenAI wire — point its baseURL at OpenAI, Azure, OpenRouter, Groq, or a local Ollama/llama.cpp. Implement LLMClient for anything else.
  • Tools come from a ToolProvider. Built-ins: ToolKit holds native tools — Tool.local (Swift closure) and Tool.http/Tool.get/.post (declarative HTTP, with a ToolParameter DSL so you don't hand-write JSON Schema); HTTPToolGroup(baseURL:…) declares one API's shared config once, then one line per endpoint; MCPServer(url:) connects an MCP server; and AggregateToolProvider composes any mix behind one seam; DakeraRetriever(namespace:…) is a ToolProvider backed by a self-hosted Dakera memory server — it exposes a search_memory tool for grounding (and a direct retrieve(_:) API), talking to Dakera's REST endpoint over URLSession with no extra dependency. A ToolResult is three-part: text → the model's context, structuredContent → curator/UI data, ui → an optional widget.
  • FileChatStorage (JSON files, iOS 16+) and DeviceChatStorage (SwiftData, iOS 17+) persist history on-device; InMemoryChatStorage is a non-persistent, seedable single-conversation store. TransformingChatStorage wraps any store and runs a MessageTransform before each save (PII scrub / redact / drop) — reads pass through, message.mappingText { … } covers the text-only case. SummarizingChatStorage wraps any store and keeps agent context small: on the first fetch that exceeds triggerAt message pairs the user-supplied ChatSummarizer is called and the compressed result is held in an in-memory buffer; subsequent saves append to the buffer and recompress eagerly if needed; fetchAllChats is never intercepted so raw history stays available for analytics — the inner store is never written by the summarizer. OSLogTracer is the default tracer; wire ProcessingTracer + OTLPExporter to ship traces to Langfuse/LangSmith/Datadog/…
  • Voice: two VoiceAssistants over a WebSocket — OpenAIVoiceAssistant (single LLM, speaks directly) and OpenAIGroundedVoiceAssistant (grounded Brain → Presenter). Both are self-sufficient (own tracer/store/userId/sessionId; with a store, completed turns persist and prior history seeds on start()), wired to the mic/speaker by RealtimeRuntime. Preferred audio wiring: ONE VoiceProcessedAudioIO instance passed as both input: and output: — capture and playback share one voice-processed AVAudioEngine, so the assistant's audio is guaranteed to be in the echo canceller's reference path. The split MicCapture/AudioPlayback pair also works (capture is voice-processed by default; the AEC reference is then device-level/route-dependent; MicCapture(voiceProcessing: nil) = raw capture). All three audio classes take an AudioSessionPolicy (.managed / .custom / .external for apps that own the AVAudioSession) and a configureEngine hook exposing the raw AVAudioEngine. Session tuning on both: transcriptionModel (the user's STT only), turnDetection (.semanticVAD(eagerness:) / .serverVAD(threshold:…) / .disabled), and sessionOverrides (deep-merged into the generated session.update last — the escape hatch for unmodeled keys like audio.input.noise_reduction). On OpenAIVoiceAssistant additionally reasoning: RealtimeReasoningEffort (.minimal….xhigh, session-wide, reasoning models like gpt-realtime-2 only) and toolReasoningEffort: [String: RealtimeReasoningEffort] — turn-sticky escalation: once a turn calls a listed tool, that turn's subsequent responses are created with the mapped effort (highest wins), so payload synthesis thinks harder while lookups stay fast.

Custom implementations

Conform to the protocol and pass your type where the built-in goes. Each seam has a worked example on its doc page (paths below are under docs/src/content/docs/swift/, published at /agent-squad/swift/…); signatures live in Sources/AgentSquad/.

SeamProtocolSource · doc
AgentAgentProtocolCore/AgentProtocol.swift · agents/custom
ClassifierClassifier (return an agent from the passed list, or nil)Core/Classifier/ · classifiers/custom
LLM clientLLMClientCore/LLMClient.swift · llm/custom
ToolsToolProviderCore/Tooling/ · tools/custom
Tool-output curatorToolOutputCurator (where you trim oversized output)Core/Presenter/ · ui/built-in/curators
Presenter promptPresenterPromptCore/Presenter/ · agents/built-in/grounded-agent
StorageChatStorageCore/Storage/ · storage/custom
TracingTraceExporter (easiest) / SpanProcessor / Tracer / RedactorCore/Tracing/ · tracing/custom
Realtime transportRealtimeTransportRuntimes/Realtime/ · voice/custom
Audio I/OAudioInput / AudioOutputRuntimes/Realtime/AudioIO.swift · audio/custom
Show full SKILL.md (591 more words)Show less

Gotchas

  • maxToolRounds: Agent/GroundedAgent default to 20; the AgentProtocol default is 1. A custom agent that injects tools but leaves 1 silently disables its tool loop.
  • Classifier is optional: no classifier ⇒ no routing hop / no extra model call. A nil selection falls back to the default agent (no confidence threshold).
  • Persistence: only turns ending in .final are saved.
  • ChatCompletionsClient: retries only before the first event; some local runtimes reject stream_options/unknown body keys — override via extraBody.
  • JSONValue: whole-number doubles decode to .int; carry large IDs as .string.
  • Storage: FileChatStorage (JSON, iOS 16+, scopes per-call by userId/sessionId/agentId — e.g. sessionId to isolate per match) or DeviceChatStorage (SwiftData, iOS 17+, bound to one userId). Both default to Library/Caches (disposable). InMemoryChatStorage (iOS 16+) is non-persistent and holds one conversation — construct it empty or seeded with a prior conversation to load one into a session. Wrap any store in TransformingChatStorage to scrub/redact before persistence; prefer redacting over returning nil (dropping one side of an exchange can make the store skip its counterpart via the consecutive-same-role guard). Wrap any store in SummarizingChatStorage(wrapping:summarizer:triggerAt:keepLast:) to keep agent context small: the buffer activates lazily on the first qualifying fetch; once active, saves append to it and compress eagerly; fetchAllChats bypasses the buffer entirely.
  • Tracing lifecycle: nothing drains the tracer for you — flush on background, shut down on termination. OSLogTracer logs no payloads. Redaction hashes ids + clips strings but does not pattern-scrub PII — supply a custom Redactor for that. A realtime answer generation (response/presenter) is backdated to its response.created receive-time via SpanHandle.generation(…, startedAt:), so the exported span carries the real call latency instead of a ~0 duration (the Realtime API sends no server-side timing). The overload defaults to stamping now, so custom SpanHandles need not implement it.
  • Realtime is a peer runtime, not an agent; its events stream is non-throwing; needs NSMicrophoneUsageDescription; always stop(). In-band failures arrive as .error(code:message:) — code is the API's machine code (e.g. rate_limit_exceeded), response_failed when the turn's live response ends with status: "failed" (a late failed done for a response already cancelled by barge-in is consumed silently), or transport_closed when the socket dies (then events finishes — the end-of-session signal); message is the human-readable detail for logs, not for verbatim display. Failures are recorded on the trace spans they end (turn/session/tool), so they export with status: error instead of vanishing.
  • Barge-in truncation: on interrupt the session sends conversation.item.truncate so the server drops the unheard audio + transcript from context (OpenAI docs' WebSocket procedure). Automatic when wired by RealtimeRuntime with the built-in outputs; a custom AudioOutput gets it by implementing playedMilliseconds() (protocol default returns nil → truncation is skipped, everything else works). Applies to in-band spoken replies only — the grounded presenter is out-of-band (conversation: "none"), its items never enter the conversation, so interrupting it deliberately sends no truncate.
  • Voice processing (AEC): on by default; if it can't be enabled start() throws .voiceProcessingUnavailable (degrade deliberately with MicCapture(voiceProcessing: nil)). For guaranteed echo cancellation use VoiceProcessedAudioIO and pass the same instance as input and output (its start()/stop() are idempotent — the runtime calls each twice). The simulator does no AEC — validate on a device. VP quiets the speaker (counter with duckingLevel: .min); never enable VP on a playback-only engine. With sessionPolicy: .external the app must configure and activate its AVAudioSession before start(), and should use the same policy everywhere.
  • ContentPart Codable keys off case + label names — renaming breaks stored history.

Go deeper

  • Prose & recipes — the Starlight docs under docs/src/content/docs/swift/ (run the site from docs/ with npm run dev): quick-start, orchestrator/overview, agents/built-in/grounded-agent, mcp/overview, ui/overview, storage/built-in/device, tracing/built-in/otlp-exporter, voice/built-in/openai-voice, voice/built-in/openai-grounded-voice, guides/*.
  • Exact signatures — swift/Sources/AgentSquad/ (Core/, Agents/, Core/LLM/, Core/Tooling/, Core/Tracing/, Runtimes/Realtime/).

© 2FastLabs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 120 other files in swift of 2FastLabs/agent-squad.

  • SKILL.md
  • .gitignore
  • README.md
  • Sources/AgentSquad/Agents/Agent.swift
  • Sources/AgentSquad/Agents/GroundedAgent.swift
  • Sources/AgentSquad/Core/AgentProtocol.swift
  • Sources/AgentSquad/Core/Classifier/Classifier.swift
  • Sources/AgentSquad/Core/Classifier/LLMClassifier.swift
  • Sources/AgentSquad/Core/JSONValue.swift
  • Sources/AgentSquad/Core/LLM/ChatCompletionsClient.swift
  • Sources/AgentSquad/Core/LLM/ChatCompletionsTransport.swift
  • Sources/AgentSquad/Core/LLM/ChatCompletionsWire.swift
  • Sources/AgentSquad/Core/LLMClient.swift
  • Sources/AgentSquad/Core/Message.swift
  • Sources/AgentSquad/Core/Presenter
  • … and 106 more

Open the folder on GitHubat commit 729d5f5

Compare with similar skills

AgentSquad for Swift next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

AgentSquad for Swift compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
AgentSquad for Swift this skill2FastLabs/agent-squad7.8k—~3.5kAutomated safety check: PassApache-2.0
Iphone Useleeguooooo/iphone-use119—~2.7kAutomated safety check: PassMIT
Dive Into LangGraphluochang212/dive-into-langgraph457—~837Automated safety check: NotesCustom licence
Agent Frameworkjihadkhawaja/Egroo178—~1.9kAutomated safety check: PassApache-2.0
Openmaopenma-ai/open-managed-agents316—~854Automated safety check: PassApache-2.0
Tool Designagentailor/fullstack-langgraph-nextjs-agent132—~3.2kAutomated safety check: PassMIT

Similar skills

  • Iphone Use

    leeguooooo/iphone-use

    A skill your agent uses when a task needs a real iPhone — operating iOS apps that have no API (Apple Health, banking, IM apps), exporting on-phone data, tapping/typing/scrolling on the phone, or…

    119 GitHub stars~2.7k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Dive Into LangGraph

    luochang212/dive-into-langgraph

    A Chinese-language guide and reference for building agents with LangGraph 1.0, from a first ReAct agent through middleware, memory, MCP, RAG and web search.

    457 GitHub stars~837 tokensUpdated 28 days ago
    AI & LLM EngineeringAuto-check: notes
  • Agent Framework

    jihadkhawaja/Egroo

    Build, extend, and debug AI agents in Egroo using the Microsoft Agent Framework (C .NET).

    178 GitHub stars~1.9k tokensUpdated 6 mo ago
    AI & LLM EngineeringAuto-check passed
  • Openma

    openma-ai/open-managed-agents

    Use the openma platform to build, deploy, and manage AI agents.

    316 GitHub stars~854 tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Tool Design

    agentailor/fullstack-langgraph-nextjs-agent

    Design and verify tools that AI agents can actually use — for any framework or language (MCP servers, LangChain/LangGraph, function-calling, raw JSON schema; TypeScript, Python, or otherwise).

    132 GitHub stars~3.2k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed
  • Agent Eval Cases

    agentailor/fullstack-langgraph-nextjs-agent

    Decide which AI agent behaviors are worth an eval case, then write those cases — harness-, framework-, and language-agnostic.

    132 GitHub stars~5.3k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed

More from 2FastLabs/agent-squad

  • Agent Squad Python Guide

    2FastLabs/agent-squad

    Map of the agent-squad Python framework for async multi-agent orchestration: which agent, classifier, storage and tool provider to pick, and the pitfalls to avoid.

    7.8k GitHub stars~4.7k tokensUpdated yesterday
    Auto-check passed
  • Agent Squad for TypeScript

    2FastLabs/agent-squad

    Guide to building Node.js and TypeScript apps on the agent-squad package: orchestrator, agent types, classifier routing, storage, retrievers and MCP tools.

    7.8k GitHub stars~4.3k tokensUpdated yesterday
    Auto-check passed

Questions about AgentSquad for Swift

What does AgentSquad for Swift do?

Guides building on-device multi-agent apps in Swift with the AgentSquad framework: which agent, orchestrator, classifier, storage or voice type fits each situation. This is an assistant guide for Swift apps built on AgentSquad, a protocol-driven, on-device multi-agent framework for iOS 16+ and macOS 14+. It works as a map of what to use and when rather than an API reference, so the agent is told to read exact signatures from the package source and worked recipes from the project's docs.

When should I use AgentSquad for Swift?

AgentSquad for Swift fits situations like: building a Swift app that runs several AI agents on the device; adding a classifier that routes each turn to the right specialist agent; keeping answers tied to curated tool data such as prices or balances; adding a voice assistant or an MCP tool provider to an iOS or macOS app.

How do I install AgentSquad for Swift in Claude Code?

Run `npx skills add 2FastLabs/agent-squad --skill agent-squad-swift -a claude-code`. Or copy the skill folder (swift in 2FastLabs/agent-squad) into .claude/skills/agent-squad-swift in your project. Claude Code loads it when a task matches its description.

How do I install AgentSquad for Swift in Codex?

Run `npx skills add 2FastLabs/agent-squad --skill agent-squad-swift -a codex`. Or copy the skill folder (swift in 2FastLabs/agent-squad) into .agents/skills/agent-squad-swift in your project. Codex loads it when a task matches its description.

Can I use AgentSquad for Swift in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add 2FastLabs/agent-squad --skill agent-squad-swift -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/agent-squad-swift, .gemini/skills/agent-squad-swift, .github/skills/agent-squad-swift and .opencode/skills/agent-squad-swift in your project.

What does AgentSquad for Swift need to run?

Going by SKILL.md and its folder, AgentSquad for Swift needs Swift for the scripts in its folder and the command-line tools its instructions call (npm). Our summary lists: A Swift project targeting iOS 16+ or macOS 14+; An OpenAI-compatible chat completions endpoint.

Does AgentSquad for Swift access the network?

SKILL.md names 1 domain. As links in the text: dakera.ai. This is read from the text; nothing was executed.

Is AgentSquad for Swift safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does AgentSquad for Swift use?

AgentSquad for Swift is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does AgentSquad for Swift use?

About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to AgentSquad for Swift?

Skills that share tags, products or a category with AgentSquad for Swift: Iphone Use (leeguooooo/iphone-use, 119 stars), Dive Into LangGraph (luochang212/dive-into-langgraph, 457 stars), Agent Framework (jihadkhawaja/Egroo, 178 stars) and Openma (openma-ai/open-managed-agents, 316 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains AgentSquad for Swift?

2FastLabs (a GitHub organization) maintains it in 2FastLabs/agent-squad, which has 7,790 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 8, 2026.

Source: 2FastLabs/agent-squad on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.