Archilyzer · Source

archilyzer

Archilyzer
git clone https://archilyzer.pages.dev/source/archilyzer.git
Log | Files | Refs | README | LICENSE

commit 0f9c946b9648e3eb9b6a0398e8e0c806bd091992
parent 5b777de29efa14b36d1fe834855ff6ca5fad1b68
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Wed, 30 Sep 2026 18:57:59 -0400

homepage: the AI and MCP doc's Ten-minute setup — clone, pnpm install, claude mcp add archilyzer against the Jeralyzer, claude, /ask

After the MCP server's introduction: what you need, the source and the tarball, why the name is
archilyzer, the optional editor lines, TRANSCRIPT_HUB_URL, the mcp.json form in mcp/README for
other clients, and WSL2. "What it can do" is a heading of its own after it. The drift table names
README §1/§4 and mcp/README as copies to change together. docs.spec checks the block and links.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Diffstat:
Mhomepage/content/README.md | 2+-
Mhomepage/content/docs/ai-and-mcp.md | 36+++++++++++++++++++++++++++++++++++-
Mhomepage/e2e/docs.spec.ts | 34++++++++++++++++++++++++++++++++++
3 files changed, 70 insertions(+), 2 deletions(-)

diff --git a/homepage/content/README.md b/homepage/content/README.md @@ -36,7 +36,7 @@ its public counterpart needs the same change. | `docs/operate.md` | `README.md`, `SCHEDULED_SYNC.md` | editor routes, scheduler settings | | `docs/deploy-cloudflare.md` | `PUBLISH.md` (Cloudflare, R2, cost-abuse) | the 25 MB Pages limit, R2 options | | `docs/deploy-docker.md` | `PUBLISH.md` (building every site in containers) | phase structure, settings names | -| `docs/ai-and-mcp.md` | `mcp/README.md` | tool names, `corpus.json` shape | +| `docs/ai-and-mcp.md` | `mcp/README.md`, `README.md` §1 and §4 | tool names, `corpus.json` shape, the Ten-minute setup's commands (README §1/§4 and mcp/README's "Add to Claude Code" are copies of them: change all three together) | | `docs/faq.md` | — (written for this site) | claims about cost and hardware | ## House rules for these files diff --git a/homepage/content/docs/ai-and-mcp.md b/homepage/content/docs/ai-and-mcp.md @@ -30,7 +30,41 @@ client. It is **a local tool you run yourself**. It changes nothing: it only reads already-published static JSON, either from a directory on disk or over HTTP. -What it can do: +### Ten-minute setup + +To run Claude Code against a published archive, with nothing of your own +hosted — the Jeralyzer here, and any archive's URL works the same: + +```sh +git clone https://archilyzer.pages.dev/source/archilyzer.git archilyzer # or the tarball on /downloads/ +cd archilyzer && pnpm install +claude mcp add archilyzer \ + --env TRANSCRIPT_SITE_URL=https://jeralyzer.pages.dev \ + -- pnpm -C "$PWD" --filter yt-dlp-transcript-mcp exec tsx src/index.ts +claude # then: /ask what has he said about … +``` + +- **What you need:** Node.js 20.9 or newer, pnpm 9 or newer, and Claude Code. + No corpus, no yt-dlp, no GPU, nothing hosted. +- **The source** is the project's read-only [git mirror](/source/); without + git, the same tree is a [tarball](/downloads/): unpack it and carry on from + `cd archilyzer`. +- **Register it as `archilyzer`.** The shipped `/ask` and `/sweep` commands + call `mcp__archilyzer__ask_plan` / `mcp__archilyzer__sweep_plan`, and that + tool name embeds the server name as you registered it. +- **Clips:** two optional `--env` lines, `ARCHILYZER_EDITOR_URL` and + `WORKER_TOKEN` (the editor's own), let `fetch_clip` ask a local editor for + clip media; leave them out for research alone. +- **One archive or several:** `TRANSCRIPT_SITE_URL` reads one archive; + `TRANSCRIPT_HUB_URL`, given a hub's URL, federates every archive on the hub. +- **Another client** (Claude Desktop, Cursor): the same server as an + `mcp.json` entry is in + [mcp/README.md](https://archilyzer.pages.dev/source/tree/mcp/README.md). +- **On Windows,** run all of this inside WSL2, Claude Code included: see + “Claude Code on Windows” in the + [README](https://archilyzer.pages.dev/source/tree/README.md). + +### What it can do - **Search transcripts** for a term, a phrase or a regular expression, with timestamped snippets. Every timestamp is a link to that exact second of the diff --git a/homepage/e2e/docs.spec.ts b/homepage/e2e/docs.spec.ts @@ -61,6 +61,40 @@ test("an internal cross-link stays in the tab; an external one doesn't", async ( } }); +// Release 16 slice DX: the research-only setup lives here alone, and every +// archive's "Use with AI" link lands on this page. +test("the AI and MCP doc's Ten-minute setup registers archilyzer and links the source", async ({ + page, +}) => { + await page.goto("/docs/ai-and-mcp/"); + await expect(page.locator(".doc-measure h3#ten-minute-setup")).toBeVisible(); + + const block = page.locator(".doc-measure pre", { hasText: "claude mcp add archilyzer" }); + await expect(block).toHaveCount(1); + const lines = (await block.innerText()).trim().split("\n"); + expect(lines[0]).toMatch(/^git clone https:\/\/archilyzer\.pages\.dev\/source\/archilyzer\.git archilyzer\b/); + expect(lines[1]).toBe("cd archilyzer && pnpm install"); + expect(lines[2]).toBe("claude mcp add archilyzer \\"); + expect(lines[3]).toBe(" --env TRANSCRIPT_SITE_URL=https://jeralyzer.pages.dev \\"); + expect(lines[4]).toBe( + ' -- pnpm -C "$PWD" --filter yt-dlp-transcript-mcp exec tsx src/index.ts', + ); + expect(lines[5]).toMatch(/^claude\s+# then:\s+\/ask /); + + // The source and the tarball, linked as the other docs link them: in place. + const source = page.locator('.doc-measure a[href="/source/"]', { hasText: "git mirror" }); + await expect(source).toBeVisible(); + await expect(source).not.toHaveAttribute("target", "_blank"); + await expect( + page.locator('.doc-measure a[href="/downloads/"]', { hasText: "tarball" }), + ).toBeVisible(); + + // The name's reason sits beside it. + await expect(page.locator(".doc-measure")).toContainText( + "mcp__archilyzer__ask_plan / mcp__archilyzer__sweep_plan", + ); +}); + test("an unknown doc slug is a 404, not a crash", async ({ page }) => { const res = await page.request.get("/docs/not-a-real-page/"); expect(res.status()).toBe(404);