River
River turns chat into a canvas.
Core trick
Each chat message becomes a canvas card with branch and flag links, and three background agents return lenses the user can tap.
Description
River turns chat into a canvas. Every message is a card, every tangent a branch, every turning point a flag. An agent works alongside you as a cartographer — surfacing angles, drawing connections, marking pivots — so the graph of your thinking becomes something you can see, navigate, and build on. Three background micro-agents (skeptic, assumption-checker, expander) offer fresh lenses each turn; tap one to steer the next reply without typing a word. Persistent per-project agent sessions on Opus 4.7 mean it comes back knowing you.
README excerpt
# river A chat that lives on a canvas, with an agent that lives in the canvas with you. ## The idea Linear chat is a tape. You scroll, you lose the thread, the model forgets, tangents become dead ends. Most of what makes a real conversation valuable — *we tried that, we backed out, we found something interesting over here, this was the turning point* — has nowhere to go. river puts the conversation on an infinite tldraw canvas. Every user message and every model response is a card. You can branch from any card. You can run several parallel streams side by side. You can flag, link, and edit. The graph of your thinking becomes a thing you can see, navigate, and build on. The agent isn't behind a streaming text box. It's a **cartographer of the canvas** — its job is to keep the workspace legible and useful as it grows, not just to answer the latest prompt. It can create cards, rewrite them in place, mark turning points, draw lateral connections between cards in different branches, suggest unexplored directions, and present pick-from pills when it asks you to choose. When the conversation calls for five separate intros, you get five cards. When you ask it to soften card #3, it edits #3 in place. When you're scattered, it can spot two threads in different branches that touch the same idea and draw a dashed line between them. The bar it asks itself before any cartographer move: *would the user, looking at the canvas a week from now, be glad I took this action?* It also has me