-
-
{hero.install.map((c) => `$ ${c}`).join("\n")}
+
+
+
+
+
+
{hero.signal}
+
+
{hero.h1}
+
{hero.subhead}
+
+
{hero.proof}
-
+
- Swipe to view the full commands →
-
+
+
diff --git a/website/src/components/HeroDiagram.astro b/website/src/components/HeroDiagram.astro
deleted file mode 100644
index 98615b2..0000000
--- a/website/src/components/HeroDiagram.astro
+++ /dev/null
@@ -1,63 +0,0 @@
----
-// Pure HTML/CSS keeps the product model visible before JavaScript, and lets the
-// same flow switch from horizontal to vertical without shrinking diagram text.
----
-
-
-
Supported agents
-
- Claude Code
- Codex
- Cursor
- OpenCode
- Hermes
- + any MCP host
-
-
one shared memory trail
-
-
-
-
- Vault · source of truth
- Markdown you control
-
-
auth-fix.md
-
Fixed login by rotating [[jwt-secret]] during [[deploy]] .
-
- inspect · edit · sync
-
-
-
- reconcile
-
-
-
-
- Index · disposable cache
- DuckDB
- BM25 + vectors graph + reranker
-
-
-
- safe to rebuild
-
-
-
- rank
-
-
-
-
- MCP · cited recall
- Current context
- “how did we fix login?”
- Rotated the jwt-secret during deploy.
- ↳ source note · api
-
-
-
diff --git a/website/src/components/HowItWorks.astro b/website/src/components/HowItWorks.astro
deleted file mode 100644
index 808acca..0000000
--- a/website/src/components/HowItWorks.astro
+++ /dev/null
@@ -1,30 +0,0 @@
----
-import Section from "./Section.astro";
-import Prose from "./Prose.astro";
-import { howItWorks } from "../lib/content";
-
-const steps = [
- { n: "01", label: "Capture", title: "Agent sessions", meta: "hooks + sweep" },
- { n: "02", label: "Keep", title: "Markdown vault", meta: "redacted + inspectable", strong: true },
- { n: "03", label: "Index", title: "DuckDB cache", meta: "hybrid + rebuildable" },
- { n: "04", label: "Recall", title: "MCP context", meta: "cited + project-aware", dark: true },
-];
----
-
- {howItWorks.body}
-
-
- Agent sessions are captured into a canonical Markdown vault, indexed in a rebuildable DuckDB cache, and returned as cited MCP context.
-
- {steps.map((step, index) => (
- <>
-
-
{step.n} {step.label}
-
{step.title}
-
{step.meta}
-
- {index < steps.length - 1 &&
}
- >
- ))}
-
-
diff --git a/website/src/components/InstallChooser.astro b/website/src/components/InstallChooser.astro
new file mode 100644
index 0000000..9e2d279
--- /dev/null
+++ b/website/src/components/InstallChooser.astro
@@ -0,0 +1,362 @@
+---
+import CommandBox from "./CommandBox.astro";
+import { installPaths, otherInstallHosts } from "../lib/content";
+---
+
+
+
+
+ Choose an AgentCairn installation route
+
+ {installPaths.map((path, index) => (
+
+
+ {path.label}
+
+ ))}
+
+
+
+ {installPaths.map((path) => (
+
+
+
{path.title}
+
{path.summary}
+
+
+ {path.id === "other" ? (
+
+
+ Which host are you setting up?
+
+ {otherInstallHosts.map((host) => {host.label} )}
+
+
+
+ {otherInstallHosts.map((host, index) => (
+
+
+
+
Before you run it {host.prerequisite}
+
What it adds {host.installs}
+
Finish and verify {host.restart} {host.verify}
+
+
+ ))}
+
The default Cursor route is shown. Compare the complete host matrix below for another agent.
+
+ ) : (
+ <>
+
+
+
Before you run it {path.prerequisite}
+
What happens next {path.restart}
+
Success check {path.verify}
+
+ >
+ )}
+
+ {path.hrefLabel} →
+
+ ))}
+
+
+
+
+
+
+
diff --git a/website/src/components/Inversion.astro b/website/src/components/Inversion.astro
index e0e59ab..059a08c 100644
--- a/website/src/components/Inversion.astro
+++ b/website/src/components/Inversion.astro
@@ -1,9 +1,225 @@
---
-import Section from "./Section.astro";
-import Prose from "./Prose.astro";
-import { inversion } from "../lib/content";
+import { contractPoints, inversion, vaultProof } from "../lib/content";
---
-
- {inversion.h2}
- {inversion.body.map((p) => $1")} />)}
-
+
+
+
+
+
+
+
+
+
+
+ Open full size ↗
+
+ {vaultProof.caption}
+
+
+
+ {contractPoints.map((point, index) => (
+
+ {String(index + 1).padStart(2, "0")}
+
+
{point.key}
+
{point.title}
+
{point.body}
+
+
+ ))}
+
+
+
+
+
diff --git a/website/src/components/Measured.astro b/website/src/components/Measured.astro
index 3b908cc..495a2a0 100644
--- a/website/src/components/Measured.astro
+++ b/website/src/components/Measured.astro
@@ -1,65 +1,246 @@
---
-import Section from "./Section.astro";
-import { benchmark } from "../lib/content";
+import { benchmark, site } from "../lib/content";
---
-
-
-
Retrieval — LoCoMo
-
Swipe to see every metric →
-
-
{benchmark.locomoCaption}
-
-
Retrieval — LongMemEval-S
-
Swipe to see every metric →
-
-
{benchmark.longmemevalCaption}
-
-
Context efficiency
-
Swipe to see every metric →
-
-
+
diff --git a/website/src/components/MemoryTrail.astro b/website/src/components/MemoryTrail.astro
new file mode 100644
index 0000000..16698d4
--- /dev/null
+++ b/website/src/components/MemoryTrail.astro
@@ -0,0 +1,276 @@
+---
+// A real first-use loop, rendered as the product's signature trail: one agent
+// leaves a durable file and another follows it back with a citation.
+---
+
+
+ One durable fact, followed across agents
+
+
+
+ Claude Code
+
+ Markdown vault
+
+ Codex
+
+
+
+
+ 1
+
+
Claude Code · remember
+
“Staging deploys use blue-green.”
+
↳ written and indexed
+
+
+
+
+ 2
+
+
+ memories/staging-deploys-use-blue-green-5b9d7c60.md
+ canonical excerpt
+
+
---
+type: memory
+permalink: staging-deploys-use-blue-green-5b9d7c60
+source: memory://agent/remember
+project: checkout-service
+harness: mcp
+---
+
+- [context] Staging deploys use blue-green. #remembered
+
+
+
+
+ 3
+
+
Codex · recall
+
Use the blue-green deployment strategy.
+
↳ staging-deploys-use-blue-green-5b9d7c60 · current · checkout-service
+
+
+
+
+
+
+ DuckDB index: derived locally · safe to delete and rebuild
+
+
+
+
diff --git a/website/src/components/Nav.astro b/website/src/components/Nav.astro
index d8a3657..e00122e 100644
--- a/website/src/components/Nav.astro
+++ b/website/src/components/Nav.astro
@@ -2,28 +2,26 @@
import { nav, navGuides } from "../lib/content";
const normalizedPath = (href: string) => href.replace(/\/+$/, "");
-const featuredGuides = navGuides.filter((item) => normalizedPath(item.href) === "/claude-code-memory");
const github = navGuides.find((item) => item.label === "GitHub" || item.href.includes("github.com"));
-const moreGuides = navGuides.filter((item) => !featuredGuides.includes(item) && item !== github);
+const guides = navGuides.filter((item) => item !== github && normalizedPath(item.href) !== "");
---
-
+
agentcairn
-
- {nav.map((n) =>
{n.label} )}
- {featuredGuides.map((n) =>
{n.label} )}
- {moreGuides.length > 0 && (
+
+ {nav.map((n) =>
{n.label} )}
+ {guides.length > 0 && (
- More
+ Guides
)}
- {github &&
{github.label} }
+ {github &&
{github.label} }
+
+