← 返回 Skills 市场
moltenbot000

Cord Trees

作者 Molten Bot 000 · GitHub ↗ · v1.0.1
cross-platform ⚠ suspicious
439
总下载
2
收藏
0
当前安装
2
版本数
在 OpenClaw 中安装
/install cord-trees
功能描述
Dynamic task tree orchestration inspired by Cord protocol. Agent builds its own coordination tree at runtime — deciding decomposition, parallelism, and depen...
使用说明 (SKILL.md)

Cord Trees — Dynamic Task Tree Orchestration

Build coordination trees at runtime. You decide the decomposition, not the developer.

Inspired by Cord by June Kim.

Core Concept

Instead of following a pre-defined workflow, you analyze the goal and build your own task tree:

Goal: "Evaluate whether to migrate from REST to GraphQL"

You decide:
├── #1 spawn: Audit current REST API surface
├── #2 spawn: Research GraphQL trade-offs  
├── #3 ask: How many concurrent users? (blocked-by: #1)
├── #4 fork: Comparative analysis (blocked-by: #2, #3)
└── #5 fork: Write recommendation (blocked-by: #4)

The tree emerges from your analysis, not from hardcoded logic.

Five Primitives

1. SPAWN — Isolated Context

Child gets only its task prompt. Clean slate.

spawn(
    goal="Research GraphQL adoption patterns",
    prompt="Search for case studies of REST→GraphQL migrations...",
    blocked_by=[]  # Can start immediately
)

Use when: Task is self-contained, doesn't need sibling context.

2. FORK — Inherited Context

Child receives all completed sibling results injected into prompt.

fork(
    goal="Synthesize findings into recommendation",
    prompt="Based on the research, write a recommendation...",
    blocked_by=["research-rest", "research-graphql", "user-scale"]
)

Use when: Synthesis, analysis, or integration requiring prior work.

3. ASK — Human Elicitation

Pause for human input. Creates a checkpoint.

ask(
    question="How many concurrent users do you serve?",
    options=["\x3C1K", "1K-10K", "10K-100K", ">100K"],
    blocked_by=["audit-api"]  # Ask after audit provides context
)

Use when: Decision requires human knowledge or approval.

4. SERIAL — Ordered Sequence

Children execute in order. Implicit dependencies.

serial([
    {"goal": "Draft report", "type": "spawn"},
    {"goal": "Review draft", "type": "ask"},
    {"goal": "Finalize report", "type": "fork"}
])

Use when: Strict ordering required.

5. GOAL — Root Node

The top-level objective. You decompose it into children.

Implementation with OpenClaw

Map Cord primitives to OpenClaw tools:

Cord Primitive OpenClaw Implementation
spawn sessions_spawn(task=prompt, label=id)
fork sessions_spawn with sibling results in task
ask Message human, wait for response
serial Spawn sequentially, wait between each
read_tree Read state file + subagents list
complete Write result to state file

State File

Track the tree in cord-state.json:

{
  "goal": "Evaluate REST to GraphQL migration",
  "nodes": {
    "#1": {
      "type": "spawn",
      "goal": "Audit REST API",
      "status": "complete",
      "result": "47 endpoints, 12 nested...",
      "blockedBy": [],
      "sessionKey": "abc123"
    },
    "#2": {
      "type": "spawn",
      "goal": "Research GraphQL",
      "status": "running",
      "blockedBy": [],
      "sessionKey": "def456"
    },
    "#3": {
      "type": "ask",
      "goal": "Get user scale",
      "status": "waiting",
      "question": "How many concurrent users?",
      "options": ["\x3C1K", "1K-10K", "10K-100K", ">100K"],
      "blockedBy": ["#1"]
    },
    "#4": {
      "type": "fork",
      "goal": "Comparative analysis",
      "status": "blocked",
      "blockedBy": ["#2", "#3"]
    }
  },
  "nextId": 5
}

Workflow

Phase 1: Analyze Goal

Read the goal. Think about:

  • What are the major components?
  • What can run in parallel?
  • What has dependencies?
  • Where do I need human input?
  • What needs synthesis (fork) vs isolation (spawn)?

Phase 2: Build Initial Tree

Create nodes for the first level of decomposition:

