Everyone's building smarter agents.We're building the layer that keeps them from acting on yesterday.
Dispatch never interrupts a crew mid-flight. When a flight plan changes, the revised copy goes to every cockpit on the ACARS printer. Nobody grabs the yoke; the pilot reads it at the next natural moment, and the printed receipt proves it arrived. AirMemo runs the same discipline for agent sessions: authorized memos land in context on the next turn, with a receipt that proves what each agent saw.
The problem is the same on the shop floor. The foreman posts the new drawing
on the wall; the part already in the press finishes to the old spec. Nobody
grabs a machine mid-cycle, and nobody expects the new drawing to take effect
until the press stops. Agents are different — or they shouldn't be. Today,
whatever is already in a session reads as current, and every agent acts on it
that way. Nobody governs the shelf.
The evidence is measured, not anecdotal. In the Meetless stale-context study, 10 frontier models were given a task whose answers had been superseded by dated notes on disk. 0 of 6 got it right, and they were confidently wrong — shipping stale facts while reading zero files. Our own Meetless-style benchmark reproduces the effect on a local model: 1/6 reading the shelf as it is, 4/6 when the in-force memo is pushed into context. The best agent with stale context loses to a mediocre agent with current context.
The inversion
Every tool makes agents smarter. Nobody makes them not wrong. That's the gap
we're closing: not a smarter agent, a better-informed one.
AirMemo is a shelf, not a memory. A small hook rides the lifecycle events your
agents already expose — session start and prompt submit — and checks one thing:
does the shelf hold an authorized memo for this agent? If it does, the memo is
delivered into the agent's session context and is prompt-visible on the
next turn. It never touches retrieval, RAG, or memory stores — and it never
interrupts mid-conversation. Delivery is next turn, guaranteed, with an honest
state machine:
queued → injected → receipted → expired
The librarian decides what goes on the shelf — who may push, to which scopes,
at what priority — and marks each memo with the value that wins when it
conflicts with an older one. "The 2/15 memo supersedes the 2/14 memo; the
winning value: PR #4821 ships." Complete, in-force, precedence-resolved — the
render contract that makes a multi-book shelf actable, not a pile.
Multi-vendor by design
Works across the fleets you already runClaude CodeCodexGitHub CopilotGemini CLI
No enterprise fleet is single-vendor, so AirMemo isn't either. Four adapters,
one delivery contract — and the hedge is not a promise, it's a fixture.
The memo — rendered once, injected four ways
URGENT — PR #4821 ships today — freeze lifted 18:00 UTC
The 2/14 freeze memo is superseded. The deploy window opens 18:00 UTC and closes 20:00 UTC.
- Ship PR #4821 (context-freshness KPI) — it is the release gate for this window
- Do NOT ship PR #4824 (still blocked on design review)
- If the window slips, the new freeze memo lands before 17:45 UTC
On-call: u_priya. Escalate to #incident if the window closes without a ship.
[AIRMEMO · authorized · memo_4821]
{"hookSpecificOutput":{"hookEventName":"SessionStart","additionalContext":"URGENT — PR #4821 ships today — freeze lifted 18:00 UTC\n\nThe 2/14 freeze memo is superseded. The deploy window opens 18:00 UTC and closes 20:00 UTC.\n\n- Ship PR #4821 (context-freshness KPI) — it is the release gate for this window\n- Do NOT ship PR #4824 (still blocked on design review)\n- If the window slips, the new freeze memo lands before 17:45 UTC\n\nOn-call: u_priya. Escalate to #incident if the window closes without a ship.\n\n[AIRMEMO · authorized · memo_4821]"}}
codex
SessionStart · 141 tokens
{"hookSpecificOutput":{"hookEventName":"SessionStart","additionalContext":"URGENT — PR #4821 ships today — freeze lifted 18:00 UTC\n\nThe 2/14 freeze memo is superseded. The deploy window opens 18:00 UTC and closes 20:00 UTC.\n\n- Ship PR #4821 (context-freshness KPI) — it is the release gate for this window\n- Do NOT ship PR #4824 (still blocked on design review)\n- If the window slips, the new freeze memo lands before 17:45 UTC\n\nOn-call: u_priya. Escalate to #incident if the window closes without a ship.\n\n[AIRMEMO · authorized · memo_4821]"}}
copilot
sessionStart · 127 tokens
{"additionalContext":"URGENT — PR #4821 ships today — freeze lifted 18:00 UTC\n\nThe 2/14 freeze memo is superseded. The deploy window opens 18:00 UTC and closes 20:00 UTC.\n\n- Ship PR #4821 (context-freshness KPI) — it is the release gate for this window\n- Do NOT ship PR #4824 (still blocked on design review)\n- If the window slips, the new freeze memo lands before 17:45 UTC\n\nOn-call: u_priya. Escalate to #incident if the window closes without a ship.\n\n[AIRMEMO · authorized · memo_4821]"}
gemini
SessionStart · 141 tokens
{"hookSpecificOutput":{"hookEventName":"SessionStart","additionalContext":"URGENT — PR #4821 ships today — freeze lifted 18:00 UTC\n\nThe 2/14 freeze memo is superseded. The deploy window opens 18:00 UTC and closes 20:00 UTC.\n\n- Ship PR #4821 (context-freshness KPI) — it is the release gate for this window\n- Do NOT ship PR #4824 (still blocked on design review)\n- If the window slips, the new freeze memo lands before 17:45 UTC\n\nOn-call: u_priya. Escalate to #incident if the window closes without a ship.\n\n[AIRMEMO · authorized · memo_4821]"}}
Generated by the shipping adapters (hook/platforms/*.go), not mockups — make artifact keeps the committed artifact in lockstep with the code. Claude Code / Codex / Gemini CLI share the hookSpecificOutput envelope; Copilot's command hooks take a flat additionalContext payload (modifiedPrompt is dropped by the runtime, so it is never emitted).
The four documents above are generated from the shipping adapters
(hook/platforms/*.go) — the same code paths that run on every session start.
make artifact re-renders them, so the demo cannot drift from the product.
The hook is a single static binary — no runtime, no daemon install, no admin.
Checksums are verified against the published manifest before anything runs;
the installer never elevates and never touches a config that isn't yours.
The installer is held until the v0.1.0 public release (in the works), and
there is nothing to download yet — no private links, no preview pipes. When it
ships, the install command comes from the public release on GitHub
(airmemo-hook-<os>-<arch>, one static binary per platform), and the
enroll step wires it into your agent:
# macOS / Linux (bash) — installer verifies SHA256SUMS before anything runs# curl -fsSL <public-release-url>/airmemo-hook-<os>-<arch> --checksum SHA256SUMSairmemo-hookenroll--orgYOUR_ORG--platformclaude
Every release is checksum-published: the installer refuses to run if the
binary doesn't match SHA256SUMS, and refuses to pipe anything to sudo —
user-space install, merge-safe hook config (your existing hooks are
preserved), hash-pinned so re-installs never trip a vendor fingerprint gate.
Platforms: Claude Code · Codex · Copilot · Gemini CLI.
Every delivery writes a receipt — an append-only, signed record of what was
delivered, to which agent, on which platform, and when it expired. The receipt
is three things at once:
Audit evidence — what each agent saw, for compliance and post-incident review
Billing meter — the honest count of governed deliveries
The acquisition metric — agents under management, a first-class product number from day one
Delivered memos are visibly stamped as authorized —
[AIRMEMO · authorized · memo_4821] — so agents and reviewers can always tell
the shelf from graffiti.
Every number below is one SQL count on the live control-plane database —
read right now, no mockups, no roadmap. Receipts are append-only, so the
served count can only go up.
Agents under management
–
Memos served
–
Pending right now
–
Pushed in 24h
–
Live from the control plane
The ticker reads the public /public/fleet.json endpoint — counts only,
never memo contents, no tracking scripts. Stale on your screen? Then the
control plane is down, and that is exactly the moment the shelf earns its
keep.
Priced per agent seat, governed by the control plane. Variable cost per seat is
pennies; the value is the governance.
Tier
Price
What's in it
Free
$0 (up to 5 agents)
Basic push, 7-day audit trail — seed a fleet, see the receipts
Team
$9 / agent / mo
Scope routing, priorities, Slack & Teams webhooks, 30-day audit
Business pilot
$19 / $24 / $29 / agent / mo
Governance workflows, approvals, audit export, managed-hook install — SSO is enterprise-triggered (see whitepaper)
Enterprise
Custom
Self-hosted on-prem, DPA, compliance, support — the governance layer inside your VPC
Self-host runs 1.5–2× list — the same codebase, one image, deployed where your
fleet lives. Every anchor sits above us: Claude Code Team runs ~$100/seat,
Copilot $10–39, Codex $20–200. A $9–49 governance layer is the easy
add-on in the same procurement conversation.
Every context layer eventually asks the same question, and the answer is the
product: who is allowed to put a book on the shelf?
AirMemo is the layer that decides who gets to put books in the library — who
may push, to which scopes, at what priority, under whose approval — and it
records every placement in an append-only receipt trail. The delivery
discipline never varies: never a book slipped mid-paragraph, placed on the
desk, seen at next natural look-up. Nothing interrupts a session; everything
is provable.
That is what compliance runs on. Not on trusting agents to read carefully, but
on receipts: what each agent saw, when it saw it, and who authorized it. For
auditors that is evidence; for operators it is the difference between a fleet
quietly acting on yesterday and a fleet acting on the in-force plan.
hook/scripts/render-all renders the artifact; the landing section
imports it. Claude / Codex / Gemini CLI share the hookSpecificOutput
envelope; Copilot's command hooks take a flat additionalContext payload
(modifiedPrompt is dropped by the runtime, so it is never emitted). ↩