[OC] I built a local-first LLM canvas where deleting a wire removes that branch from context

https://github.com/chenxiachan/thoughtdag

Disclosure: I maintain ThoughtDAG.

While using local models for research, I kept running into a simple problem: once a paper, hypothesis, or mistaken branch enters a chat, it tends to remain in later context even after I have mentally moved on.

I built ThoughtDAG to test a more explicit interaction model.

Each question, answer, and source is a node. The wires determine exactly which upstream nodes are serialized into the model's next request.

Delete a wire, regenerate the same prompt, and that branch remains visible on the canvas but disappears from the actual model input.

It currently supports Ollama and OpenAI-compatible endpoints. Canvases, documents, and API keys are stored locally.

I am less interested in general promotion than in whether this interaction is actually useful for people running local models:

  • Would manual context pruning be worth the effort with smaller context windows?
  • Would you prefer automatic suggestions followed by human confirmation?
  • What would you need to inspect before trusting the selected context?

I am also turning these questions into a small context-control benchmark, so failure cases are especially useful.

Website: https://chenxiachan.github.io/thoughtdag/

8 points · 4 comments · view on lemmy.world

4 Comments

hendrik@palaver.p3x.de · 1 pts · 5d (1 reply)

How does it decide which elements to connect a new "thought" to? I'd imagine that can be quite complex if there's 300 elements on the map and you need to scan them all?! Or does the user do the job of arranging all the "thoughts"?

chatchan@lemmy.world · 2 pts · 1d

The user chooses the connections. ThoughtDAG does not scan the whole map and guess what is relevant. A normal follow-up starts from the node you are asking from, so it gets one parent wire automatically. If you want to combine another branch or source, you explicitly connect it to the new node. Spatial proximity does not affect context; only the wires do.

At generation time, ThoughtDAG follows the reachable upstream graph of the target node rather than asking a model to compare all 300 elements. That said, navigating a 300-node canvas is still a real UI problem. Semantic zoom, condensing, and layout tools help, but larger graphs still need more optimization.

HubertManne@piefed.social · 1 pts · 5d (1 reply)

can you give an example of what a wire would be. like is it a human readable? LIke its literally a source?

chatchan@lemmy.world · 1 pts · 1d

The nodes are human-readable; the wire itself is visible context.

For example, a source node might contain a passage extracted from a PDF. If it is wired into a question or synthesis node, that content is included when ThoughtDAG builds the model request.

A solid wire carries the full upstream context, while a dashed wire can carry a smaller reference. Delete the wire, and the source remains visible on the canvas but stops contributing to that downstream context.