# Initialize state
state = {
    "goal": user_goal,
    "nodes": {},
    "nextId": 1
}

# Add initial nodes
add_node(state, type="spawn", goal="Research A", blockedBy=[])
add_node(state, type="spawn", goal="Research B", blockedBy=[])
add_node(state, type="fork", goal="Synthesize", blockedBy=["#1", "#2"])

write("cord-state.json", state)

Phase 3: Execute Ready Nodes

Find nodes that are ready (all blockedBy complete):

def get_ready_nodes(state):
    ready = []
    for id, node in state["nodes"].items():
        if node["status"] != "blocked":
            continue
        deps = node["blockedBy"]
        if all(state["nodes"][d]["status"] == "complete" for d in deps):
            ready.append(id)
    return ready

For each ready node:

If spawn:

sessions_spawn(
    task=node["prompt"],
    label=node_id,
    runTimeoutSeconds=600
)
node["status"] = "running"

If fork:

# Inject sibling results
sibling_context = collect_sibling_results(state, node)
full_prompt = f"{node['prompt']}\
\
Context from prior work:\
{sibling_context}"

sessions_spawn(task=full_prompt, label=node_id)
node["status"] = "running"

If ask:

# Message human
message(action="send", message=f"Question: {node['question']}\
Options: {node['options']}")
node["status"] = "waiting"
# Wait for response, then mark complete with answer

Phase 4: Monitor & Update

Poll running agents, update state on completion:

while has_running_or_blocked(state):
    # Check agent status
    agents = subagents(action="list")
    
    for agent in agents:
        node = find_node_by_session(state, agent["sessionKey"])
        if agent["status"] == "complete":
            # Get result from session history
            result = get_agent_result(agent)
            node["status"] = "complete"
            node["result"] = result
    
    # Dispatch newly ready nodes
    for node_id in get_ready_nodes(state):
        dispatch_node(state, node_id)
    
    save_state(state)
    wait(30)  # Don't poll too aggressively

Phase 5: Synthesize

When all nodes complete, the final fork node produces the result.

Dynamic Restructuring

Agents can modify their own subtree at runtime:

# Child agent realizes it needs more research
add_child_node(
    parent="#2",
    type="spawn",
    goal="Deep dive on performance implications",
    blockedBy=[]
)

This is what makes Cord-style orchestration powerful — the tree evolves based on what agents discover.

Spawn vs Fork Decision Guide

Situation Use
Independent research task spawn
Task that doesn't need sibling context spawn
Cheap to restart if it fails spawn
Synthesis or analysis across prior work fork
Final integration step fork
Task that builds on discoveries fork

Default to spawn. Use fork only when context inheritance is required.

Human-in-the-Loop Patterns

Approval Gate

#1 spawn: Draft proposal
#2 ask: "Approve this proposal?" (blocked-by: #1)
#3 fork: Implement approved proposal (blocked-by: #2)

Clarification

#1 spawn: Initial analysis
#2 ask: "Which direction should we focus?" (blocked-by: #1)
#3 spawn: Deep dive on chosen direction (blocked-by: #2)

Periodic Checkpoints

#1 spawn: Phase 1
#2 ask: "Continue to phase 2?" (blocked-by: #1)
#3 spawn: Phase 2 (blocked-by: #2)
#4 ask: "Continue to phase 3?" (blocked-by: #3)
...

Example: Full Decomposition

Goal: "Create a comprehensive competitor analysis report"

#1 [spawn] List top 5 competitors
    └── No dependencies, starts immediately

#2 [spawn] Research Competitor A (blocked-by: #1)
#3 [spawn] Research Competitor B (blocked-by: #1)
#4 [spawn] Research Competitor C (blocked-by: #1)
#5 [spawn] Research Competitor D (blocked-by: #1)
#6 [spawn] Research Competitor E (blocked-by: #1)
    └── All parallel, isolated research

#7 [fork] Identify patterns across competitors (blocked-by: #2-#6)
    └── Needs all research results

#8 [ask] "Focus on pricing, features, or positioning?" (blocked-by: #7)
    └── Human steers direction

#9 [fork] Deep analysis on chosen focus (blocked-by: #8)
    └── Builds on patterns + human input

#10 [fork] Write final report (blocked-by: #9)
    └── Synthesis of everything

