Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/postindustria-tech/agentic-toolkit/langgraph-dev-multi-agent-supervisornpx skills add postindustria-tech/agentic-toolkit --skill langgraph-dev-multi-agent-supervisorgit clone --depth 1 https://github.com/postindustria-tech/agentic-toolkitWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00066 | $0.02939 |
| Opus 5 | $0.00033 | $0.01470 |
| Sonnet 5 | $0.00013 | $0.00588 |
| Haiku 4.5 | $0.00007 | $0.00294 |
Grade A, and why
multi-agent-supervisor-pattern scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 359 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Multi-Agent Supervisor Pattern
The supervisor pattern uses a central LLM-based router to coordinate multiple specialized agents, delegating tasks based on requirements.
Architecture
User Input -> Supervisor -> Route to Agent -> Agent Executes -> Back to Supervisor -> Repeat or Finish
Reference: Multi-Agent Supervisor Tutorial
See also: For designing supervisor state schemas and reducer functions, see the state-management skill.
Implementation Pattern
import logging
from typing import TypedDict, Annotated, List, Literal
from pydantic import BaseModel, Field
from langchain_core.messages import BaseMessage, AIMessage, SystemMessage
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
# Initialize logging
logger = logging.getLogger(__name__)
# Initialize LLM (choose one based on your provider)
from langchain_anthropic import ChatAnthropic
# from langchain_openai import ChatOpenAI
llm = ChatAnthropic(model="claude-sonnet-4-5-20250929")
# llm = ChatOpenAI(model="gpt-4o")
# For specialized agents (can use same or different models)
research_llm = llm
code_llm = llm
# Supervisor system prompt
SUPERVISOR_PROMPT = """You are a supervisor coordinating specialized agents.
Available agents:
- research: Find information and answer questions
- code: Write and review code
- FINISH: Task is complete
Analyze the conversation and decide which agent to use next."""
# Type alias for routing destinations
AgentName = Literal["research", "code", "FINISH"]
class RouterDecision(BaseModel):
"""Supervisor's routing decision."""
next_agent: str = Field(description="Name of next agent or FINISH")
class SupervisorState(TypedDict):
messages: Annotated[List[BaseMessage], add_messages] # Preferred reducer
next_agent: str
# Supervisor decides routing using SystemMessage with error handling
def supervisor_node(state: SupervisorState) -> dict:
"""Supervisor makes routing decisions with error handling."""
try:
messages = [
SystemMessage(content=SUPERVISOR_PROMPT),
*state["messages"]
]
router_llm = llm.with_structured_output(RouterDecision)
decision = router_llm.invoke(messages)
return {"next_agent": decision.next_agent}
except Exception as e:
logger.error(f"Supervisor error: {e}")
return {"next_agent": "FINISH"} # Safe fallback
# Specialized agents
def research_agent(state: SupervisorState) -> dict:
"""Research-specific logic."""
result = research_llm.invoke(state["messages"])
return {"messages": [result]}
def code_agent(state: SupervisorState) -> dict:
"""Code-specific logic."""
result = code_llm.invoke(state["messages"])
return {"messages": [result]}
# Routing function with validation for unexpected LLM outputs
def route_to_agent(state: SupervisorState) -> AgentName:
"""Route to next agent, validating the LLM's routing decision."""
next_agent = state["next_agent"]
if next_agent not in ("research", "code", "FINISH"):
logger.warning(f"Unexpected agent '{next_agent}', defaulting to FINISH")
return "FINISH"
return next_agent # type: ignore - validated above
# Build graph
workflow = StateGraph(SupervisorState)
workflow.add_node("supervisor", supervisor_node)
workflow.add_node("research", research_agent)
workflow.add_node("code", code_agent)
# Use add_edge with START constant (modern pattern)
workflow.add_edge(START, "supervisor")
workflow.add_conditional_edges(
"supervisor",
route_to_agent,
{"research": "research", "code": "code", "FINISH": END}
)
workflow.add_edge("research", "supervisor") # Back to supervisor
workflow.add_edge("code", "supervisor")
app = workflow.compile()
What ships with it
6 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 359 lines · 66 tokens per session scan A 31361858d52d
multi-agent-supervisor-pattern is a skill published in the GitHub repository postindustria-tech/agentic-toolkit (2 stars, last pushed 1mo ago), licensed MIT. It adds 66 tokens to every session and 2,939 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
systematic-debugging
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation.
auto-perf-optimize
Run agent-driven VS Code performance or memory investigations. Use when asked to launch Code OSS, automate a VS Code scenario, run the Chat memory smoke runner, capture renderer heap snapshots, take workflow screenshots, compare run summaries, or drive a repeatable scenario before heap-snapshot analysis.
chat-perf
Run chat perf benchmarks and memory leak checks against the local dev build or any published VS Code version. Use when investigating chat rendering regressions, validating perf-sensitive changes to chat UI, or checking for memory leaks in the chat response pipeline.
chat-pet-sprite-creation
Use when creating or changing VS Code chat pet sprite art, sprite sheets, state animations, eye treatments, Stable/Insiders variants, or pet transitions under src/vs/workbench/contrib/chat/browser/widget/media/chatPet.
cpu-profile-analysis
Analyze V8/Chrome CPU profiles (.cpuprofile) and DevTools trace files (Trace-.json). Use when: profiling performance, investigating slow functions, comparing code paths, finding bottlenecks, analyzing timeToRequest, understanding call trees from sampling profiler data, analyzing layout/paint/rendering, investigating…