{"ok":true,"site":{"host":"nodebook.tinyinternet.dev","url":"https://nodebook.tinyinternet.dev/","type":"live","desc":"A local-first infinite workspace where people and their agents research, scope, trace, and learn together.","tools":[{"name":"get_workspace","kind":"answer","impl":"imperative","description":"Return the current workspace, its maps, delivery progress, selection, and pending human intent.","title":"Get Nodebook workspace","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_map","kind":"answer","impl":"imperative","description":"Return the requested map or active map with compact nodes and edges.","title":"Get a Nodebook map","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"mapId":{"type":"string","maxLength":160},"includeEvidence":{"type":"boolean"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_node","kind":"answer","impl":"imperative","description":"Return full node details, citations or evidence, comments, and any maps linked from it.","title":"Get a Nodebook node","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"nodeId":{"type":"string","minLength":1,"maxLength":160}},"required":["nodeId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_selection","kind":"answer","impl":"imperative","description":"Return the nodes selected by the human and any pending Trace or Learn intent.","title":"Get human selection","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_nodes","kind":"answer","impl":"imperative","description":"Search node titles, descriptions, tags, evidence, and comments across the workspace.","title":"Search Nodebook nodes","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"query":{"type":"string","minLength":1,"maxLength":200},"mapId":{"type":"string","maxLength":160},"kinds":{"type":"array","maxItems":9,"items":{"type":"string","enum":["project","group","feature","step","code","concept","question","note","exercise"]}},"limit":{"type":"integer","minimum":1,"maximum":50}},"required":["query"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_map","kind":"act","impl":"imperative","description":"Batch-create a source-backed build, trace, or learn map, link it to a node, lay it out, save it, and optionally open it.","title":"Create a semantic map","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"title":{"type":"string","minLength":1,"maxLength":120},"kind":{"type":"string","enum":["build","trace","learn"]},"parentNodeId":{"type":"string","maxLength":160},"nodes":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"maxLength":160},"kind":{"type":"string","enum":["project","group","feature","step","code","concept","question","note","exercise"]},"title":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":1200},"quiz":{"type":"object","description":"Required for question nodes. The correct answer is a zero-based index into choices.","additionalProperties":false,"properties":{"choices":{"type":"array","minItems":2,"maxItems":6,"items":{"type":"string","minLength":1,"maxLength":240}},"correctChoiceIndex":{"type":"integer","minimum":0},"explanation":{"type":"string","maxLength":600}},"required":["choices","correctChoiceIndex"]},"x":{"type":"number"},"y":{"type":"number"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":48}},"locked":{"type":"boolean"},"evidence":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["source_url","file","test","commit","note"]},"label":{"type":"string","minLength":1,"maxLength":240},"ref":{"type":"string","maxLength":2048},"note":{"type":"string","maxLength":1000}},"required":["kind","label","ref"]}}},"required":["id","kind","title"]}},"edges":{"type":"array","maxItems":200,"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"maxLength":160},"source":{"type":"string","minLength":1,"maxLength":160},"target":{"type":"string","minLength":1,"maxLength":160},"relation":{"type":"string","enum":["contains","implements","flows_to","depends_on","prerequisite","related_to"]},"label":{"type":"string","maxLength":120}},"required":["source","target","relation"]}},"activate":{"type":"boolean"}},"required":["title","kind","nodes"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"upsert_graph","kind":"act","impl":"imperative","description":"Add or update nodes and edges in a map without replacing it. Locked nodes are skipped.","title":"Merge graph content","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"mapId":{"type":"string","maxLength":160},"nodes":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"maxLength":160},"kind":{"type":"string","enum":["project","group","feature","step","code","concept","question","note","exercise"]},"title":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":1200},"quiz":{"type":"object","description":"Required for question nodes. The correct answer is a zero-based index into choices.","additionalProperties":false,"properties":{"choices":{"type":"array","minItems":2,"maxItems":6,"items":{"type":"string","minLength":1,"maxLength":240}},"correctChoiceIndex":{"type":"integer","minimum":0},"explanation":{"type":"string","maxLength":600}},"required":["choices","correctChoiceIndex"]},"x":{"type":"number"},"y":{"type":"number"},"tags":{"type":"array","maxItems":20,"items":{"type":"string","minLength":1,"maxLength":48}},"locked":{"type":"boolean"},"evidence":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["source_url","file","test","commit","note"]},"label":{"type":"string","minLength":1,"maxLength":240},"ref":{"type":"string","maxLength":2048},"note":{"type":"string","maxLength":1000}},"required":["kind","label","ref"]}}},"required":["id","kind","title"]}},"edges":{"type":"array","maxItems":200,"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"maxLength":160},"source":{"type":"string","minLength":1,"maxLength":160},"target":{"type":"string","minLength":1,"maxLength":160},"relation":{"type":"string","enum":["contains","implements","flows_to","depends_on","prerequisite","related_to"]},"label":{"type":"string","maxLength":120}},"required":["source","target","relation"]}},"autoLayout":{"type":"boolean"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_scope_decisions","kind":"act","impl":"imperative","description":"Batch mark features proposed, included, or excluded. Exclusions require a rationale; locked features are skipped.","title":"Set feature scope","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"updates":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":false,"properties":{"nodeId":{"type":"string","maxLength":160},"state":{"type":"string","enum":["proposed","included","excluded"]},"rationale":{"type":"string","maxLength":500}},"required":["nodeId","state"]}}},"required":["updates"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_delivery_statuses","kind":"act","impl":"imperative","description":"Batch update included feature delivery status and optionally attach file, test, commit, URL, or note evidence.","title":"Set delivery progress","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"updates":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":false,"properties":{"nodeId":{"type":"string","maxLength":160},"status":{"type":"string","enum":["not_started","partial","complete"]},"evidence":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["source_url","file","test","commit","note"]},"label":{"type":"string","minLength":1,"maxLength":240},"ref":{"type":"string","maxLength":2048},"note":{"type":"string","maxLength":1000}},"required":["kind","label","ref"]}}},"required":["nodeId","status"]}}},"required":["updates"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_learning_states","kind":"act","impl":"imperative","description":"Batch mark concepts unknown, learning, or known; optionally lock the concepts after updating them.","title":"Set learning state","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"updates":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":false,"properties":{"nodeId":{"type":"string","maxLength":160},"state":{"type":"string","enum":["unknown","learning","known"]},"locked":{"type":"boolean"}},"required":["nodeId","state"]}}},"required":["updates"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_evidence","kind":"act","impl":"imperative","description":"Attach research source URLs or later file, test, commit, and note evidence to an unlocked node.","title":"Add node evidence","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"nodeId":{"type":"string","maxLength":160},"evidence":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["source_url","file","test","commit","note"]},"label":{"type":"string","minLength":1,"maxLength":240},"ref":{"type":"string","maxLength":2048},"note":{"type":"string","maxLength":1000}},"required":["kind","label","ref"]}}},"required":["nodeId","evidence"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_comments","kind":"answer","impl":"imperative","description":"List human and agent comments attached to nodes, optionally filtered by node or map.","title":"List node comments","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"nodeId":{"type":"string","minLength":1,"maxLength":160},"mapId":{"type":"string","minLength":1,"maxLength":160}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_comment","kind":"act","impl":"imperative","description":"Add a comment to a node under the calling agent's name. Set agentName to your own identity.","title":"Comment on a node","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"nodeId":{"type":"string","minLength":1,"maxLength":160},"body":{"type":"string","minLength":1,"maxLength":10000},"agentName":{"type":"string","minLength":1,"maxLength":80,"description":"The agent's display name, such as Codex or Claude."}},"required":["nodeId","body","agentName"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"focus_nodes","kind":"act","impl":"imperative","description":"Select nodes and fit the live canvas viewport around them without changing durable workspace data.","title":"Focus canvas nodes","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"nodeIds":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string","maxLength":160}}},"required":["nodeIds"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"highlight_path","kind":"act","impl":"imperative","description":"Highlight an ordered set of nodes using focus, risk, or success styling and fit them in view.","title":"Highlight a canvas path","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"nodeIds":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string","maxLength":160}},"tone":{"type":"string","enum":["focus","risk","success"]}},"required":["nodeIds","tone"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Productivity & Business","favicon":"/favicons/nodebook.tinyinternet.dev.png","apiSurface":"spec","toolCount":15}}