Error Handling

if node["status"] == "failed":
    # Options:
    # 1. Retry (reset to blocked)
    node["status"] = "blocked"
    node["retries"] = node.get("retries", 0) + 1
    
    # 2. Skip (mark complete with error)
    node["status"] = "complete"
    node["result"] = f"FAILED: {error}"
    
    # 3. Escalate (ask human)
    add_node(state, type="ask", 
             question=f"Node {id} failed. Retry, skip, or abort?",
             blockedBy=[])

Attribution

This skill implements patterns from the Cord protocol by June Kim, adapted for OpenClaw's sessions_spawn and subagents primitives.

安全使用建议
This skill appears coherent for building and running dynamic task trees: it will write a local cord-state.json and autonomously spawn and poll subagents, and it will send human-facing messages for 'ask' nodes. Before installing, decide whether you trust the agent to create and run child sessions (they can perform arbitrary tasks under the agent's authority) and whether storing task results locally is acceptable. If you have sensitive data, consider running it in a restricted environment, monitoring spawned subagents, and limiting run-time/concurrency. If you want tighter controls, ask the developer to add explicit rate/concurrency limits, redact rules for state files, or an option to disable autonomous spawning.
功能分析
Type: OpenClaw Skill Name: cord-trees Version: 1.0.1 The skill is designed for dynamic task orchestration, which involves agents generating and passing prompts to other agents. A significant prompt injection vulnerability exists in the `fork` primitive, as described in `SKILL.md` and `references/state-helpers.md`. Specifically, the `sibling_context` (derived from the `result` of prior agents) is directly injected into the prompt of subsequent `fork` agents. This allows a compromised or manipulated sub-agent to inject malicious instructions into another agent's prompt, potentially leading to unauthorized actions or data manipulation. While the required tools (`sessions_spawn`, `subagents`, `read`, `write`) are powerful, their usage aligns with the skill's stated purpose, and there is no evidence of intentional malicious activity or data exfiltration within the skill's code or instructions.
能力评估
Purpose & Capability
Name/description describe dynamic orchestration and the skill declares and uses OpenClaw tools (sessions_spawn, subagents, read, write) that are appropriate for spawning subagents, tracking state, and messaging humans. No unrelated credentials, binaries, or config paths are requested.
Instruction Scope
SKILL.md gives explicit runtime logic: create and update cord-state.json, spawn child sessions, poll subagents, message humans, and save results. These actions are within the skill's orchestration purpose, but the skill persists state to disk and autonomously creates and monitors subagents (potentially many). Review whether you accept that behavior and the contents stored in cord-state.json (which may include task results and any sensitive textual data).
Install Mechanism
Instruction-only skill with no install spec and no downloaded code; nothing is written to disk by an installer. Lowest-risk install mechanism.
Credentials
No environment variables, credentials, or external config paths are required. The declared tool usage matches the runtime instructions and does not request unrelated secrets.
Persistence & Privilege
always:false and default autonomous invocation are used (normal). The skill writes a local state file (cord-state.json) and spawns/manages subagents, which gives it ongoing runtime presence while active. It does not request elevated platform privileges or modify other skills' configs, but it can consume agent resources and create many child sessions—consider resource limits and monitoring.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install cord-trees
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /cord-trees 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.1
No user-visible changes; version bump only. - Version updated to 1.0.1 with no file changes detected. - All features, documentation, and functionality remain unchanged.
v1.0.0
Initial release: Dynamic task tree orchestration inspired by Cord protocol
元数据
Slug cord-trees
版本 1.0.1
许可证
累计安装 0
当前安装数 0
历史版本数 2
常见问题

Cord Trees 是什么?

Dynamic task tree orchestration inspired by Cord protocol. Agent builds its own coordination tree at runtime — deciding decomposition, parallelism, and depen... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 439 次。

如何安装 Cord Trees?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install cord-trees」即可一键安装,无需额外配置。

Cord Trees 是免费的吗?

是的,Cord Trees 完全免费(开源免费),可自由下载、安装和使用。

Cord Trees 支持哪些平台?

Cord Trees 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Cord Trees?

由 Molten Bot 000(@moltenbot000)开发并维护,当前版本 v1.0.1。

💬 留言讨论