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.
Teaches the Swarms Python framework: the Agent class, tools, loops, memory and multi-agent structures such as sequential, concurrent and graph workflows.
$ npx skills add kyegomez/swarms --skill swarms -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kyegomez/swarms swarms --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
Claude Code skills documentation · loads skills from .claude/skills/
Install the "swarms" agent skill from https://github.com/kyegomez/swarms/tree/master into .claude/skills/swarms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swarms", 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.
$ npx skills add kyegomez/swarms --skill swarms -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kyegomez/swarms swarms --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "swarms" agent skill from https://github.com/kyegomez/swarms/tree/master into .agents/skills/swarms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swarms", 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 kyegomez/swarms --skill swarms -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kyegomez/swarms swarms --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "swarms" agent skill from https://github.com/kyegomez/swarms/tree/master into .cursor/skills/swarms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swarms", 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.
$ npx skills add kyegomez/swarms --skill swarms -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kyegomez/swarms swarms --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "swarms" agent skill from https://github.com/kyegomez/swarms/tree/master into .gemini/skills/swarms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swarms", 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 kyegomez/swarms swarmsInstalls 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 kyegomez/swarms --skill swarms -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "swarms" agent skill from https://github.com/kyegomez/swarms/tree/master into .github/skills/swarms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swarms", 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 kyegomez/swarms --skill swarms -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kyegomez/swarms swarms --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "swarms" agent skill from https://github.com/kyegomez/swarms/tree/master into .opencode/skills/swarms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "swarms", 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.
swarmsTeaches the Swarms Python framework: the Agent class, tools, loops, memory and multi-agent structures such as sequential, concurrent and graph workflows.
The skill is a working guide to the Swarms framework, in which every setup is built from one primitive, the Agent, that multi-agent structures compose. It is verified against swarms v14.0.0 and opens with golden rules: import Agent from the top-level swarms package, give every agent a unique agent_name because memory files and routing key on it, default to a max_loops of 1, pass tools=None instead of an empty list, and never set streaming_on together with streaming_callback.
It documents setup with pip install -U swarms and provider keys for any LiteLLM model string, then tabulates the Agent parameters that matter, such as agent_name, system_prompt, model_name, max_loops, tools, temperature, context_length and output_type, out of more than 90. The architectures it names include SequentialWorkflow, ConcurrentWorkflow, GraphWorkflow, HierarchicalSwarm and SwarmRouter, and it sends the agent to the 586 runnable examples in the repository's examples folder.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0e615ce. 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 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
pipFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
docs.swarms.worlddocs.litellm.aiFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
OPENAI_API_KEYANTHROPIC_API_KEYGROQ_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Swarms Multi-Agent Framework loads about 5.5k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 1,306 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); the scripts in this folder are not scanned.
The full file from kyegomez/swarms at commit 0e615ce, republished under its Apache-2.0 licence (© kyegomez). 1,306 words, ~5,526 tokens.
.claude/skills/swarms/SKILL.md (or your agent's skills folder). This skill also uses 1466 other files; get the full folder from GitHub.Swarms is a multi-agent orchestration framework. Everything is built from one primitive — Agent — which multi-agent structures compose. This document is verified against swarms v14.0.0.
from swarms import Agent, never from swarms.structs.agent import Agent. The one common exception is PlannerWorkerSwarm (see below).agent_name — memory files and swarm routing key on it.max_loops=1. Use a specific integer for production. Use "auto" only for genuinely open-ended work.tools=None, not tools=[]. An empty list breaks schema generation.examples/ — 586 runnable examples live there. One is probably close to what you need.streaming_on=True and streaming_callback together. Pick one.pip install -U swarmsSet the key for whichever provider you use — any LiteLLM model string works:
export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
export GROQ_API_KEY="..."
export WORKSPACE_DIR="agent_workspace" # where agent state and memory landfrom swarms import Agent
agent = Agent(
agent_name="Analyst",
agent_description="Analyzes market data and produces summaries.",
system_prompt="You are a precise financial analyst.",
model_name="gpt-5.4",
max_loops=1,
)
result = agent.run("Summarize the state of the semiconductor market.")Agent.__init__ accepts 90+ parameters. These are the ones that matter:
| Parameter | Type | Default | Purpose |
|---|---|---|---|
agent_name | str | "swarm-worker-01" | Unique identity; keys memory + routing |
agent_description | str | generic | How orchestrators decide to route to it |
system_prompt | str | built-in | Persona and instructions |
model_name | str | "gpt-5.4" | Any LiteLLM model string |
max_loops | int | "auto" | 1 | Iterations, or autonomous mode |
tools | list[Callable] | None | Python functions the agent may call |
temperature | float | 0.5 | Sampling temperature |
max_tokens | int | model max | Output cap per call |
top_p | float | None | Nucleus sampling |
context_length | int | None | Token budget; triggers compression at 90% |
output_type | str | "str-all-except-first" | Return shape — see below |
streaming_on | bool | False | Stream tokens to stdout |
streaming_callback | Callable | None | Stream tokens to your function |
interactive | bool | False | REPL — prompts the user each loop |
verbose | bool | False | Debug logging |
print_on | bool | True | Print the final output |
autosave | bool | False | Persist agent state after each run |
retry_attempts | int | 3 | LLM call retries |
reasoning_effort | str | None | minimal/low/medium/high/xhigh/ultra/max/none |
thinking_tokens | int | 1024 | Extended thinking budget (Claude) |
mcp_url / mcp_urls | str / list[str] | None | MCP servers to load tools from |
handoffs | list[Agent] | None | Agents this one may delegate to |
persistent_memory | bool | False | Read/write MEMORY.md across restarts |
context_compression | bool | True | Auto-summarize near the context limit |
plan_enabled | bool | False | Plan before executing |
mode | str | "standard" | "standard", "fast", "interactive" |
fallback_models | list[str] | None | Models to try if the primary fails |
output_type options: "str", "list", "dict", "json", "yaml", "final", "last", "all", "basemodel", "str-all-except-first", "dict-all-except-first", "dict-final", "list-final".
agent.run(task="...") # standard
agent.run(task="...", img="chart.png") # one image
agent.run(task="...", imgs=["a.png", "b.png"]) # several images
agent.run(task="...", n=3) # 3 independent samples
await agent.arun("...") # asyncAgent.run signature: run(task=None, img=None, imgs=None, correct_answer=None, streaming_callback=None, n=1).
# To stdout
agent = Agent(agent_name="Writer", model_name="gpt-5.4", streaming_on=True)
agent.run("Write a haiku about distributed systems.")
# To a callback (do NOT combine with streaming_on)
def on_token(token: str) -> None:
print(token, end="", flush=True)
agent = Agent(agent_name="Writer", model_name="gpt-5.4", streaming_callback=on_token)
agent.run("Write a haiku.")
# Async streaming
async for token in agent.arun_stream("Explain async/await."):
print(token, end="", flush=True)Any Python function with type hints and a docstring becomes a tool. The framework generates the OpenAI function schema automatically — the docstring is the tool description the model reads, so write it for the model.
from swarms import Agent
def get_stock_price(ticker: str) -> str:
"""Fetch the current stock price for a ticker symbol.
Args:
ticker: Stock ticker symbol, e.g. 'AAPL'.
Returns:
The current price as a formatted string.
"""
import yfinance as yf
return f"{ticker}: ${yf.Ticker(ticker).fast_info['last_price']:.2f}"
agent = Agent(
agent_name="StockAnalyst",
model_name="gpt-5.4",
tools=[get_stock_price],
max_loops=3, # needs > 1 so it can act on the tool result
)
agent.run("What are Apple and Microsoft trading at?")max_loops must exceed 1 for tool use — loop 1 calls the tool, loop 2 uses the result.
Related knobs: tool_call_summary=True (summarize tool output), show_tool_execution_output=True (print raw returns), tool_retry_attempts (retries on tool failure).
agent = Agent(
agent_name="MCPAgent",
model_name="gpt-5.4",
mcp_url="http://localhost:8000/sse",
# or: mcp_urls=["http://localhost:8000/sse", "http://localhost:8001/sse"]
max_loops=3,
)Inspect what a server exposes before wiring it up:
from swarms.tools.mcp_manager import MCPManager
mgr = MCPManager(mcp_url="http://localhost:8000/sse")
print(mgr.list_tool_names())
schemas = mgr.get_tools() # aget_tools() for the async formGive an agent a roster it can delegate to. It receives a handoff_task tool automatically.
triage = Agent(
agent_name="Triage",
model_name="gpt-5.4",
handoffs=[billing_agent, technical_agent, refunds_agent],
max_loops=3,
)
triage.run("My invoice is wrong and the app won't load.")max_loops="auto")The agent runs plan → execute → reflect until it decides it is finished, with 16 built-in tools available:
| Group | Tools |
|---|---|
| Planning | create_plan, think, subtask_done, complete_task, respond_to_user |
| Files | create_file, update_file, read_file, list_directory, delete_file |
| System | run_bash, grep |
| Delegation | create_sub_agent, assign_task, check_sub_agent_status, cancel_sub_agent_tasks |
agent = Agent(
agent_name="Researcher",
model_name="gpt-5.4",
max_loops="auto",
tools=[search_web], # your tools stack on top of the built-ins
persistent_memory=True,
context_compression=True,
context_length=32000,
)
agent.run("Research the top 5 vector databases and write compare.md")Restrict the built-in set with selected_tools (default "all"):
agent = Agent(
agent_name="ReadOnly",
max_loops="auto",
selected_tools=["create_plan", "think", "read_file", "grep", "complete_task"],
)Inspect the full list at runtime with agent.get_all_selected_tools().
⚠️ run_bash and delete_file are real. In autonomous mode the agent can modify and delete files and execute shell commands. Scope selected_tools and set WORKSPACE_DIR deliberately.
persistent_memory=True reads {WORKSPACE_DIR}/agents/{agent_name}/MEMORY.md on startup and appends to it each response. It is off by default — set it in every process that should share the memory.
agent = Agent(agent_name="ProjectAssistant", model_name="gpt-5.4", persistent_memory=True)
agent.run("My project is called Helios. Remember that.")
# Later process, same agent_name and the flag set again → it remembers.context_compression=True (default) fires at 90% of context_length, summarizing history in place so long sessions never hit the wall. Leave it on for anything long-running.
from swarms import Conversation
conv = Conversation(
name="my-conversation", # note: `name`, not `agent_name`
system_prompt="You are helpful.",
time_enabled=True,
token_count=True,
)
conv.add("user", "What is 2+2?")
conv.add("assistant", "4.")
conv.return_history_as_string()
conv.search("2+2")
conv.compact(summary="User asked arithmetic. Answer: 4.") # archives, then collapses
conv.save_as_json("conv.json")| Situation | Use |
|---|---|
| Single task | Agent |
| Linear A→B→C | SequentialWorkflow |
| Same task, many agents at once | ConcurrentWorkflow |
| Custom mix of sequential + parallel | AgentRearrange |
| Dependency graph / fan-out-fan-in | GraphWorkflow |
| Many models, one synthesized answer | MixtureOfAgents |
| Manager delegates to specialists | HierarchicalSwarm |
| Open discussion | GroupChat |
| Discrete decision by consensus | MajorityVoting |
| Quality-critical evaluation | CouncilAsAJudge |
| Structured adversarial debate | DebateWithJudge |
| Deep multi-stage research | HeavySwarm |
| Route each task to the best agent | MultiAgentRouter |
| Plan then execute with workers | PlannerWorkerSwarm |
| Don't know yet | SwarmRouter(swarm_type="auto") or AutoSwarmBuilder |
Each agent's output becomes the next agent's context.
from swarms import Agent, SequentialWorkflow
pipeline = SequentialWorkflow(
agents=[researcher, analyst, writer],
max_loops=1,
output_type="dict",
)
pipeline.run("Analyze how rate hikes affect tech stocks.")Options: team_awareness=True (agents see the roster), multi_agent_collab_prompt=True, drift_detection=True.
All agents run the same task in parallel.
from swarms import Agent, ConcurrentWorkflow
workflow = ConcurrentWorkflow(
agents=agents,
max_workers=5,
show_dashboard=True,
on_error="store", # or "raise"
)
workflow.run("List 10 use cases for multi-agent AI.")from swarms import Agent, AgentRearrange
pipeline = AgentRearrange(
agents=[planner, coder, reviewer, tester],
flow="Planner -> Coder -> Reviewer, Tester",
max_loops=1,
)
pipeline.run("Build an email validator.")A -> B — sequential, B receives A's outputA, B — concurrent, same inputA -> B, C -> D — A, then B and C in parallel, then D on their combined outputEvery name in flow must match an agent_name in agents, or it fails at run time. There is no human-in-the-loop step — split into separate .run() calls and insert your own input() between them.
Pass agents directly to add_node/add_edge; there is no need to wrap them in Node objects.
from swarms import Agent, GraphWorkflow
wf = GraphWorkflow(name="research-dag", max_loops=1)
for a in (ingestion, branch_a, branch_b, merger):
wf.add_node(a)
wf.add_edge(ingestion, branch_a) # fan out
wf.add_edge(ingestion, branch_b)
wf.add_edge(branch_a, merger) # fan in
wf.add_edge(branch_b, merger)
wf.set_entry_points(["Ingestion"])
wf.set_end_points(["Merger"])
def on_done(node: str, result) -> None:
print(f"[{node}] {len(str(result))} chars")
results = wf.run(task="Analyze this dataset two ways and merge.", on_node_complete=on_done)add_node also accepts a nested GraphWorkflow. Other options: backend="networkx"|"rustworkx", max_parallel_nodes, checkpoint_dir, streaming_callback.
Swap architectures without rewriting orchestration.
from swarms import Agent, SwarmRouter
router = SwarmRouter(agents=agents, swarm_type="SequentialWorkflow", max_loops=1)
router.run("Write a post about transformers.")Valid swarm_type values — exactly these 16:
"AgentRearrange", "MixtureOfAgents", "SequentialWorkflow", "ConcurrentWorkflow", "GroupChat", "MultiAgentRouter", "HierarchicalSwarm", "MajorityVoting", "CouncilAsAJudge", "HeavySwarm", "BatchedGridWorkflow", "LLMCouncil", "DebateWithJudge", "RoundRobin", "PlannerWorkerSwarm", "auto".
"AutoSwarmBuilder" and "SpreadSheetSwarm" are not router types — use those classes directly. With swarm_type="AgentRearrange" you must also pass rearrange_flow.
Workers answer independently; an aggregator synthesizes. Best with diverse providers.
from swarms import Agent, MixtureOfAgents
moa = MixtureOfAgents(
agents=[worker_gpt, worker_claude, worker_llama],
aggregator_agent=aggregator, # optional; falls back to aggregator_model_name
layers=3,
max_loops=1,
)
moa.run("Best practices for securing a Kubernetes cluster?")A director decomposes the task, delegates, and synthesizes results.
from swarms import Agent, HierarchicalSwarm
swarm = HierarchicalSwarm(
agents=[data_worker, writing_worker, review_worker],
director=director, # optional; else built from director_model_name
max_loops=2,
planning_enabled=True,
parallel_execution=True,
director_feedback_on=True,
)
swarm.run("Produce a competitive analysis of the AI chip market.")Also: agent_as_judge=True, max_agent_retries, max_reassignment_attempts, interactive=True.
Asynchronous and self-selecting — no rounds, no speaker-selection function. Every agent scores how much it wants to speak (0–1); replies above threshold are broadcast. Ends at max_loops messages or after idle_timeout seconds of silence.
from swarms import Agent, GroupChat
chat = GroupChat(
agents=[optimist, pessimist, realist], # at least 2 required
max_loops=10,
threshold=0.5, # raise for a more selective room
recency_penalty=0.3, # discourages one agent dominating
idle_timeout=8.0,
)
chat.run("Should we adopt AI for medical diagnosis?")auto_equip=True (default) injects the required RESPOND_TOOL into every agent — you do not need to pass it yourself. Set auto_equip=False only if you attach RESPOND_TOOL manually via tools_list_dictionary.
Agents answer independently; a consensus agent picks the winner.
from swarms import Agent, MajorityVoting
mv = MajorityVoting(
agents=voters,
consensus_agent_model_name="gpt-5.4",
max_loops=1,
)
mv.run("Python or Rust for a high-performance web server?")Evaluates a response across dimensions. It builds its own council from model names — it does not take an agents list or a judge agent.
from swarms import CouncilAsAJudge
council = CouncilAsAJudge(
model_name="gpt-5.4",
aggregation_model_name="gpt-5.4",
random_model_name=True,
max_loops=1,
)
council.run("Should we store biometric data on-device only?")from swarms import Agent, DebateWithJudge
debate = DebateWithJudge(
pro_agent=pro,
con_agent=con,
judge_agent=judge,
max_loops=3, # rounds
)
debate.run("Motion: open-source LLMs will surpass closed-source by 2027.")preset_agents=True generates pro/con/judge for you from model_name. The kwargs are pro_agent/con_agent/judge_agent — not agents=[...] plus judge=.
Deep multi-stage analysis. Configured by model names, not by an agents list.
from swarms import HeavySwarm
swarm = HeavySwarm(
question_agent_model_name="gpt-5.4",
worker_model_name="gpt-5.4",
max_loops=1,
timeout=900,
show_dashboard=True,
worker_tools=[search_web],
)
swarm.run("Analyze the implications of AGI on global labour markets.")A planner decomposes the task and workers execute; a judge checks completion each cycle. Not exported at the top level:
from swarms.structs.planner_worker_swarm import PlannerWorkerSwarm
swarm = PlannerWorkerSwarm(
agents=workers, # workers only — the planner is built internally
planner_model_name="gpt-5.4",
judge_model_name="gpt-5.4",
max_planner_depth=1,
max_loops=1,
)
swarm.run("Build a go-to-market strategy for a B2B SaaS product.")from swarms import (
MultiAgentRouter, # routes each task to the best-fit agent
RoundRobinSwarm, # fixed rotation
LLMCouncil, # members answer, rank peers anonymously, chairman synthesizes
BatchedGridWorkflow, # agent i runs task i
AutoSwarmBuilder, # generates the agents and architecture from a description
SpreadSheetSwarm, # structured tabular processing
AdvisorSwarm, SelfMoASeq, HybridHierarchicalClusterSwarm,
)
builder = AutoSwarmBuilder(name="MarketResearch", description="...", max_loops=1)
builder.run("Research the EV market and find growth opportunities.")from swarms import (
run_agents_concurrently,
run_agents_with_different_tasks,
run_agents_concurrently_async,
batch_agent_execution,
run_single_agent,
aggregate,
)
run_agents_concurrently(agents=agents, task="Summarize today's news.", max_workers=8)
run_agents_with_different_tasks([(agent_a, "task A"), (agent_b, "task B")]) # list of tuples
batch_agent_execution(agents=agents, tasks=tasks, max_workers=10)
aggregate(workers=agents, task="...", aggregator_model_name="gpt-5.4")Note run_agents_with_different_tasks takes a list of (agent, task) tuples, not a dict.
from swarms import CronJob
job = CronJob(agent=agent, interval="10minutes", job_id="market-check")
job.run(task="Check for unusual market activity.")interval is "<number><unit>", and the unit must be one of second, seconds, minute, minutes, hour, hours. Abbreviations like "30s" raise CronJobConfigError, as does a zero interval.
from swarms import AgentLoader
loader = AgentLoader(concurrent=True)
agents = loader.load_agents_from_markdown("agents/") # also: _from_yaml, _from_csv
agent = loader.load_agent_from_markdown("agents/researcher.md")| Don't | Do | Why |
|---|---|---|
from swarms.structs.agent import Agent | from swarms import Agent | Submodule paths move between versions |
tools=[] | tools=None | Empty list breaks schema generation |
tools=[f] with max_loops=1 | max_loops=3 | Loop 1 calls the tool; it needs loop 2 to use the result |
Same agent_name on several agents | Unique names | MEMORY.md is keyed on it — they corrupt each other |
streaming_on=True + streaming_callback | Pick one | They conflict |
CouncilAsAJudge(agents=..., judge=...) | Model-name kwargs | It takes no agents or judge argument |
DebateWithJudge(agents=[p, c], judge=j) | pro_agent=, con_agent=, judge_agent= | Those kwarg names don't exist |
HeavySwarm(num_agents=4, model_name=...) | question_agent_model_name=, worker_model_name= | Those kwarg names don't exist |
from swarms import PlannerWorkerSwarm | from swarms.structs.planner_worker_swarm import ... | Not exported at the top level |
swarm_type="AutoSwarmBuilder" | Use the class directly | Not one of the 16 router types |
GraphWorkflow.add_node(Node(...)) | add_node(agent) | It takes the agent itself |
| Building agents inside a loop | Build once, reuse | Construction is expensive |
context_compression=False on long runs | Leave it True | The run will hit the context wall |
Bare max_loops="auto" in production | Integer max_loops | Autonomous runs have no natural stopping point |
agent = Agent(
agent_name="ProductionAgent",
agent_description="...",
model_name="gpt-5.4",
max_loops=3,
context_length=32000,
context_compression=True,
persistent_memory=True,
autosave=True,
retry_attempts=3,
fallback_models=["claude-sonnet-4-6"],
verbose=False,
)verbose=True — full internal loggingshow_tool_execution_output=True — raw tool returnsoutput_type="all" — the complete conversation instead of just the final messageagent.get_all_selected_tools() — the autonomous tool rosteragent.short_memory.return_history_as_string() — dump the conversationexamples/ — single_agent/, multi_agent/, tools/, guides/swarms/structs/ (agents + swarms), swarms/agents/ (loops, judges, routers), swarms/tools/© kyegomez, 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 1,466 other files (scripts) in the repository root of kyegomez/swarms.
Open the folder on GitHubat commit 0e615ce
Swarms Multi-Agent Framework 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 |
|---|---|---|---|---|---|---|
| Swarms Multi-Agent Framework this skillkyegomez/swarms | 7.2k | — | ~5.5k | Automated safety check: Pass | Apache-2.0 | |
| Agent Squad Python Guide2FastLabs/agent-squad | 7.8k | — | ~4.7k | Automated safety check: Pass | Apache-2.0 | |
| Uipath FunctionsUiPath/skills | 167 | — | ~3.6k | Automated safety check: Notes | MIT | |
| Strandsstrands-agents/harness-sdk | 8.8k | — | ~1k | Automated safety check: Pass | Apache-2.0 | |
| A-Evolve Agent EvolutionOrchestra-Research/AI-Research-SKILLs | 13k | — | ~3.6k | Automated safety check: Pass | MIT | |
| AI Agents Architectomer-metin/skills-for-antigravity | 163 | — | ~558 | Automated safety check: Pass | Apache-2.0 |
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.
UiPath/skills
UiPath Coded Functions — deterministic Python or TypeScript/JavaScript units built with the uip function CLI (new -l py|ts|js, init, serve, run, pack, publish); the functions map in uipath.json…
strands-agents/harness-sdk
Build, extend, evaluate, or migrate applications with Strands Agents in Python or TypeScript.
Orchestra-Research/AI-Research-SKILLs
Guidance for using A-Evolve to improve an AI agent automatically, evolving its prompts, skills and memory against a benchmark through solve, observe and evolve cycles.
omer-metin/skills-for-antigravity
Expert in designing and building autonomous AI agents. An agent skill from omer-metin/skills-for-antigravity.
langchain-ai/docs
Fetches and references LangGraph Python documentation to build stateful agents, create multi-agent workflows, and implement human-in-the-loop patterns.
Works with
Categories
Teaches the Swarms Python framework: the Agent class, tools, loops, memory and multi-agent structures such as sequential, concurrent and graph workflows. The skill is a working guide to the Swarms framework, in which every setup is built from one primitive, the Agent, that multi-agent structures compose.0 and opens with golden rules: import Agent from the top-level swarms package, give every agent a unique agent_name because memory files and routing key on it, default to a max_loops of 1, pass tools=None instead of an empty list, and never set streaming_on together with streaming_callback.
Swarms Multi-Agent Framework fits situations like: writing code that imports the swarms package; choosing a multi-agent structure such as a sequential, concurrent or hierarchical workflow; debugging an Agent that loops, streams or builds tool schemas incorrectly; reviewing Swarms code against the framework's conventions.
Run `npx skills add kyegomez/swarms --skill swarms -a claude-code`. Or copy the skill folder (the kyegomez/swarms repository) into .claude/skills/swarms in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kyegomez/swarms --skill swarms -a codex`. Or copy the skill folder (the kyegomez/swarms repository) into .agents/skills/swarms 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 kyegomez/swarms --skill swarms -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/swarms, .gemini/skills/swarms, .github/skills/swarms and .opencode/skills/swarms in your project.
Going by SKILL.md and its folder, Swarms Multi-Agent Framework needs the command-line tools its instructions call (pip) and credentials named OPENAI_API_KEY, ANTHROPIC_API_KEY and GROQ_API_KEY. Our summary lists: Python, with swarms installed through pip; An API key for the model provider you use.
SKILL.md names 2 domains. As links in the text: docs.swarms.world and docs.litellm.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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Swarms Multi-Agent Framework is published under the Apache-2.0 licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.5k tokens (SKILL.md is roughly 22k 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 Swarms Multi-Agent Framework: Agent Squad Python Guide (2FastLabs/agent-squad, 7.8k stars), Uipath Functions (UiPath/skills, 167 stars), Strands (strands-agents/harness-sdk, 8.8k stars) and A-Evolve Agent Evolution (Orchestra-Research/AI-Research-SKILLs, 13k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kyegomez (a GitHub user) maintains it in kyegomez/swarms, which has 7,244 GitHub stars. The repository was last updated on October 10, 2026.
Source: kyegomez/swarms on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.