Loading...
Loading...
Use when analyzing repositories, conducting deep research on codebases, performing architecture reviews, or exploring large projects. Use when the user wants to research or analyze a git repo, a GitHub link, or a repository URL.
npx skill4agent add tao3k/omni-dev-fusion researcher┌─────────┐ ┌──────────────┐ ┌────────────────┐ ┌──────────────┐
│ Setup │ --> │ Architect │ --> │ Process Shard │ --> │ Synthesize │
│ Clone │ │ (Plan) │ │ (Loop) │ │ Index.md │
└─────────┘ └──────────────┘ └────────────────┘ └──────────────┘
│ │ │
│ 3-5 shards compress
│ defined by + analyze
│ LLM each shardshards/<id>_<name>.mdindex.mdrepo_urlrequestvisualizechunkedaction"start""shard""synthesize"session_idshardsynthesizestartchunk_idaction="shard"c1chunk_idsaction="shard"max_concurrentresearcher.max_concurrentchunked=trueaction="start"session_idchunk_planc1c2next_actionchunked=trueaction="shard"session_id=<from start>chunk_id=<cx>chunk_ids=[...]chunked=trueaction="synthesize"session_id=<same>research_chunked{
"success": true,
"harvest_dir": "/path/to/.data/harvested/<owner>/<repo_name>/",
"shards_analyzed": 4,
"revision": "abc1234",
"shard_summaries": [
"- **[Core Kernel](./shards/01_core_kernel.md)**: Main business logic",
"- **[API Layer](./shards/02_api_layer.md)**: HTTP handlers"
],
"summary": "Research Complete!..."
}.data/harvested/<owner>/<repo_name>/
├── index.md # Master index with YAML frontmatter (includes revision)
└── shards/
├── 01_core_kernel.md # Shard 1 analysis
├── 02_api_layer.md # Shard 2 analysis
└── ...---
title: Research Analysis: <repo_name>
source: <repo_url>
revision: <git_hash>
revision_date: <YYYY-MM-DD HH:MM:SS TZ>
generated: <YYYY-MM-DD>
shards: <count>
---# Analyze a repository's security patterns
await researcher.run_research_graph(
repo_url="https://github.com/example/large-repo",
request="Analyze security patterns and vulnerability surfaces"
)
# Result: Multiple shard analyses saved to .data/harvested/actionsession_id_normalize_shardsaction=shardmcp.idle_timeoutheartbeat()mcp.timeoutmcp:
timeout: 300 # Hard cap (seconds); 0 = disable
idle_timeout: 120 # Cancel only after no heartbeat for this long; 0 = use only timeout