npm ci.
Auditors should continue with the Audit guide after step 3.
Requirements
- Node.js 24.6 or later. The hybrid Ed25519 and ML-DSA-65 signatures use
node:crypto, which supports ML-DSA from 24.6. - npm, as bundled with Node.js.
- Git, and Bash for two tests that syntax check shell scripts. On Windows, Git for Windows provides it.
- Docker, only for the optional offline check in step 5.
&& between commands.
1. Install, build and test
npm run build comes first because tests import the workspace packages from their built
dist/ output; npm test refuses to run against stale output.
No .env is needed. The test setup uses the same local defaults as CI: the committed
./policies, in memory storage, and local Ed25519 keys generated for the run. Suites that
need live services (HubSpot, Supabase) skip. Expect about 2,880 passing tests and about 54
skipped.
2. Run every example
FAILED or ✗ on purpose: they show a forged, replayed or tampered request being refused.
The run ends with All Parmana examples completed successfully. and exit code 0.
To see the whole chain in one walkthrough (policy evaluation, signed authorization, envelope
verification, credential isolation, connector execution and the signed Trust Record):
npm run preflight runs everything a contributor runs before a change: typecheck, lint,
format check, the Python model check, every test, the build and every example.
3. Run the attack scenarios
To run only some scenarios, name them:
npm run evaluate -- EV-04 EV-05. The
Claims and evidence page gives the command for each claim.
The output ends with 16 of 16 attacks blocked. A scenario is BLOCKED when every test in its
files passes, FAILED when any fails, and NOT RUN when a file is missing or ran nothing. The
command exits non-zero unless all are BLOCKED.
It also writes evaluation-report.json: the commit, whether the working tree was clean, the
Node.js version, a hash of the policies, and for each scenario its result and each test file’s
SHA-256 and counts. Attach it to a review to show exactly what was run.
EV-04 covers prompt injection by its effect, not by detecting it: whatever an injected agent
sends, an action is not authorized without a signed approval from a trusted person. These are
tests of the code in the repository, run locally. They do not test a deployment’s
configuration, its key custody or its network; the Audit guide
covers those assumptions.
4. Try the hosted sandbox (optional)
A public sandbox runs the same API with demo policies and a published demo approver key. Use the Playground, or the scripts in examples/sandbox-playground/ from cURL, PowerShell, TypeScript or Python. See Live API and demos.5. Run the full stack with no internet route (optional, Docker)
6. Verify a record without Parmana
Every approved action produces a signed Execution Trust Record. It can be checked with only the record and the public keys. The quickest way is Verify a record in your browser: paste a record and a key, nothing is uploaded. For scripts, use@parmana/sign (Apache 2.0,
a separate repository) or this repository’s scripts/verify-trust-record.ts: