Flightdeck Tools is a public Apache-2.0 reference collection, deprecated for new Claude Code integrations as of September 22, 2026. It is not a recommendation to replace native messaging.

An agent process can disappear while the work around it still matters. A terminal closes. A supervisor restarts a job. A result reaches one consumer but not another. A later session needs to know what actually happened.

Four of the Flightdeck tools handle different parts of that problem. They share one rule: preserve the report, and do not inflate it into a stronger claim.

Durable Mailbox retains the handoff

Durable Mailbox writes complete local messages through an atomic same-filesystem rename. Draining moves a message from the new queue into retained history instead of deleting the evidence.

Questions have a separate acknowledgement step. Delivery therefore does not mean agreement, completion, or even successful downstream processing. An interrupted drain can produce a duplicate, so consumers still need idempotent handling where that matters.

The original live-session bridge was recorded on July 25, 2026, and the disk mailbox on July 26. Claude Code’s cross-session messaging release followed on August 7. I evaluated and adopted native live-peer messaging on August 8, while keeping the mailbox for durable delivery. This chronology concerns independent sessions; Claude’s agent-team preview had already shipped in February.

The standalone mailbox does not include that old live-session bridge. Its queue illustrates a different contract from discovery and text delivery between supported live sessions, which Claude Code now provides directly.

Session Ledger keeps the events

Session Ledger stores append-only lifecycle reports and projects the latest reported state for each exact session identity.

It does not discover processes or enforce an ideal state machine. A caller may record a correction, and a process may die immediately after reporting that it launched. The useful guarantee is smaller: prior events remain available, sequence numbers are contiguous, and malformed storage blocks further operations instead of being silently repaired.

Job Heartbeat separates a run from its name

A logical job name may be reused after a restart. Without another identity, the old process can keep writing and overwrite the new run’s progress.

Job Heartbeat gives each start an opaque generation token. A touch, finish, or restart must present the current token under a local lock. A stale writer is refused, and a terminal generation cannot be revived by another heartbeat.

The read states distinguish fresh, late, finished, missing, and unknown. A late heartbeat may reflect a clock jump or a paused process; it does not trigger an automatic kill.

Decision Ledger preserves the source words

Operational decisions are easy to blur over time. A paraphrase replaces an instruction, a correction overwrites the original, or a question disappears from a queue and is mistaken for permission.

Decision Ledger stores original UTF-8 text separately from an optional interpretation. Corrections and answers append linked records. The history can show the original words, subsequent explanations, and the latest recorded answer without pretending that a caller-supplied actor label authenticates a person.

Recovery is a caller decision

These records cannot remove the gap between recording intent and carrying out an external action. If a consumer performs the action and then dies before acknowledging a message, a retry may repeat the action. Callers need their own idempotency key or a reconciliation step. A retained event helps investigate that gap; it does not make the action transactional.

Composition comes after honest primitives

These tools could have been one general event system. Keeping them separate makes their contracts easier to inspect.

The mailbox is about delivery and acknowledgement. The session ledger is about lifecycle history. The heartbeat is about generations and freshness. The decision ledger is about preserving words and relationships.

Together they make a larger workflow resumable. Separately, each one stays clear about the fact it actually records.