diff --git a/website/playwright.config.ts b/website/playwright.config.ts index 6e03135..6cd6561 100644 --- a/website/playwright.config.ts +++ b/website/playwright.config.ts @@ -5,6 +5,8 @@ export default defineConfig({ // Cloudflare adapter to a workerd/wrangler runtime that doesn't bind :4321 here, // so we serve dist/ with a plain static server (the site is static; the Worker // just serves these same assets in production). - webServer: { command: "npm run build && python3 -m http.server 4321 --directory dist", url: "http://localhost:4321", reuseExistingServer: !process.env.CI }, - use: { baseURL: "http://localhost:4321" }, + // Keep tests on their own port so a developer's Astro server (and its dev + // toolbar) can never be mistaken for the production-static test target. + webServer: { command: "npm run build && python3 -m http.server 4173 --directory dist", url: "http://localhost:4173", reuseExistingServer: false }, + use: { baseURL: "http://localhost:4173" }, }); diff --git a/website/public/og.png b/website/public/og.png index 94ece27..4f6bc91 100644 Binary files a/website/public/og.png and b/website/public/og.png differ diff --git a/website/scripts/gen-og.mjs b/website/scripts/gen-og.mjs index 5fd5490..e0ce2ed 100644 --- a/website/scripts/gen-og.mjs +++ b/website/scripts/gen-og.mjs @@ -17,16 +17,16 @@ const svg = String.raw` agentcairn - ONE VAULT · EVERY SUPPORTED AGENT · LOCAL-FIRST + LOCAL-FIRST · OPEN SOURCE · PLAIN MARKDOWN - One memory across - your coding agents. - Plain Markdown under your control. - Capture once. Inspect the files. Recall anywhere. + One memory trail across + connected coding agents. + Files survive. Indexes rebuild. + Leave durable context for whichever agent comes next. - - MARKDOWN · DUCKDB · MCP + + NO HOSTED ACCOUNT · NO EXTERNAL DATABASE agentcairn.dev @@ -36,25 +36,26 @@ const svg = String.raw` - - MCP · CITED RECALL - Current context - ↳ auth-fix.md · api + + CLAUDE CODE · REMEMBER + Staging deploys use blue-green. + written and indexed - - INDEX · REBUILDABLE CACHE - DuckDB - BM25 + vectors + rerank + + MARKDOWN · CANONICAL + memories/staging-deploys-use-blue-green-5b9d7c60.md + project: checkout-service · harness: mcp + - [context] Staging deploys use blue-green. #remembered - - VAULT · SOURCE OF TRUTH - Markdown you control - inspect · edit · sync + + CODEX · RECALL + Use the blue-green strategy. + ↳ staging-deploys-use-blue-green-5b9d7c60 `; diff --git a/website/src/components/AgentsSupported.astro b/website/src/components/AgentsSupported.astro index a1d0c21..a5f145d 100644 --- a/website/src/components/AgentsSupported.astro +++ b/website/src/components/AgentsSupported.astro @@ -1,71 +1,201 @@ --- -import Section from "./Section.astro"; import { agents } from "../lib/content"; -const obsidianWebp = agents.obsidian.image.replace(/\.png$/i, ".webp"); - -// Render inline `code` spans and [label](href) markdown links into safe HTML. -// Tokenize on code spans first, then apply the link regex ONLY to the -// non-code segments — so markdown-link syntax inside a code span is left intact. -function inline(s: string) { - return s - .split(/(`[^`]+`)/) - .map((seg) => - seg.startsWith("`") && seg.endsWith("`") - ? `${seg - .slice(1, -1) - .replace(/&/g, "&") - .replace(//g, ">")}` - : seg.replace( - /\[(.+?)\]\((.+?)\)/g, - (_m, label, href) => `${label}`, - ), - ) - .join(""); -} + +const full = agents.rows.filter((row) => row.ambient === "full"); +const partial = agents.rows.filter((row) => row.ambient === "partial"); +const explicit = agents.rows.filter((row) => row.ambient === "none"); --- -
-

{agents.h2}

-

-

Swipe to compare every host →

-
- - - - - - - - - - {agents.rows.map((r) => ( - - - - - - - ))} - -
Supported coding-agent hosts, integration level, setup command, and ambient memory support
hostsupportset up withambient
{r.host}{r.support}{r.setup}{r.ambient === "full" ? "✓" : r.ambient === "partial" ? "◐" : "—"}
+
+
+

{agents.h2}

+

{agents.body}

-
{agents.install.join("\n")}
-

{agents.note}

- -

-

- - - {agents.obsidian.imageAlt} - -
{agents.obsidian.caption}
-
-
+ +
+

AgentCairn automation levels by host

+
+
+

Ambient

+ Recall and capture follow the host lifecycle. +
+
    {full.map((row) =>
  • {row.host}
  • )}
+
+
+
+

Sweep-backed

+ Tools are available; transcript capture runs out-of-band. +
+
    {partial.map((row) =>
  • {row.host}
  • )}
+
+
+
+

Explicit MCP

+ The same memory tools, invoked when you choose. +
+
    {explicit.map((row) =>
  • {row.host}
  • )}
+
+
+ +
+ Compare every host, integration, and setup command +
+

Swipe to compare every host →

+
+ + + + + + + + + + {agents.rows.map((row) => ( + + + + + + + ))} + +
Supported coding-agent hosts, integration level, setup command, and ambient memory support
hostsupportset up withambient
{row.host}{row.support}{row.setup}{row.ambient === "full" ? "full" : row.ambient === "partial" ? "sweep" : "explicit"}
+
+

{agents.note}

+
+
+
+ + diff --git a/website/src/components/ClaudeMemoryCallout.astro b/website/src/components/ClaudeMemoryCallout.astro deleted file mode 100644 index 486ead2..0000000 --- a/website/src/components/ClaudeMemoryCallout.astro +++ /dev/null @@ -1,28 +0,0 @@ ---- -import Section from "./Section.astro"; -import Prose from "./Prose.astro"; -import CommandBox from "./CommandBox.astro"; - -const command = [ - "uvx --from agentcairn cairn import claude-memory # preview", - "uvx --from agentcairn cairn import claude-memory --apply # import + index", -].join("\n"); ---- -
-

- Claude learned it once. Bring it to every supported agent. -

- -

- Import Claude Code’s auto-memory into the shared Markdown vault without - changing Claude’s source files. Preview the current repository first; - apply only when the plan looks right. -

-
-
- -
-

- See exactly what is imported and how history is preserved -

-
diff --git a/website/src/components/CommandBox.astro b/website/src/components/CommandBox.astro index 1a53a33..d25040f 100644 --- a/website/src/components/CommandBox.astro +++ b/website/src/components/CommandBox.astro @@ -2,12 +2,12 @@ // A copy/paste command box matching the home hero's style. // `command` may contain multiple lines (joined with "\n"). import CopyButton from "./CopyButton.astro"; -const { command } = Astro.props; +const { command, label } = Astro.props; ---
{command}
- +

Swipe to view the full command →

diff --git a/website/src/components/CopyButton.astro b/website/src/components/CopyButton.astro index a0d617c..2f28ddf 100644 --- a/website/src/components/CopyButton.astro +++ b/website/src/components/CopyButton.astro @@ -1,11 +1,11 @@ --- -const { text } = Astro.props; +const { text, label = `Copy command: ${text}` } = Astro.props; ---