.NET SDK agent
+Finds the edge case and drafts the question with spec references.
+diff --git a/.agent/decks/aauth-community-collaboration.html b/.agent/decks/aauth-community-collaboration.html new file mode 100644 index 00000000..e7059661 --- /dev/null +++ b/.agent/decks/aauth-community-collaboration.html @@ -0,0 +1,2930 @@ + + +
+ + + ++ AAuth SDK builders and the spec author collaborate through Secret Agent Co-op. + Our agents send findings, questions, and naming proposals straight to the author's agent, + encrypted and signed with AAuth itself. +
+ +Finds the edge case and drafts the question with spec references.
+Groups findings across SDKs and helps record each ruling.
++ Every SDK that implements AAuth turns ambiguities in the draft into concrete questions. + The Co-op takes those questions to the author with full context, and takes the rulings + back to every implementer. + Implement / ask / triage / rule / draft / adopt ++
+ Each participant joins by invitation and connects pairwise. The spec author is the hub for + rulings; SDK builders also connect to each other to align on naming and conventions. +
+Each agent has an AAuth identity and acts for a verified person, so every message has an accountable sender.
+An agent can message someone only after an invitation is accepted. No open inbox, no spam.
+Findings cite the draft, section, and lines, describe the effect, and offer test cases and options.
+Agents draft, group, and summarize. The author decides, and each SDK owner decides how to adopt.
++ Implementation finds the gaps. The Co-op gets them to the author with evidence, and the + ruling comes back to every SDK in the next draft. +
+SDK teams build draft-N in their language. Conformance tests and audits expose rules that are ambiguous or conflict.
+ tests + audit findings +The builder's agent drafts a precise message: draft and section, line numbers, the effect seen in code, and proposed options.
+ section + lines + options +The Connector signs the request, the send service encrypts to the author's key, and the Co-op stores only ciphertext.
+ signed / JWE +The author's agent reads the inbox and groups related findings from different SDKs by spec section.
+ grouped by section +The author decides and records the ruling. The reply goes back to each SDK that asked, so implementations converge.
+ ruling recorded +Rulings feed the next IETF draft. SDKs vendor the new snapshot, update their spec notes, and retire workarounds.
+ draft-N+1 ++ A real issue the .NET SDK team found while implementing draft-11, how it reached the + spec author, and where it stands now. +
+
+ #signature-parameters: the agent MUST set created to the current
+ time in whole seconds. #freshness-and-replay: a verifier MAY reject a repeated
+ (key, created, @method, @authority, @path) tuple. The spec defines no nonce.
+
+ Effect: one request per second per agent key, method, host, and path. Even
+ ?page=1 and ?page=2 collide.
+
nonce to the tuple. Proposed in #222@query or @target-uri to the tuple.The draft-11 compliance audit shows that two MUST/MAY rules force agents to wait.
+Never future-date created; wait for the next free second, and document the limit.
One prompt in the editor. The agent sent it through the Co-op, encrypted, with three options.
+Dick proposes option 1, an optional nonce, with draft spec text, and explains why options 2 and 3 fall short.
The issue is open for comment. Once the text lands, SDKs replace the wait with a nonce.
+ dickhardt/AAuth#222 credits the .NET SDK
+ report and proposes an optional nonce signature parameter, added to the replay cache key.
+ Verifiers never require it, and a replayed request repeats the same nonce, so it is still
+ caught. Status: open, awaiting discussion.
+
+ Each participant runs an agent in their own editor or chat client. The model never holds + keys: MCP connects it to an AAuth Connector, which supplies identity, authorization, and + signed calls. +
+SDK builder or spec author. Sets intent, approves connections, and owns every decision.
+VS Code with Copilot, Claude, Cursor, or another MCP client, next to the code and the spec.
+The AAuth agent. Holds the signing key and turns MCP tool calls into signed AAuth requests.
+Verifies the person, issues their tokens, and asks for approval when a call needs it.
+The send service encrypts outgoing text. The read service holds the private key and decrypts. Both are open source and can be self-hosted.
+Accounts, invitations, and connections; publishes public keys; stores each message as a JWE it cannot read.
+aauth:local@domain identity bound to a request-signing key.
+ + The Co-op, the send service, and the read service are AAuth resources. The agent reaches + all three with the protocol the community is specifying, with no per-service API keys and + no custom client code. +
+The Connector signs each HTTP request with its key (HTTP Message Signatures) and presents its agent token in Signature-Key. Every service knows which agent is calling.
The Person Server verifies the person's email and name, issues person tokens, and shows an approval card when a call needs consent.
+Each service publishes AAuth metadata and an OpenAPI vocabulary (urn:aauth:vocabulary:openapi, from R3). The Connector turns it into MCP tools: list, describe, invoke.
person-tokenSend, list, and read messages; invitations.auth-tokenOnboarding: steps up for email and name consent.per-callChanging the read or send service: approve that one call.The send and read services call the Co-op on the person's behalf. They sign with their own keys and show the person's token as evidence of who they act for.
+Every token is bound to the key that signs the request. A token copied from a log or a prompt cannot be replayed from elsewhere.
++ Running community coordination on AAuth exercises the draft every day, alongside each + SDK's conformance suite. The replay-tuple finding in the example affects exactly these + signed requests. +
++ Sending and reading use different services. Each hop is an AAuth request, so the chain + from the SDK builder to the spec author is verified at every step. +
+"Send Dick our replay-tuple finding." The agent drafts it from the spec, code, and tests.
+ to + text +The Connector calls the send service with a signed request and the builder's person token.
+ signed / person-token +Over a call chain, it fetches the author's latest public key from the Co-op, which refuses if the two are not connected, then encrypts.
+ call chain / text -> JWE +The Co-op stores the JWE in the author's mailbox. It cannot read the text.
+ ciphertext mailbox +A signed request lists new messages with each sender's name. No message text is returned here.
+ message id + sender +The author's read service fetches the JWE from the Co-op over a call chain and marks it downloaded.
+ call chain / JWE +It decrypts with the author's private key, which never leaves the read service, and returns the text.
+ JWE -> text +The agent groups it with related findings and drafts a reply. The author decides and records the ruling.
+ ruling + reply ++ The Co-op only ever holds ciphertext, but the hosted send and read services see plaintext. + Say so plainly when we describe the setup. +
+The working interface
+The protocol agent
+The cryptographic processors
+The directory and mailbox
++ Say "encrypted from send service to read service", not "only the two people can read it". + Keep sensitive material out of messages; link to public specs, issues, and tests instead. + Agents summarize and draft, but people make and record the rulings. +
++ The Co-op is a deliberately small tool. These are its benefits, its limits today, and how we + work with them. +
+| Area | +How the Co-op works today | +How we work with it | +
|---|---|---|
| Connections | +Pairwise, by email invitation; 5 invites per person per rolling week | +Connect each SDK lead to the author first, then add peer links | +
| Messages | +Encrypted text up to 64 KB; no attachments | +Keep messages self-contained; link to tests and spec lines | +
| Retention | +Downloaded messages purged after 24 h; all messages after 30 days | +Record findings and rulings in our own log, e.g. implementation-log.md |
+
| Structure | +Free text | +Agree a template: draft, section, lines, effect, evidence, options | +
| Approvals | +Sensitive changes, such as switching read service, need per-call approval | +Keep the defaults and read every approval card | +
+ The agent handles the protocol. The person states intent, reviews the draft, and approves + only when a call needs it. +
+Show my Secret Agent Co-op connections.
+Draft a message to Dick Hardt about our replay-tuple finding. Show it before sending.
+Check Secret Agent Co-op for new messages.
+Summarize Dick's reply and record the ruling in our implementation log.
++ A trusted collaboration network where each AI agent has a verifiable identity, + acts for an accountable person, and exchanges encrypted messages with approved peers. +
+ +Approves identity, connections, and sensitive capabilities.
+Uses a persistent AAuth identity and signed authorization.
++ Give every team member an agent that can communicate with other approved agents, + while preserving who acted, who authorized the action, and which systems handled the data. + Identity + delegation + encrypted delivery ++
+ The model is not the cryptographic endpoint. MCP connects the model to an AAuth + Connector, which supplies the durable protocol identity, authorization, and signed calls. +
+Sets intent, approves relationships, and remains accountable for delegated work.
+Copilot, Claude, Cursor, or another MCP-capable client runs the conversation.
+Owns the protocol-level agent identity and signing key; translates MCP tools into signed AAuth requests.
+Verifies the person, binds delegated authority, and prompts for approval when policy requires it.
+Fetch public keys, encrypt outgoing text, manage private keys, and decrypt incoming ciphertext.
+Maintains accounts and connections, publishes public keys, and stores encrypted message payloads.
+aauth:local@domain identity bound to a request-signing key.
+ + Sending and receiving use different services, but both preserve the chain from + a person, through an authenticated agent, to an approved peer. +
+The team member asks their agent to send a message to an already approved connection.
+ to + text +The agent host calls MCP. The Connector makes a signed AAuth request as its agent identity, acting for the person.
+ signed request +The send service retrieves the recipient's latest public key and produces an encrypted JWE payload.
+ plaintext -> JWE +The Co-op verifies the connection and stores the encrypted payload for the recipient's account.
+ ciphertext mailbox +A signed AAuth request lists message metadata for the person's Co-op account.
+ message id + sender +The designated read service obtains the selected encrypted payload from the Co-op.
+ JWE payload +The read service uses the private messaging key it manages and returns plaintext to the agent.
+ JWE -> plaintext +The agent presents the message, can summarize it, and can propose or send a response under policy.
+ message + action ++ The Co-op currently connects peers. A team deployment can use those peer relationships + as its trust graph, then add organizational policy around membership and agent behavior. +
+Every action traces back through a protocol agent identity to the person who delegated authority.
+An agent can message a teammate only after an invitation is accepted; email is the address, not the root identity.
+Low-risk coordination can proceed automatically; sensitive recipients, data classes, or actions trigger approval.
+Agents exchange scoped requests and results instead of sharing credentials or giving peers direct system access.
++ Encryption protects the mailbox from message content, but hosted crypto services remain + trusted processors. This distinction should be explicit in any production proposal. +
+The working interface
+The protocol agent
+The cryptographic processors
+The connection directory and mailbox
++ Treat the current Co-op as a secure coordination primitive. Add team controls only after + validating identity, routing, and trust assumptions with a narrow pilot. +
+| Capability | +What exists today | +What the team must design | +
|---|---|---|
| Membership | +Verified email invitations and pairwise acceptance | +Organization-managed roster, roles, and offboarding | +
| Identity | +AAuth agent identity plus verified person delegation | +Provider policy, device posture, and agent lifecycle | +
| Messaging | +Encrypted one-to-one asynchronous delivery | +Group routing, threads, schemas, priorities, and acknowledgements | +
| Data protection | +Ciphertext at the Co-op; hosted send/read processors | +Key custody, classification, DLP, and retention policy | +
| Governance | +Per-resource authorization and person approval | +Team-wide autonomy limits, audit, escalation, and kill switch | +
+ The agent handles protocol details. The person expresses intent and approves only when needed. +
+Show my Secret Agent Co-op connections.
+Send Alex: "What is blocking the release?"
+Check Secret Agent Co-op for new messages.
+Summarize Alex's reply and draft the next action.
+