<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>causal-analysis on tomrochette.com</title>
    <link>https://tomrochette.com/tags/causal-analysis/</link>
    <description>Recent content in causal-analysis on tomrochette.com</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>tom@tomrochette.com (Tom Rochette)</managingEditor>
    <webMaster>tom@tomrochette.com (Tom Rochette)</webMaster>
    <copyright>© 2026 Tom Rochette</copyright>
    <lastBuildDate>Wed, 28 Oct 2026 04:31:06 -0400</lastBuildDate><atom:link href="https://tomrochette.com/tags/causal-analysis/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Agent-Causality</title>
      <link>https://tomrochette.com/agents/session-analytics/agent-causality/</link>
      <pubDate>Wed, 28 Oct 2026 00:00:00 +0000</pubDate>
      <author>tom@tomrochette.com (Tom Rochette)</author>
      <guid>https://tomrochette.com/agents/session-analytics/agent-causality/</guid>
      <category>research-note</category><category>agent-curated</category><category>fully-ai-generated</category><category>llm=glm-5.3-flash</category><category>session-analytics</category><category>run-recording</category><category>replay</category><category>causal-analysis</category><category>open-source</category>
      <description>&lt;p&gt;Agent-Causality is an AGPL-3.0 Python SDK and CLI that records OpenCode and LangGraph agent runs as causal event graphs with declared parents, slices a failing event to the recorded events it structurally depends on, and replays registered decisions with changed inputs to test which ones flip the outcome.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Agent-Causality&amp;rsquo;s bet is that causality belongs in the capture, not the post-mortem: every event carries the parents its recorder declared, so slices, provenance, and counterfactual replay are queries over facts the run wrote down, and the project&amp;rsquo;s own benchmark reports where that stops working.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;What it is&#xA;    &lt;div id=&#34;what-it-is&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#what-it-is&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Two packages are required, and the README says so plainly: &lt;code&gt;agent-causality&lt;/code&gt; on PyPI (the SDK, CLI, an ingest receiver for OpenCode events, and the Visual DAG Explorer web UI) and &lt;code&gt;@psionic-labs/opencode-agent-causality&lt;/code&gt; on npm (an OpenCode plugin, telemetry capture only, forwarding the global event stream plus tool, permission, and message hooks).&#xA;Events persist to one SQLite file per run, with secrets redacted before persistence; capture is fail-open and never interrupts the agent.&#xA;LangGraph runs record through a callback handler that converts parent_run_id containment into explicit causal edges, dropping unknown parents rather than inventing them.&#xA;The Explorer renders the causal graph and a per-agent timeline and ships analysis tabs (chain, provenance, interaction, evidence, metrics), no API key needed; an optional explain extra adds LLM-grounded analysis through OpenRouter, kept in its own labeled block.&#xA;Made by Vasant Kumar Mogia (Psionics) under AGPL-3.0, with an in-repository research paper on declared dependency tracing and counterfactual sensitivity analysis.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Status&#xA;    &lt;div id=&#34;status&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#status&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Young and active but essentially unadopted: 6 stars, 2 forks, 3 open issues, created 2026-08-15, pushed 2026-10-28, releases through v0.2.1 on 2026-10-22, as of 2026-10-28.&#xA;The registries confirm the thinness: PyPI serves 0.2.1 (the README names 0.3.0) and the OpenCode plugin 0.1.6, with 154 PyPI downloads in the week to 2026-10-28 and 243 npm downloads in the month to 2026-10-26.&lt;/p&gt;&#xA;&lt;picture&gt;&#xA;  &lt;source media=&#34;(prefers-color-scheme: dark)&#34; srcset=&#34;https://api.star-history.com/chart?repos=Psionic-labs/Agent-Causality&amp;type=date&amp;theme=dark&amp;legend=top-left&#34; /&gt;&#xA;  &lt;source media=&#34;(prefers-color-scheme: light)&#34; srcset=&#34;https://api.star-history.com/chart?repos=Psionic-labs/Agent-Causality&amp;type=date&amp;legend=top-left&#34; /&gt;&#xA;  &lt;img alt=&#34;Star History Chart&#34; src=&#34;https://api.star-history.com/chart?repos=Psionic-labs/Agent-Causality&amp;type=date&amp;legend=top-left&#34; /&gt;&#xA;&lt;/picture&gt;&#xA;&lt;p&gt;The critical source is the project&amp;rsquo;s own benchmark, and it is unusually frank: live OpenCode runs captured at micro/macro-average 1.0, but a cause recall of 0.3 over explicit-evidence edges and a joint ancestry of 0.0, with the README conceding that genuine causal interaction is unsupported from live traces.&#xA;I found no independent discussion: the Hacker News story search returns zero hits, and the README&amp;rsquo;s evidence is its own benchmark results.&#xA;&lt;strong&gt;A solo research-grade tool with a paper, frankly negative self-benchmarks, and no community verdict yet, so read the benchmark results before believing the causal claims.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Strengths&#xA;    &lt;div id=&#34;strengths&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#strengths&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Declared, not inferred, causal edges: every parent link is recorded at capture time by the recorder that saw the dependency happen.&lt;/li&gt;&#xA;&lt;li&gt;The self-benchmark names its failures (cause recall 0.3, joint ancestry 0.0 on live traces), which is more falsifiable than the category&amp;rsquo;s usual claims.&lt;/li&gt;&#xA;&lt;li&gt;Both surfaces a debugging session needs are included: a queryable SQLite graph and a no-key Explorer with graph, timeline, and metrics views.&lt;/li&gt;&#xA;&lt;li&gt;Counterfactual replay re-runs registered merge decisions with changed inputs and reports which flips change the outcome.&lt;/li&gt;&#xA;&lt;li&gt;Capture never blocks the agent, and secrets are redacted before anything persists.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Cautions&#xA;    &lt;div id=&#34;cautions&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#cautions&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;6 stars, 2 forks, and zero independent coverage: every claim here is the project&amp;rsquo;s own evidence.&lt;/li&gt;&#xA;&lt;li&gt;The tool&amp;rsquo;s own live-trace results limit it to structural slices over explicit edges, not true causal interaction, which is the whole promise.&lt;/li&gt;&#xA;&lt;li&gt;AGPL-3.0 complicates embedding in commercial tooling, and the two-package install means either half alone is incomplete.&lt;/li&gt;&#xA;&lt;li&gt;Version drift: the README names agent-causality 0.3.0 while PyPI serves 0.2.1, an early-project smell to watch.&lt;/li&gt;&#xA;&lt;li&gt;One maintainer, pre-1.0, and a schema surface (SQLite event graphs) with no compatibility guarantees yet.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Pricing&#xA;    &lt;div id=&#34;pricing&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pricing&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Free and open source under AGPL-3.0; no paid tier is published, and everything runs locally.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Compared to&#xA;    &lt;div id=&#34;compared-to&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#compared-to&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/session-analytics/novafabric/&#34; &gt;NovaFabric&lt;/a&gt;: the replay-and-evidence sibling from the same source list; NovaFabric preserves and diffs whole runs for audit, Agent-Causality slices recorded runs for cause.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/session-analytics/agentsview/&#34; &gt;agentsview&lt;/a&gt;: the archive that answers history and cost questions; Agent-Causality answers only why this run failed, from a capture it had to be present for.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/session-analytics/clawtrace/&#34; &gt;ClawTrace&lt;/a&gt;: the hosted tracing platform with an AI analyst; ClawTrace sees live OpenClaw payloads in the cloud, Agent-Causality keeps declared causal graphs in a local SQLite file.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Bottom line&#xA;    &lt;div id=&#34;bottom-line&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#bottom-line&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Recommended for engineers running branching LangGraph or OpenCode systems who want failure diagnosis grounded in capture-time facts, and who will read the benchmark before trusting the slice.&lt;/strong&gt;&#xA;Not for cost reporting, transcript search, live dashboards, or anyone who needs an independently verified dependency.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Changes&#xA;    &lt;div id=&#34;changes&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#changes&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2026-10-28 - Created from the coordinator&amp;rsquo;s entrant handoff, admitted on the declared-causal-parent capture mechanism, the self-critical live-trace benchmark with its named negative results, and nine fetched sources.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;See also&#xA;    &lt;div id=&#34;see-also&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#see-also&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/session-analytics/novafabric/&#34; &gt;NovaFabric&lt;/a&gt; - the run-recording and evidence sibling this note joined with&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/session-analytics/agentsview/&#34; &gt;agentsview&lt;/a&gt; - the retrospective archive for everything except why a run failed&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/session-analytics/clawtrace/&#34; &gt;ClawTrace&lt;/a&gt; - the hosted tracing alternative with full payloads&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/session-analytics/session-analytics-feature-matrix/&#34; &gt;Session Analytics Feature Matrix&lt;/a&gt; - the category comparison this note joins&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.github.com/repos/Psionic-labs/Agent-Causality&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=api.github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://api.github.com/repos/Psionic-labs/Agent-Causality&lt;/a&gt; - 6 stars, 2 forks, AGPL-3.0, created 2026-08-15, pushed 2026-10-28, as of 2026-10-28&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://raw.githubusercontent.com/Psionic-labs/Agent-Causality/main/README.md&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=raw.githubusercontent.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://raw.githubusercontent.com/Psionic-labs/Agent-Causality/main/README.md&lt;/a&gt; - the two-package contract, capture hooks, SQLite storage, Explorer views, benchmark summary, and the paper link&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.github.com/repos/Psionic-labs/Agent-Causality/releases&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=api.github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://api.github.com/repos/Psionic-labs/Agent-Causality/releases&lt;/a&gt; - v0.2.1 (2026-10-22), v0.2.0 (2026-10-18), v0.1.4 (2026-10-14)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypi.org/pypi/agent-causality/json&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=pypi.org&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://pypi.org/pypi/agent-causality/json&lt;/a&gt; - PyPI package, version 0.2.1, Python 3.11 or newer&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://registry.npmjs.org/@psionic-labs/opencode-agent-causality&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=registry.npmjs.org&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://registry.npmjs.org/@psionic-labs/opencode-agent-causality&lt;/a&gt; - the OpenCode plugin, latest 0.1.6 (2026-10-22)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypistats.org/api/packages/agent-causality/recent&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=pypistats.org&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://pypistats.org/api/packages/agent-causality/recent&lt;/a&gt; - 154 downloads in the week to 2026-10-28, behind the adoption claim&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.npmjs.org/downloads/point/last-month/@psionic-labs/opencode-agent-causality&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=api.npmjs.org&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://api.npmjs.org/downloads/point/last-month/@psionic-labs/opencode-agent-causality&lt;/a&gt; - 243 downloads in the month to 2026-10-26&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://psionic-labs.github.io/Agent-Causality/opencode.html&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=psionic-labs.github.io&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://psionic-labs.github.io/Agent-Causality/opencode.html&lt;/a&gt; - the OpenCode integration guide&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://raw.githubusercontent.com/Psionic-labs/Agent-Causality/main/docs/benchmarks.md&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=raw.githubusercontent.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://raw.githubusercontent.com/Psionic-labs/Agent-Causality/main/docs/benchmarks.md&lt;/a&gt; - the full benchmark results behind the negative-results claim&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://hn.algolia.com/api/v1/search?query=Agent-Causality&amp;amp;tags=story&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=hn.algolia.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://hn.algolia.com/api/v1/search?query=Agent-Causality&amp;tags=story&lt;/a&gt; - zero stories, the empty independent footprint this note states&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      
    </item>
    
  </channel>
</rss>
