Claude-skills orchestrating-skills
git clone https://github.com/oaustegard/claude-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/oaustegard/claude-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/orchestrating-skills" ~/.claude/skills/oaustegard-claude-skills-orchestrating-skills && rm -rf "$T"
orchestrating-skills/SKILL.mdSkill-Aware Orchestration
Orchestrate complex multi-step tasks through a four-phase pipeline that eliminates redundant context processing and reflexive subagent spawning.
When to Use
- Task requires multiple analytical perspectives (e.g., compare + critique + synthesize)
- Context is large and subtasks only need portions of it
- Simple lookups should be self-answered without spawning subagents
When NOT to Use
- Single-skill tasks (just use the skill directly)
- Tasks requiring tool use or code execution (this is text-analysis orchestration)
- Real-time streaming requirements (this is batch-oriented)
Quick Start
import sys sys.path.insert(0, "/mnt/skills/user/orchestrating-skills/scripts") from orchestrate import orchestrate result = orchestrate( context=open("report.md").read(), task="Compare the two proposed architectures, extract cost figures, and recommend one", verbose=True, ) print(result["result"])
Dependencies
- httpx (usually pre-installed;
if not)pip install httpx - No Anthropic SDK required
- API key: reads
env var orANTHROPIC_API_KEY/mnt/project/claude.env
Four-Phase Pipeline
Phase 1: Planning (LLM)
The orchestrator reads the full context once and produces a JSON plan:
{ "subtasks": [ { "task": "Compare architecture A vs B on scalability, cost, and complexity", "skill": "analytical_comparison", "context_pointers": {"sections": ["Architecture A", "Architecture B"]} }, { "task": "What is the project budget?", "skill": "self", "answer": "$2.4M" } ] }
Key behaviors:
- Assigns one skill per subtask from the built-in library
- Uses
for direct lookups (numbers, names, dates) — no subagent spawned"self" - Self-answering is an LLM judgment call, not a sentence-count heuristic
- Context pointers use section headers (structural, edit-resilient)
Phase 2: Assembly (Deterministic Code)
No LLM calls. Extracts context subsets using section headers or line ranges, pairs each with the assigned skill's system prompt, builds prompt dicts.
Phase 3: Execution (Parallel LLM)
Delegated subtasks run in parallel via
concurrent.futures.ThreadPoolExecutor.
Each subagent receives only its context slice and skill-specific instructions.
Phase 4: Synthesis (LLM)
Collects all results (self-answered + subagent), synthesizes into a coherent response that reads as if a single expert wrote it.
Built-in Skill Library
Eight analytical skills plus one pipeline skill:
| Skill | Purpose |
|---|---|
| Compare items along dimensions with trade-offs |
| Extract facts with source attribution |
| Combine multiple sources into narrative |
| Identify cause-effect chains |
| Evaluate arguments for soundness |
| Categorize items with rationale |
| Produce concise summaries |
| Identify missing information |
| Persist key findings to long-term memory via skill (pipeline-only, runs post-synthesis) |
API Reference
orchestrate(context, task, **kwargs) -> dict
orchestrate(context, task, **kwargs) -> dictReturns:
{ "result": "Final synthesized response", "plan": {...}, "subtask_count": 4, "self_answered": 1, "delegated": 3, "memory_ids": ["abc123"], # populated when remember subtasks ran }
Parameters:
(str): Full context to processcontext
(str): What to accomplishtask
(str): Claude model, defaultmodelclaude-sonnet-4-6
(int): Per-subagent token limit, default 2048max_tokens
(int): Synthesis token limit, default 4096synthesis_max_tokens
(int): Parallel subagent limit, default 5max_workers
(dict): Custom skill library (merged with built-in)skills
(bool): Auto-append apersist
subtask to store findings, default Falseremember
(bool): Print progress to stderrverbose
CLI
python orchestrate.py \ --context-file report.md \ --task "Analyze this report" \ --verbose --json
Extending the Skill Library
from skill_library import SKILLS custom_skills = { **SKILLS, "code_review": { "description": "Review code for bugs, style, and security", "system_prompt": "You are a code review specialist...", "output_hint": "issues_list with severity and fix suggestions", } } result = orchestrate(context=code, task="Review this PR", skills=custom_skills)
Persisting Findings with remember
rememberremember is a pipeline skill — it executes in Phase 4 after synthesis, not as a
parallel subagent. It uses LLM distillation to extract the key insight from the synthesized
result, then writes it to long-term memory via the remembering skill.
Two ways to activate persistence
1.
(automatic)persist=True
result = orchestrate( context=open("report.md").read(), task="Compare approaches A and B", persist=True, # auto-injects a remember subtask verbose=True, ) print(result["memory_ids"]) # ['abc123']
2. Planner-emitted (explicit)
The orchestrator planner can emit
remember as a subtask when the task description
implies storage:
{ "task": "Store the key findings from this analysis", "skill": "remember", "context_pointers": {} }
Requirements
skill must be installed (remembering
or/mnt/skills/user/remembering
)/home/user/claude-skills/remembering- Turso credentials must be available (auto-detected by the remembering skill)
- If unavailable, persistence is skipped silently and
returnsmemory_ids[]
Architecture Details
See references/architecture.md for design decisions, token efficiency analysis, and comparison with SkillOrchestra (arXiv 2602.19672).