An infinite canvas where LLM conversations grow into an editable thought graph. Indexes local Claude Code, Codex and DeepSeek Harness sessions by the files they touched; source files are never written.
ThoughtDAG exposes 13 tools across three distinct domains (graph UI operations, file history tracking, markdown export). Tool naming is inconsistent: some follow verb_noun (batchDelete, duplicateSelection), others use camelCase without clear verbs (weaveHighlights, alignSelection). Descriptions are present but generic (10-50 chars), lacking WHEN/WHY context. Input schemas exist but are minimal, most parameters lack type constraints, enums, or validation guidance. No output schemas documented. Error handling is absent from all tool definitions. The 'why_*' tools (why_check, why_file, why_find, why_recall) appear to be inferred from dsh/lib/index.js without visible explicit registration in the source provided. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (DESTRUCTIVE, WRITE, READ_ONLY). Security concerns: batchDelete and batchMergeSummarize are destructive but lack confirmation patterns or dry-run support.
Align selected nodes vertically on the canvas
Delete multiple selected nodes from the graph
Merge and summarize multiple selected nodes, optionally deleting them after
Download markdown content as a file
Duplicate selected nodes on the canvas
Explore a new direction from selected nodes with a question
Export selected nodes as markdown
Archive or unarchive selected nodes
Destructive operations (batchDelete, batchMergeSummarize) lack confirmation or dry-run patterns. No error recovery guidance. Agents can permanently delete graph nodes without safeguards.
Tool descriptions are too short (10-30 chars) and lack WHEN/WHY context. 'Delete multiple selected nodes from the graph' does not explain when to use this vs alternatives, what happens to dependent nodes, or recovery options.
Input schemas lack type constraints and enums. 'nodeIds' is an array but no itemType specified. 'intent' and 'question' are free-form strings with no length limits, format guidance, or validation rules. LLMs will hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Weave highlights from selected nodes into a new node
Check why a file was modified in the conversation history
Find conversations that touched a specific file
Find conversations matching a search pattern
Recall a specific conversation from history
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract return values. E.g., does selectionMarkdown return {markdown: string} or {content: string, metadata: {...}}?
why_* tools (why_check, why_file, why_find, why_recall) are inferred from dsh/lib/index.js but no explicit tool registration visible in provided source.