Agent skill

Pp Airframe

by mvanhorn in mvanhorn/printing-press-library

Aircraft forensics from open public records — tail-number dossiers, fleet research, model-level safety, and NTSB event archaeology.

Apache-2.0Auto-check: notes

Install Pp Airframe

skills CLI
$ npx skills add mvanhorn/printing-press-library --skill pp-airframe -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install mvanhorn/printing-press-library pp-airframe --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/mvanhorn/printing-press-library.git skills-src && mkdir -p .claude/skills && cp -r skills-src/cli-skills/pp-airframe .claude/skills/pp-airframe && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
pp-airframe
GitHub stars
2.1k
Token cost
~2.9k tokens
SKILL.md length
1,422 words
Files
1
Skills in repo
506
Repo updated
First seen
Licence
Apache-2.0

At a glance

Aircraft forensics from open public records — tail-number dossiers, fleet research, model-level safety, and NTSB event archaeology.

  • Works in 3 steps: Install via the Printing Press… → Verify: airframe-pp-cli --version → Ensure the reported install directory is…
  • Phrases: look up tail number
  • SKILL.md covers Prerequisites: Install the CLI, The two-tier model (read this…, Step 0 — Always run doctor first and Decision tree (use this to…, plus 4 more sections
  • Calls go, apt and dnf

What it does

Pp Airframe is an agent skill from mvanhorn/printing-press-library. Aircraft forensics from open public records — tail-number dossiers, fleet research, model-level safety, and NTSB event archaeology. Trigger phrases: look up tail number, who owns this plane N…, what aircraft does <company own, safety record of <aircraft model, accident history for, crash history for <aircraft model, find aircraft registered to, NTSB event ERA…, use airframe, run airframe. Secondary (day-of only, requires flight-goat + within 72hr of departure): is UA<flight safe, what plane is <flight.

Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The repository describes itself as: Official library of CLIs generated by the CLI Printing Press. Endorsed, tested, and community-contributed. The licence is Apache-2.0.

When your agent uses it

  • Phrases: look up tail number
  • Who owns this plane N…
  • What aircraft does <company own
  • Safety record of <aircraft model

Example prompts

  • “/pp-airframe”

Requirements

  • Node.js
  • Pre-approved tools (allowed-tools): Read, Bash

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Install via the Printing Press installer. It defaults binaries to $HOME/.local/bin on macOS/Linux and…
  2. Verify: airframe-pp-cli --version
  3. Ensure the reported install directory is on $PATH for the agent/runtime that will invoke this skill.

What it can do on your machine

Read from SKILL.md and the folder at commit 76de244. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Bash

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • go
    • apt
    • dnf
    • npx
    • brew

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Pp Airframe loads about 2.9k tokens when it runs. Until then it costs about 137 tokens; SKILL.md has 1,422 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~137
When it runs · the whole SKILL.md, loaded when a task matches
~2.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteRuns commands with sudoSKILL.md:108
    u / Debian (`ID=ubuntu`, `ID=debian`) | `sudo apt update && sudo apt install -y mdbtools` |
  • NoteRuns commands with sudoSKILL.md:109
    | Fedora (`ID=fedora`) | `sudo dnf install -y mdbtools` |
  • NoteRuns commands with sudoSKILL.md:110
    (`ID=rhel`/`ID=rocky`/`ID=almalinux`) | `sudo dnf install -y mdbtools` |
  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Bash

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from mvanhorn/printing-press-library at commit 76de244, republished under its Apache-2.0 licence (© mvanhorn). 1,422 words, ~2,938 tokens.

Download SKILL.mdSave it as .claude/skills/pp-airframe/SKILL.md (or your agent's skills folder).
name
pp-airframe
description
Aircraft forensics from open public records — tail-number dossiers, fleet research, model-level safety, and NTSB event archaeology. Trigger phrases: `look up tail number`, `who owns this plane N…`, `what aircraft does <company> own`, `safety record of <aircraft model>`, `accident history for`, `crash history for <aircraft model>`, `find aircraft registered to`, `NTSB event ERA…`, `use airframe`, `run airframe`. Secondary (day-of only, requires flight-goat + within 72hr of departure): `is UA<flight> safe`, `what plane is <flight>`.
allowed-tools
Read, Bash
author
Chris Drit
license
Apache-2.0
argument-hint
<command> [args] | install
<!-- GENERATED FILE — DO NOT EDIT.
     This file is a verbatim mirror of library/developer-tools/airframe/SKILL.md,
     regenerated post-merge by tools/generate-skills/. Hand-edits here are
     silently overwritten on the next regen. Edit the library/ source instead.
     See the repository agent guide, section "Generated artifacts: registry.json, cli-skills/". -->

airframe — Printing Press CLI

Prerequisites: Install the CLI

This skill drives the airframe-pp-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:

  1. Install via the Printing Press installer. It defaults binaries to $HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows:
    bash
    npx -y @mvanhorn/printing-press-library install airframe --cli-only
  2. Verify: airframe-pp-cli --version
  3. Ensure the reported install directory is on $PATH for the agent/runtime that will invoke this skill.

If the npx install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.6 or newer):

bash
go install github.com/mvanhorn/printing-press-library/library/developer-tools/airframe/cmd/airframe-pp-cli@latest

If --version reports "command not found" after install, the runtime cannot see the binary directory on $PATH. Do not proceed with skill commands until verification succeeds.

The two-tier model (read this first, every invocation)

TierDatasetInstall requirementAnswers questions like
1FAA Aircraft Registrynone — just airframe-pp-cli"Who owns N12345?" • "How old is this plane?" • "What aircraft does Berkshire Hathaway own?" • "What type is this Mode-S code?"
2NTSB CAROL accident databasemdbtools package"How safe is a Cessna 172?" • "Crash history for the Boeing 737 MAX 8" • "Has tail N12345 ever been in an incident?" • "Probable cause of event ERA22LA001"

airframe flight <ident> additionally requires flight-goat-pp-cli installed + FLIGHT_GOAT_API_KEY_AUTH set, and only works within ~72 hours of departure (airlines don't assign a specific tail to a flight before then). For pre-purchase or pre-booking "is my flight safe" questions, use a Tier 2 model-level lookup with the equipment type from the booking site.

Step 0 — Always run doctor first

Before answering any user question, run:

bash
airframe-pp-cli doctor --json

Parse the JSON to determine:

  • db_exists — has the user ever synced?
  • sync_meta — which sources (faa_master, ntsb_avall) are present and how fresh?
  • mdbtools.detected — can we serve Tier 2 questions?
  • flight_goat.detected — can we serve flight <ident> questions?

Branch from here based on what the user actually asked.

Decision tree (use this to drive every user interaction)

A) User asks a Tier 1 question and Tier 1 is missing

Example: "Who owns N628TS?" but airframe-pp-cli doctor shows db_exists=false or sync_meta is empty.

  1. Tell the user: "I need to download the FAA registry first (~80 MB, ~30 seconds, no setup needed)."
  2. Offer to run airframe-pp-cli sync for them.
  3. After sync completes, answer their original question.
B) User asks a Tier 1 question and Tier 1 is ready

Just answer it directly:

bash
airframe-pp-cli tail N628TS
airframe-pp-cli owner "Berkshire" --limit 20
C) User asks a Tier 2 question (safety / accident / NTSB) and mdbtools is missing

