AGENTS.md@site · git:20261001.17d8658 · 2026-10-01 · sha256 d1abb9ff3beae3e2

AGENTS.md@site git:20261001.17d8658B

Immutable. This exact content never changes and is served at /api/v1/blob/d1abb9ff3beae3e2.

# Site

Astro-based project website under `site/`.

## Commands

```bash
cd site
npm run dev      # Dev server with hot reload
npm run build    # Production build
npm run preview  # Preview production build locally
```

## Setup Wizard (`site/src/pages/setup.astro`)

Single-file Astro page that drives the on-site setup flow. Both the metadata (which clients/platforms/scopes exist) and the per-client instruction prose live in this one file.

**Data** — three pre-sorted JS arrays at the top of the component frontmatter, plus two client-capability lists:

```ts
const clientsData = [...]     // 21 supported AI clients
const platformsData = [...]   // macOS / Linux / Windows / Docker
const scopeData = [...]       // local / remote
const stdioOnlyClients = [..] // need the fastmcp-remote bridge for HTTP
const remoteOnlyClients = [..]// cannot use a local endpoint, need public HTTPS
```

These feed the picker tiles in the markup section AND the wizard `<script>` block (`state.client`, `state.scope`, etc.).

**Instruction templates** are JS template literals inside the `<script>` block, keyed off `state.client.id` / `state.client.configFormat` / `platformId` / `state.method` / `state.remotePath`. Cross-cutting troubleshooting and restart-related help lives in `site/src/pages/faq.astro`; install walkthroughs live in `guide-macos.astro` / `guide-windows.astro` / `guide-linux.astro` / `guide-addon.astro`.

**Adding a new client / platform / scope / server method / remote path:**

1. Add an entry to the appropriate inline array (insert at the right `order` position). Keep each array ordered by the `order` field — the wizard renders entries in array order without re-sorting.
2. Add a wizard branch in the `<script>` block keyed off the new entry's `id`. Match neighboring patterns: JSON clients add an `else if` in the JSON config builder; CLI clients add a CLI command emit; UI clients add an `instruction-block` div with click steps. A `configFormat` shared by clients with incompatible schemas needs an `id` guard of its own — see the `hermes` branch, which would otherwise inherit Continue's YAML shape. See `cursor` / `chatgpt` / `claude-code` / `cloudflared` for examples.
3. If the addition has cross-cutting troubleshooting content (PATH issues, restart requirements, version requirements), add it to `faq.astro`.

## Accessibility & checks

The site is accessibility-anchored (#1574/#1595). Before pushing site changes:

```bash
cd site
npm run check       # astro check — types + a11y diagnostics
npm run lint        # eslint-plugin-astro + jsx-a11y
npm run build       # required before the audit (writes dist/)
npm run audit:a11y  # axe-core over the built pages
```

CI runs these in the `site-checks` job (`.github/workflows/pr.yml`): `check`, `lint`, and the axe-core audit are all blocking. Accessibility conventions — landmarks, skip links, tablist semantics, live status regions, and the theme/contrast tier model — live in `.gemini/styleguide.md` › Accessibility.