<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ADITYA PATANE</title>
    <description>The latest articles on DEV Community by ADITYA PATANE (@aditya_patane_bac4d08a75d).</description>
    <link>https://dev.to/aditya_patane_bac4d08a75d</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4192251%2F5223af36-fc10-4233-a5b7-aeb763d05f5e.png</url>
      <title>DEV Community: ADITYA PATANE</title>
      <link>https://dev.to/aditya_patane_bac4d08a75d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aditya_patane_bac4d08a75d"/>
    <language>en</language>
    <item>
      <title>handoff: letting parallel Claude Code sessions know why each other changed things</title>
      <dc:creator>ADITYA PATANE</dc:creator>
      <pubDate>Sun, 18 Oct 2026 16:37:47 +0000</pubDate>
      <link>https://dev.to/aditya_patane_bac4d08a75d/handoff-letting-parallel-claude-code-sessions-know-why-each-other-changed-things-29hg</link>
      <guid>https://dev.to/aditya_patane_bac4d08a75d/handoff-letting-parallel-claude-code-sessions-know-why-each-other-changed-things-29hg</guid>
      <description>&lt;h2&gt;
  
  
  Built solo for Graph Hacks (WeMakeDevs × FalkorDB). Code: &lt;a href="https://github.com/adityailab/graph-agent" rel="noopener noreferrer"&gt;https://github.com/adityailab/graph-agent&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://youtu.be/16bKhR6Q08c" rel="noopener noreferrer"&gt;https://youtu.be/16bKhR6Q08c&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;I run Claude Code in several terminals at once: a frontend session, a backend session, a deploy session. They are good at their own work and blind to each other. The backend session can read the frontend's diff, but a diff says &lt;em&gt;what&lt;/em&gt; changed, never &lt;em&gt;why&lt;/em&gt;: what the person asked, what was decided, what the frontend still needs from the backend.&lt;/p&gt;

&lt;p&gt;So I ended up as the messenger, copying context between terminals.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;Put the intent in a graph that every session reads and writes. Not the code, the &lt;em&gt;why&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every request a person sends a session,&lt;/li&gt;
&lt;li&gt;every decision with its reason,&lt;/li&gt;
&lt;li&gt;every file edit, tied to the request that caused it,&lt;/li&gt;
&lt;li&gt;every need one role has of another, open until someone resolves it,&lt;/li&gt;
&lt;li&gt;every message between sessions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I chose FalkorDB because the questions are about relationships: which request caused this edit, who read whose work, what links the backend's change to the frontend's decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Claude Code hooks record each prompt and edit as it happens. A small MCP server gives each session tools to record decisions and needs, send messages, and ask questions. When a session submits a prompt it gets, as plain context, what others did and what is waiting for it. An idle session is woken by a message through an &lt;code&gt;asyncRewake&lt;/code&gt; hook. Ask a role that has no live session and a stand-in answers from that role's recorded history, citing its sources. All of it runs on your Claude Code login: no API key.&lt;/p&gt;

&lt;p&gt;On top of the graph:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search by meaning&lt;/strong&gt; (a 384-dimension vector index) and typo-tolerant full-text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insights from FalkorDB's own algorithms&lt;/strong&gt;: &lt;code&gt;algo.WCC&lt;/code&gt; finds files two roles both changed, PageRank finds work other roles lean on, label propagation finds themes in the knowledge graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A knowledge graph&lt;/strong&gt; built by GraphRAG-SDK from the same work, with entity types that grow from the data (it learned &lt;code&gt;Pipeline&lt;/code&gt;, &lt;code&gt;Job&lt;/code&gt; and &lt;code&gt;DatabaseTable&lt;/code&gt; on its own).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sessions that write their own Cypher.&lt;/strong&gt; A &lt;code&gt;graph_guide&lt;/code&gt; tool teaches Claude the graph and FalkorDB 4.22's quirks, and the sessions query it through FalkorDB's read-only MCP server. &lt;code&gt;handoff ask "which needs are still open?"&lt;/code&gt; prints the Cypher it wrote.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A coordinator&lt;/strong&gt;: an always-on agent, deterministic and model-free, that reminds a role about a need left open, tells two roles they edited the same file, and sends a digest.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it looks like
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;handoff demo&lt;/code&gt; opens a tmux grid with three real Claude Code sessions and a live feed. In one rehearsal, building a small shop called ShopLite, the three sessions made 31 edits across 19 files, recorded 15 decisions with reasons, resolved 3 of 4 needs between roles, and read each other's work 17 times. The deploy session summarised what the others had changed and why without being shown a single diff. The coordinator found a need that had sat open for 95 minutes and reminded the backend, which then offered to write the missing tests.&lt;/p&gt;

