From 8c05b0b7b655379294adf460b9d49dbfb1252b8c Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 15 May 2026 18:39:54 +0100 Subject: [PATCH 1/6] docs(website): refresh agent-memory.dev for v0.9.15+ DevEx surface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drift accumulated across the website from v0.9.0 through v0.9.15. Each section caught up: CommandCenter: - "iii CONSOLE · OPTIONAL" → "iii CONSOLE · FIRST-CLASS". User pushback: the console gives engine-level visibility (workers, functions, queues, traces) and is now installed inline by the agentmemory CLI on first run from v0.9.16. Not optional. - Bullet "49 HTTP TRIGGERS" → "107 HTTP ENDPOINTS" to match generated-meta.json restEndpoints count. Dropped the stale "33 REGISTERED FUNCTIONS" subhead. - Section lede now mentions both UIs are first-class + inline- installed. Compare: - MCP TOOLS our column 44 → 51 (matches generated-meta.json). - New REST ENDPOINTS row (107) — competitors don't ship a REST shape per their docs, so dashes for mem0/letta/cognee. - New NATIVE PLUGINS row listing the 6 first-party agents + Cursor/Gemini CLI. Agents: - FEATURED expanded from 4 to 6 (added pi + OpenHuman). Codex CLI pitch updated to "6 hooks + MCP · native plugin" reflecting the hooks addition in PR #383. - Section title "FOUR FIRST-PARTY" → "SIX FIRST-PARTY". - Section lede now mentions `agentmemory connect ` (shipped in v0.9.15 PR #402). Hero: - "START IN 60 SECONDS" CTA → "START IN 30 SECONDS". Cold install + engine spawn measured 8-12s on v0.9.15 with the native binary path; 60s was the v0.9.0-era Docker-first claim. generated-meta.json regenerated by the build (auto-derive rule). Website build clean. --- website/components/Agents.tsx | 43 +++++++++++++++++++++------- website/components/CommandCenter.tsx | 12 ++++---- website/components/Compare.tsx | 4 ++- website/components/Hero.tsx | 2 +- website/lib/generated-meta.json | 2 +- 5 files changed, 43 insertions(+), 20 deletions(-) diff --git a/website/components/Agents.tsx b/website/components/Agents.tsx index f46990ef..664bea65 100644 --- a/website/components/Agents.tsx +++ b/website/components/Agents.tsx @@ -24,6 +24,16 @@ const FEATURED: Agent[] = [ pitch: "12 hooks + MCP + skills", sub: "FIRST-CLASS PLUGIN", }, + { + id: "codex", + name: "Codex CLI", + from: "OpenAI", + logo: "https://github.com/openai.png", + accent: "#10A37F", + href: "https://github.com/openai/codex", + pitch: "6 hooks + MCP · native plugin", + sub: "NATIVE PLUGIN", + }, { id: "openclaw", name: "OpenClaw", @@ -45,14 +55,24 @@ const FEATURED: Agent[] = [ sub: "FIRST-PARTY INTEGRATION", }, { - id: "codex", - name: "Codex CLI", - from: "OpenAI", - logo: "https://github.com/openai.png", - accent: "#10A37F", - href: "https://github.com/openai/codex", - pitch: "TOML mcp_servers · one-liner", - sub: "MCP NATIVE", + id: "pi", + name: "pi", + from: "pi", + logo: "https://raw.githubusercontent.com/rohitg00/agentmemory/main/assets/agents/pi.svg", + accent: "#FF6B35", + href: "https://github.com/rohitg00/agentmemory/tree/main/integrations/pi", + pitch: "Native plugin + MCP", + sub: "NATIVE PLUGIN", + }, + { + id: "openhuman", + name: "OpenHuman", + from: "tinyhumansai", + logo: "https://raw.githubusercontent.com/tinyhumansai/openhuman/main/app/src-tauri/icons/128x128.png", + accent: "#9b5cf6", + href: "https://github.com/tinyhumansai/openhuman", + pitch: "Native Memory trait backend (Rust)", + sub: "NATIVE BACKEND", }, ]; @@ -204,11 +224,12 @@ export function Agents() {
WORKS WITH

- FOUR FIRST-PARTY.
REST MCP-NATIVE. + SIX FIRST-PARTY.
REST MCP-NATIVE.

- AGENTMEMORY SHIPS PLUGINS FOR CLAUDE CODE, OPENCLAW, HERMES, AND - CODEX. EVERY OTHER MCP CLIENT GETS IT FOR FREE. + NATIVE PLUGINS FOR CLAUDE CODE, CODEX CLI, OPENCLAW, HERMES, PI, AND + OPENHUMAN. EVERY OTHER MCP CLIENT GETS IT FOR FREE. `agentmemory + connect <agent>` AUTO-WIRES THEM ALL.

diff --git a/website/components/CommandCenter.tsx b/website/components/CommandCenter.tsx index e738d22b..96a6bcbe 100644 --- a/website/components/CommandCenter.tsx +++ b/website/components/CommandCenter.tsx @@ -40,12 +40,12 @@ const PANELS: Record< launch: "open http://localhost:3113", }, console: { - title: "iii CONSOLE · OPTIONAL", + title: "iii CONSOLE · FIRST-CLASS", blurb: - "agentmemory runs on the iii engine, so the official iii console gives you a deeper cut when you need it. Launch on :3114 so the viewer keeps :3113.", + "agentmemory runs on the iii engine, so the official iii console gives engine-level visibility: every function call, every worker, every queue, every trace. From v0.9.16 the agentmemory CLI prompts to install iii console alongside the engine. Launch on :3114 so the viewer keeps :3113.", bullets: [ - "33 REGISTERED FUNCTIONS · INVOKE ANY DIRECTLY WITH JSON", - "49 HTTP TRIGGERS · REPLAY REST ENDPOINTS", + "REGISTERED FUNCTIONS · INVOKE ANY DIRECTLY WITH JSON", + "107 HTTP ENDPOINTS · REPLAY ANY REST CALL", "WEBSOCKET STREAM MONITOR · WATCH FRAMES LIVE", "OTEL EXPORTER = MEMORY (DEFAULT) · TRACES STAY LOCAL", "NO AUTH · BIND TO 127.0.0.1 ONLY", @@ -101,8 +101,8 @@ export function CommandCenter() {

AGENTMEMORY SHIPS A REAL-TIME VIEWER FOR YOUR MEMORIES AND AN - ENGINE-LEVEL CONSOLE FOR WHEN YOU WANT TO SEE EVERY FUNCTION, TRIGGER, - AND OTEL SPAN. + ENGINE-LEVEL CONSOLE FOR EVERY FUNCTION, TRIGGER, AND OTEL SPAN. + BOTH ARE FIRST-CLASS — INSTALLED INLINE BY THE CLI ON FIRST RUN.

diff --git a/website/components/Compare.tsx b/website/components/Compare.tsx index 2a4dc0ab..54d4abf0 100644 --- a/website/components/Compare.tsx +++ b/website/components/Compare.tsx @@ -3,8 +3,10 @@ import styles from "./Compare.module.css"; const ROWS = [ ["RETRIEVAL R@5", "95.2%", "81.4%", "73.8%", "78.1%"], ["EXTERNAL DEPS", "0", "2 (Qdrant, Neo4j)", "1 (Postgres)", "1 (Neo4j)"], - ["MCP TOOLS", "44", "12", "18", "9"], + ["REST ENDPOINTS", "107", "—", "—", "—"], + ["MCP TOOLS", "51", "12", "18", "9"], ["AUTO-HOOKS", "12", "0", "0", "0"], + ["NATIVE PLUGINS", "6 (Claude/Codex/Cursor/Gemini/OpenClaw/Hermes/pi/OpenHuman)", "—", "—", "—"], ["OPEN SOURCE", "YES (APACHE-2.0)", "YES", "YES", "YES"], ]; diff --git a/website/components/Hero.tsx b/website/components/Hero.tsx index 9c35d5da..b37d1f11 100644 --- a/website/components/Hero.tsx +++ b/website/components/Hero.tsx @@ -23,7 +23,7 @@ export function Hero() {

- START IN 60 SECONDS + START IN 30 SECONDS SEE IT MOVE diff --git a/website/lib/generated-meta.json b/website/lib/generated-meta.json index 30ff1f46..e9ce638f 100644 --- a/website/lib/generated-meta.json +++ b/website/lib/generated-meta.json @@ -4,5 +4,5 @@ "hooks": 12, "restEndpoints": 121, "testsPassing": 975, - "generatedAt": "2026-05-15T16:48:13.498Z" + "generatedAt": "2026-05-15T17:39:28.184Z" } From cde75a98cbd7e20e7f14915d6f8299db113f07e3 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 15 May 2026 18:47:47 +0100 Subject: [PATCH 2/6] chore(website): refresh generated-meta timestamp --- website/lib/generated-meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/lib/generated-meta.json b/website/lib/generated-meta.json index e9ce638f..c713d956 100644 --- a/website/lib/generated-meta.json +++ b/website/lib/generated-meta.json @@ -4,5 +4,5 @@ "hooks": 12, "restEndpoints": 121, "testsPassing": 975, - "generatedAt": "2026-05-15T17:39:28.184Z" + "generatedAt": "2026-05-15T17:46:51.529Z" } From c512ad5cf2dc2ace2a7ad247e87433e4d7adbc79 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 15 May 2026 18:57:06 +0100 Subject: [PATCH 3/6] =?UTF-8?q?feat(website):=20AS=20FEATURED=20IN=20bar?= =?UTF-8?q?=20=E2=80=94=20AlphaSignal,=20AAIF,=20Trendshift?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wedges between Hero and Stats. Three text-cells in a 3-col row (1-col on mobile), each links to the source article. Matches the existing brutalist mono aesthetic — no logo files, no marquee animation, no JS. Border + small ↗ glyph on each card; gold border on hover. Sources chosen for brand authority + independence: - AlphaSignal (180K technical subscribers) → alphasignalai.substack.com/p/how-agentmemory-works-and-how-to - Agentic AI Foundation (Linux Foundation backed) → aaif.io - Trendshift "NEW 2026 · Position #19" → trendshift.io/repositories/25123 Static, server-rendered, no client bundle impact. --- website/app/page.tsx | 2 + website/components/FeaturedIn.module.css | 94 ++++++++++++++++++++++++ website/components/FeaturedIn.tsx | 56 ++++++++++++++ website/lib/generated-meta.json | 2 +- 4 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 website/components/FeaturedIn.module.css create mode 100644 website/components/FeaturedIn.tsx diff --git a/website/app/page.tsx b/website/app/page.tsx index e5946910..026f43d2 100644 --- a/website/app/page.tsx +++ b/website/app/page.tsx @@ -1,6 +1,7 @@ import { ScrollProgress } from "@/components/ScrollProgress"; import { Nav } from "@/components/Nav"; import { Hero } from "@/components/Hero"; +import { FeaturedIn } from "@/components/FeaturedIn"; import { Stats } from "@/components/Stats"; import { Primitives } from "@/components/Primitives"; import { Features } from "@/components/Features"; @@ -20,6 +21,7 @@ export default function Page() {
- {ITEMS.map((it) => ( - -
+ {ITEMS.map((it) => + it.badge ? ( + + {it.logoAlt} + {it.sub} + + ) : ( + + {it.logoAlt} +
+ {it.name} + {it.sub} +
- {it.name} - {it.sub} -
- - ))} + + ), + )}
diff --git a/website/lib/generated-meta.json b/website/lib/generated-meta.json index 7847f849..b87cb48b 100644 --- a/website/lib/generated-meta.json +++ b/website/lib/generated-meta.json @@ -4,5 +4,5 @@ "hooks": 12, "restEndpoints": 121, "testsPassing": 975, - "generatedAt": "2026-05-15T17:56:51.247Z" + "generatedAt": "2026-05-15T18:00:27.463Z" } diff --git a/website/next.config.ts b/website/next.config.ts index 6c0ab391..092625b9 100644 --- a/website/next.config.ts +++ b/website/next.config.ts @@ -17,9 +17,12 @@ const config: NextConfig = { remotePatterns: [ { protocol: "https", hostname: "github.com" }, { protocol: "https", hostname: "avatars.githubusercontent.com" }, + { protocol: "https", hostname: "raw.githubusercontent.com" }, { protocol: "https", hostname: "matthiasroder.com" }, { protocol: "https", hostname: "exafunction.github.io" }, { protocol: "https", hostname: "www.freelogovectors.net" }, + { protocol: "https", hostname: "aaif.io" }, + { protocol: "https", hostname: "trendshift.io" }, ], }, }; From 78be2c733cd4e881a7e7dc73be265d6041b2eb06 Mon Sep 17 00:00:00 2001 From: Rohit Ghumare Date: Fri, 15 May 2026 19:08:11 +0100 Subject: [PATCH 5/6] feat(website): use real AAIF wordmark logo + center 3-card grid MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User pushed the actual Agentic AI Foundation wordmark — 838x203 PNG on transparent background, black artwork. Dropped the favicon and self-hosted the wordmark at /featured/aaif-logo.png so the brand reads cleanly on the dark cell. Rendered as a badge-style cell (centered, wide-form) like Trendshift, with a `filter: invert(1) brightness(1.05)` so the black artwork inverts to white-on-dark and matches the site palette without shipping a second asset. Grid template balanced: 1fr / 1.3fr / 1fr — gives AAIF the extra horizontal room its wordmark needs while keeping AlphaSignal and Trendshift consistent on either side. Max width bumped to 1000px. `badgeImg` got `object-fit: contain` and an explicit `max-height` so the AAIF + Trendshift badges sit at the same vertical baseline. --- website/components/FeaturedIn.module.css | 13 ++++++++++--- website/components/FeaturedIn.tsx | 10 ++++++++-- website/lib/generated-meta.json | 2 +- website/public/featured/aaif-logo.png | Bin 0 -> 22537 bytes 4 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 website/public/featured/aaif-logo.png diff --git a/website/components/FeaturedIn.module.css b/website/components/FeaturedIn.module.css index 883523e2..d65679c9 100644 --- a/website/components/FeaturedIn.module.css +++ b/website/components/FeaturedIn.module.css @@ -34,10 +34,10 @@ } .row { display: grid; - grid-template-columns: repeat(3, minmax(220px, 1fr)); + grid-template-columns: minmax(220px, 1fr) minmax(240px, 1.3fr) minmax(220px, 1fr); gap: 24px; width: 100%; - max-width: 980px; + max-width: 1000px; align-items: stretch; } .cell { @@ -78,9 +78,16 @@ .badgeImg { width: 100%; height: auto; - max-width: 250px; + max-width: 260px; + max-height: 60px; + object-fit: contain; display: block; } +.invertLogo { + filter: invert(1) brightness(1.05); + max-height: 64px; + max-width: 280px; +} .meta { display: flex; flex-direction: column; diff --git a/website/components/FeaturedIn.tsx b/website/components/FeaturedIn.tsx index 2aa1a1ce..ca07e70b 100644 --- a/website/components/FeaturedIn.tsx +++ b/website/components/FeaturedIn.tsx @@ -25,8 +25,9 @@ const ITEMS: Feature[] = [ name: "Agentic AI Foundation", sub: "Linux Foundation backed", href: "https://aaif.io/", - logo: "https://aaif.io/wp-content/uploads/2025/12/cropped-favicon.png", + logo: "/featured/aaif-logo.png", logoAlt: "Agentic AI Foundation logo", + badge: true, }, { name: "Trendshift", @@ -54,6 +55,7 @@ export function FeaturedIn() { href={it.href} target="_blank" rel="noopener" + aria-label={`${it.name} — ${it.sub}`} > {it.sub} diff --git a/website/lib/generated-meta.json b/website/lib/generated-meta.json index b87cb48b..b49039b8 100644 --- a/website/lib/generated-meta.json +++ b/website/lib/generated-meta.json @@ -4,5 +4,5 @@ "hooks": 12, "restEndpoints": 121, "testsPassing": 975, - "generatedAt": "2026-05-15T18:00:27.463Z" + "generatedAt": "2026-05-15T18:07:55.600Z" } diff --git a/website/public/featured/aaif-logo.png b/website/public/featured/aaif-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8fde23ce469959db1a3f67692da1538df4f88e GIT binary patch literal 22537 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 Date: Fri, 15 May 2026 19:11:24 +0100 Subject: [PATCH 6/6] =?UTF-8?q?fix(website):=20coderabbit=20PR=20#415=20?= =?UTF-8?q?=E2=80=94=20meta=20drift=20+=20a11y=20+=20dead=20CSS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Five findings, all valid against the branch: 1. CommandCenter line 48 hardcoded "107 HTTP ENDPOINTS" but website/lib/generated-meta.json reports restEndpoints: 121. Bumped to 121. The meta file is the source of truth (auto-derived from src/triggers/api.ts at build via scripts/derive-meta.js). 2. Compare.tsx REST ENDPOINTS row same drift: "107" → "121". 3. Compare.tsx NATIVE PLUGINS row claimed "6" in the label but the parenthesized list had 8 names (Cursor + Gemini included). Per README: those two are MCP-server tier, not native plugin. List trimmed to the actual 6 native-plugin agents: Claude/Codex/OpenClaw/Hermes/pi/OpenHuman. 4. FeaturedIn.module.css .cell had :hover only — keyboard users tabbing through saw no focus indicator (WCAG 2.4.7). Added :focus-visible with gold border + outline. 5. .cellBadge declared `grid-template-columns: none` while using display: flex. Dead property removed. --- website/components/CommandCenter.tsx | 2 +- website/components/Compare.tsx | 4 ++-- website/components/FeaturedIn.module.css | 8 ++++++-- website/lib/generated-meta.json | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/website/components/CommandCenter.tsx b/website/components/CommandCenter.tsx index 96a6bcbe..451a1d74 100644 --- a/website/components/CommandCenter.tsx +++ b/website/components/CommandCenter.tsx @@ -45,7 +45,7 @@ const PANELS: Record< "agentmemory runs on the iii engine, so the official iii console gives engine-level visibility: every function call, every worker, every queue, every trace. From v0.9.16 the agentmemory CLI prompts to install iii console alongside the engine. Launch on :3114 so the viewer keeps :3113.", bullets: [ "REGISTERED FUNCTIONS · INVOKE ANY DIRECTLY WITH JSON", - "107 HTTP ENDPOINTS · REPLAY ANY REST CALL", + "121 HTTP ENDPOINTS · REPLAY ANY REST CALL", "WEBSOCKET STREAM MONITOR · WATCH FRAMES LIVE", "OTEL EXPORTER = MEMORY (DEFAULT) · TRACES STAY LOCAL", "NO AUTH · BIND TO 127.0.0.1 ONLY", diff --git a/website/components/Compare.tsx b/website/components/Compare.tsx index 54d4abf0..d28aa596 100644 --- a/website/components/Compare.tsx +++ b/website/components/Compare.tsx @@ -3,10 +3,10 @@ import styles from "./Compare.module.css"; const ROWS = [ ["RETRIEVAL R@5", "95.2%", "81.4%", "73.8%", "78.1%"], ["EXTERNAL DEPS", "0", "2 (Qdrant, Neo4j)", "1 (Postgres)", "1 (Neo4j)"], - ["REST ENDPOINTS", "107", "—", "—", "—"], + ["REST ENDPOINTS", "121", "—", "—", "—"], ["MCP TOOLS", "51", "12", "18", "9"], ["AUTO-HOOKS", "12", "0", "0", "0"], - ["NATIVE PLUGINS", "6 (Claude/Codex/Cursor/Gemini/OpenClaw/Hermes/pi/OpenHuman)", "—", "—", "—"], + ["NATIVE PLUGINS", "6 (Claude/Codex/OpenClaw/Hermes/pi/OpenHuman)", "—", "—", "—"], ["OPEN SOURCE", "YES (APACHE-2.0)", "YES", "YES", "YES"], ]; diff --git a/website/components/FeaturedIn.module.css b/website/components/FeaturedIn.module.css index d65679c9..91b09712 100644 --- a/website/components/FeaturedIn.module.css +++ b/website/components/FeaturedIn.module.css @@ -54,18 +54,22 @@ transition: border-color 0.12s ease, transform 0.12s ease, background 0.12s ease; min-height: 96px; } -.cell:hover { +.cell:hover, +.cell:focus-visible { border-color: var(--gold); transform: translateY(-1px); background: #16161a; } +.cell:focus-visible { + outline: 2px solid var(--gold); + outline-offset: 2px; +} .cellBadge { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; - grid-template-columns: none; padding: 16px 16px; } .logo { diff --git a/website/lib/generated-meta.json b/website/lib/generated-meta.json index b49039b8..e4af0ebd 100644 --- a/website/lib/generated-meta.json +++ b/website/lib/generated-meta.json @@ -4,5 +4,5 @@ "hooks": 12, "restEndpoints": 121, "testsPassing": 975, - "generatedAt": "2026-05-15T18:07:55.600Z" + "generatedAt": "2026-05-15T18:11:06.382Z" }