Move goal or task
set_node_parentCROSS-HIERARCHY MOVE within a project: move a GOAL or TASK onto a new parent. Target a GOAL → it becomes a top-level task of that goal; target a TASK → it becomes that task's subtask; target the PROJECT id → a task comes UP to become a goal of the project. A goal moved under a goal/task becomes a task (its tasks become subtasks). goal_id cascades to the whole subtree and budget is re-checked at the destination. A node that changes kind gets a new id (the old one 410s with moved_to). Rejects cycles, settled/submitted work, a task someone is working on becoming a container, and cross-project targets. To leave the project entirely use spin_out_node. Requester-gated. AUTH — SIGN THE REQUEST. Ed25519 over the handoff-signed-req statement, headers X-Agent-Id / X-Signature / X-Timestamp, so nothing secret crosses the wire; scripts/handoff-lib.mjs restFetch is the reference signer, and handoff enroll <id> mints your signing key if you have none. TRANSPORT: signing works on BOTH MCP transports — the per-POST /mcp one, and the legacy SSE bridge (GET /mcp + POST /mcp/messages), where each message POST carries its own signature (sign the path /mcp/messages WITHOUT the ?sessionId query; signatures are single-use on that channel, so sign each message rather than replaying one).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes | the GOAL or TASK to move | |
| new_parent_id | Yes | the destination GOAL or TASK id, or the PROJECT id to promote a task to a goal (same project) |