This is the most important branch — handle it with care.

Surface a clear explanation:

"To answer that, I need NTSB accident data, which requires the mdbtools package (NTSB ships their data in Microsoft Access format). It's a one-time install — would you like me to install it for you?"

If the user says yes, detect their OS and run the right command:

bash
# Detect OS
uname -s   # → "Darwin" for macOS, "Linux" for Linux
# Detect Linux distribution if Linux
cat /etc/os-release 2>/dev/null | grep -E '^ID='

Then propose before running:

OS detectedCommand to run
macOS (Darwin)brew install mdbtools
Ubuntu / Debian (ID=ubuntu, ID=debian)sudo apt update && sudo apt install -y mdbtools
Fedora (ID=fedora)sudo dnf install -y mdbtools
RHEL / Rocky / Alma (ID=rhel/ID=rocky/ID=almalinux)sudo dnf install -y mdbtools
Arch (ID=arch)yay -S --noconfirm mdbtools (AUR — needs yay or paru; if neither is present, tell the user to install one first)

Important: never run sudo commands without first showing the user what you plan to run and confirming. The --noconfirm for yay is OK because the user has already opted in once.

After mdbtools installs, run:

bash
airframe-pp-cli sync --source all

Then answer the original question.

D) User asks a Tier 2 question and mdbtools is present but NTSB hasn't been synced

