Skip to content
Back to skills

Graph Search Plan

ASecurity

Represent a research plan as a directed graph — nodes are sub-questions, edges are "answer-depends-on" dependencies. Independent nodes can be executed in parallel; downstream nodes wait for their predecessors. Borrowed from MindSearch's WebSearchGraph pattern. Replaces list/tree decomposition for plans with non-linear dependencies.

  • 44 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 28, 2026
ai-agentsnodeapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned May 28, 2026

npx -y skills add 0xmariowu/Autosearch --skill graph-search-plan --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Graph Search Plan?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Graph Search Plan
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/0xmariowu-graph-search-plan/badge)](https://www.skillsdirectory.com/skills/0xmariowu-graph-search-plan)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: autosearch:graph-search-plan
description: Represent a research plan as a directed graph — nodes are sub-questions, edges are "answer-depends-on" dependencies. Independent nodes can be executed in parallel; downstream nodes wait for their predecessors. Borrowed from MindSearch's WebSearchGraph pattern. Replaces list/tree decomposition for plans with non-linear dependencies.
version: 0.1.0
layer: meta
domains: [workflow, planning]
scenarios: [complex-plan, parallel-subtasks, dependency-tracking, graph-research]
trigger_keywords: [graph, dependency, parallel plan, depends on, root node]
model_tier: Best
auth_required: false
cost: free
experience_digest: experience.md
---

# Graph Search Plan — DAG Over Research Sub-Questions

Most research plans are flat (list) or shallow tree (decompose-task). When sub-questions have **dependencies** ("to answer Q3, first need answers from Q1 and Q2"), a DAG captures the structure more accurately and enables parallelism.

## Node

```yaml
node:
  id: str                           # "root", "q1", "q1a", ...
  question: str
  rationale: str
  depends_on: list[str]             # node ids whose answers are required first
  status: "pending" | "running" | "done" | "failed" | "skipped"
  assigned_subtask_id: str | null   # link to a delegate-subtask when executed
  answer_summary: str | null        # populated when status == "done"
  answer_evidence: list[dict] | null
```

## Graph

```yaml
graph:
  nodes: dict[str, Node]
  edges: list[tuple[from_id, to_id]]  # redundant but convenient — derivable from depends_on
  root_id: "root"
  status: "planning" | "executing" | "finalizing" | "complete" | "failed"
  adjacency: dict[str, list[str]]     # node_id → successor ids (for bfs)
```

## Invariants

1. **Acyclic**: runtime AI must validate no cycles when generating the plan. Cycle → reject plan, re-decompose.
2. **Connected**: every node is reachable from `root_id` (directly or transitively via predecessors).
3. **Dependencies exist**: every `depends_on` id appears in `nodes`.

## Execution Policy

At each tick:

```
ready_nodes = [n for n in graph.nodes.values()
               if n.status == "pending"
               and all(graph.nodes[d].status == "done" for d in n.depends_on)]

# Limit parallelism
take = ready_nodes[:max_parallel_nodes]  # e.g. 4
for node in take:
    subtask_id = delegate_subtask(node.question, ...)
    node.status = "running"
    node.assigned_subtask_id = subtask_id
```

On subtask completion, set `node.status = "done"` and store `answer_summary` + `answer_evidence`. Re-run ready-node detection; if new nodes become ready, dispatch them.

## Graph Generation (Planner)

Initial plan (Best-tier LLM):

- Input: original query + clarify result + rubrics.
- Output: graph with root + 3-8 sub-questions.

Re-planning (trigger: a node's answer reveals a new dependency):

- Insert new child node under the revealing node.
- Re-validate acyclicity.
- Do NOT change the graph of any `done` node's descendants — stability matters for reproducibility.

## Visualization (runtime side-effect)

Runtime AI MAY render the graph for user visibility:

```
root: "how does X compare to Y for production RAG?"
├── q1: "what is X's indexing strategy?" [done]
├── q2: "what is Y's indexing strategy?" [done]
├── q3: "what are X and Y's benchmark results?" [running]
└── q4: "what are real production users saying?" [depends_on: q1, q2] [pending]
```

Not required for correctness; only for UX.

## When to Use

- Task has genuine dependencies (later questions can only be answered after earlier ones).
- Parallelism is useful (3+ independent subtasks).
- User benefits from seeing the plan structure.

## When NOT to Use

- Simple single-level decomposition — use `decompose-task` (list) or `perspective-questioning` (personas).
- Linear pipeline where every question depends on the previous — graph is overkill; just use `reflective-search-loop`.

## Cost

Best-tier LLM for planning + re-planning. Execution cost is the sum of `delegate-subtask` costs across all nodes.

## Interactions

- Feeds into → `delegate-subtask` (one per graph node).
- Feeds into → `citation-index` (merge citations from all node answers).
- Feeds into → `synthesize-knowledge` (final assembly from graph result).
- Complements → `reflective-search-loop` (which is linear; graph is DAG).

# Quality Bar

- Evidence items have non-empty title and url.
- No crash on empty or malformed API response.
- Source channel field matches the channel name.

Files in this skill

  • SKILL.md4.4 KB
  • __init__.py62 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.