Waypoint: a shared dependency graph

If you are an AI agent that was given a link to this page, you can read and edit the graph over HTTP.
No browser is needed.

THE KEY. The link you were given ends in #key=wp_..._...  Everything after "#key=" is your key. (The part
after # is not sent to servers, so take it from the link text itself.) The key says what you may do:
  wp_viewer_...  read only        wp_editor_...  read and edit        wp_owner_...  also hands out keys
Send it on every request as the header:  Authorization: Bearer <key>
Treat the key like a password. Do not put it anywhere it will be shared.

BASE URL. The origin of this page, e.g. https://host. First find the graph's id (the path segment below):
  GET /api/session                 -> {"role": "editor", "graph": "<graph>", ...}

READ (viewer key is enough). Replace <graph> with the id above.
  GET /api/graphs/<graph>                          counts of nodes, links, conflicts
  GET /api/graphs/<graph>/nodes?q=text&limit=50   find nodes by title or key
  GET /api/graphs/<graph>/nodes/%2312              one node (key #12): position, depends_on, dependants, note
  GET /api/graphs/<graph>/nodes/%2312/neighbours?direction=both&depth=2
  GET /api/graphs/<graph>/conflicts                links set aside because they would close a cycle
  GET /api/graphs/<graph>/log                      who changed what
  GET /api/graphs/<graph>/dot                      the whole graph as Graphviz DOT text (content type text/vnd.graphviz).
        An arrow A -> B means "A depends on B"; set-aside links are dashed red. Render it with
        dot -Tsvg, or just read it: it is the quickest way to see the whole graph at once.

WRITE (editor or owner key). One call applies a batch of operations; it is atomic (all or none), at most 100:
  POST /api/graphs/<graph>/apply
  Content-Type: application/json
  X-Waypoint-Actor: your-name        (optional label shown in the change log and keeping your undo history apart)
  {"label": "why", "ops": [
     {"op": "create_node", "title": "Design API"},
     {"op": "create_node", "title": "Build API", "depends_on": ["$0"]},
     {"op": "link",   "from": "#3", "to": "#1"},
     {"op": "append_note", "node": "$1", "text": "Needs the auth decision first."} ]}
  Operations: create_node {title, depends_on?, dependants?}, rename_node {node, title}, delete_node {node},
  link {from, to}, unlink {from, to}, move_node {node, x, y, with_subtree?},
  set_note {node, body}, append_note {node, text}.
  "link from to" means "from depends on to": "to" must be done first. Cycles are refused.
  Name nodes by key ("#12", shown on each node and never changed by renaming), by id, or "$N" for the node
  created by op N earlier in the same batch. Each node has ONE note, shared by everyone and edited live in the web UI; get_node shows it as "note".
  set_note replaces it (only the changed part is edited); append_note adds to the end and is safer if people are typing.
  Layout is automatic: you rarely need move_node. Errors come back as {"error": "...", "op_index": N}.

UNDO (editor key). POST /api/graphs/<graph>/undo and /redo undo or redo the latest batch sent with your
X-Waypoint-Actor name. Changes appear live for everyone who has the graph open.

MCP. The same operations are available as MCP tools: run the waypoint-mcp binary with WAYPOINT_KEY set.