doctor shows mdbtools.detected=true, but sync_meta has no ntsb_avall row.

Tell the user: "I have the NTSB ingest tool installed but haven't synced the data yet. Would you like me to run that now? It's ~90 MB and takes about a minute."

If yes:

bash
airframe-pp-cli sync --source ntsb
E) User asks a flight-ident question — first, check the 72-hour gate

Examples: "Is UA1234 safe?", "What plane will I be on for AA200?", "Is my flight on DL5678 tomorrow OK?"

Critical context: Airlines don't assign a specific tail to a flight until ~48–72 hours before departure. If the user is more than 72 hours from their flight (or shopping a ticket they haven't booked yet), looking up the specific tail is impossible — there is no tail yet. Don't burn a flight-goat call on it.

Step 1 — establish when the flight is. Ask the user (or infer from context):

"When is the flight? Tail assignments are made 48–72 hours before departure — if you're shopping or it's further out than that, I'll point you at the model-level safety lookup instead, which is more reliable for that horizon."

Step 2 — branch:

  • Flight is >72 hours away or hypothetical → recommend the model-level fallback. Most airline booking sites tell you the equipment type (e.g. "Boeing 737 MAX 8" or "Airbus A321neo"). Run:

    bash
    airframe-pp-cli model "Boeing 737 MAX 8"

    This answers the user's underlying question ("is the type of plane I'll be on safe?") and needs no flight-goat at all. (It still needs Tier 2 / mdbtools for safety data — fall through to branch C if missing.)

  • Flight is ≤72 hours away OR the user is asking about a flight that already happened (post-incident research) → proceed with flight-goat resolution. Continue to step 3.

Step 3 — flight-goat present? If not, install it.

If flight_goat.detected=false, tell the user:

"To resolve a specific flight ident (like UA1234) to a tail number, I need flight-goat-pp-cli. Would you like me to install it? It also requires a FlightAware AeroAPI key — that part you'll need to provide."

If yes:

bash
go install github.com/mvanhorn/printing-press-library/library/travel/flight-goat/cmd/flight-goat-pp-cli@latest

Step 4 — FLIGHT_GOAT_API_KEY_AUTH set? If not, explain the cost.

If the env var is unset, tell the user that flight-goat routes through FlightAware's AeroAPI (paid service) and they'll need to sign up at flightaware.com/aeroapi to get a key. Don't push past without explicit direction.

Step 5 — run the lookup.

bash
airframe-pp-cli flight UA1234

Note that the result may include multiple recent tails that have flown the same ident over the past 14 days — flight-goat returns the history, not just the next scheduled flight. For post-incident research, look at the date-aligned tail; for pre-departure curiosity, look at the most recent one.

Show full SKILL.md (418 more words)Show less

Commands

CommandTierWhat it does
sync [flags]bothDownload bulk data, replace local tables, VACUUM
tail <N-number>1 (+2 enriches)Aircraft dossier + accident history
owner "<name>"1Aircraft fleet by registered owner
model "<make> [model]"2Aggregate NTSB events by model
event <event-id>2One NTSB event
flight <ident>1 + flight-goatResolve ident → tail → enrich
search "<query>"1+2 + --with-ftsFTS5 search
doctor—Health check

All commands accept --json, --select <dotted-path>, and --db-path.

Trigger-phrase → tier mapping

For fast classification of what the user is asking. Most user questions are answered by Tier 1 or Tier 2 alone — the flight-goat path is the exception, not the rule.

Tier 1 phrases → just need FAA sync

  • "who owns N…", "who owns the plane with tail N…"
  • "what aircraft does <company> own", "<company> fleet"
  • "how old is this plane", "when was this tail manufactured"
  • "what type/model is N…", "what's the Mode-S for N…"
  • "find aircraft registered to <name/state/LLC>"

