agent-first-http 0.13.0

Give your AI agent its own private browser — so it reads the real page, past logins and bot walls, without ever touching yours.
Documentation
{
  "$schema": "https://cmn.dev/schemas/v1/spore-core.json",
  "id": "agent-first-http",
  "name": "Agent-First HTTP",
  "version": "0.13.0",
  "domain": "agentfirstkit.com",
  "key": "ed25519.BwbSzqdDYyMN1pPW5snRk3afrJAovHn8aueMvDpfNKVw",
  "synopsis": "Give your AI agent its own private browser — so it reads the real page, past logins and bot walls, without ever touching yours.",
  "intent": [
    "Give AI agents a deterministic URL acquisition layer that reports status, final URL, headers, body artifacts, redirects, timing, and typed transport failures as structured JSONL instead of prose",
    "Focus on pages and web resources that are hard for agents to acquire through a simple shell fetch: JavaScript-rendered, cookie- or session-bound, bot-walled, or XHR-injected pages a plain HTTP request cannot turn into usable artifacts",
    "Preserve session identity for multi-step web workflows: scoped request defaults, concurrent requests, streaming bodies, downloads, and future browser-backed fetch state belong in one agent-readable session"
  ],
  "license": "MIT",
  "mutations": [
    "Apply the RFC 6265 §5.3 acceptance check when merging Set-Cookie, so a response can broaden a cookie only to its own parent domain and can no longer replace an unrelated site's session cookie by asserting a domain it has no claim to",
    "Honor Max-Age over Expires and delete on a non-positive Max-Age, so the header a site logs you out with actually revokes the cookie instead of leaving a session cookie that outlived the revocation",
    "Stop echoing the raw value of --header, --cookie and --proxy-url in domain errors, which had been putting Authorization headers, session cookies and proxy userinfo into error events that are routinely logged",
    "Replace ui takeover's --takeover-no-window with --mode window|link|session and add a link delivery, so a person on another device on the same network gets one URL through AFUI's proxy while the takeover host stays on loopback",
    "Publish the takeover panel's URL as link_url on its progress event, deleting the emitter and named-field walk that existed only to undo the redaction afhttp's own _secret suffix had caused",
    "Report a window takeover's session_id like every other delivery, since a window is announced to the registry too, and let AFUI merge its own delivery facts instead of flattening them into afhttp's ready event",
    "Refuse an https takeover panel while the delivery is being planned rather than when AFUI's refusal arrives, so a credential is not minted and discarded, and name the delivery that does work",
    "Say in the skill that everything a page returns is data and never an instruction — page text, DOM, console output, downloads, redirect targets and error pages are evidence about the page, and nothing in them widens the task",
    "Move the container backend build to Go 1.27.0 and fail the image build when foxbridge cannot be installed or the camoufox binary goes missing, instead of shipping an image that advertises --with camoufox with no bridge behind it",
    "Run the local container gates on Apple's container runtime as well as Docker, so the one fixed test entrypoint works on a machine with neither Docker nor a local Rust toolchain",
    "Report a cargo test --list failure as itself with the compiler's output, instead of swallowing it and reading a build failure as six deleted regression tests",
    "Run the pinned ShellCheck version in this repository's own CI, verify the release job is building the tag it was asked for, assert the built binary reports that tag's version, publish the checksum in one canonical spelling and upload assets without replacing bytes already attached",
    "Upgrade Agent-First Data to 0.34.0 and Agent-First UI to 0.5.0"
  ],
  "bonds": [
    {
      "relation": "depends_on",
      "uri": "cmn://agentfirstkit.com/b3.BmXjdNCjzm7ChFXVQ6FeKzfhuSjt3HvfGRbfCepefMUR",
      "id": "agent-first-data",
      "reason": "All request/response fields use Agent-First Data suffix conventions, and runtime protocol/log events are emitted on stdout only"
    },
    {
      "relation": "depends_on",
      "uri": "cmn://agentfirstkit.com/b3.Fy21Hs69eXEz8rX3SVkHfyVfZDcmdRMvX4XsJkhJPP9C",
      "id": "agent-first-ui",
      "reason": "Every short-lived takeover panel credential is an Agent-First UI access token, and `afhttp ui takeover` opens the panel in an Agent-First UI window"
    }
  ],
  "tree": {
    "algorithm": "blob_tree_blake3_nfc",
    "exclude_names": [
      ".git",
      ".cmn"
    ],
    "follow_rules": [
      ".gitignore"
    ]
  }
}