SEO + conversion overhaul for website and README#3
Conversation
postinstall ran `git config core.hooksPath .githooks` unconditionally, so installing agentmemory as a dependency repointed the *consumer's* repo at a .githooks directory that isn't shipped (it's absent from the package.json "files" allowlist), silently breaking their commits. Gate the hook setup to a real source checkout and scope `git config` to packageRoot via cwd. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The publish workflow went straight from `npm ci` to `npm publish` with no verification. Require the v* tag to match package.json version (and manual runs to dispatch from a release tag), and run lint + build + tests first. Add setup-bun since prepack builds the CLI with bun. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The test job was leftover from pi-memory: it set PI_E2E_PROVIDER/OpenAI env and only ran `npm test` when OPENAI_API_KEY was present, else skipped. But agentmemory's tests are the no-key bun suites, so they never ran in CI. Run test:unit and test:cli on bun instead. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
`agent-memory status --probe` runs a tiny semantic query and checks for qmd's "need embeddings" warning to confirm semantic/deep search is actually usable, beyond the cheap pending-embed count. Opt-in because it costs a real qmd query and a possible model load; default status stays sub-second. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Point repo homepage to the live GitHub Pages site (was orphaned) - Website: add value-prop hero copy, "Why agentmemory" benefit grid, "How it's different" comparison table, and a "See it in action" example - Website: add Open Graph, Twitter card, canonical, and JSON-LD SoftwareApplication metadata (wires up the existing social-preview.png) - Website: drop leftover "extension" framing; add live npm/stars badges - Add docs/robots.txt and docs/sitemap.xml for indexing - README: surface the website via badge + CTA nav, fix changelog/package naming and code-block alignment Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 75b3dfff95
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const { stderr } = await Promise.race([ | ||
| runQmdSearch("semantic", "memory", 1), | ||
| new Promise<never>((_, reject) => { | ||
| timer = setTimeout(() => reject(new Error("timeout")), 4_000); |
There was a problem hiding this comment.
Kill the semantic probe when the timeout fires
When agent-memory status --probe runs in an environment where the first semantic qmd query is slow or starts a model download, this Promise.race reports unknown after 4 seconds but leaves the runQmdSearch child process alive until its own 60-second timeout or completion. Because that child still holds the event loop open, the CLI can appear to hang even though the new status text says the probe is bounded; the probe needs to cancel/kill the underlying command or run it with the same short timeout.
Useful? React with 👍 / 👎.
| <a class="btn btn-primary" href="https://github.com/jayzeng/agentmemory#installation">Get Started</a> | ||
| <a class="btn btn-secondary" href="https://github.com/jayzeng/agentmemory">View on GitHub</a> | ||
| </div> | ||
| <div class="hero-badges" aria-hidden="true"> |
There was a problem hiding this comment.
Don’t hide focusable badge links from assistive tech
On the landing page, this aria-hidden container includes the npm/downloads/GitHub badge anchors immediately below it, so keyboard users can tab to links that screen readers will not announce. If these badges are decorative, remove the anchors from the tab order; if the links are useful, remove aria-hidden from the wrapper.
Useful? React with 👍 / 👎.
The install-skills tests created only the .claude/.codex directories and relied on detection falling back to `command_exists claude`/`codex`. That passed locally (binaries on PATH) but failed in CI where neither binary exists. Write the marker files (settings.json, config.toml) the tests implicitly depend on so detection no longer needs the binaries. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- probeEmbeddings: abort the underlying qmd child via AbortSignal when the 4s timeout fires, so it no longer holds the event loop open until its own 60s timeout and hangs the CLI. - docs/index.html: drop aria-hidden from the hero badge wrapper; the badges are real focusable links with alt text and should be announced to AT. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Why
The project has a website but nothing linked to it (repo homepage pointed at
#readme), and the site never explained what the library does or why it's different. This makes the project hard to discover and hard to evaluate.What changed
Discoverability
docs/robots.txt+docs/sitemap.xmlfor indexingSoftwareApplicationmetadata — wires up the existing (previously unused)social-preview.pngConversion (website messaging)
MEMORY.md+ a realsearchrecallCorrectness/polish (README)
0.5.0→0.4.12, package-name references (myagentmemory), andnpm viewtargetDeploy note
The
deploy-pagesworkflow runs on push tomain, so the site updates once this merges.🤖 Generated with Claude Code