guide to agentprivacy
Browse collections
โœจVisualise
Connect with Star
Your VTA, your chosen perspective

The planned connection uses your VTA and the Trust Spanning Protocol to carry a scoped exchange for you or your agent. You choose what is presented; the receiving service checks the request before a view is shared.

This guide has no VTA connection adapter yet. Opening Star does not connect an identity or send a key.

Open Star โ†— ยท Inspect your City Key โ†—
guide / DTG / Understanding Grant

Understanding โ€” Grant

PROPOSED โ€” not yet upstreamed. Built to the ToIP spec.meta.schema.json for the dtgwg-trust-tasks-tf registry; the slug below is proposed to that namespace, not registry-accepted. The PR is pending; the registry's decision governs.

Proposed slug: understanding/grant ยท version 0.1 ยท status draft

A sealed joining party requests scoped access; the host's broker releases a delegated, expiring grant โ€” the underlying credential never leaves the broker, and asking for it is a named refusal.

Abstract

The Understanding โ€” Grant Trust Task converts a sealed agreement into
working access โ€” through a broker, never by credential hand-over. The host
side holds its credentials (a session, a write token, an API key) in a broker;
a sealed joining party requests scope; the broker mints a delegated grant:
host-scoped, expiring, attributable to the grantee, and revocable without
rotating the underlying credential.

The boundary is the specification's reason to exist: the underlying credential
never leaves the broker, and a request for it is a named refusal
(rawCredentialRequested), not a policy choice. This is the same custody
instinct as vault/proxy-login โ€”
exercise a credential without releasing it โ€” surfaced at the moment a
trust ceremony first grants access, where the temptation to "just share the
key" is strongest.

Status of this Document

This is a draft Trust Task specification per SPEC.md ยง5.3; the schema MAY change without notice. Feedback via the issue tracker.

Conformance

RFC2119(https://www.rfc-editor.org/rfc/rfc2119) and RFC8174(https://www.rfc-editor.org/rfc/rfc8174) key-word conventions apply.

A conforming producer (the joining party) MUST emit a Trust Task document whose type is https://trusttasks.org/spec/understanding/grant/0.1, carrying a verifiable proof from the party that sealed the agreement, and request scope within what the seal covers.

A conforming consumer (the host broker) MUST:

  1. Verify the proof against the sealed agreement's joining party; refuse an unknown or unsealed agreement with grantWithoutSeal.
  2. Refuse any request shaped to obtain the underlying credential with rawCredentialRequested โ€” including requests for unscoped grants, non-expiring grants, or the broker's own verification material.
  3. Bound every grant: explicit host scope, explicit expiry, attributable to this grantee, and revocable at the broker without rotating the underlying credential.
  4. Record every release and every use it mediates, so grant activity is auditable per grantee.

Payload

payload.agreementId (REQUIRED) โ€” the sealed agreement this grant draws on.
payload.scope (REQUIRED) โ€” the hosts and actions requested.
payload.validFor (OPTIONAL) โ€” requested duration; the broker MAY grant less, never more.
payload.ext โ€” extension slot per SPEC.md ยง4.5.1.

Request

{
  "id": "urn:uuid:39f24d52-6c70-4f2e-e091-809ab2c3d4e5",
  "type": "https://trusttasks.org/spec/understanding/grant/0.1",
  "issuer": "did:key:z6MkJoiningPartyExample",
  "recipient": "did:key:z6MkHostExample",
  "issuedAt": "2026-07-18T17:00:00Z",
  "payload": {
    "agreementId": "seal-17d02b30",
    "scope": {
      "hosts": ["workshop.host.example.com"],
      "actions": ["read", "contribute"]
    },
    "validFor": "PT12H"
  },
  "proof": {
    "type": "DataIntegrityProof",
    "cryptosuite": "eddsa-jcs-2022",
    "created": "2026-07-18T17:00:00Z",
    "verificationMethod": "did:key:z6MkJoiningPartyExample#z6MkJoiningPartyExample",
    "proofPurpose": "assertionMethod",
    "proofValue": "z3FXQmV6ExampleProofValueForUnderstandingGrant"
  }
}

Response

{
  "id": "urn:uuid:4a035e63-7d81-4a3f-f1a2-9ab2c3d4e5f6",
  "type": "https://trusttasks.org/spec/understanding/grant/0.1#response",
  "issuer": "did:key:z6MkHostExample",
  "recipient": "did:key:z6MkJoiningPartyExample",
  "threadId": "urn:uuid:39f24d52-6c70-4f2e-e091-809ab2c3d4e5",
  "issuedAt": "2026-07-18T17:00:02Z",
  "payload": {
    "grantRef": "grant-39f24d52",
    "material": "dg1.eyJhbGciOiJFZERTQSJ9.ExampleDelegatedGrantTokenNotTheUnderlyingCredential",
    "scope": {
      "hosts": ["workshop.host.example.com"],
      "actions": ["read", "contribute"]
    },
    "expiresAt": "2026-07-19T05:00:00Z"
  },
  "proof": {
    "type": "DataIntegrityProof",
    "cryptosuite": "eddsa-jcs-2022",
    "created": "2026-07-18T17:00:02Z",
    "verificationMethod": "did:key:z6MkHostExample#z6MkHostExample",
    "proofPurpose": "assertionMethod",
    "proofValue": "z58aKqExampleProofValueForUnderstandingGrantResponse"
  }
}

Security & Privacy

The response is discloses: secret: the grant material is confidential to the
grantee and MUST travel only over a confidential, mutually-authenticated
binding. The custody boundary bounds the blast radius โ€” a leaked grant exposes
its scope until expiry or withdrawal, never the underlying credential; a
compromised joiner is contained by the same line. The broker's release-and-use
record makes grant activity attributable per grantee, which is a disclosure the
joiner accepted at the seal: mediated access is visible access. Brokers SHOULD
keep grant lifetimes short and let renewal be cheap โ€” a short leash re-walked
beats a long one forgotten.

Assets

Source: specs/understanding/grant/0.1/ โ€” spec.md + payload.schema.json

๐Ÿ“Ž understanding-grantpayload.schema.jsonspec.md

upstream: ~/dtgwg-trust-tasks-tf-mage (untracked contribution lane; upstream registry: trustoverip/dtgwg-trust-tasks-tf) ยท author: Mitchell Travers ยท the git source wins on any disagreement ยท (โš”๏ธโŠฅโฟปโŠฅ๐Ÿง™)๐Ÿ˜Š

โ† The Trust Tasks ยท Welcome Visitors