Tier 2 phrases → need NTSB + mdbtools

  • "how safe is a <aircraft model>", "is the <model> safe", "safety record of <model>"
  • "accident history for <model>", "crash history of <model>"
  • "ever had an incident with this tail" (when N-number is known)
  • "NTSB events for", "show me event ERA…"
  • "fatal accidents in <state> this year"
  • "crashes in <region> last <period>"

Tier 1 + flight-goat phrases → require ident resolution and only work within ~72 hours of departure

  • "is UA1234 safe" (only useful if flight is within 72 hours)
  • "what plane is United 1234 today/tomorrow"
  • "my flight is DL567 in a few hours — what aircraft"
  • "what tails did UA89 fly last week" (post-incident — always works)

For any "is my flight safe" / "what plane will I be on" question, always ask when the flight is first. If the user is shopping or the flight is more than 72 hours out, redirect to a model-level lookup (airframe-pp-cli model "<equipment-type>") using the equipment type from the user's booking site. Most airline booking pages display the aircraft type for every flight at search time.

Output and agent mode

--agent (= --json --compact --no-input --no-color --yes) is the default mode for programmatic consumption. The envelope is {meta, results} matching sec-edgar. Use --select results.aircraft.owner_name to extract a single field.

Caveats to surface to the user

  • FAA owner data may be a Delaware LLC shell. airframe reports the registry value verbatim; it is not a beneficial-ownership tool.
  • NTSB only investigates incidents meeting their reporting threshold — "no events" is not "perfect record."
  • flight requires a paid AeroAPI key via flight-goat. FAA + NTSB are free; ident-to-tail resolution is what costs.

© mvanhorn, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in cli-skills/pp-airframe of mvanhorn/printing-press-library.

Open the folder on GitHubat commit 76de244

Compare with similar skills

Pp Airframe next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Pp Airframe compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pp Airframe this skillmvanhorn/printing-press-library2.1k—~2.9kAutomated safety check: NotesApache-2.0
Recordingcodewhale-hq/Codewhale41k—~540Automated safety check: PassMIT
Architecture Decision Recordsaffaan-m/ECC276k4 repos~1.8kAutomated safety check: PassMIT
Digital Forensicssickn33/agentic-awesome-skills47k1 repos~495Automated safety check: PassMIT
Digital Forensicszhaoxuya520/reverse-skill40k2 repos~389Automated safety check: WarnMIT
Performing Sqlite Database Forensicsmukul975/Anthropic-Cybersecurity-Skills34k—~3.6kAutomated safety check: WarnApache-2.0

Similar skills

  • Recording

    codewhale-hq/Codewhale

    Capture screenshots on registered computers, record on macOS or HarmonyOS, and manage saved captures.

    41k GitHub stars~540 tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Capture architectural decisions as numbered ADR markdown files in docs/adr/ with context, alternatives considered, consequences, and an index README.

    276k GitHub starsUsed in 4 repos~1.8k tokens
    DevelopmentAuto-check passed
  • Digital Forensics

    sickn33/agentic-awesome-skills

    Authorized digital forensics: memory dumps, disk timelines, PCAP investigation, artifact triage, and incident-response evidence preservation.

    47k GitHub starsUsed in 1 repo~495 tokens
    SecurityAuto-check passed
  • Digital Forensics

    zhaoxuya520/reverse-skill

    A skill your agent uses for authorized digital forensics including memory dumps, disk timelines, PCAP investigation, artifact triage, and IR evidence preservation.

    40k GitHub starsUsed in 2 repos~389 tokens
    SecurityAuto-check: warnings
  • Performing Sqlite Database Forensics

    mukul975/Anthropic-Cybersecurity-Skills

    Performs forensic analysis of SQLite databases by examining B-tree page structures, recovering deleted records from freelist pages and Write-Ahead Log (WAL) files, decoding encoded timestamps, and…

    34k GitHub stars~3.6k tokensUpdated 1 mo ago
    SecurityAuto-check: warnings
  • 在Claude Code会话期间,将做出的架构决策捕获为结构化的架构决策记录(ADR)。自动检测决策时刻,记录上下文、考虑的替代方案和理由。维护一个ADR日志,以便未来的开发人员理解代码库为何以当前方式构建。

    276k GitHub starsUsed in 1 repo~863 tokens
    DevelopmentAuto-check passed

