Cross-runner Run Manifest normalization

One canonical envelope across every AI runner

Anthropic, OpenAI, Google, Amazon, Microsoft — every AI coding runtime emits its hook events in a different shape. fastpace normalises them to the same three boring fields at the developer's laptop, signs the result with a key only that laptop holds, and never phones home.

ELI5 — five gas stations, one expense report

Shell, BP, Chevron, Exxon, and Mobil all sell the same gasoline but each prints a wildly different receipt. Your accountant doesn't memorise five receipt formats — she runs each through a one-page cheat sheet that says "copy the octane number into grade, the dollars into total." Now every receipt looks identical before she touches it. fastpace is the cheat sheet for AI runners.

Same three fields, three wildly different receipts

Shell
fuel: 91
dollars: 42.10
station: chicago-loop
BP
octane_rating: 91
total_usd: 42.10
location: "Chicago Loop BP #421"
Chevron
gas: regular-91
charge: $42.10
addr: 401 N Wacker

Five runners, one canonical envelope

Anthropic Claude Code
claude-code
metadata.model "claude-opus-4.7"
metadata.endpoint "https://api.anthropic.com"
metadata.do_not_train true
OpenAI Codex
codex
metadata.model_name "gpt-5"
metadata.host "api.openai.com"
metadata.x_anthropic_no_training true
Google Gemini CLI
gemini-cli
metadata.gemini_model "gemini-2.5-pro"
metadata.vertex_endpoint "…aiplatform.googleapis.com"
metadata.user_data_opted_out true
Amazon Bedrock
bedrock
metadata.modelId "anthropic.claude-opus-4-7-v1:0"
metadata.bedrock_endpoint "bedrock.us-east-1.amazonaws.com"
metadata.bedrock_training_disabled true
Microsoft Azure OpenAI
azure-openai
metadata.openai_model "gpt-5"
metadata.azure_endpoint "westus3.openai.azure.com"
metadata.user_data_opted_out true
Hook event
5 different shapes, depending on the runner
run-manifest-writer.js
One small adapter map · pure local code · no service
Canonical Run Manifest
{ model, endpoint, training_opt_out, runtime }

Two practical wins

Easy to add a new AI tool

When GPT-6 ships next year on a new endpoint, you add four lines to the adapter map — not forty lines spread across twelve downstream consumers.

Audit log stays clean

Auditors reading fastpace/manifests/ see one consistent shape, regardless of which engineer used which AI tool that day. No polyglot mess.

AI gateway products

Portkey · Helicone · Langfuse — normalise on a server in their cloud. Your traffic flows through them.

vs.
fastpace

Normalises at the developer's laptop. Signs the canonical envelope with a key only that laptop holds. Never phones home.

Where it lives: packages/fp/assets/hooks/run-manifest-writer.js
Verified by: qa/phases/08-cross-runner.sh — 5 fixtures, one per runner, asserting canonical fields land in fastpace/manifests/