-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcompare.html
More file actions
183 lines (175 loc) · 12.5 KB
/
compare.html
File metadata and controls
183 lines (175 loc) · 12.5 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<!DOCTYPE html>
<html lang="en" class="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>StackMemory vs Alternatives — Comparison</title>
<meta name="description" content="Compare StackMemory to CLAUDE.md, .cursorrules, and vanilla LLM context. See what persists and what doesn't.">
<link rel="icon" href="favicon.svg" type="image/svg+xml">
<meta property="og:title" content="StackMemory vs Alternatives">
<meta property="og:description" content="Compare StackMemory to CLAUDE.md, .cursorrules, and vanilla LLM context.">
<meta property="og:url" content="https://stackmemoryai.github.io/stackmemory/compare.html">
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = { darkMode: 'class' }
</script>
</head>
<body class="bg-white dark:bg-neutral-950 text-neutral-900 dark:text-neutral-100 antialiased">
<header class="sticky top-0 z-50 backdrop-blur bg-white/80 dark:bg-neutral-950/80 border-b border-neutral-200 dark:border-neutral-800">
<div class="max-w-5xl mx-auto px-6 h-14 flex items-center justify-between">
<a href="index.html" class="font-semibold text-base tracking-tight">StackMemory</a>
<nav class="flex items-center gap-5 text-sm">
<a href="index.html" class="text-neutral-600 dark:text-neutral-400 hover:text-neutral-900 dark:hover:text-neutral-100 transition-colors">Home</a>
<a href="tools.html" class="text-neutral-600 dark:text-neutral-400 hover:text-neutral-900 dark:hover:text-neutral-100 transition-colors">MCP Tools</a>
<a href="changelog.html" class="text-neutral-600 dark:text-neutral-400 hover:text-neutral-900 dark:hover:text-neutral-100 transition-colors">Changelog</a>
<button id="theme-toggle" class="p-1.5 rounded-md text-neutral-500 hover:text-neutral-900 dark:hover:text-neutral-100 hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors" aria-label="Toggle theme">
<svg id="icon-sun" class="w-4 h-4 hidden dark:block" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="5"/><path d="M12 1v2m0 18v2M4.22 4.22l1.42 1.42m12.72 12.72l1.42 1.42M1 12h2m18 0h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"/></svg>
<svg id="icon-moon" class="w-4 h-4 block dark:hidden" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
</button>
</nav>
</div>
</header>
<main class="max-w-5xl mx-auto px-6 py-16">
<h1 class="text-3xl font-semibold tracking-tight">How StackMemory compares</h1>
<p class="mt-4 text-neutral-600 dark:text-neutral-400 text-base leading-relaxed max-w-2xl">
Every AI coding tool loses context between sessions. Here's how the common approaches stack up.
</p>
<!-- Comparison table -->
<div class="mt-10 overflow-x-auto">
<table class="w-full text-sm">
<thead>
<tr class="border-b border-neutral-200 dark:border-neutral-800">
<th class="text-left py-3 pr-4 font-semibold w-48">Capability</th>
<th class="text-center py-3 px-4 font-semibold">StackMemory</th>
<th class="text-center py-3 px-4 font-semibold text-neutral-500">CLAUDE.md</th>
<th class="text-center py-3 px-4 font-semibold text-neutral-500">.cursorrules</th>
<th class="text-center py-3 px-4 font-semibold text-neutral-500">Vanilla context</th>
</tr>
</thead>
<tbody class="text-neutral-600 dark:text-neutral-400">
<tr class="border-b border-neutral-100 dark:border-neutral-800/50">
<td class="py-3 pr-4 font-medium text-neutral-900 dark:text-neutral-100">Survives /clear</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">Yes</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">Yes</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">Yes</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
</tr>
<tr class="border-b border-neutral-100 dark:border-neutral-800/50">
<td class="py-3 pr-4 font-medium text-neutral-900 dark:text-neutral-100">Survives session restart</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">Yes</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">Yes</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">Yes</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
</tr>
<tr class="border-b border-neutral-100 dark:border-neutral-800/50">
<td class="py-3 pr-4 font-medium text-neutral-900 dark:text-neutral-100">Records decisions automatically</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">Yes</td>
<td class="py-3 px-4 text-center text-red-500">Manual</td>
<td class="py-3 px-4 text-center text-red-500">Manual</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
</tr>
<tr class="border-b border-neutral-100 dark:border-neutral-800/50">
<td class="py-3 pr-4 font-medium text-neutral-900 dark:text-neutral-100">Scoped context (not flat)</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">Call stack</td>
<td class="py-3 px-4 text-center text-red-500">Flat file</td>
<td class="py-3 px-4 text-center text-red-500">Flat file</td>
<td class="py-3 px-4 text-center text-red-500">Linear</td>
</tr>
<tr class="border-b border-neutral-100 dark:border-neutral-800/50">
<td class="py-3 pr-4 font-medium text-neutral-900 dark:text-neutral-100">Full-text search</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">FTS5 + BM25</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
</tr>
<tr class="border-b border-neutral-100 dark:border-neutral-800/50">
<td class="py-3 pr-4 font-medium text-neutral-900 dark:text-neutral-100">Task management</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">Built-in + Linear</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
</tr>
<tr class="border-b border-neutral-100 dark:border-neutral-800/50">
<td class="py-3 pr-4 font-medium text-neutral-900 dark:text-neutral-100">Multi-agent support</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">Team + Cord</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
<td class="py-3 px-4 text-center text-red-500">No</td>
</tr>
<tr class="border-b border-neutral-100 dark:border-neutral-800/50">
<td class="py-3 pr-4 font-medium text-neutral-900 dark:text-neutral-100">Editor support</td>
<td class="py-3 px-4 text-center">Claude, Codex, OpenCode</td>
<td class="py-3 px-4 text-center">Claude Code only</td>
<td class="py-3 px-4 text-center">Cursor only</td>
<td class="py-3 px-4 text-center">Any</td>
</tr>
<tr class="border-b border-neutral-100 dark:border-neutral-800/50">
<td class="py-3 pr-4 font-medium text-neutral-900 dark:text-neutral-100">Setup effort</td>
<td class="py-3 px-4 text-center">2 commands</td>
<td class="py-3 px-4 text-center">Create file</td>
<td class="py-3 px-4 text-center">Create file</td>
<td class="py-3 px-4 text-center">None</td>
</tr>
<tr>
<td class="py-3 pr-4 font-medium text-neutral-900 dark:text-neutral-100">Scales with project</td>
<td class="py-3 px-4 text-center text-green-600 dark:text-green-400">Database-backed</td>
<td class="py-3 px-4 text-center text-yellow-600 dark:text-yellow-400">File grows</td>
<td class="py-3 px-4 text-center text-yellow-600 dark:text-yellow-400">File grows</td>
<td class="py-3 px-4 text-center text-red-500">Resets</td>
</tr>
</tbody>
</table>
</div>
<!-- Detail sections -->
<section class="mt-16">
<h2 class="text-xl font-semibold tracking-tight">The core problem</h2>
<p class="mt-3 text-sm text-neutral-600 dark:text-neutral-400 leading-relaxed max-w-2xl">
AI coding tools are stateless. Every session starts from zero. You re-explain architecture, re-state constraints, re-describe what you tried. CLAUDE.md and .cursorrules help by injecting static instructions, but they're flat files — no search, no scoping, no automatic capture.
</p>
<p class="mt-3 text-sm text-neutral-600 dark:text-neutral-400 leading-relaxed max-w-2xl">
StackMemory treats context as structured data. Decisions, constraints, and progress live in a SQLite database with full-text search. Context is organized as a call stack — nested frames that scope work like function calls. The active path is "hot," everything else stays queryable but quiet.
</p>
</section>
<section class="mt-12">
<h2 class="text-xl font-semibold tracking-tight">When to use what</h2>
<div class="mt-6 grid gap-4 sm:grid-cols-2">
<div class="p-4 rounded-lg bg-neutral-50 dark:bg-neutral-900">
<p class="font-semibold text-sm">Use CLAUDE.md for</p>
<p class="mt-1 text-sm text-neutral-600 dark:text-neutral-400">Static project instructions, coding standards, and tool preferences that rarely change.</p>
</div>
<div class="p-4 rounded-lg bg-neutral-50 dark:bg-neutral-900">
<p class="font-semibold text-sm">Use StackMemory for</p>
<p class="mt-1 text-sm text-neutral-600 dark:text-neutral-400">Dynamic context — decisions made during work, task progress, architectural choices, things that evolve session to session.</p>
</div>
<div class="p-4 rounded-lg bg-neutral-50 dark:bg-neutral-900">
<p class="font-semibold text-sm">Use both together</p>
<p class="mt-1 text-sm text-neutral-600 dark:text-neutral-400">CLAUDE.md for the "what" (rules, standards). StackMemory for the "why" and "when" (decisions, progress, history).</p>
</div>
<div class="p-4 rounded-lg bg-neutral-50 dark:bg-neutral-900">
<p class="font-semibold text-sm">StackMemory replaces</p>
<p class="mt-1 text-sm text-neutral-600 dark:text-neutral-400">Manual context pasting, "reminder" prompts, re-explaining project state, lost decisions after /clear.</p>
</div>
</div>
</section>
<div class="mt-12 pt-8 border-t border-neutral-200 dark:border-neutral-800">
<a href="index.html#quickstart" class="text-sm font-semibold underline underline-offset-2 hover:text-neutral-600 dark:hover:text-neutral-400 transition-colors">Get started in 2 commands →</a>
</div>
</main>
<footer class="border-t border-neutral-200 dark:border-neutral-800 mt-8">
<div class="max-w-5xl mx-auto px-6 py-10 flex flex-col sm:flex-row items-center justify-between gap-4 text-sm text-neutral-500 dark:text-neutral-400">
<div class="flex items-center gap-4">
<a href="https://github.com/stackmemoryai/stackmemory" target="_blank" rel="noopener" class="hover:text-neutral-900 dark:hover:text-neutral-100 underline underline-offset-2 transition-colors">GitHub</a>
<a href="https://www.npmjs.com/package/@stackmemoryai/stackmemory" target="_blank" rel="noopener" class="hover:text-neutral-900 dark:hover:text-neutral-100 underline underline-offset-2 transition-colors">npm</a>
</div>
<p>BSL 1.1 — converts to MIT after 4 years</p>
</div>
</footer>
<script>
const html = document.documentElement;
const toggle = document.getElementById('theme-toggle');
const stored = localStorage.getItem('theme');
if (stored === 'light' || (!stored && window.matchMedia('(prefers-color-scheme: light)').matches)) html.classList.remove('dark');
toggle.addEventListener('click', () => { html.classList.toggle('dark'); localStorage.setItem('theme', html.classList.contains('dark') ? 'dark' : 'light'); });
</script>
</body>
</html>