&lt;p&gt;Three real Claude Code sessions in a tmux grid, with the live feed in the corner:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmqndyedslbg3yipczrfo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmqndyedslbg3yipczrfo.png" alt="Three Claude Code sessions and the live feed in tmux" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mission control (&lt;code&gt;handoff dashboard&lt;/code&gt;) shows the same graph live in a browser: sessions drawn as small Macintosh agents with the messages, reads and needs between them, who learned from whom, the six kinds of memory, a time-aligned log, and the graph itself. A &lt;code&gt;$&lt;/code&gt; field at the&lt;br&gt;
bottom of every page lets you message a session or ask the graph in plain words.&lt;/p&gt;

&lt;p&gt;The orchestration page: a workflow of sessions, with a line for each message, read and need.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fncjg1oibaq0d03kc7xph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fncjg1oibaq0d03kc7xph.png" alt="Orchestration: three sessions and what moves between them" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Who learned what from whose work, with the decision and the reason behind it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkrxb5mopuy0fhaqw4e1a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkrxb5mopuy0fhaqw4e1a.png" alt="Handoff: deploy read backend's work and learned two decisions" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The shared graph itself, drawn live from FalkorDB.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnmi89ififj15rfdqy3bv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnmi89ififj15rfdqy3bv.png" alt="The work graph, coloured by session" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The log lines events up by time across sessions, so an empty cell means that session did nothing then.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdy18hag9ekeex413433y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdy18hag9ekeex413433y.png" alt="Log: one column per session on a shared time axis" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the chat: plain-language questions, with the Cypher Claude wrote kept so you can check the answer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2ea3nqs0fq322sfukrt7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2ea3nqs0fq322sfukrt7.png" alt="Ask: a question and its answer, with the Cypher folded underneath" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned the hard way
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FalkorDB 4.22 has sharp edges, and the graph told me.&lt;/strong&gt; &lt;code&gt;EXISTS {}&lt;/code&gt; is unsupported; &lt;code&gt;shortestPath&lt;/code&gt; is directed only; &lt;code&gt;algo.betweenness&lt;/code&gt; is a &lt;em&gt;sampled estimate&lt;/em&gt; that scored a three-node chain correctly 0 times in 20; a second pattern comprehension that reuses a variable name silently returns &lt;code&gt;[]&lt;/code&gt;. I wrote them down and put them in &lt;code&gt;graph_guide&lt;/code&gt;,so sessions stop tripping on them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A review by a fresh agent at the end of every phase paid for itself.&lt;/strong&gt; One found that &lt;code&gt;handoff demo --workspace .&lt;/code&gt; would have deleted a whole project. Another found that two projects on one machine shared a graph and could read each other's prompts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test the real thing.&lt;/strong&gt; Mocks passed while live runs found a stand-in that cited nothing, a knowledge extractor whose instructions never reached the model, and a Docker volume mounted at the wrong path that would have lost every graph.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv tool &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="s2"&gt;"handoff[knowledge] @ git+https://github.com/adityailab/graph-agent"&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; handoff init
handoff demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Needs Docker, Claude Code and uv. FalkorDB runs in a container bound to localhost, and prompts pass through a redactor before they are stored. There are 655 tests, and the whole design, plan and decision log are in the repo.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>claude</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
