| Internet-Draft | alter URI Scheme | August 2026 |
| Morrison | Expires 10 February 2027 | [Page] |
This document defines the alter URI scheme as a dispatchable
reference syntax for ~handle identity references published under
the DNS substrate defined in [MCPDNS]. An alter: URI binds a
textual ~handle reference to a resolution and verification
procedure that retrieves the handle's envelope from the publishing
zone, validates the envelope's signature chain, and dispatches the
result to an operating-system URI handler. The reference may be
scoped to an organisation, narrowed to a named facet of the
identity, and addressed to a typed action surface. The scheme is the addressing form of
the ~handle@org:facet/action reference; its resolution semantics
are those of [MCPDNS], reused without modification.¶
The scheme is provider-neutral, introduces no new cryptographic
primitive, and reuses the resolution and verification procedures
of [MCPDNS] without modification. The principal contribution is a
single, self-verifying dispatch surface for handle-typed references:
clicking, typing, or scanning an alter: URI yields a verified
handle resolution rather than a free-text string or an
unauthenticated fetch, and where an action is addressed it yields a
verify-before-side-effect dispatch. This document requests provisional
registration of the alter scheme with IANA per [RFC7595]
Section 3.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 10 February 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.¶
The ~handle identity primitive defined in [MCPDNS] binds a textual
identifier (Sovereign, Bot, or Instrument tier per [IDCOMMITS]) to
a cryptographic principal published under an _alter. DNS TXT
record. A handle reference written in running text, such as
~alice, ~example.com or ~cc-example-model, is interpretable to
a human reader but is not, by itself, a dispatchable reference for a
machine.¶
This document defines the alter URI scheme as the dispatchable
form of a handle reference. An alter: URI binds a ~handle to
the resolution procedure of [MCPDNS] and to a URI handler registered
with the host operating system. It carries three optional
addressing components, an organisational scope, a facet, and an
action-path. Once a handler is installed, clicking alter:~alice in a
browser, chat window, or terminal yields a verified envelope; the
handler decides what to do with the resulting envelope (open an
inbox, show a profile card, initiate an Accord ceremony per
[IDACCORD], dispatch to a per-surface MCP tool).¶
The scheme's addressing model is deliberately fuller than a bare
handle. A reference frequently needs to name not just who but
which organisational context, which facet of that identity, and
which action surface under it. One example is "the security
facet of ~blake at acme, verify action". The alter: scheme carries all
four in a single dispatchable token, alter:~blake@acme:security/verify,
so that the whole reference travels as one clickable, scannable,
copy-pasteable string. Every component beyond the handle is
OPTIONAL; a bare alter:~alice remains valid.¶
This document specifies the addressing syntax, the dispatch and verification obligations of a handler, and the operating-system registration entries a handler installs. It does NOT specify the resolution semantics of any facet or action surface: what a given facet or action means, and how a resolver computes its answer, are owned by the specification that defines that surface and are out of scope here. This document is the standalone registration request submitted to IANA per [RFC7595] Section 3, separating the administrative ceremony of scheme registration from the substantive specification of the DNS substrate.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
~handleA textual identity reference defined in [MCPDNS] and tiered in [IDCOMMITS]. Handles begin with the tilde character U+007E.¶
The signed identity record retrieved from the _alter.<domain>
DNS TXT record of the publishing zone, as specified in [MCPDNS]
Section 5.¶
An optional DNS-named organisation qualifying a handle, written
after an @ separator, e.g. ~blake@acme.example. The scope
identifies the publishing zone under which the handle's envelope
is resolved; a handle with no scope resolves under its own zone.¶
An optional named aspect of an identity, written after a :
separator, e.g. :security. A facet narrows a reference to one
addressable face of the identity. What a facet denotes, and how a
resolver answers it, are defined by the surface specification that
owns the facet, not by this document.¶
An optional typed surface addressed under a handle (and facet, if
present), expressed as the path component of the URI, e.g.
verify, decisions/123, seat/architect. An action-path names
an operation or resource surface; its semantics are owned by the
specification that defines it.¶
An operating-system component registered to receive alter:
URIs and dispatch to a resolver. Examples include xdg-mime
associations [XDG-MIME] on Linux, LaunchServices URL handlers
[LSHANDLERS] on macOS, registry entries under HKCR on Windows,
intent filters on Android, and universal links on iOS.¶
alter¶
Provisional. This document requests provisional registration of the
alter scheme per [RFC7595] Section 3. A permanent registration
per [RFC7595] Section 7 is the intended upgrade path once the scheme
specification stabilises; this document records that intent without
asserting a permanent registration that IANA has not yet made.¶
The alter URI scheme's generic syntax conforms to [RFC3986]:¶
alter-URI = "alter:" handle-ref [ "@" org-scope ]
[ ":" facet ] [ "/" action-path ]
[ "?" query ] [ "#" fragment ]
handle-ref = "~" handle-name
handle-name = sovereign-name / bot-name / instrument-name
sovereign-name
= ALPHA *( ALPHA / DIGIT / "-" / "." )
; Per [IDCOMMITS] Section 4.
bot-name = ALPHA *( ALPHA / DIGIT / "-" / "." ) ".bot"
instrument-name
= "cc-" 1*( ALPHA / DIGIT / "-" / "." )
; Per [IDCOMMITS] Section 4.
org-scope = domain-label *( "." domain-label )
; the organisational zone qualifying the handle
domain-label = ALPHA / ( ALPHA *( ALPHA / DIGIT / "-" )
( ALPHA / DIGIT ) )
facet = facet-label *( "." facet-label )
; a named aspect of the identity surface
facet-label = ALPHA *( ALPHA / DIGIT / "-" )
action-path = action-segment *( "/" action-segment )
action-segment
= 1*( unreserved / pct-encoded / sub-delims / ":" / "@" )
query = *( pchar / "/" / "?" )
fragment = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
¶
The handle-name ABNF mirrors the tier productions of [IDCOMMITS]
without restating tier-level invariants; an alter: URI carries a
single handle and the parser determines the tier from the lexical
form.¶
The four identity-bearing components are parsed left to right and
each is bounded by its introducing delimiter: the handle follows the
scheme separator, an @ introduces the organisational scope, the
first : after the handle (or scope) introduces the facet, and the
first / introduces the action-path. A : appearing after the
first / is a literal action-segment character, not a facet
delimiter, because the facet, if present, is fully consumed before
any /. Every component after handle-ref is OPTIONAL and any
combination MAY be omitted.¶
The host-component slot of a generic URI is not used. All
identity-bearing material is carried in the path-like productions
immediately after the scheme separator; the @ in org-scope is a
component delimiter within that material and MUST NOT be read as the
userinfo @ of an [RFC3986] authority.¶
Operations on an alter: URI are retrieval-and-verify by default.
Submitting an alter: URI to a handler MUST perform the resolution
and verification procedure specified in [MCPDNS] Section 8 before
any content, directive, or action derived from the resulting
envelope is acted upon. Specifically, the handler MUST:¶
Parse the URI per the ABNF above, isolating the handle, and any organisational scope, facet, and action-path.¶
Resolve ~handle (under org-scope if present) to a publishing
zone via the procedures of [MCPDNS] Section 6.¶
Retrieve and DNSSEC-validate [RFC4033] the _alter.<zone> TXT
record.¶
Verify the envelope signature against the published Ed25519 key per [MCPDNS] Section 8.¶
If a facet or action-path is present, dispatch the request to the resolver indicated by the envelope, carrying the facet and action-path verbatim.¶
The facet and action-path are ADDRESSING information only. This document assigns them no resolution meaning: it does not define what any facet denotes, how a resolver answers an action, or what value a dereference yields. Those semantics are owned entirely by the surface specification that defines the facet or action, and are out of scope here. A conforming handler treats the facet and action-path as opaque, verified-then-forwarded tokens.¶
Where an action-path names an operation with a side effect, the
verification of Step 4 is a precondition to that side effect:
handlers MUST NOT perform, initiate, or authorise any action
addressed by an alter: URI until the envelope has been retrieved
and verified. Handlers SHOULD treat any verification failure as a
hard error and SHOULD NOT fall back to unverified retrieval or to
executing the addressed action.¶
alter URIs are ASCII per [RFC3986]; characters outside the
unreserved set MUST be percent-encoded. The IRI form per [RFC3987]
is supported for action-paths that contain non-ASCII characters;
the handle-ref, org-scope, and facet productions MUST be ASCII
to align with the DNS label production of [MCPDNS]. The tilde
character U+007E is reserved as the handle prefix and is treated as
a literal, not as an unreserved-character escape.¶
A reference substrate operated by the present author uses alter:
URIs to dispatch handle references between operating-system
handlers, an alter command-line interface, chat clients, and
agent runtimes that consume the DNS substrate of [MCPDNS]. Any
agent runtime, client, or operating-system component that resolves
~handle references can register a handler for the scheme.¶
Operating-system URI handler registries are well-defined for each target platform:¶
macOS: CFBundleURLSchemes entries in an application's
Info.plist [LSHANDLERS].¶
Windows: HKEY_CLASSES_ROOT\alter with URL Protocol and
shell\open\command subkeys.¶
Android: <intent-filter> with <data android:scheme="alter">.¶
iOS: associated-domains and universal-link entitlement entries.¶
Where multiple applications register a handler for alter:, the
operating system's default-application policy applies. No special
arbitration mechanism is defined by this document.¶
Browsers MAY treat alter: URIs as opaque external schemes and
delegate dispatch to the operating-system handler. Clients SHOULD
NOT attempt direct retrieval of alter: URIs over HTTP; the
resolution procedure of [MCPDNS] does not run over HTTP.¶
The alter scheme does not displace any existing scheme and does
not contradict the path-handling rules of [RFC3986]. It coexists
with https:, mailto:, and other schemes that an operating
system may dispatch on the same surface.¶
See Section 6 below.¶
The following non-normative subsections sketch the platform- specific registration entries that a conforming handler installs. Implementations are responsible for the platform-specific syntax; this document does not prescribe handler binaries or invocation shapes.¶
A .desktop file with MimeType=x-scheme-handler/alter; and a
Exec= line invoking the platform resolver. The alter-cli
reference implementation registers itself as the default handler
on first run.¶
A CFBundleURLTypes entry with CFBundleURLSchemes=("alter") and
a CFBundleURLName of Identity Handle Reference in the
application's Info.plist.¶
The following non-normative examples illustrate the addressing syntax. Facet and action semantics are out of scope; each surface is defined by the specification that owns it.¶
alter:~alice alter:~example.com/decisions/123 alter:~bob/inbox alter:~blake@acme.example alter:~blake@acme.example:security alter:~blake@acme.example:security/verify alter:~example.com:seat/architect alter:~cc-example-model/sessions/last¶
The first form addresses an envelope; the second and third address action surfaces under an envelope; the fourth scopes a handle to an organisation; the fifth adds a facet; the sixth adds a typed action under that facet; the seventh addresses a facet-scoped surface; the eighth illustrates Instrument-tier addressing.¶
The verification mandate of [MCPDNS] Section 8 is the security
floor of this scheme. Handlers that accept an alter: URI without
verifying the envelope's signature against the DNSSEC-validated
publishing record violate the scheme's invariants. An attacker
who induces a handler to perform unverified retrieval can
substitute an envelope. Implementations MUST treat envelope
verification as a precondition to any side effect (writing files,
sending requests, dispatching a sub-handler, or performing an
addressed action).¶
Because an alter: URI MAY address a typed action, a handler that
acts on the action-path before verifying the envelope exposes a
confused-deputy surface: an attacker-supplied URI could name a
privileged action under a handle the attacker does not control.
The Step-4 verification MUST complete, binding the resolved envelope
to the addressed handle, before any action-path is dispatched. A
handler MUST NOT infer authority from the URI's textual form alone.¶
The operating-system's default-application policy is the
trust-anchor for which binary handles alter: URIs. Users
configuring the default handler MUST treat handler selection with
the same caution they apply to default browsers or default mail
clients. A malicious handler could parse an alter: URI, present
a forged envelope to the user, and act on attacker-supplied data
without performing verification. Implementations SHOULD
cross-check the handler binary's signature against the publishing
substrate's expected handler manifest where such a manifest is
defined by a future specification.¶
An organisational scope, facet, or action-path included in an
alter: URI is part of the URI's textual form and may be logged by
the operating-system handler registry, browser history, terminal
scrollback, and chat-client indexers. Surface owners that consider
a facet or action identifier (e.g. a decision identifier, a thread
identifier) sensitive SHOULD provide indirected forms (opaque
tokens, ephemeral identifiers) and SHOULD NOT recommend embedding
sensitive identifiers in the URI.¶
A URI of the form alter://~alice (with the authority-component
double-slash) is malformed and MUST be rejected. Implementations
MUST NOT silently coerce alter://~handle to alter:~handle;
divergent parsers risk confusing a third-party authority component
with a handle reference. Similarly, the @ of an org-scope MUST
NOT be parsed as an [RFC3986] userinfo delimiter; there is no
authority component in an alter: URI.¶
When an alter: URI is presented in IRI form per [RFC3987] with
non-ASCII characters in the action-path, implementations MUST
apply the conversion procedure of [RFC3987] Section 3.1 before
performing the resolution procedure. Non-ASCII characters in the
handle-ref, org-scope, or facet MUST be rejected; those
productions are restricted to the ASCII forms above.¶
This document requests that IANA register the alter URI scheme
in the Uniform Resource Identifier (URI) Schemes registry per
[RFC7595] Section 3 (provisional registration), recording the
provisional registration cross-referenced under [MCPDNS] Section 11
with the following body:¶
URI scheme name: alter¶
Status: Provisional¶
URI scheme syntax: As specified in Section 3.3 above.¶
URI scheme semantics: As specified in Section 3.4 above.¶
Encoding considerations: As specified in Section 3.5 above.¶
Applications/protocols that use this URI scheme name: As specified in Section 3.6 above.¶
Interoperability considerations: As specified in Section 3.7 above.¶
Security considerations: As specified in Section 6 above.¶
Contact: Blake Morrison blake@truealter.com, Alter Meridian Pty Ltd.¶
Author/Change controller: Blake Morrison, Alter Meridian Pty Ltd. Change control transfers to the IETF if this scheme is later specified by an IETF Stream document.¶
A permanent registration per [RFC7595] Section 7 is the intended upgrade path once the scheme specification stabilises.¶
The scheme builds on the ~handle identity primitive defined in
[MCPDNS] and the tier taxonomy of [IDCOMMITS]. The lexical choice
of tilde for the handle prefix is informed by [POSIX-TILDE] and by
the long-standing shell convention that the tilde denotes a named
principal.¶
Broaden the addressing syntax to the full ~handle@org:facet/action
reference: add the org-scope, facet, and action-path
productions and their left-to-right parsing rules. Every added
component is OPTIONAL; a bare alter:~handle is unchanged.¶
State explicitly that facet and action-path are addressing information only, with resolution semantics owned by the surface specification and out of scope here.¶
Add an Action-Address Confusion security consideration and extend the verification mandate to cover addressed actions.¶
Correct the registration Status to Provisional, matching the registration this document actually requests; record permanent registration as the intended upgrade path rather than asserting it.¶
Editorial and reference alignment.¶