Skip to main content

PARC — Portable Agent Reputation Credential

A verifiable, recomputable reputation Verifiable Credential consumed at chapter admission

Agent reputation today is siloed: each platform (or chapter) holds its own scores, and an agent that moves to a new trust domain starts from zero. PARC makes reputation portable. It wraps a Verifiable Receipts Profile (VRP) Receipts Ledger's commitment + scores — a behavioral_merkle_root plus the reproducible, corroborated nanda-rep/0.2 reputation_score / validity_rate / corroboration_rate — as a W3C Verifiable Credential, signed by the originating chapter or a credentialed auditor. A new chapter consumes it at admission: it verifies the signature and recomputes the ledger itself, so it never has to trust the issuing chapter's live server.

The one thing PARC owns: the credential envelope + the admission gate. The commitment and scoring are VRP's; PARC makes them carriable and checkable across trust domains.

See it live

▶︎ demoparc.stellarminds.ai — an interactive viewer that re-verifies every signature and Merkle proof in your browser (no server trusted). Switch between the Admission and Three-city journey tabs; click any credential, agent, or receipt to inspect it.

PARC viewer walkthrough: the three-city journey, a Merkle inclusion proof, and a stop's signed credential

A full picture-by-picture tour is in docs/WALKTHROUGH.md.

What this package secures (parc/0.1)

  • Verifiable. A reputation credential is a W3C VC with an Ed25519 proof over the JCS-canonical credential — the same signing path as Agency Receipt Protocol (ARP) receipts and Delegated Authority Tokens (DATs).
  • Recomputable, not asserted. The admission gate recomputes the behavioral_merkle_root and the nanda-rep/0.2 scores from the presented ledger and rejects any divergence — a signed-but-inflated score cannot pass.
  • Collusion-resistant. The gate admits only on the corroborated nanda-rep/0.2 score: a credential carrying the un-corroborated nanda-rep/0.1 score is rejected, and a wash-trading ring's self-dealt receipts are severed to a score of ~0, so it fails the threshold.
  • Adversarially tested. Hostile-path tests for: tampered credential, untrusted issuer, tampered ledger (root mismatch), issuer-inflated-and-re-signed score (score mismatch), 0.1-facet rejection, un-corroborated/severed score, below-threshold, stale, revoked, wrong-mode, and refs-only (non-recomputable).

A valid signature is not admission — the gate trusts the issuer's key, then recomputes the score and applies its own threshold, so a genuinely-signed wash credential is still rejected:

The passport drawer: signature verified (green) but admission rejected (red) — score 0 below threshold

Two admission modes

  • Inline (admit) — the credential carries the subject's own receipts; the gate recomputes them fully offline. Catches self-dealing, but a single-subject graph is a star, so it cannot show an N-party collusion ring.
  • Pointer (admit_over_published_ledger) — the credential names a published community ledger (credentialSubject.ledger_uri); the gate fetches it, checks it against the signed root, and re-runs the collusion severance itself, deriving the subject's severed score over the full graph. This catches N-party Sybil rings — at the cost of fetching the issuer's whole ledger (privacy + availability), and a residual that moves to ledger completeness. See examples/published_ledger_admission.py and THREATMODEL.md.

One passport, three worlds

A single agent earns reputation transacting across a community, a marketplace, and an enterprise, carrying one PARC. Its corroborated score compounds as it goes — and that accumulated reputation is what opens the high-bar enterprise gate (shown cold, the same agent is rejected). Transactions, portability, and security in one picture:

The A→B→C journey: scores compound 60→130→200 against rising admission bars, all admitted

And when the ledger grows too large to hand over, the agent reveals only the receipts worth showing plus a Merkle inclusion proof for each — confirmed under the signed root without exposing the rest:

Selective disclosure: 3 of 40 receipts revealed, each with its Merkle inclusion proof verifying to the signed root

Runnable: examples/three_city_economy.py.

What this package does NOT (yet) do

  • Run the auditor. PARC verifies an auditor's attestation; who computes and signs it is deployment policy — the consumer's responsibility.
  • Catch a curated ledger. Pointer mode re-severs only what the issuer published; a colluding issuer that omits the honest anchor defeats it. Closing that needs an independent receipt source (cross-attestation), not the published ledger.
  • Unlinkable disclosure. Selective disclosure of which receipts happened ships today via Merkle inclusion proofs (below); an unlinkable / BBS+ variant and a zero-knowledge score proof are future properties; see SPEC.md.

