Thanks for your interest in contributing to the Agent Passport System! This project implements an open protocol for AI agent identity, trust, governance, and commerce.
- Fork the repository
- Clone your fork:
git clone https://github.com/<your-username>/agent-passport-system.git - Install dependencies:
npm install - Run the test suite:
npm test
The SDK is organized into 8 protocol layers plus 23 v2 constitutional modules. See ARCHITECTURE.md for the full layer-to-file-to-test mapping.
npm testAll 4,361 tests across 913 suites (3 skipped) must pass before submitting a PR. TypeScript strict mode must compile clean.
To see line/branch/function coverage, run:
npm run test:coverageThis uses Node's built-in --experimental-test-coverage flag, no separate
coverage tool or third-party account needed.
The TypeScript build is reproducible: given the committed lockfile, npm ci followed by npm run build produces a bit-for-bit identical dist/ tree on repeated runs. The toolchain is pinned by package-lock.json. To verify, build twice and compare:
npm ci && npm run build
find dist -type f | sort | xargs sha256sum | sha256sum
rm -rf dist && npm run build
find dist -type f | sort | xargs sha256sum | sha256sum
The two hashes must match (macOS ships shasum -a 256 instead of sha256sum). Rust components build from the committed Cargo.lock.
- TypeScript throughout
- Ed25519 signing and SHA-256 hashing via the Node standard library (
node:crypto) - Runtime dependencies are held to two:
libsodium-wrappers(encrypted messaging) anduuid. Do not add more.
- Create a feature branch from
main - Make your changes with clear, descriptive commits
- Ensure all tests pass (
npm test) andtsc --noEmitis clean - Open a pull request with a description of what you changed and why
Every external pull request is reviewed by the maintainer before merge. What review checks, in order:
- The failing test exists and fails without the change (for fixes), or tests cover the new behavior (for features).
- The change is minimal: no scope expansion, no drive-by refactors.
npm testandnpx tsc --noEmitpass.- Security-sensitive paths get line-by-line review: anything touching cryptography, canonical byte forms, signature verification, or delegation narrowing. Changes here may also require new conformance or adversarial fixtures before they are acceptable.
- Public API changes require documentation updates in the same PR.
Acceptance means all five hold. A change that is useful but out of scope is redirected, not expanded in place.
Beyond the checklist, every PR is evaluated against five questions, applied to every contributor equally:
- Identity. Is the contributor identifiable, with a real GitHub presence?
- Format. Does the change match existing patterns (module layout, naming, error handling, test density)?
- Substance. Do tests actually exercise the claimed behavior?
- Scope. Does the PR stay scoped to its stated purpose?
- Reversibility. Can the change be reverted cleanly if a downstream issue surfaces?
Substantive declines include the reason. Review comments aim to be concrete and actionable.
Open an issue on GitHub with:
- A clear title and description
- Steps to reproduce (if applicable)
- Expected vs actual behavior
- Your environment (Node.js version, OS)
If you're proposing changes to the protocol itself (new layers, modified signature schemes, governance changes), please open a discussion issue first so we can align on the design before implementation.
For a bug fix:
- A failing test that reproduces the bug (added in the existing test suite where it logically belongs)
- The minimal fix that makes the test pass without breaking other tests
- No scope expansion — fix the bug, don't refactor adjacent code in the same PR
For a feature addition:
- Issue first — get a thumbs-up on direction before sinking work into a PR
- Tests cover the new behavior at the same density as adjacent code
- No breaking changes to published API without a major version bump and migration note
- TypeScript strict mode compiles clean
- Format consistent with adjacent modules (naming, error handling, test density)
For documentation: straight PR is fine. No issue needed first.
- Tests pass —
npm testgreen, count stays at or above current level - TypeScript clean — strict mode, no new
anyin public surface - API stability — no breaking changes to published exports without a major version bump
- Format consistency — matches existing module layout, naming, error handling
- Scope discipline — PR stays focused on its stated purpose; refactors ride alongside in separate PRs
The SDK follows semantic versioning. Changes to public API surface require a major version bump with migration notes. Internal refactors can land in patch releases. Three new primitives shipping per month is normal velocity; each arrives with tests and documentation together.
- Breaking changes to published API surface without major version bump and migration documentation
- New signature algorithms in core identity primitives (Ed25519 is load-bearing). Alternative algorithms can ride alongside via extension, not replace
- Vendored dependencies or large binary artifacts without specific justification
- Named integrations woven into core module exports — integration code belongs in
INTEGRATION.md,examples/, or a sibling adapter repo - Disabling tests without a documented reason
- Maintainer: @aeoess (Tymofii Pidlisnyi)
- Review timing: maintainer-bandwidth dependent. If a PR has had no response after 5 business days, ping it — the notification may have been missed.
- CLA / DCO: no CLA. The project uses the Developer Certificate of Origin (developercertificate.org): every commit must carry a Signed-off-by line asserting you have the right to contribute it under Apache-2.0 (use
git commit -s). CI enforces this on pull requests. - Publishing: maintainers handle npm release publishing. Please do not bump version numbers in PRs. If your change requires a version bump, call that out in the PR description so we can sequence the release.
- Security issues: open a private security advisory via GitHub rather than a public issue.
- Code of Conduct: Contributor Covenant 2.1 — see
CODE_OF_CONDUCT.md.
Apache License 2.0 (see LICENSE). By contributing, you agree that your contributions will be licensed under the project's existing license.