60 seconds with npx
One job: a green exit code on your bench before you read anything else. The package ships its own proof fixtures — the golden corpus — so nothing here depends on your data, your network, or an account.
$ npm i epcis.dev
$ CORPUS=node_modules/epcis.dev/golden-corpus
Every line below is a real run, executed 2026-07-31 against the published epcis.dev@0.1.0:
$ npx epcis.dev validate $CORPUS/valid-standard/object-event-shipping.json
valid schema=epcis-json-schema.json version=2.0.1
$ echo $?
0
$ npx epcis.dev validate $CORPUS/invalid/object-event-missing-action.json
schema-error /epcisBody/eventList/0 must have required property 'action'
schema-error /epcisBody/eventList/0 must match "then" schema
schema-error / must match "then" schema
invalid errors=3
$ echo $?
1
$ npx epcis.dev hash $CORPUS/valid-standard/object-event-shipping.json
hash 0 ni:///sha-256;e5624abcce4b2fc226743e8891f69c12a07ad508953749d9b9ede6771424f91e?ver=CBV2.0
$ npx epcis.dev translate $CORPUS/xml-translation/object-event-1.2.xml
delivered source=1.2 events=1 fidelity=round-trip-clean
$ npx epcis.dev conformance run --self | tail -1
state passed passed=18 failed=0 total=18
$ npx epcis.dev version
epcis.dev 0.1.0 epcis=2.0.1 cbv=2.0.1 suite=0.4.0
Note the second run: an invalid document exits 1 with per-path schema errors — the fail-closed path working is a verdict, not a crash.
The contract the transcript rides on
| exit | meaning |
|---|---|
| 0 | ok |
| 1 | fail — a negative domain verdict (invalid document, failed translation, rejected capture, failed suite run), not a crash |
| 2 | usage |
| 3 | not-found (unreadable input) |
| 4 | internal |
- Every verb takes --json: deterministic machine JSON, same data and same exit code as the token-cheap text lines above.
- stdout is payload-only. Errors are typed on stderr — {"error":{"code","message","hint"?}} under --json — and the code strings are stable across releases: match on code, never on prose.
- The verb set is closed: validate, hash, translate, capture, mcp, conformance run, conformance rejudge, pins, version. An unknown verb is a typed USAGE refusal with a hint, exit 2.
The package carries its own operating manual at node_modules/epcis.dev/AGENTS.md — the same contract, greppable where you already are. The site build checks that manual against the typed catalog these docs render from, so the two cannot drift.
Where next
- The live doors, no install at all: curl the doors.
- The agent door: MCP in one paste.
- What capture stamps and why: who vs capturedBy.
We answer in writing. We take at most five conversations a month, only when you ask for one, and only after you already have the written read.