Features

  • build_reputation_credential(...) / verify_credential_proof(...) — issue + verify the VC.
  • AdmissionPolicy + admit(...) — the inline chapter-admission gate (signature → trusted issuer → revocation/freshness → recompute root + scores → thresholds).
  • admit_over_published_ledger(...) + subject_severed_score(...) — the pointer-mode gate: fetch the named ledger, re-verify the root, and derive the subject's collusion-severed score over the full community graph.
  • inclusion_proof(...) + verify_inclusion(...) — selective disclosure: reveal a few receipts of a large ledger plus a Merkle inclusion proof for each, confirmed under the credential's signed root without exposing the rest.

Installation

pip install sm-parc          # depends on sm-arp>=0.2.3,<0.3 (carries sm_arp.vrp)
# working draft: pip install git+https://github.com/Sharathvc23/sm-parc.git

Quick start

from sm_arp.vrp import build_ledger
from sm_parc import build_reputation_credential, AdmissionPolicy, admit

# Issuer (chapter or auditor) builds a corroborated nanda-rep/0.2 ledger from an
# agent's receipts, then a parc/0.1 VC over it.
ledger = build_ledger(subject=agent_did, receipts=receipts, method="nanda-rep/0.2",
                      is_valid=lambda r: verify_receipt(r).ok, as_of="2026-06-07T00:00:00Z")
vc = build_reputation_credential(ledger=ledger, issuer_sk=chapter_sk,
                                 valid_from="2026-06-07T00:00:00Z",
                                 valid_until="2026-07-07T00:00:00Z")

# A new chapter admits the agent — verifies the signature AND recomputes the ledger.
policy = AdmissionPolicy(trusted_issuers={chapter_did}, min_reputation_score=50.0)
result = admit(vc, policy=policy, ledger=ledger, is_valid=lambda r: verify_receipt(r).ok)
assert result.ok  # admitted, without trusting the issuing chapter's server

See examples/mint_and_admit.py for a runnable end-to-end demo (honest corroborated agent admitted; wash-trade agent rejected).

Reference fixtures

The behavioural suite under tests/ builds ledgers + credentials with deterministic test keys and exercises every admission outcome. The suite IS the spec (see GOVERNANCE.md); placeholder keys are test-only.

Documentation

Package Role
sm-arp Agency Receipts + the VRP core (sm_arp.vrp) PARC composes
sm-conformance the signed-badge / signing infrastructure pattern

License

MIT


Built at labs.stellarminds.ai.

First published: 2026-06-07 | Last modified: 2026-06-21

Metadata

Release files for sm-parc 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sm-parc 0.2.3
File Size Uploaded Provenance Actions
sm_parc-0.2.3.tar.gz 50.9 kB With provenance Details for sm_parc-0.2.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sm-parc 0.2.3
File Interpreter ABI Platform Actions
sm_parc-0.2.3-py3-none-any.whl Python 3 none any Details for sm_parc-0.2.3-py3-none-any.whl

Total release size: 69.1 kB

Release files / sm_parc-0.2.3.tar.gz

Download URL sm_parc-0.2.3.tar.gz
Size 50.9 kB
Tags Source
SHA-256 checksum
How to use checksums
10050f9c994eee2f17b08a3b74186020a13c77d9a3099a061cc19b27e6dfe298
BLAKE2b-256 checksum
How to use checksums
9d1c3dfe5f2a385a20b7b6b89b54afa30be35907e616655b4d77391ae81469b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 8, 2026.

Transparency log

Release files / sm_parc-0.2.3-py3-none-any.whl

Download URL sm_parc-0.2.3-py3-none-any.whl
Size 18.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0e0a41c102724f833e3d83552d4b72b2a81506065e453682e94bed4abfdbeb7b
BLAKE2b-256 checksum
How to use checksums
36d4be7a719692007fbce2252a4e101543a690d11f139b86d4347aec33767128
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 8, 2026.

Transparency log

Security for sm-parc 0.2.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for sm_parc-0.2.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 8, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.3 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page