This repo is the canonical implementation of the CommandLayer protocol. Every function here is imported by other repos — it is not an app, it is a spec in code.
Before adding or changing anything:
- Read
PROTOCOL.mdin commandlayer-org - Confirm the change is consistent with the protocol specification
- If the change would affect signing, verification, or canonicalization — it is a breaking change requiring a protocol version bump
git clone https://github.com/commandlayer/runtime-core
cd runtime-core
npm install
npm run build
npm test- No new crypto implementations — everything signs using
signCanonicalincrypto.ts - No new canonicalize functions — everything canonicalizes using
canonicalizeincanonicalize.ts - No new ENS parsers — everything resolves using
resolveSignerFromENSinens.ts - Test vectors must stay passing —
CANONICAL_TEST_VECTORSare imported by other repos; breaking them is an ecosystem-wide breakage - Proof field names are locked —
alg,kid,signer_id,canonical,signature. Notsignature_alg,key_id,signer. The schema enforces this.
- All PRs require CI passing (build + test + type check)
- Breaking changes require a CHANGELOG entry and a version bump
- PRs that change
crypto.tsorcanonicalize.tsrequire sign-off from a maintainer
Publishing to npm is done from CI after tagging a release.
Do not npm publish manually.