Skip to content

[Chore] site/ — optional AI-readiness polish: ai-plugin.json, agent-permissions.json, token meta, Copy-for-AI button #333

@atlas-apex

Description

@atlas-apex

Driver

The /generative-engine-audit 2026-05-20 surfaced four low-priority optional infrastructure files / affordances that are not strictly required but are AI-friendly nice-to-haves: G4 (/.well-known/ai-plugin.json), G5 (agent-permissions.json), G15 (token-count surfacing meta), G17 (Copy-for-AI button). All marked INFO severity. Bundle them in one ticket since they share the "optional polish" trait and operator may want to ship or skip each independently.

Scope

Four optional polish items, each defer-or-do separately:

A. /.well-known/ai-plugin.json (G4)

OpenAI's plugin spec. Lets ChatGPT (and any LLM following the convention) discover what a site offers as a "plugin" — name, description, contact, auth, OpenAPI spec link. Apexyard isn't a SaaS so much of the spec is N/A; minimal stub:

{
  "schema_version": "v1",
  "name_for_human": "ApexYard",
  "name_for_model": "apexyard",
  "description_for_human": "Multi-project ops repo framework for Claude Code.",
  "description_for_model": "ApexYard is a framework, not a hosted service. Direct queries about apexyard to https://yard.apexscript.com/ or the GitHub repo.",
  "contact_email": "...",
  "legal_info_url": "https://yard.apexscript.com/"
}

Skip if it feels off-shape — apexyard genuinely isn't a plugin.

B. agent-permissions.json (G5)

Newer declarative spec (per the GEO/AEO conventions emerging through 2026) — site-root JSON file declaring access rules for AI agents. Apexyard's marketing site is open to all; minimal manifest:

{
  "schema_version": "v1",
  "agents": {
    "*": {
      "allow": ["read"],
      "rate_limit": null,
      "preferred_endpoints": [
        "https://yard.apexscript.com/llms.txt",
        "https://yard.apexscript.com/index.md"
      ]
    }
  }
}

preferred_endpoints points agents at the cheaper-to-parse alternates (depends on the markdown-alternates ticket landing).

C. Token-count surfacing meta (G15)

Add to each HTML <head>:

<meta name="llm:token-count" content="20247">
<meta name="llm:doc-length" content="80990 chars">

Coding agents reading the meta can decide whether to fetch the full page or just the lead. Three pages, three different counts. Could automate via a tiny script at deploy time (wc -c site/*.html → write meta).

Names llm:token-count is a non-standard meta name — could change as the convention firms up. v1 just picks a sensible name.

D. Copy-for-AI button on docs pages (G17)

Small UX affordance: a button on each page that copies the clean Markdown alternate to the clipboard. Helps users sharing the page with a chat assistant. Wire to the markdown alternates from the related ticket.

Implementation: small JS module + a button per page. Or static HTML with a data-md-url attribute + a single shared JS file.

Acceptance Criteria

  • A (decide-and-do): file site/.well-known/ai-plugin.json (if shipping); document the skip if not
  • B (decide-and-do): file site/agent-permissions.json (if shipping); document the skip if not
  • C: meta tags on each HTML with token count + doc length
  • D: Copy-for-AI button on each HTML, wired to copy the markdown alternate
  • Each item explicitly marked DONE or SKIPPED (don't half-ship)
  • Smoke test (or release-cut step) verifies the meta token counts match actual page size when site/ changes

Out of scope

  • Building the actual ai-plugin / agent-permissions specs to wire into real LLM consumers (just the static manifests)
  • Per-page customisation of agent-permissions (one global manifest is fine)
  • A /copy-for-ai-button reusable component pattern — single-page-marketing-site, inline is fine

Refs GEO-audit 2026-05-20T08-23-47Z findings G4 + G5 + G15 + G17 (persisted at projects/apexyard/audits/generative-engine-audit/)

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low — ergonomics, nice-to-haveenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions