Vitals
vitals/v0.1 · capsule stream

The pulse of your build.

Vitals turns thousands of lines of build-log noise into a structured capsule stream — with a pulse that an AI, CI job, or human reads first. Stop scraping stack traces. Start reading vital signs. Maven today; Gradle and npm are on the table.

target/vitals/capsules.ndjson
$ mvn -Dvitals.out=target/vitals/capsules.ndjson verify

// one capsule per line — the Pulse is the one you read first
{"kind":"StreamHeader", "schema":"vitals/v0.1", "producer":{"tool":"maven", "impl":"vitals-maven/0.1.0"}}
{"kind":"TestCaseFailed", "suite":"demo.CalculatorTest", "test":"adds",
  "exception":{"type":"org.opentest4j.AssertionFailedError"}}
{"kind":"Pulse", "outcome":"failure",
  "totals":{"units":1, "failed":1, "tests":{"total":1, "failed":1}},
  "units":[{"unit":"demo:demo-test-failure", "failed_steps":["surefire:test@default-test"]}]}

How it works

A producer watches the build, a stream carries the facts, and any consumer — agent, CLI, CI — reads the pulse instead of the log.

01 · PRODUCE

A core extension watches the build

vitals-maven-extension hooks Maven's EventSpy and emits NDJSON capsules — lifecycle spans, diagnostics with precise locations and stable fingerprints, test failures with exact re-run commands. Dependency-free, inert until routed with -Dvitals.out.

02 · STREAM

One capsule per line, pulse on top

The stream ends with a Pulse: outcome, per-unit results, deduped counts, failed steps. Consumers derive the stream's own trustworthiness — COMPLETE, INCOMPLETE, or CORRUPT — instead of trusting a dead producer.

03 · CONSUME

Agents act, CI gates, humans skim

The Maven MCP tool runs any build and returns the pulse — no raw logs. vitals-pulse turns a stream into CI exit codes. Diagnostics arrive layered compile → test → lint, grouped by file, ready to fix in order.

Does it actually save tokens?

A smaller payload is not the same as a cheaper answer, so the benchmark measures tokens spent to reach a correct fix decision — every figure below is conditional on the model getting the answer right.

1.25×
fewer tokens
151k vs 189k, median per task
4 vs 7
turns to an answer
and 0 rebuilds, vs 11 across the baseline
2.2×
less output in context
2,472 vs 5,434 chars of tool results
ApproachAccuracyTokensTurnsTool output
Vitals MCP read the pulse100%151,08542,472
Shell run & read — baseline100%188,75275,434
Shell told to redirect & grep99%222,37975,127

Median across 7 scenarios × 10 trials per cell (280 graded runs, plus 4 calibration). The widest gap is the boring case: on a build where nothing is wrong, reading the pulse costs 112k tokens against 224k spent confirming it — 2.0×.

Read this before quoting the number

Quickstart

Two ways in: let your agent do everything through MCP, or wire the extension into any Maven project directly.

Claude Code

plugin — MCP tool + hook
# installs the Maven MCP tool and a hook that
# redirects raw mvn calls to the structured path
/plugin marketplace add vitals-build/claude-plugin
/plugin install vitals-maven@vitals-build

Then just ask: "run the build and tell me what to fix first." Needs Node ≥ 18 and Java. Details: claude-plugin.

Any Maven project

core extension
# register once in .mvn/extensions.xml, then
# route any build that should be agent-readable
mvn -Dvitals.out=target/vitals/capsules.ndjson verify

# or stream to stderr for piping
mvn -Dvitals.out=stderr verify 2> capsules.ndjson

Zero cost when disabled — safe to leave registered permanently. Drop-in XML: vitals-java.

Ecosystem

One spec, many producers and consumers — every repo speaks the same capsule stream.

vitals-java live

The Java implementation of the spec — capsule records, NDJSON codec, JSON Schema, and the semantic validator — plus the reference Maven core extension (EventSpy) producer.

vitals-maven-demos live

Runnable Maven demos for every outcome — success, compile error, test failure, PMD/Checkstyle/SpotBugs warnings — with a golden capsule corpus.

vitals-mcp live

MCP server: the Maven drop-in tool, pulse/diagnostics/test-failure tools, and the vitals-pulse CLI for CI.

claude-plugin live

Claude Code marketplace — installs the MCP server and the raw-mvn-blocking hook in one command.

vitals-npm design

The npm / pnpm producer — wrapper form factor with reporter-injection and text-parsing scavenger tiers.

Vitals — the product pulse — the distilled signal capsule — the event schema stream — NDJSON, one capsule per line

Capsule Stream Specification

Tool-neutral and versioned: vitals/v0.1, revision 0.1-draft.5. Envelope, kind taxonomy, stable fingerprints, pulse semantics, and the consumer repair loop.

Read /docs/