AGENTS.md@website · git:20261005.776d59d · 2026-10-05 · sha256 affc15b33cd9f444
AGENTS.md@website git:20261005.776d59dA
Immutable. This exact content never changes and is served at /api/v1/blob/affc15b33cd9f444.
# Contents - `vendor/marketing-preset/` owns the immutable shared editorial CSS, licensed Instrument Serif, field textures, and source/hash provenance. `marketing-preset.ts` verifies that closed snapshot before `build.ts` publishes its bytes. - `source/` – checked HTML, CSS, analytics, discovery, fallback, markdown, llms.txt, and WebMCP registry snapshot sources. - `public/` – checked public icon, social, caption, and reusable demo assets. - `social-image.ts` – the one social-image site declaration (name, description, domain, icon, theme) for the shared template. - `webmcp-registry.ts` – strict checked-in snapshot parser plus `/providers/<domain>/` page descriptors and untrusted-text rendering. - `sync-webmcp-registry.ts` – bounded wmcp.ai REST synchronization that rewrites the checked snapshot deterministically. - `build.ts` – deterministic static output generation from the root package release. - `vercel-build.ts` – fail-closed Vercel admission that validates the build-owned marker and platform state, requires the production deployment to build `main`, and keeps previews independently buildable. - `provider-capability-attestation.ts` – release-bound provider/operation/completeness table derived from built-in plugins and current bundled adapter manifests. - `claims-register.ts` – renders the `/claims/` page fragments and serves the `verification/claims.json` register verbatim as `/claims.json`, parsed through the strict register parser. - `html-to-markdown.ts` – static markdown variants for public pages. - `../edge/` – Edge-safe Accept parsing and markdown, 406, and 404 negotiation. - `*.test.ts` – identity, SEO, accessibility, analytics-privacy, negotiation, and build regressions. - `../middleware.ts` – Vercel Edge entry; it imports only `../edge/`. - `dist/` – ignored generated deployment output. # Guidelines - Keep the homepage's shared editorial preset scoped by `data-hraness-marketing-preset="editorial"` with `data-hraness-pattern="none"`: a flat palette background, the sans display role, opaque reading surfaces, hairline-separated sections, and one real transcript beside the hero copy. Do not add hero fields, pointer-driven light, textures, serif display headings, glass, or material paint. Keep product adaptations outside the immutable snapshot and preserve the separate inert native-control previews, ordinary documentation, release identity, and all production admission gates. - Ordinary HTML pages follow the reader's system appearance; do not add a per-page theme control, saved-preference bootstrap, or a second theme owner. Keep `tabindex="-1"` on each `<main id="main">` as the skip-link target. The deliberate `/preview` remains inert and all Markdown outputs remain text-only. - Keep the page useful without JavaScript. JavaScript may progressively enhance explicit copy controls, canonical-host analytics, and the shared `attachFoil` pointer treatment on `[data-foil]` elements; keep all commands readable and selectable without it. - Keep every product claim observable in the public Ghostget release and put each qualification beside the claim it limits. - Derive release identity and install commands from the validated root `package.json`; never copy a version into page source. - Keep the Agent Skill install command centralized in `build.ts`, pin its skills source to `hraness/ghostget#v<package version>`, render it as inert HTML, and make clipboard enhancement reusable through the `data-skill-install` contract. Link installation to that exact canonical GitHub archive; registry mirrors may be advertised only after verified availability. - Keep the checked-in Vercel build command bound to exact non-secret marker `WRENCH_VERCEL_BUILD=release-bound-v1`, Vercel System Environment Variables enabled, and the Production Branch configured as `main`. Local admission is allowed only when the marker and every Vercel signal are absent. A marked or otherwise Vercel-signaled build must have the exact marker, `VERCEL=1`, a valid `VERCEL_ENV`, and an exact nonempty `VERCEL_GIT_COMMIT_REF`; missing, malformed, or inconsistent state fails before building. Require `VERCEL_GIT_COMMIT_REF=main` only for a production deployment, and reject `main` for a non-production deployment. Preview and local builds perform no release verification and remain independently buildable. Merging reviewed `main` history deploys the site directly through the Vercel Git integration; there is no promotion ref, canary ref, ref writer, production marker, or release binding between `main` and the live site. Keep immutable release artifact admission entirely on the tag Release workflow and never substitute site state for it. - Keep Vercel project `prj_TZbDZ38ABPan158IqnczgsuTu6Ue` under team `team_UAd1iD2XogJlbFg4h14mRaPM` linked to GitHub repository ID `1316443113`, with `link.productionBranch=main`, `autoExposeSystemEnvs=true`, and `autoAssignCustomDomains=true`; the last setting is not a per-release switch. Checked-in workflows remain token-free and never mutate project settings, call Vercel APIs, alias, or promote. Staged recovery pins one exact uncontested deployment and uses one owner-authorized `vercel promote <exact-id-or-url>` followed by complete readback, never a ref rewrite or individual alias assignment. - Keep canonical metadata, robots, sitemap, llms.txt, Open Graph, X metadata, and the linked JSON-LD graph aligned to `https://ghostget.com/`. - Share images come only from the shared `@hraness/web-discovery` social-image template through the single `defineSocialImageSite` declaration in `social-image.ts`; `scripts/generate-og.tsx` renders `/og.png` from it with `socialImageSiteDetails` and `createSocialImageCard`, pages pass copy only (`headline`, `description`, `eyebrow`), and the site keeps no drawing code of its own. The provenance-bound editorial images above are the only other social images. - Keep ordinary reference and task guides typographic and preserve the real getting-started video and poster. For the small set of live editorial argument or comparison pages, treat `editorial-images.ts` as the single image registry and use the `editorial-image-seo` skill. For new imagery, use a reviewed Slopcamera build from its [source-install guide](https://github.com/hraness/slopcamera/blob/main/docs/how-to/use-current-source.md), retain its exact source commit, invoke `bun "$SLOPCAMERA_SOURCE_ROOT/apps/desktop/dist/cli/main.js"` inside the intended Vercel environment, and never retry an ambiguous paid result. Preserve historical Atet credits and completed provenance bytes; extend the registry truthfully before accepting a new generator. For each new image, review the original and card thumbnail, then keep that provenance-bound 1536-pixel original canonical for social, schema, and sitemap use while serving locally derived 384- and 768-pixel WebP files through `srcset` in visible figures and cards. Synchronize the visible figure and credit, homepage card, Open Graph and X metadata, `TechArticle.image`, and image sitemap. Retain prompt, completed job, and receipt under `editorial-provenance/<slug>/` without exposing those internal paths publicly. Do not register a draft route, including the PayPal/GrapheneOS page, until that route is live. Use semantic editorial metaphors rather than generated factual, capability, or security diagrams. - The HTML 404 renders the shared design-kit status page through `renderGhostgetStatusPage` in `build.ts`: the homepage primary action, at most three next links, and every public page and listed post as "Did you mean" routes. `source/status-page.ts` bundles `attachStatusPage` as its only enhancement. Keep 404 presentation in design-kit, not in `styles.css`. - Public content pages keep one URL for HTML and Markdown. Honor `Accept` q-values, set `Vary: Accept`, and return `406` only when no owned representation remains. Unknown paths stay HTTP 404 and point agents at llms.txt, the sitemap, and getting started. - Keep analytics canonical-host-only, cookieless, personless, memory-only, and DNT-aware. Allow only page lifecycle, web vitals, budgeted redacted exceptions, page-not-found events, the two explicit GitHub links, the four named home page install and getting-started link clicks, and copies of the two named install commands. Preserve the portfolio attribution keep-list while stripping every other query parameter and every fragment. Interaction events carry only a fixed name from a checked list, never copied text. Bundle the pinned SDK and skip the bootstrap entirely under Do Not Track because cookieless mode ignores `respect_dnt`. - Do not add private packages, private assets, cookies, replay, identity, feature flags, broad autocapture, console capture, or application behavior. - Preserve semantic headings, native disclosures, visible focus, keyboard-scrolling tables, touch-sized links, reduced-motion behavior, and forced-color legibility. - Public copy (page text, metadata, `llms.txt`, and generated pages) follows the synced `../STYLE.md`. The rules in this file are written for maintainers; do not copy their wording onto a page. - The one-line description and shared product names, hero copy, and marketing headings come from the canonical `portfolio-messaging.generated.json` through `portfolio-copy.ts`. `SITE_DESCRIPTION` in `build.ts` reads `messaging.meta`; `package.json` `description` must equal it (the build enforces this), and the `llms.txt` lead renders it. Refresh and review the checked snapshot explicitly; ordinary builds never fetch or rewrite copy. - On a public page, translate these internal words into what the reader gets: admission or admitted (allowed to run, or checked before it runs); attested or attestation (supported, or listed on the provider support reference); bounded (name the limit, such as “at most two browsers at once” or “one result per call”); contract (the action's reviewed definition, or what it sends and returns); custody (stored on your machine); fails closed or drift (stops when a service changes); inert (does nothing until a named step, or starts nothing and makes no network request on import); realm (one account); reservation or `capture-required` (can't run until it is reviewed); receipt or dispatch evidence (a record of what ran); surface (the page, command, or interface by name); lane (approach). - Describe a sibling product with its canonical name and description from the checked portfolio snapshot. State what two products do together only when `portfolio-relationships.json` in hraness/jungle records it or the sibling's own README documents it. Preserve those registered or documented relations when refreshing copy. - Use product names and addresses as the checked portfolio snapshot spells them. Qualify the canonical TextButler name with “(formerly Message Like Me)” once where the `export-message-like-me` command or the Message Like Me format appears; preserve compatibility commands and wire-format names.