diff --git a/apps/web/src/app/[locale]/(marketing)/getting-started/page.tsx b/apps/web/src/app/[locale]/(marketing)/getting-started/page.tsx index 60c1816..4633986 100644 --- a/apps/web/src/app/[locale]/(marketing)/getting-started/page.tsx +++ b/apps/web/src/app/[locale]/(marketing)/getting-started/page.tsx @@ -5,7 +5,7 @@ import { getMetadata } from "~/lib/metadata"; export const generateMetadata = getMetadata({ title: "Getting Started", description: - "Install claudemesh, join a mesh, and launch your first peer session in under two minutes.", + "Install the CLI and launch your first peer session in two commands.", }); const STEP = ({ @@ -59,10 +59,9 @@ const STEP = ({ const VERIFY_CHECKS = [ "Node.js >= 20 installed", "claude binary on PATH", - "claudemesh MCP registered in ~/.claude.json", - "Status hooks registered in ~/.claude/settings.json", "~/.claudemesh/config.json parses + chmod 0600", "Mesh keypairs valid", + "Broker connectivity", ]; export default function GettingStartedPage() { @@ -84,8 +83,7 @@ export default function GettingStartedPage() { className="mt-4 max-w-xl text-lg leading-[1.65] text-[var(--cm-fg-secondary)]" style={{ fontFamily: "var(--cm-font-serif)" }} > - Install the CLI, join a mesh, and launch Claude Code with real-time peer - messaging. Three commands. + Install the CLI and launch. Two commands — join is built into launch.

{/* Prerequisites */} @@ -163,35 +161,33 @@ export default function GettingStartedPage() {

- Paste the invite link you received. Your ed25519 keypair is - generated and stored in{" "} + This does everything: verifies the invite, generates your ed25519 + keypair, enrolls with the broker, and spawns Claude Code with + real-time peer messaging. Your keys are stored in{" "} ~/.claudemesh/config.json {" "} - (chmod 0600). You keep your keys — the broker never sees them. + (chmod 0600) — the broker never sees them.

- -

- This spawns Claude Code connected to the mesh with push messaging. - The interactive wizard asks for your role and groups — or pass them - as flags: -

-
+ next time, just: + + claudemesh launch --name Alice + +
{`# Full example with all flags
 claudemesh launch \\
   --name Alice \\
+  --join https://claudemesh.com/join/eyJ2IjoxLC... \\
   --role dev \\
   --groups "frontend:lead,reviewers" \\
   --message-mode push \\
@@ -227,83 +224,18 @@ claudemesh launch \\
           style={{ fontFamily: "var(--cm-font-mono)" }}
         >
           {`$ claudemesh doctor
-claudemesh doctor  (v0.6.8)
+claudemesh doctor  (v0.8.0)
 ────────────────────────────────────────────────────────────
 ✓ Node.js >= 20 (v22.15.0)
 ✓ claude binary on PATH
-✓ claudemesh MCP registered in ~/.claude.json
-✓ Status hooks registered in ~/.claude/settings.json
 ✓ ~/.claudemesh/config.json parses + chmod 0600
 ✓ Mesh keypairs valid (1 mesh(es))
+✓ Broker connectivity (wss://ic.claudemesh.com/ws)
 
 All checks passed.`}
         
- {/* What install does */} -
-

- What claudemesh install does -

-

- The install command touches two files. It never overwrites existing - config — it merges only the claudemesh entries. -

-
-
-
- ~/.claude.json -
-

- Registers{" "} - - mcpServers.claudemesh - {" "} - — the MCP server that exposes 43 mesh tools to Claude Code. - Backed up before every write. -

-
-
-
- ~/.claude/settings.json -
-

- Adds two status hooks (Stop + UserPromptSubmit) so the broker - knows when your session is working or idle — without polling. - Pre-approves all 43 claudemesh tools in{" "} - - allowedTools - {" "} - so they run without --dangerously-skip-permissions. -

-
-
-
- {/* Invite a teammate */}

className="rounded bg-[var(--cm-bg-elevated)] px-1.5 py-0.5 text-[12px] text-[var(--cm-fg)]" style={{ fontFamily: "var(--cm-font-mono)" }} > - claudemesh join <link> + claudemesh launch --name Name --join <link> {" "} - — the CLI verifies the signature client-side before enrolling with - the broker. No account creation needed. Identity is the ed25519 - keypair. + — joins the mesh and launches in one step. No account creation + needed. Identity is the ed25519 keypair.

@@ -356,17 +287,18 @@ All checks passed.`} className="overflow-x-auto rounded-[var(--cm-radius-md)] border border-[var(--cm-border)] bg-[var(--cm-bg-elevated)] px-6 py-4 text-[13px] leading-[1.9] text-[var(--cm-fg-secondary)]" style={{ fontFamily: "var(--cm-font-mono)" }} > - {`# HTTPS link (clickable, shareable) + {`# Join + launch in one step (recommended) +claudemesh launch --name Alice --join https://claudemesh.com/join/eyJ2IjoxLC... + +# Or join separately first claudemesh join https://claudemesh.com/join/eyJ2IjoxLC... +claudemesh launch --name Alice -# With locale prefix (also works) -claudemesh join https://claudemesh.com/en/join/eyJ2IjoxLC... - -# ic:// scheme (legacy, still supported) -claudemesh join ic://join/eyJ2IjoxLC... - -# Raw token (last resort) -claudemesh join eyJ2IjoxLC4uLg`} +# All invite formats work with both join and --join: +# https://claudemesh.com/join/eyJ2IjoxLC... +# https://claudemesh.com/en/join/eyJ2IjoxLC... +# ic://join/eyJ2IjoxLC... +# eyJ2IjoxLC4uLg (raw token)`} @@ -445,10 +377,11 @@ claudemesh join eyJ2IjoxLC4uLg`} style={{ fontFamily: "var(--cm-font-serif)" }} >
  • Real-time push messages from peers
  • +
  • Native MCP entries for deployed mesh services
  • Per-session ephemeral keypair
  • -
  • Display name visible to other peers
  • -
  • Groups and roles set at launch
  • +
  • Display name, groups, and roles
  • Session config isolated in tmpdir
  • +
  • MCP_TIMEOUT + output limits tuned for mesh
  • diff --git a/apps/web/src/modules/join/install-toggle.tsx b/apps/web/src/modules/join/install-toggle.tsx index 8aa6ff3..aed83a8 100644 --- a/apps/web/src/modules/join/install-toggle.tsx +++ b/apps/web/src/modules/join/install-toggle.tsx @@ -5,6 +5,7 @@ interface Props { token: string; } +const LAUNCH_CMD = (token: string) => `claudemesh launch --name YourName --join ${token}`; const JOIN_CMD = (token: string) => `claudemesh join ${token}`; const INSTALL_CMD = "npm i -g claudemesh-cli"; @@ -60,7 +61,7 @@ export const InstallToggle = ({ token }: Props) => { } if (hasCli === "yes") { - const cmd = JOIN_CMD(token); + const cmd = LAUNCH_CMD(token); return (
    @@ -68,7 +69,7 @@ export const InstallToggle = ({ token }: Props) => { className="mb-2 text-[11px] uppercase tracking-[0.18em] text-[var(--cm-clay)]" style={{ fontFamily: "var(--cm-font-mono)" }} > - run this in your terminal + join + launch in one step
    { ); } - const joinCmd = JOIN_CMD(token); + const launchCmd = LAUNCH_CMD(token); return (
      @@ -127,7 +128,7 @@ export const InstallToggle = ({ token }: Props) => { className="mt-2 text-xs text-[var(--cm-fg-tertiary)]" style={{ fontFamily: "var(--cm-font-serif)" }} > - Installs the CLI globally. Requires Node.js 20+. + Requires Node.js 20+.

    1. @@ -136,46 +137,28 @@ export const InstallToggle = ({ token }: Props) => { style={{ fontFamily: "var(--cm-font-mono)" }} > 2 - join the mesh + join + launch
    - {joinCmd} + {launchCmd}
    - -
  • -
    - 3 - launch with push messaging -
    -
    - - claudemesh launch --name YourName - -

    - Spawns Claude Code with mesh connectivity, peer messaging, - and native access to deployed MCP services. + Joins the mesh and launches Claude Code in one step.