Skip to main content

pneumatic

Cross-vendor AI-crew session tooling: read recent messages from an agent's session, classify seat health (stale / error / credits-wall / permission-stall / …), wake and launch seats across tmux — for crews of AI agents (Claude Code, Codex CLI, and others) coordinating on a shared project via ADRs, seeds, and the inbox protocol.

Status: real and installable, today, from source — 0.1.0, MIT-licensed, 47 tests and mypy --strict clean, both run in CI on every push. The PyPI distribution name will be adrs4ai-pneumatic (the bare name belongs to someone else; import and CLI stay pneumatic) — not yet published to PyPI, deliberately: that's its own open decision. Design record: ADR-0001, eight iterations deep, all seven design questions answered (the last, a narrow message_filter hook for cmd_last's message-selection step, designed and awaiting implementation). Lineage: HQ's ADR-0015.

Install

git clone https://github.com/ADRs4AI/pneumatic
cd pneumatic
pip install -e .          # editable install; CLI entry point included

A python -m build --wheel + clean-venv install has been verified working end to end. When the PyPI decision lands: pip install adrs4ai-pneumatic.

What it does, in six commands

Command What you get
pneumatic pulse One-line health check across every registered seat — stale, error, credits-wall, permission-stall, all detected
pneumatic last <seat> A seat's recent messages, with per-message model attribution — catches silent model substitutions
pneumatic wake <seat> -m "..." Nudge a seat's tmux session (guards included: mid-turn refusal, cooldown — they warn, never hard-block)
pneumatic launch <seat> Start a seat's session from the registry
pneumatic rescue <seat> Free a seat stuck on a permission dialog — per-instance human consent, never automatic approval
pneumatic doctor Hook discovery and load diagnostics
pneumatic hooks inventory Machine-readable JSON of which hooks a project implements — for fleet-wide visibility tooling

Every action takes a verb — click-based subcommands as of 0.2 (ADR-0003; the pre-0.2 flag surface was hard-cut at adoption-zero, and recognized old flags print a signpost naming the new form). A bare seat name gets a teaching error, not silent sugar.

Hooks are the point, not a feature

Anything pneumatic's core does that you'd otherwise fork the source to change, you do instead in a local hooks.py — a file you write and own, that survives every upgrade. Dispatch is via pluggy (pytest's own plugin engine), and pneumatic's own built-in behavior registers through the identical call path — there is no separate hardcoded version to drift away from what's hookable. Nine named hooks across three dispatch shapes (additive, override-with-fallback, collecting-with-context). Start at HOOKS.md for the authoring reference; ADR-0001 for why it's built this way.

Why this exists

git blame doesn't tell you which AI session touched a file. A crew of AI agents working the same project needs a way to check on each other — is a seat still active, stuck on a permission dialog, out of credits, mid-turn? — without a human relaying status by hand.

It started as a single script inside one project. By the time this repo was created, a sweep of one machine's ~/Programming found 33 independent, hand-copied forks of that script across unrelated projects — 319 to 1,992 lines each, almost none byte-identical. Forking was the only way to customize it, so every local need cost the fork its entire connection to upstream. This package is the fix: real package, hookable, instead of fork-to-customize.

Design principle

"This is a blank canvas. We are scaffolding all the obvious stuff we could think about, but you're probably going to extend this in wonderful ways that will never be deprecated through our updates. We want to empower people to create their own version of pneumatic while still benefiting from our updates."

Honest state of play

  • Adoption is zero so far — the 33-fork sweep classified 16 of 23 forked projects as pure-adoption candidates and 7 as needing real hook-writing, and none has migrated yet, including this tool's own origin project. The fix exists; its first migration is the next proof.
  • Stability contract covers the hook contract only. Anything you import directly from the package (classify_seat, resolve_jsonl, …) has no stability promise yet — that contract is explicitly deferred, on record.

Methodology

This repo is scaffolded from human-ai-collaboration-template-A — decisions are committed to ADRs (docs/adr/) immediately, not left to live only in conversation. See CLAUDE.md and docs/METHODOLOGY.md for the full framework.


Feedback: lumbroso@seas.upenn.edu

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

adrs4ai_pneumatic-0.4.0.tar.gz (227.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

adrs4ai_pneumatic-0.4.0-py3-none-any.whl (144.9 kB view details)

Uploaded Python 3

File details

Details for the file adrs4ai_pneumatic-0.4.0.tar.gz.

File metadata

  • Download URL: adrs4ai_pneumatic-0.4.0.tar.gz
  • Upload date:
  • Size: 227.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for adrs4ai_pneumatic-0.4.0.tar.gz
Algorithm Hash digest
SHA256 7d36ecbe49e7a49210f47fd3e8ab31a0c342c2651b9a7647b74f286680f0a214
MD5 a1912d2b564269845929134ef7477043
BLAKE2b-256 0dce3e98bbda63aea6f76cfa42998c3cb38f18436652e891e80277eced084f5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for adrs4ai_pneumatic-0.4.0.tar.gz:

Publisher: publish.yml on ADRs4AI/pneumatic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file adrs4ai_pneumatic-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for adrs4ai_pneumatic-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a0c91263cd53f544ce4ff24fbba04536de3c04be5c7e5e15c0f8ef9886c37d71
MD5 b4012b74802cc884b38443af9ffde39c
BLAKE2b-256 185bea305595126572e7bb5437e88ca52f2d94c221bbbb260041cc50b5f92688

See more details on using hashes here.

Provenance

The following attestation bundles were made for adrs4ai_pneumatic-0.4.0-py3-none-any.whl:

Publisher: publish.yml on ADRs4AI/pneumatic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.20.0

2 files

0.19.0

2 files

0.18.0

2 files

0.17.0

2 files

0.16.0

2 files

0.15.0

2 files

0.14.0

2 files

0.13.0

2 files

0.12.0

2 files

0.11.0

2 files

0.10.0

2 files

0.9.0

2 files

0.8.1

2 files

0.8.0

2 files

0.7.0

2 files

0.6.0

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

This release

0.4.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page