File size: 5,567 Bytes
54a0d76
c350618
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54a0d76
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Repolith — coordination layer for parallel Claude Code sessions</title>
<meta name="description" content="File-level locks, plan-conflict detection, and auto-resume for multiple Claude Code sessions on the same repos.">
<style>
  :root { color-scheme: dark; }
  * { box-sizing: border-box; }
  body {
    margin: 0; background: #0b0d12; color: #d7dbe4;
    font: 16px/1.6 ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
    -webkit-font-smoothing: antialiased;
  }
  main { max-width: 880px; margin: 0 auto; padding: 56px 24px 80px; }
  h1 { font-size: 2rem; margin: 0 0 4px; color: #f2f4f8; letter-spacing: -0.02em; }
  .tag { color: #8b93a7; margin: 0 0 28px; font-size: 1.05rem; }
  .hero-sub { max-width: 640px; color: #aab1c2; margin: 0 0 28px; }
  img.demo { width: 100%; border-radius: 10px; border: 1px solid #232838; display: block; }
  .caption { color: #6d7488; font-size: .82rem; margin: 8px 0 36px; }
  .install {
    display: inline-block; background: #141824; border: 1px solid #2a3145; border-radius: 8px;
    padding: 10px 18px; font: 500 .95rem/1 ui-monospace, "Cascadia Code", Consolas, monospace;
    color: #9ee6b8; margin: 0 0 40px;
  }
  .stats { display: flex; flex-wrap: wrap; gap: 12px; margin: 0 0 12px; }
  .stat { background: #10131c; border: 1px solid #1e2434; border-radius: 10px; padding: 14px 18px; flex: 1 1 150px; }
  .stat b { display: block; font-size: 1.35rem; color: #f2f4f8; font-variant-numeric: tabular-nums; }
  .stat span { font-size: .8rem; color: #8b93a7; }
  .stats-note { color: #6d7488; font-size: .82rem; margin: 0 0 44px; }
  h2 { font-size: 1.15rem; color: #f2f4f8; margin: 0 0 10px; }
  .cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 16px; margin: 0 0 44px; }
  .col { background: #10131c; border: 1px solid #1e2434; border-radius: 10px; padding: 18px; }
  .col h3 { margin: 0 0 8px; font-size: .95rem; color: #e6e9f0; }
  .col p { margin: 0; font-size: .88rem; color: #9aa1b4; }
  .limits { border-left: 3px solid #4a5268; padding: 4px 0 4px 16px; color: #8b93a7; font-size: .88rem; margin: 0 0 44px; }
  .links a { color: #7fb3ff; text-decoration: none; margin-right: 22px; font-size: .95rem; }
  .links a:hover { text-decoration: underline; }
  footer { margin-top: 48px; color: #59607a; font-size: .8rem; }
</style>
</head>
<body>
<main>
  <h1>repolith</h1>
  <p class="tag">The coordination layer for parallel AI coding agents.</p>
  <p class="hero-sub">File-level locks, plan-conflict detection, and auto-resume for multiple Claude Code
  sessions on the same repos. Worktree isolation defers the conflict to merge time — after every session
  already did the work. Coordination prevents it at plan time and edit time.</p>

  <div class="install">npm i -g repolith</div>

  <img class="demo" src="demo.gif" alt="Two Claude Code sessions edit the same file: session A claims it on first touch, session B is denied with the holder named, waits, and auto-resumes the moment A commits.">
  <p class="caption">Real repolith from npm, nothing mocked — two sessions collide, the second is denied, waits, and auto-resumes.</p>

  <div class="stats">
    <div class="stat"><b>914</b><span>sessions coordinated</span></div>
    <div class="stat"><b>20,994</b><span>file claims</span></div>
    <div class="stat"><b>3,168</b><span>collisions denied</span></div>
    <div class="stat"><b>552</b><span>FIFO auto-resumes</span></div>
    <div class="stat"><b>17</b><span>conflicts caught at plan time</span></div>
  </div>
  <p class="stats-note">9 weeks of dogfooding on the author's own two-repo workspace (Jun 29 – Aug 30, 2026). Exact counts from the coordination journal.</p>

  <h2>How it works</h2>
  <div class="cols">
    <div class="col">
      <h3>Plan-time catch</h3>
      <p>A hook on ExitPlanMode captures each session's plan. Two plans overlapping on the same files? The second session finds out before writing a line.</p>
    </div>
    <div class="col">
      <h3>Edit gate + auto-resume</h3>
      <p>First touch claims the file. A second live session is denied with the holder named, can queue, and resumes FIFO the moment the file frees up. Deadlocks are surfaced, not hung.</p>
    </div>
    <div class="col">
      <h3>Journal + drift control</h3>
      <p>Every file has a journal. Sessions read what the last session did there before editing, and get a catch-up brief on start. Heartbeats + git-verified staleness keep crashed sessions from wedging the store.</p>
    </div>
  </div>

  <p class="limits"><strong>Honest limits:</strong> same-machine only (shared JSON store), cooperative — it
  coordinates sessions that run the hooks. Claude Code today; other agents via the CLI. Advisory by design:
  every hook exits 0 on internal failure, so coordination can never break your edit flow. Also does multi-repo:
  TOML manifest, lockfile with an atomic workspace hash, parallel dispatch, VS Code extension.</p>

  <p class="links">
    <a href="https://github.com/ethanrickyjrjr-wq/repolith">GitHub</a>
    <a href="https://www.npmjs.com/package/repolith">npm</a>
    <a href="https://marketplace.visualstudio.com/items?itemName=stanicky.repolith-vscode">VS Code</a>
    <a href="https://ethanrickyjrjr-wq.github.io/repolith-site/">Site + team-tier waitlist</a>
  </p>

  <footer>MIT · TypeScript on Bun · no daemon, no server — a JSON store and git</footer>
</main>
</body>
</html>