GitHub repository access in containerized environments using REST API and credential detection. Use when git clone fails, or when accessing private repos/writing files via API.
日本語の概要は準備中です。原文の説明を表示しています。
Fans Claude work out over the Anthropic API from surfaces with no native subagents, chiefly claude.ai chat and projects, with parallel calls with a shared cached context, streaming, long-lived conversation threads with cached history, and named agent pools; also delegates to Gemini through the Cloudflare AI Gateway on any surface. Use for multi-perspective analysis, a panel of reviewers, or task decomposition from claude.ai, or for Python code that calls several Claude instances concurrently over the API.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Fan-out has three possible engines. Which exist depends on where you are running. Pick the engine before writing any orchestration code.
| Engine | claude.ai | Cowork | Claude Code / CCotw |
|---|---|---|---|
Native subagents (Agent / Task / Workflow) | ✗ | ✓ | ✓ |
Gemini via CF AI Gateway (invoking-gemini) | ✓ | ✓ | ✓ |
| This skill's httpx fan-out (raw Anthropic API) | ✓ | last resort | last resort |
Primary discriminator — check the tool list, not the filesystem. If an Agent,
Task, or Workflow tool is callable, native subagents exist. That single fact
decides the row. Everything below is elaboration.
Use them. Do not hand-roll from this skill. The managed runtime gives
16-concurrent / 1000-agent ceilings, an approval gate, adversarial cross-review,
and in-session resume — all of which this skill would reimplement worse. Route
model and effort per agent-routing (calibrated on 300 measured Haiku calls);
do not re-derive that here.
Which native mechanism to use (Agent tool, Workflow, or headless claude -p
children launched from one background command) is dispatching-subagents.
In Claude Code the claude binary authenticates through the host, so a headless
fan-out needs no API key either.
Cowork adds one option Claude Code doesn't: subagents can be declared rather
than spawned ad hoc, as agents/*.md in a plugin — frontmatter name,
description, model, effort, maxTurns, tools, disallowedTools,
skills, memory, background, isolation: worktree. They appear as
plugin-name:agent-name. Note hooks, mcpServers, and permissionMode are
refused in plugin agents for security, so a declared agent inherits the session's
MCP connections and cannot bring its own.
Reach back into this skill on those surfaces only for what the runtime lacks:
stall detection, or a long-lived ConversationThread. Inter-agent messaging is
NOT on that list — the runtime ships SendMessage and ListAgents, and
AgentPool reimplements them worse.
Inter-agent messaging between native subagents (SendMessage, ListAgents) and
its measured traps are in dispatching-subagents/references/native-messaging.md.
Two engines, and Gemini is the default — see subagent-delegation-protocol
in ops. Use this skill's httpx fan-out when you specifically want Claude-family
output, multi-turn threads with cached history, or inter-agent messaging.
Even where native subagents exist, Gemini is the right call for mechanical-but-large work (extractions, ports, boilerplate, schema transforms) and for a genuinely independent second opinion in a judge panel — a different model family fails differently, which is the whole point of a panel.
Call mechanics live in invoking-gemini; do not duplicate them here. Three
things that bite:
gemini-3.6-flash. The flash alias still
resolves to 3.5 until that plugin's model table regenerates.thinking_level is a string in {minimal, low, medium, high}, default
medium. Set minimal for mechanical generation or the model silently spends
its output budget reasoning — symptom is an empty or truncated response.Review is not delegable. Diff security- and protocol-critical paths line-by-line against source, run syntax/lint checks, live-test whatever is network-testable. Delegated output ships only after your own review, regardless of which model produced it or which engine ran it.
Cross-model review tools (challenge, verify_patch) keep their own model
config, often deliberately a Claude. This routing does not silently repoint them.
Formerly orchestrating-agents (renamed 2026-10-11, because the old name drew parallel-dispatch
requests that belong to dispatching-subagents).
This skill enables programmatic API invocations for advanced workflows including parallel processing, task delegation, and multi-agent analysis using the Anthropic API.
import sys
sys.path.append('/mnt/skills/user/orchestrating-chat-agents/scripts')
from claude_client import invoke_claude
response = invoke_claude(
prompt="Analyze this code for security vulnerabilities: ...",
model="claude-sonnet-5-5"
)
print(response)
Default model is claude-sonnet-5-5 ($2/$10 per MTok); claude-opus-5-5 ($4/$20) for
open-ended work and claude-haiku-5-5 ($0.10/$0.50, prompts up to 100K tokens, 1M context)
for cheap first-pass calls. These models reject non-default sampling parameters, so
temperature / top_p / top_k are accepted by the wrappers but only sent to legacy
(4.x / 3.x) model ids. They also think adaptively; the wrappers return the joined text
blocks, never content[0].
from claude_client import invoke_parallel
prompts = [
{
"prompt": "Analyze from security perspective: ...",
"system": "You are a security expert"
},
{
"prompt": "Analyze from performance perspective: ...",
"system": "You are a performance optimization expert"
},
{
"prompt": "Analyze from maintainability perspective: ...",
"system": "You are a software architecture expert"
}
]
results = invoke_parallel(prompts, model="claude-sonnet-5-5")
for i, result in enumerate(results):
print(f"\n=== Perspective {i+1} ===")
print(result)
For parallel operations with shared base context, use caching to reduce costs by up to 90%:
from claude_client import invoke_parallel
# Large context shared across all sub-agents (e.g., codebase, documentation)
base_context = """
<codebase>
...large codebase or documentation (1000+ tokens)...
</codebase>
"""
prompts = [
{"prompt": "Find security vulnerabilities in the authentication module"},
{"prompt": "Identify performance bottlenecks in the API layer"},
{"prompt": "Suggest refactoring opportunities in the database layer"}
]
# First sub-agent creates cache, subsequent ones reuse it
results = invoke_parallel(
prompts,
shared_system=base_context,
cache_shared_system=True # 90% cost reduction for cached content
)
For sub-agents that need multiple rounds of conversation:
from claude_client import ConversationThread
# Create a conversation thread (auto-caches history)
agent = ConversationThread(
system="You are a code refactoring expert with access to the codebase",
cache_system=True
)
# Turn 1: Initial analysis
response1 = agent.send("Analyze the UserAuth class for issues")
print(response1)
# Turn 2: Follow-up (reuses cached system + turn 1)
response2 = agent.send("How would you refactor the login method?")
print(response2)
# Turn 3: Implementation (reuses all previous context)
response3 = agent.send("Show me the refactored code")
print(response3)
For real-time feedback from sub-agents:
from claude_client import invoke_claude_streaming
def show_progress(chunk):
print(chunk, end='', flush=True)
response = invoke_claude_streaming(
"Write a comprehensive security analysis...",
callback=show_progress
)
Monitor multiple sub-agents simultaneously:
from claude_client import invoke_parallel_streaming
def agent1_callback(chunk):
print(f"[Security] {chunk}", end='', flush=True)
def agent2_callback(chunk):
print(f"[Performance] {chunk}", end='', flush=True)
results = invoke_parallel_streaming(
[
{"prompt": "Security review: ..."},
{"prompt": "Performance review: ..."}
],
callbacks=[agent1_callback, agent2_callback]
)
Cancel long-running parallel operations:
from claude_client import invoke_parallel_interruptible, InterruptToken
import threading
import time
token = InterruptToken()
# Run in background
def run_analysis():
results = invoke_parallel_interruptible(
prompts=[...],
interrupt_token=token
)
return results
thread = threading.Thread(target=run_analysis)
thread.start()
# Interrupt after 5 seconds
time.sleep(5)
token.interrupt()
| Function | Module | Purpose |
|---|---|---|
invoke_claude() | core | Single synchronous invocation, full parameter control |
invoke_parallel() | core | Concurrent invocations, results in input order |
invoke_claude_streaming() | core | Single invocation, token-by-token callback |
invoke_parallel_streaming() | core | Concurrent invocations with per-agent stream callbacks |
invoke_parallel_interruptible() | core | Concurrent invocations cancellable mid-flight |
ConversationThread | core | Stateful multi-turn thread with cached history |
StallDetector | core | Flags agents idle beyond a timeout |
TaskTracker | task_state | Tracks task status across an orchestration run |
invoke_with_retry() | orchestration | Single invocation with backoff on transient errors |
invoke_parallel_managed() | orchestration | Concurrency-limited parallel run with retry, stall hooks, reconciliation |
Full signatures, parameters, and worked examples for each: references/function-reference.md.
See references/workflows.md for detailed examples including:
For autonomous sub-agents that should execute without asking questions:
from claude_client import invoke_claude, EXECUTE_MODE
response = invoke_claude(
prompt="Review auth.py for SQL injection vulnerabilities",
system=f"You are a security expert.\n\n{EXECUTE_MODE}"
)
EXECUTE_MODE encodes these principles (adapted from OpenAI Codex):
For workflows where multiple agents need to communicate:
from agent_pool import AgentPool
pool = AgentPool(
shared_system="You are reviewing the auth module of a web app.",
max_depth=3, # prevent recursive spawn explosion
max_agents=10,
)
# Spawn named agents with roles
pool.spawn("security", system=f"Focus on vulnerabilities.\n\n{pool.EXECUTE_MODE}")
pool.spawn("perf", system=f"Focus on performance.\n\n{pool.EXECUTE_MODE}")
# Run turns (pending inter-agent messages auto-injected)
sec_result = pool.run("security", "Review the login flow")
# Agent-to-agent messaging
pool.send("security", to="perf",
content="Auth does N+1 queries in the session check loop",
trigger_turn=True) # auto-runs perf with this context
# Broadcast to all agents
pool.broadcast("security", "Auth uses bcrypt cost=12, 200ms per hash")
# Query pool state
pool.agents() # ["security", "perf"]
pool.agent_info("perf") # {name, depth, children, pending_messages, turns}
For complex workflows where agent creation might fail:
from agent_pool import AgentPool
pool = AgentPool(shared_system="Code review team")
# Reservation pattern: name is reserved, rolled back on exception
with pool.reserve("analyst", parent="lead") as res:
res.configure(system="You analyze code complexity.", model="claude-opus-5-5")
# If configure or any other work raises, the name is released
# Agent "analyst" is now live
# Depth limits prevent unbounded recursion
pool.spawn("sub-analyst", parent="analyst") # depth=2, OK
pool.spawn("sub-sub", parent="sub-analyst") # depth=3, raises ValueError
| Pattern | Use When |
|---|---|
invoke_parallel() | Independent tasks, no inter-agent communication needed |
AgentPool | Agents need to share findings, build on each other's work, or have parent/child relationships |
invoke_parallel_managed() | Independent tasks with retry, stall detection, concurrency limits |
Prerequisites:
Install anthropic library:
uv pip install anthropic
Configure the API key as a file the shell reads directly — never as something a tool call returns.
On claude.ai the project's files are mounted at /mnt/project, so the key can
be sourced without ever entering context:
set -a; . /mnt/project/ANTHROPIC.env 2>/dev/null; set +a
⚠️ Do not use project_read to fetch a credential, on any surface. Small
docs are returned inline, so the key lands in the transcript — verified
2026-07-30: the documented "large text is written to a local file" branch does
not fire even at 64 KB. In Cowork there is no /mnt/project mount at all and
no safe read path, so the key must arrive by a route the shell can read
(synced skill directory, or fetched by a script from the CF config store).
Writing is safe in both directions — project_write with local_path keeps
contents out of context — but reading is not.
Get your API key: https://console.anthropic.com/settings/keys
Installation check:
python3 -c "import anthropic; print(f'✓ anthropic {anthropic.__version__}')"
The module provides comprehensive error handling:
from claude_client import invoke_claude, ClaudeInvocationError
try:
response = invoke_claude("Your prompt here")
except ClaudeInvocationError as e:
print(f"API Error: {e}")
print(f"Status: {e.status_code}")
print(f"Details: {e.details}")
except ValueError as e:
print(f"Configuration Error: {e}")
Common errors:
For detailed caching workflows and best practices, see references/workflows.md.
Token efficiency:
Rate limits:
Cost management:
claude-haiku-5-5) for simple tasksUse parallel invocations for independent tasks only
Test with small batches first
Loading this skill costs roughly 2k tokens. On surfaces with native subagents the routing table at the top is usually all you need — read it, spawn natively, and skip the rest of the file.
Routing companions — read these before choosing an engine:
agent-routing skill — model + effort selection for native subagents
(Haiku/Sonnet/Opus, cascades, verifier gates). Calibrated on measured data.
Applies to Cowork and Claude Code; explicitly not to claude.ai.invoking-gemini skill — call mechanics for the CF AI Gateway path, model
table, and thinking_level semantics.subagent-delegation-protocol (ops config) — why Gemini is the claude.ai
default, the Sonnet fallback config, and the non-delegable-review rule.This skill's own internals:
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
GitHub repository access in containerized environments using REST API and credential detection. Use when git clone fails, or when accessing private repos/writing files via API.
日本語の概要は準備中です。原文の説明を表示しています。
Decide which model, effort level, and cascade shape each subagent gets, and how to keep improvement loops safe (evaluator-as-selector, stop on regression). Routes on measured cost-per-completed-task rather than per-token price, because a tier's token count varies more by task shape than price varies across tiers. Covers per-model effort semantics, the concision lever, cascade preconditions, context handoff, and watching a subagent fan-out live. Use when choosing a subagent's model or effort, when choosing how to escalate a failed attempt, or when asked which model or effort a task should get. Grounded in a 2026-07 calibration, a 2026-08 coding-cost study, a 2026-09 seeded-bug repair battery, a 2026-10 Haiku 5.5 ladder priced per spawn, and a 2026-10 retry-versus-escalation ladder on 295 SWE-bench Verified tasks; Managed Agents API specifics are operational, not calibrated.
日本語の概要は準備中です。原文の説明を表示しています。
Securely manages API credentials for multiple providers (Anthropic Claude, Google Gemini, GitHub). Use when skills need to access stored API keys for external service invocations.
日本語の概要は準備中です。原文の説明を表示しています。
Guidance for asking clarifying questions when user requests are ambiguous, have multiple valid approaches, or require critical decisions. Use when implementation choices exist that could significantly affect outcomes.
日本語の概要は準備中です。原文の説明を表示しています。
Pre-change blast-radius report for a symbol or file. Walks tree-sitting references, augments with a plain-text scan over non-parsed files (configs, plain docs), and clusters affected sites by feature (`_FEATURES.md`) or top-level package. Use when about to refactor, rename, or delete something in a repo you don't own — "what breaks if I change `validateUser`", "who calls this", "is this safe to remove", "where is this used", "blast radius", "impact analysis". This is the CONVERGENT pre-change risk skill — for "what is this repo?" use exploring-codebases; for "where is X?" use searching-codebases.
日本語の概要は準備中です。原文の説明を表示しています。
Read Bluesky/ATProto without depending on Bluesky's AppView — interactions on a user's posts, thread replies, any repo's records, network-wide backlinks across every lexicon, an account's handle and PDS history, which collections are active network-wide, and layer-by-layer outage diagnosis. Use when bsky.app or the AppView is down or slow, when a Bluesky read returns timeouts or 5xx, when asked who liked/replied/quoted/reposted something, when pulling live Bluesky context cheaply, when reading records straight from a PDS, when asked who references a record or account anywhere on the network, whether an account has changed handle or migrated servers, or which lexicons and non-Bluesky apps are active on atproto. Complements browsing-bluesky, which routes everything through the AppView and fails when it does.
日本語の概要は準備中です。原文の説明を表示しています。