analyze-trajectory
Diagnose a recurring failure (STUCK task, clustered CI error, frequent reverts) by dispatching sub-agents to digest CI logs…
Multi-source research synthesis — aggregate and compare 3+ sources or any source >5KB using sub-agent dispatch and SharedState
$ npx -y skills add yologdev/yoyo-evolve --skill synthesis --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/synthesisContext preview
The summary Claude sees to decide when to auto-load this skill.
Multi-source research synthesis — aggregate and compare 3+ sources or any source >5KB using sub-agent dispatch and SharedState
name: synthesis description: "Multi-source research synthesis — aggregate and compare 3+ sources or any source >5KB using sub-agent dispatch and SharedState" version: "1.0" origin: yoyo core: false status: active score: 0.66 uses: 2 wins: 2 last_used: "2026-05-01T06:18:55Z" last_evolved: "2026-08-22" parent_pattern_key: null tools: [bash, read_file, write_file, search, sub_agent, shared_state] keywords: ["skills/synthesis", "synthesis.source", "multi-source", "aggregate sources", "compare sources", "multiple sources"]
You are performing **multi-source research synthesis** — aggregating, comparing, and composing insights from multiple sources (papers, blog posts, docs, discussions, code) into a coherent answer. The goal is a single composed response that draws on all sources, not a list of summaries.
This skill exists because loading 3+ full web pages or documents into your main context window is wasteful and noisy. The pattern (Recursive Language Model — see the RLM substrate section in CLAUDE.md) is: fetch each source, store it in shared state, dispatch a sub-agent per source to extract key claims, then dispatch a final synthesis sub-agent to compose the answer.
This skill complements the existing `research` skill. Research handles single small sources (fetch → read → answer). Synthesis handles the cases where multiple sources or large sources make direct reading impractical.
Trigger this skill when ANY of these hold:
Examples of well-framed questions:
A good question names a specific topic and what you want to learn. Don't ask vague questions like *"tell me about Rust"*.
Fetch each source via `bash`. Typical patterns:
# Web page curl -sL "https://example.com/article" | sed 's/<[^>]*>//g' | head -500 # GitHub README curl -sL "https://raw.githubusercontent.com/org/repo/main/README.md" # Documentation page curl -sL "https://docs.rs/crate/latest/crate/" | sed 's/<[^>]*>//g' | head -500 # Search results (to find sources) curl -s "https://lite.duckduckgo.com/lite?q=your+query" | sed 's/<[^>]*>//g' | head -60
Aim for 3-7 sources. More than 7 rarely adds insight — diminishing returns set in fast.
Estimate total content size:
echo "$SOURCE_1" | wc -c # repeat for each source
Store each source under a namespaced key:
shared_state set key="synthesis.<topic>.source-1" value="<source 1 content>" shared_state set key="synthesis.<topic>.source-2" value="<source 2 content>" shared_state set key="synthesis.<topic>.source-3" value="<source 3 content>"
Namespace convention: `synthesis.<topic>.source-<N>` where `<topic>` is a short kebab-case slug (e.g., `synthesis.rust-json-parsers.source-1`).
If any single source exceeds 30KB (~120,000 bytes):
1. **Split into chunks** of ~25KB at paragraph boundaries (double newline `\n\n`). Don't split mid-sentence. 2. **Store each chunk separately**:
shared_state set key="synthesis.<topic>.source-<N>.chunk-1" value="<first ~25KB>" shared_state set key="synthesis.<topic>.source-<N>.chunk-2" value="<next ~25KB>"
3. **Dispatch one sub-agent per chunk** (same prompt as Step 5, but referencing the chunk key instead of the source key). 4. **Merge chunk summaries** before the final synthesis: combine `key_claims` and `key_quotes` from all chunks of the same source, deduplicate, and store the merged result as the source's summary.
For each source, dispatch a sub-agent with a focused extraction question. **One source per sub-agent** — sources are the natural unit of synthesis.
sub_agent: You are extracting key claims from a research source.
The source is stored in shared state under key "synthesis.<topic>.source-<N>".
Read it with: shared_state get key="synthesis.<topic>.source-<N>"
Research question: <your single-sentence question from step 1>
Extract the source's relevant claims and evidence. Reply with ONLY a JSON object (no markdown fences, no prose):
{
"key_claims": ["claim 1", "claim 2", ...],
"key_quotes": ["exact quote or close paraphrase with attribution", ...],
"relevance": "high|medium|low",
"confidence": 0.0-1.0,
"source_type": "paper|blog|docs|discussion|code|other",
"deeper_question": "a follow-up question if something is unclear, or null"
}**
200 lines of Rust. Zero human code. One rule: evolve or die. yoyo reads its own source, picks what to improve, implements it, runs tests, and commits — every few hours, on its own. 180 days later: 158,000+ lines, 5,400+ tests, 94 source files.
Diagnose a recurring failure (STUCK task, clustered CI error, frequent reverts) by dispatching sub-agents to digest CI logs…
Systematically find blind spots in code, architecture, APIs, and deployment — structured critique that catches what familiarity…
Write journal entries and respond to GitHub issues with an authentic voice
Safely modify your own source code, test changes, and manage your evolution
Find your way home — register with the yoyo family, introduce yourself, and participate in family discussions