EasyNet defines a stable URL and verification kernel for agent systems.
Core mental model:
Agent URL = resource_uriVerified Invocation = resource_uri + subject_id + tenant_id + signature
This repository is protocol-first. The priority is a deterministic, cross-language URL and verification standard.
Modern agent systems typically fail at one or more of these boundaries:
- Resource addressing is inconsistent across runtimes.
- Tenant isolation is enforced late (or inconsistently).
- Invocation authenticity cannot be verified end-to-end.
- Replay and timestamp controls are not deterministic.
EasyNet Core solves these boundaries with a small normative surface.
Core v1.0 includes:
- Subject identity grammar (
subject_id). - Canonical
easynet://resource URI grammar. - Hard tenant constraints for
pub/org/prv. - Invocation envelope + JCS canonical signing + Ed25519 verification.
- Deterministic verifier pipeline and fail-closed behavior.
- Local
Resolve(subject_id, key_id?)for key lookup.
Core v1.0 excludes:
- Remote/federated resolve service.
- Full key rotation lifecycle governance.
- Business orchestration semantics.
easynet://r/{visibility}/{subject-type}/{subject-value}/{resource-kind}/{resource-path}[@version-ref][?query]
Key points:
- Authority is fixed:
r(reserved literal for the EasyNet resource namespace). pubmust not includetenant_idin URI query.org/prvmust includetenant_idin URI query.@<major>shorthand is allowed as input and canonicalized to@<major>.0.0.- Percent-encoding is forbidden.
Normative grammar and canonicalization rules:
docs/00-foundation/core-spec-v1.md
The verifier must run checks in this order and stop at first failure:
- Envelope field validation.
- URI parse + canonical-form check.
- Tenant hard-constraint check.
- Payload hash check.
- Resolve key + signature verification.
- Deadline check.
- Runtime tenant check (
org/prvonly). - Timestamp skew check.
- Atomic nonce replay guard.
- Resource-kind policy check.
Normative source of truth for pipeline order: docs/00-foundation/core-spec-v1.md section 10.1.
TENANT_REQUIREDTENANT_MISMATCHINVALID_RESOURCE_URIPAYLOAD_HASH_MISMATCHINVALID_SIGNATURENONCE_REPLAYNONCE_STORE_UNAVAILABLESUBJECT_NOT_FOUNDKEY_ID_NOT_FOUNDDEADLINE_EXCEEDEDTIMESTAMP_SKEWUNSUPPORTED_RESOURCE_KIND
- URI parser/canonicalizer:
src/resource-uri.js - Signature canonicalization + crypto:
src/signing.js - Deterministic verifier:
src/verifier.js - Error codes:
src/errors.js - Tests:
test/
npm testFor a smooth protocol-first flow:
docs/00-foundation/core-spec-v1.mddocs/00-foundation/core-implementation-checklist.mddocs/00-foundation/nucleus-axon-dendrite-responsibility-model-v1.mdsrc/resource-uri.jssrc/verifier.jstest/resource-uri.test.jstest/verifier.test.js
Then read extensions only if needed:
docs/10-interop/docs/30-governance/docs/20-product/
- Documentation architecture:
docs/README.md - Writing and change conventions:
docs/CONVENTIONS.md - Core foundation docs:
docs/00-foundation/ - Interop profiles:
docs/10-interop/ - Product/value docs:
docs/20-product/ - Governance profiles:
docs/30-governance/ - Archive (non-baseline):
docs/90-archive/