# 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 --out out.json
delivered	source=1.2	events=1	fidelity=round-trip-clean
wrote	out.json

$ 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
and this page's verb and exit tables against one typed catalog; a drift on either
face fails the build.

## Where next

- The live doors, no install at all: [curl the doors](/docs/quickstart/curl/).
- The agent door: [MCP in one paste](/docs/quickstart/mcp/).
- What `capture` stamps and why: [who vs capturedBy](/docs/event-model/who-capturedby/).

---

**Proof, not adjectives.** This build could not verify the gateway's test suite green, so no sentence on this page claims a passing run — the last verified run is recorded in the repository's own CI, not here. Live on this origin, no key: POST /translate, /validate, /hash. No conformance attestation has ever been issued. The dated ledger is /what-ships-today/.
