<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>event-sourcing on tomrochette.com</title>
    <link>https://tomrochette.com/tags/event-sourcing/</link>
    <description>Recent content in event-sourcing 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>Sun, 11 Oct 2026 02:01:18 -0400</lastBuildDate><atom:link href="https://tomrochette.com/tags/event-sourcing/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Epiq</title>
      <link>https://tomrochette.com/agents/task-management/epiq/</link>
      <pubDate>Sat, 10 Oct 2026 00:00:00 +0000</pubDate>
      <author>tom@tomrochette.com (Tom Rochette)</author>
      <guid>https://tomrochette.com/agents/task-management/epiq/</guid>
      <category>research-note</category><category>agent-curated</category><category>fully-ai-generated</category><category>llm=glm-5.3-flash</category><category>task-management</category><category>issue-tracking</category><category>event-sourcing</category><category>git</category><category>open-source</category>
      <description>&lt;p&gt;Epiq is an MIT-licensed, Git-native issue tracker that keeps the board as an append-only event log synced through Git and replays it on demand, built so unattended agent work becomes auditable history through an MCP server, a skill file, and per-agent identities.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Workflow replay is the audit interface unattended agent sprints need, and storing the board as an event log in Git is a storage choice no other member of this category makes.&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;A self-hosted, local-first tracker running as a terminal UI (built with Ink) and a browser GUI over one event-sourced engine: every change is an append-only event in a per-user log file, and the board is materialized deterministically by replay, with ULIDs plus last-known-edge references ordering concurrent events across machines.&#xA;State lives in a managed Git worktree outside your checkout (&lt;code&gt;~/.epiq-global/worktrees/&amp;lt;id&amp;gt;&lt;/code&gt;), project metadata in &lt;code&gt;.epiq/project.json&lt;/code&gt;, so &lt;code&gt;:sync&lt;/code&gt; over a git remote is the whole collaboration model, with no accounts, SaaS, or external services.&#xA;Agents get three doors: an MCP server (&lt;code&gt;epiq-mcp&lt;/code&gt;, thirty-odd tools) for deterministic access, an installable &lt;code&gt;SKILL.md&lt;/code&gt; that teaches the recommended workflow, and per-agent identities, so each agent authors its own events, assigns itself, and shows up in the contributor list.&#xA;Commits prefixed with a ticket&amp;rsquo;s ref land in the ticket&amp;rsquo;s inline code diff, where reviewers comment on lines, and the jolaflow identity maintains it under MIT.&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;Active and shipping fast.&#xA;As of 2026-10-10: 538 stars, 21 forks, 5 watchers, 3 open issues, created 2025-06-22, pushed 2026-10-10, latest release v1.12.4 on 2026-10-08 (the v1.12.x line shipped four releases in twelve days), and 2,825 npm downloads last month.&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=ljtn/epiq&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=ljtn/epiq&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=ljtn/epiq&amp;type=date&amp;legend=top-left&#34; /&gt;&#xA;&lt;/picture&gt;&#xA;&lt;p&gt;The Show HN launch thread reached 91 points and 48 comments on 2026-05-16, the second-largest HN footprint in this category after Backlog.md, followed by a 1-point video repost on 2026-08-30 and little independent coverage since, so current adoption rests on the repo&amp;rsquo;s own curve.&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;Workflow replay is the audit interface unattended agents need: scrub the timeline to see what moved, who moved it, and the linked diffs, during the run or after it.&lt;/li&gt;&#xA;&lt;li&gt;The event-sourced design gives multi-agent concurrency by construction: each agent writes its own log file, git merges stay trivial, and replays converge.&lt;/li&gt;&#xA;&lt;li&gt;Per-agent identities turn the board into an attribution record instead of one shared user.&lt;/li&gt;&#xA;&lt;li&gt;Ticket-to-commit ref linking with inline code diffs puts code review inside the ticket.&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;Conflicting updates to the same text block resolve last-event-wins with no character-level merge, a limitation the maintainer confirmed in the launch thread, recoverable only through time-travel peeks.&lt;/li&gt;&#xA;&lt;li&gt;The launch thread&amp;rsquo;s historical objection stands: distributed git issue trackers have repeatedly died on design problems of exactly this class, and Epiq is one maintainer&amp;rsquo;s answer.&lt;/li&gt;&#xA;&lt;li&gt;Global npm install drew the thread&amp;rsquo;s loudest resistance, and the npx-based MCP startup resolves against the registry on every start, which hangs in network-restricted agent sandboxes unless you install globally and point at the binary.&lt;/li&gt;&#xA;&lt;li&gt;The web UI arrived after launch and the project is single-maintainer at 538 stars, so bus risk and community footprint are both thin for a system of record.&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 MIT.&#xA;No paid tier, hosting, or account exists.&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/task-management/beads/&#34; &gt;beads&lt;/a&gt;: both are repo-local state layers with concurrency designs, Dolt atomic claims versus event-log replay; choose beads when agents need a dependency-ready work queue, Epiq when the audit trail is the product.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/task-management/backlog-md/&#34; &gt;Backlog.md&lt;/a&gt;: both keep state in git, but Backlog.md&amp;rsquo;s three review gates run before code exists while Epiq&amp;rsquo;s replay runs after.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/task-management/its-a-plan/&#34; &gt;It&amp;rsquo;s a Plan&lt;/a&gt;: the platform counterpoint, a server board where agents hold assignee slots, versus Epiq&amp;rsquo;s repo-local logs.&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 unattended agent sessions who need to reconstruct what happened, in the repo, without a server.&lt;/strong&gt;&#xA;Not for text-heavy collaborative editing under concurrency (last-event-wins) or teams that need a non-developer PM interface.&#xA;My disagreeable claim: the append-only event log is a better memory format for agent work than the markdown files this category keeps choosing, because replay answers &amp;ldquo;what happened&amp;rdquo; without inventing a schema for it.&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-10 - Created after the broad-list and GitHub search scan surfaced the 91-point launch thread the category had not resolved.&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/task-management/beads/&#34; &gt;beads&lt;/a&gt; - the other repo-local state layer, graph database versus event log&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/task-management/backlog-md/&#34; &gt;Backlog.md&lt;/a&gt; - the markdown-native review-gate counterpoint&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/task-management/its-a-plan/&#34; &gt;It&amp;rsquo;s a Plan&lt;/a&gt; - the platform-style counterpoint where agents hold assignee slots&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/task-management/task-management-feature-matrix/&#34; &gt;Task Management 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://github.com/ljtn/epiq&#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=github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://github.com/ljtn/epiq&lt;/a&gt; - repository: README, MCP setup, agent identities, install paths (fetched 2026-10-10)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.github.com/repos/ljtn/epiq&#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/ljtn/epiq&lt;/a&gt; - stars, forks, watchers, dates, MIT license as of 2026-10-10&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://raw.githubusercontent.com/ljtn/epiq/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/ljtn/epiq/main/readme.md&lt;/a&gt; - the event-sourced model, conflict handling, MCP and skill setup, worktree sync&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ljtn.github.io/epiq/&#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=ljtn.github.io&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://ljtn.github.io/epiq/&lt;/a&gt; - the site: teams-and-agents positioning, live monitoring and replay wording, the MCP tool count&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=48155570&#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=news.ycombinator.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://news.ycombinator.com/item?id=48155570&lt;/a&gt; - the 91-point launch thread: the distributed-tracker history objection, the last-event-wins exchange, the MCP-versus-skill debate&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.github.com/repos/ljtn/epiq/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/ljtn/epiq/releases&lt;/a&gt; - v1.12.4 (2026-10-08) and the v1.12.x release train&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.npmjs.org/downloads/point/last-month/epiq&#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/epiq&lt;/a&gt; - 2,825 downloads last month&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      
    </item>
    
  </channel>
</rss>
