-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
159 lines (145 loc) · 9.45 KB
/
index.html
File metadata and controls
159 lines (145 loc) · 9.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>SAM Protocol — The Signed Envelope for Agent-Ready Merchants</title>
<meta name="description" content="SAM is the signed envelope that composes UCP, AP2, MCP, ACP, and A2A into one verifiable, time-bounded entry point. Merchant-signed. Locally enforced. Open standard." />
<meta property="og:title" content="SAM Protocol — The Signed Envelope for Agent-Ready Merchants" />
<meta property="og:description" content="Publish one signed file. Reference everything else. SAM composes UCP, AP2, MCP, ACP, and A2A into a verifiable, time-bounded entry point for AI agents." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://sam-protocol.org" />
<link rel="canonical" href="https://sam-protocol.org" />
<link rel="alternate" type="application/json" title="SAM identity document" href="/.well-known/sam.json" />
<link rel="alternate" type="text/plain" title="LLMs documentation" href="/llms.txt" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono&display=swap" rel="stylesheet">
<style>
:root { --ink:#0f172a; --muted:#475569; --line:#e2e8f0; --accent:#1F4E79; --bg:#ffffff; --soft:#f8fafc; }
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:'Inter',system-ui,sans-serif;color:var(--ink);background:var(--bg);line-height:1.6;-webkit-font-smoothing:antialiased}
.wrap{max-width:760px;margin:0 auto;padding:0 24px}
header{border-bottom:1px solid var(--line);padding:20px 0}
header .wrap{display:flex;justify-content:space-between;align-items:center}
.brand{font-weight:700;color:var(--accent);text-decoration:none;font-size:18px}
nav a{color:var(--muted);text-decoration:none;margin-left:24px;font-size:14px}
nav a:hover{color:var(--accent)}
h1{font-size:40px;line-height:1.15;margin:56px 0 16px;letter-spacing:-0.02em}
h2{font-size:22px;margin:48px 0 12px;letter-spacing:-0.01em}
h3{font-size:16px;margin:32px 0 8px;letter-spacing:-0.005em}
p{color:var(--muted);margin:0 0 16px}
.lede{font-size:18px;color:var(--ink)}
.tag{display:inline-block;font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--accent);background:var(--soft);border:1px solid var(--line);padding:4px 10px;border-radius:999px;margin-bottom:24px}
.cta{display:inline-block;background:var(--accent);color:#fff;text-decoration:none;padding:12px 20px;border-radius:6px;font-weight:500;margin:8px 8px 0 0;font-size:15px}
.cta.secondary{background:#fff;color:var(--accent);border:1px solid var(--accent)}
pre{background:#0d1117;color:#c9d1d9;padding:18px;border-radius:6px;overflow-x:auto;font-size:13px;font-family:'JetBrains Mono',monospace;line-height:1.55}
code{font-family:'JetBrains Mono',monospace;font-size:0.92em}
ul{padding-left:20px;color:var(--muted)}
li{margin-bottom:8px}
table{width:100%;border-collapse:collapse;margin:8px 0 24px;font-size:14px}
th,td{border-bottom:1px solid var(--line);padding:10px 8px;text-align:left;vertical-align:top;color:var(--muted)}
th{color:var(--ink);font-weight:600;font-size:13px;text-transform:uppercase;letter-spacing:0.04em}
td:first-child{color:var(--accent);font-weight:600;font-family:'JetBrains Mono',monospace;font-size:13px;white-space:nowrap}
.pull{background:var(--soft);border-left:3px solid var(--accent);padding:14px 18px;margin:24px 0;color:var(--ink);font-style:italic}
footer{border-top:1px solid var(--line);margin-top:80px;padding:32px 0;color:var(--muted);font-size:13px}
footer .wrap{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px}
</style>
</head>
<body>
<header>
<div class="wrap">
<a href="/" class="brand">SAM Protocol</a>
<nav>
<a href="#what">What</a>
<a href="#composes">Composes</a>
<a href="#how">How</a>
<a href="https://github.com/SAM-protocol/SAM-Protocol">GitHub</a>
</nav>
</div>
</header>
<main class="wrap">
<span class="tag">draft-sam-protocol-v2.2</span>
<h1>The signed envelope for agent-ready merchants.</h1>
<p class="lede">Publish one signed file. Reference everything else. SAM composes UCP, AP2, MCP, ACP, and A2A into a single, verifiable, time-bounded entry point for AI agents.</p>
<p>
<a class="cta" href="https://github.com/SAM-protocol/SAM-Protocol">View on GitHub</a>
<a class="cta secondary" href="/.well-known/sam.json">See a sam.json</a>
</p>
<h2 id="what">What SAM is — and is not</h2>
<p>SAM is <strong>not</strong> another commerce protocol. The agentic commerce stack of 2026 already has plenty: UCP for capabilities, AP2 for user authorization, MCP for tools, ACP for catalogs, A2A for agent-to-agent. What it lacks is a single, signed, time-bounded entry point that tells an agent which of those a given merchant publishes — and within which bounds autonomous action is permitted.</p>
<p>SAM is that entry point. A merchant publishes one signed <code>sam.json</code> at <code>/.well-known/</code>. Agents read it, verify an <code>ed25519</code> signature over the entire envelope including its references (RFC 9421), and act only within the merchant-issued policy mandate declared inside.</p>
<div class="pull">SAM does not replace UCP, AP2, MCP, ACP, or A2A. SAM is the signed envelope that makes any combination of them verifiable in one place.</div>
<h2 id="composes">How SAM composes with the rest</h2>
<table>
<thead>
<tr><th>Layer</th><th>Standard</th><th>Question it resolves</th></tr>
</thead>
<tbody>
<tr><td>Signed entry</td><td><strong>SAM</strong></td><td>Who is this merchant, what do they publish, is it current, is it genuine, within which bounds may I act?</td></tr>
<tr><td>Capabilities</td><td>UCP</td><td>What can be browsed, quoted, ordered?</td></tr>
<tr><td>User authorization</td><td>AP2 (FIDO)</td><td>Did the user authorize this purchase?</td></tr>
<tr><td>Tool invocation</td><td>MCP</td><td>How does the agent call a specific function?</td></tr>
<tr><td>Catalog feed</td><td>ACP</td><td>What is in stock, at what price?</td></tr>
<tr><td>Agent-to-agent</td><td>A2A</td><td>How do two agents collaborate?</td></tr>
</tbody>
</table>
<p>A merchant already on UCP adopts SAM in ten lines: a <code>sam:composes.ucp</code> entry, a signature, a freshness window. No rewrite. No duplication. No fork. The merchant's existing agent surface becomes verifiable from one place.</p>
<h2 id="how">How it works</h2>
<ul>
<li><strong>Discover</strong> — agent fetches <code>/.well-known/sam.json</code>.</li>
<li><strong>Verify</strong> — <code>ed25519</code> signature over the entire envelope, including every <code>sam:composes</code> reference (RFC 9421).</li>
<li><strong>Compose</strong> — agent follows the references to UCP, AP2, MCP, ACP, A2A as published.</li>
<li><strong>Bound</strong> — the merchant policy mandate declares what an agent may and may not do autonomously. Evaluated locally. No network call.</li>
<li><strong>Fallback</strong> — when bounds are exceeded or a referenced standard is unreachable, control returns to a human via <code>sam:human</code>.</li>
</ul>
<h2>Minimal example — composing envelope</h2>
<pre><code>{
"sam:version": "2.2",
"sam:identity": { "domain": "example.com", "legalName": "Example Inc." },
"sam:signature": { "alg": "ed25519",
"validUntil": "2026-08-13T00:00:00Z",
"value": "base64(...)" },
"sam:composes": {
"ucp": { "href": "/.well-known/ucp", "version": "1.0" },
"ap2": { "supported": true, "endpoint": "/ap2/checkout",
"mandateTypes": ["cart","payment","intent"] },
"mcp": { "href": "/.well-known/mcp", "version": "2025-11-25" }
},
"sam:mandate": {
"grammarVersion": "0.1",
"autoExecute": true,
"maxAmount": { "value": 200, "currency": "EUR",
"inclusiveOfTaxes": true,
"inclusiveOfShipping": true },
"validityWindow": { "notBefore": "2026-05-13T00:00:00Z",
"notAfter": "2026-08-13T00:00:00Z" },
"agentClass": "any"
},
"sam:agentAuth": { "profile": "rfc9421", "algorithm": "ed25519" },
"sam:human": { "channels": [
{ "type": "email", "value": "agents@example.com" }
]}
}</code></pre>
<h2>Conformance levels</h2>
<table>
<thead>
<tr><th>Level</th><th>Content</th><th>Claim</th></tr>
</thead>
<tbody>
<tr><td>L0</td><td><code>version</code> + <code>capabilities</code> or <code>composes</code> + <code>human</code></td><td>merchant-ready</td></tr>
<tr><td>L1</td><td>L0 + <code>identity</code> + <code>signature</code></td><td>agent-ready</td></tr>
<tr><td>L2</td><td>L1 + <code>mandate</code> + <code>agentAuth</code></td><td>bounded autonomy</td></tr>
</tbody>
</table>
<p>Each level is useful on its own. Conformant agents must not perform autonomous economic action against a merchant below L2.</p>
<h2>Status</h2>
<p>Draft specification v2.2 (May 2026). Submitted for consideration at the <a href="https://www.w3.org/community/agent-identity/" style="color:var(--accent)">W3C Agent Identity Registry Protocol Community Group</a>. Contributions welcome on GitHub.</p>
</main>
<footer>
<div class="wrap">
<span>© 2026 SAM Protocol Working Group</span>
<span><a href="https://github.com/SAM-protocol/SAM-Protocol" style="color:var(--muted)">GitHub</a> · <a href="/llms.txt" style="color:var(--muted)">llms.txt</a></span>
</div>
</footer>
</body>
</html>