More from mvanhorn/printing-press-library

All 506 skills in this repo
  • Agent Desktop

    mvanhorn/printing-press-library

    Desktop automation through the real Rust agent-desktop CLI, published in Printing Press through a small bridge.

    2.1k GitHub stars~2.3k tokensUpdated today
    Auto-check: notes
  • Gfonts

    mvanhorn/printing-press-library

    Search, browse, and download Google Fonts from the terminal via the gfonts CLI.

    2.1k GitHub stars~574 tokensUpdated today
    Auto-check passed
  • Pp 1688

    mvanhorn/printing-press-library

    The free, offline Trigger phrases: search 1688 for, find a factory on 1688 for, wholesale price on 1688 for, who is the cheapest supplier on 1688 for, compare 1688 suppliers for, use 1688, run 1688.

    2.1k GitHub stars~3k tokensUpdated today
    Auto-check: notes
  • Pp Activity Japan

    mvanhorn/printing-press-library

    Inspect known Activity Japan plan IDs or URLs, compare dated prices and sessions, check language-sitemap coverage, and hand off to canonical booking pages.

    2.1k GitHub stars~2k tokensUpdated today
    Auto-check: notes
  • Pp Adminbyrequest

    mvanhorn/printing-press-library

    Every Admin By Request portal action, plus a local SQLite mirror of audit, events, inventory and requests for ad-hoc...

    2.1k GitHub stars~3.3k tokensUpdated today
    Auto-check: notes
  • Pp Agent Capture

    mvanhorn/printing-press-library

    macOS screen capture, window recording, GIF conversion, and agent evidence bundles from the terminal.

    2.1k GitHub stars~1.6k tokensUpdated today
    Auto-check: notes

Questions about Pp Airframe

What does Pp Airframe do?

Aircraft forensics from open public records — tail-number dossiers, fleet research, model-level safety, and NTSB event archaeology. Pp Airframe is an agent skill from mvanhorn/printing-press-library. Aircraft forensics from open public records — tail-number dossiers, fleet research, model-level safety, and NTSB event archaeology.

When should I use Pp Airframe?

Pp Airframe fits situations like: phrases: look up tail number; who owns this plane N…; what aircraft does <company own; safety record of <aircraft model.

How do I install Pp Airframe in Claude Code?

Run `npx skills add mvanhorn/printing-press-library --skill pp-airframe -a claude-code`. Or copy the skill folder (cli-skills/pp-airframe in mvanhorn/printing-press-library) into .claude/skills/pp-airframe in your project. Claude Code loads it when a task matches its description.

How do I install Pp Airframe in Codex?

Run `npx skills add mvanhorn/printing-press-library --skill pp-airframe -a codex`. Or copy the skill folder (cli-skills/pp-airframe in mvanhorn/printing-press-library) into .agents/skills/pp-airframe in your project. Codex loads it when a task matches its description.

Can I use Pp Airframe in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mvanhorn/printing-press-library --skill pp-airframe -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pp-airframe, .gemini/skills/pp-airframe, .github/skills/pp-airframe and .opencode/skills/pp-airframe in your project.

What does Pp Airframe need to run?

Going by SKILL.md and its folder, Pp Airframe needs the command-line tools its instructions call (go, apt, dnf, npx and brew). Our summary lists: Node.js. Its frontmatter pre-approves these tools: Read, Bash.

Does Pp Airframe access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Pp Airframe safe to install?

Our automated static check of SKILL.md found notes only (runs commands with sudo; pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Pp Airframe use?

Pp Airframe is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Pp Airframe use?

About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Pp Airframe?

Skills that share tags, products or a category with Pp Airframe: Recording (codewhale-hq/Codewhale, 41k stars), Architecture Decision Records (affaan-m/ECC, 276k stars), Digital Forensics (sickn33/agentic-awesome-skills, 47k stars) and Digital Forensics (zhaoxuya520/reverse-skill, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Pp Airframe?

mvanhorn (a GitHub user) maintains it in mvanhorn/printing-press-library, which has 2,056 GitHub stars. The repository holds 506 skills in this directory. The repository was last updated on October 9, 2026.

Source: mvanhorn/printing-press-library on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.