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…
Guides building on-device multi-agent apps in Swift with the AgentSquad framework: which agent, orchestrator, classifier, storage or voice type fits each situation.
$ npx skills add 2FastLabs/agent-squad --skill agent-squad-swift -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install 2FastLabs/agent-squad agent-squad-swift --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "agent-squad-swift" agent skill from https://github.com/2FastLabs/agent-squad/tree/main/swift into .claude/skills/agent-squad-swift/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-squad-swift", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/2FastLabs/agent-squad/tree/main/swiftType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add 2FastLabs/agent-squad --skill agent-squad-swift -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install 2FastLabs/agent-squad agent-squad-swift --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/2FastLabs/agent-squad.git skills-src && mkdir -p .agents/skills && cp -r skills-src/swift .agents/skills/agent-squad-swift && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "agent-squad-swift" agent skill from https://github.com/2FastLabs/agent-squad/tree/main/swift into .agents/skills/agent-squad-swift/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-squad-swift", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add 2FastLabs/agent-squad --skill agent-squad-swift -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install 2FastLabs/agent-squad agent-squad-swift --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/2FastLabs/agent-squad.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/swift .cursor/skills/agent-squad-swift && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "agent-squad-swift" agent skill from https://github.com/2FastLabs/agent-squad/tree/main/swift into .cursor/skills/agent-squad-swift/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-squad-swift", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/2FastLabs/agent-squad.git --path swift--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add 2FastLabs/agent-squad --skill agent-squad-swift -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install 2FastLabs/agent-squad agent-squad-swift --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/2FastLabs/agent-squad.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/swift .gemini/skills/agent-squad-swift && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "agent-squad-swift" agent skill from https://github.com/2FastLabs/agent-squad/tree/main/swift into .gemini/skills/agent-squad-swift/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-squad-swift", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install 2FastLabs/agent-squad agent-squad-swiftInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add 2FastLabs/agent-squad --skill agent-squad-swift -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/2FastLabs/agent-squad.git skills-src && mkdir -p .github/skills && cp -r skills-src/swift .github/skills/agent-squad-swift && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "agent-squad-swift" agent skill from https://github.com/2FastLabs/agent-squad/tree/main/swift into .github/skills/agent-squad-swift/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-squad-swift", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add 2FastLabs/agent-squad --skill agent-squad-swift -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install 2FastLabs/agent-squad agent-squad-swift --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/2FastLabs/agent-squad.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/swift .opencode/skills/agent-squad-swift && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "agent-squad-swift" agent skill from https://github.com/2FastLabs/agent-squad/tree/main/swift into .opencode/skills/agent-squad-swift/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-squad-swift", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
agent-squad-swiftGuides 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.
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+.
Read from SKILL.md and the folder at commit 729d5f5. It shows what the files ask for, not the result of running them.
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.
Ships script files (Swift, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
dakera.aiFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from 2FastLabs/agent-squad at commit 729d5f5, republished under its Apache-2.0 licence (© 2FastLabs). 1,487 words, ~3,463 tokens.
.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.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.
Agent (or GroundedAgent) + an Orchestrator with no classifier. No routing hop.LLMClassifier; the orchestrator routes each turn.GroundedAgent: a Brain calls
tools, an isolated Presenter speaks only from the curated results (it can be a smaller/local model).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.
| Import | Pulls in | Contents |
|---|---|---|
AgentSquad | nothing external | protocols, Agent, GroundedAgent, Orchestrator, LLMClassifier, ChatCompletionsClient, DakeraRetriever, FileChatStorage, DeviceChatStorage, InMemoryChatStorage, TransformingChatStorage, SummarizingChatStorage, OSLogTracer, OTLP export |
AgentSquadMCP | MCP Swift SDK | MCPServer (= MCPToolProvider), SDKMCPClient |
AgentSquadAudio | AVFoundation | VoiceProcessedAudioIO (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").
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:
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/.
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.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/…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.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/.
| Seam | Protocol | Source · doc |
|---|---|---|
| Agent | AgentProtocol | Core/AgentProtocol.swift · agents/custom |
| Classifier | Classifier (return an agent from the passed list, or nil) | Core/Classifier/ · classifiers/custom |
| LLM client | LLMClient | Core/LLMClient.swift · llm/custom |
| Tools | ToolProvider | Core/Tooling/ · tools/custom |
| Tool-output curator | ToolOutputCurator (where you trim oversized output) | Core/Presenter/ · ui/built-in/curators |
| Presenter prompt | PresenterPrompt | Core/Presenter/ · agents/built-in/grounded-agent |
| Storage | ChatStorage | Core/Storage/ · storage/custom |
| Tracing | TraceExporter (easiest) / SpanProcessor / Tracer / Redactor | Core/Tracing/ · tracing/custom |
| Realtime transport | RealtimeTransport | Runtimes/Realtime/ · voice/custom |
| Audio I/O | AudioInput / AudioOutput | Runtimes/Realtime/AudioIO.swift · audio/custom |
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.nil selection
falls back to the default agent (no confidence threshold)..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.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.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.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.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.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.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/*.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
SKILL.md and 120 other files in swift of 2FastLabs/agent-squad.
Open the folder on GitHubat commit 729d5f5
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| AgentSquad for Swift this skill2FastLabs/agent-squad | 7.8k | — | ~3.5k | Automated safety check: Pass | Apache-2.0 | |
| Iphone Useleeguooooo/iphone-use | 119 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Dive Into LangGraphluochang212/dive-into-langgraph | 457 | — | ~837 | Automated safety check: Notes | Custom licence | |
| Agent Frameworkjihadkhawaja/Egroo | 178 | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Openmaopenma-ai/open-managed-agents | 316 | — | ~854 | Automated safety check: Pass | Apache-2.0 | |
| Tool Designagentailor/fullstack-langgraph-nextjs-agent | 132 | — | ~3.2k | Automated safety check: Pass | MIT |
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…
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.
jihadkhawaja/Egroo
Build, extend, and debug AI agents in Egroo using the Microsoft Agent Framework (C .NET).
openma-ai/open-managed-agents
Use the openma platform to build, deploy, and manage AI agents.
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).
agentailor/fullstack-langgraph-nextjs-agent
Decide which AI agent behaviors are worth an eval case, then write those cases — harness-, framework-, and language-agnostic.
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.
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.
Categories
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.
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.
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.
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.
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.
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.
SKILL.md names 1 domain. As links in the text: dakera.ai. This is read from the text; nothing was executed.
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.
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.
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.
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.
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.