@@ -30,102 +30,209 @@ title: ""
3030 </div>
3131 </section>
3232
33- <section id="agent-manifest " class="mt-12 rounded-2xl border border-[#1a3b2c] bg-[#0c241a] p-6 shadow-[0_0_0_1px_rgba(48,255,138,0.05),0_0_30px_rgba(48,255,138,0.08)]">
33+ <section id="manifests " class="mt-12 rounded-2xl border border-[#1a3b2c] bg-[#0c241a] p-6 shadow-[0_0_0_1px_rgba(48,255,138,0.05),0_0_30px_rgba(48,255,138,0.08)]" data-manifest-tabs >
3434 <div class="flex flex-wrap items-center justify-between gap-3">
35- <div class="flex items-center gap-3">
36- <h2 class="text-lg font-semibold tracking-tight">Agent Manifest</h2>
37- <span class="rounded-full border border-[#1f6a4a] bg-[#0b2a1d] px-2 py-0.5 text-[10px] uppercase tracking-[0.2em] text-[#7fffb2]">manifest v1</span>
35+ <div class="flex flex-wrap items-center gap-2">
36+ <button
37+ class="rounded-full border border-[#1f6a4a] bg-[#0b2a1d] px-3 py-1 text-xs font-semibold uppercase tracking-[0.2em] text-[#7fffb2]"
38+ data-manifest-tab="agent"
39+ type="button"
40+ >
41+ Agent Manifest
42+ </button>
43+ <button
44+ class="rounded-full border border-[#1a3b2c] px-3 py-1 text-xs font-semibold uppercase tracking-[0.2em] text-[#9fd8b6] hover:border-[#1f6a4a] hover:text-[#7fffb2]"
45+ data-manifest-tab="provider"
46+ type="button"
47+ >
48+ Provider Manifest
49+ </button>
3850 </div>
3951 <span class="text-xs text-[#b6f2cf]">schema_version: 1.0</span>
4052 </div>
4153
42- <dl class="mt-5 grid gap-4 text-sm">
43- <div>
44- <dt class="text-[#7fcaa3]">product_name</dt>
45- <dd class="mt-1">vestauth</dd>
46- </div>
47- <div>
48- <dt class="text-[#7fcaa3]">purpose</dt>
49- <dd class="mt-1">Auth for agents. One command to sign up for services.</dd>
50- </div>
51- <div>
52- <dt class="text-[#7fcaa3]">primary_users</dt>
53- <dd class="mt-1">AI agents, service providers</dd>
54- </div>
55- <div>
56- <dt class="text-[#7fcaa3]">core_flow</dt>
57- <dd class="mt-1">
58- <ol class="mt-2 list-decimal space-y-1 pl-5 text-[#c7f7db]">
59- <li>Install CLI: <span class="text-[#d9ffe9]">curl -sSf https://vestauth.sh | sh</span></li>
60- <li>Initialize agent: <span class="text-[#d9ffe9]">vestauth agent init</span></li>
61- <li>Verify identity: <span class="text-[#d9ffe9]">vestauth agent curl https://api.vestauth.com/whoami</span></li>
62- </ol>
63- </dd>
64- </div>
65- <div>
66- <dt class="text-[#7fcaa3]">identity_outputs</dt>
67- <dd class="mt-1">AGENT_PUBLIC_JWK, AGENT_PRIVATE_JWK, AGENT_ID (stored in .env)</dd>
68- </div>
69- <div>
70- <dt class="text-[#7fcaa3]">public_key_discovery</dt>
71- <dd class="mt-1">/.well-known/http-message-signatures-directory</dd>
72- </div>
73- <div>
74- <dt class="text-[#7fcaa3]">signing_standard</dt>
75- <dd class="mt-1">RFC 9421 (HTTP Message Signatures)</dd>
76- </div>
77- <div>
78- <dt class="text-[#7fcaa3]">signed_headers</dt>
79- <dd class="mt-1">Signature, Signature-Input, Signature-Agent</dd>
80- </div>
81- <div>
82- <dt class="text-[#7fcaa3]">signature_agent_format</dt>
83- <dd class="mt-1">sig1=<AGENT_ID>.agents.vestauth.com</dd>
84- </div>
85- <div>
86- <dt class="text-[#7fcaa3]">auth_tag</dt>
87- <dd class="mt-1">web-bot-auth</dd>
88- </div>
89- <div>
90- <dt class="text-[#7fcaa3]">auth_model</dt>
91- <dd class="mt-1">Delegated, scoped access (agent-first)</dd>
92- </div>
93- <div>
94- <dt class="text-[#7fcaa3]">integration_surface</dt>
95- <dd class="mt-1">CLI + API (public details forthcoming)</dd>
96- </div>
97- <div>
98- <dt class="text-[#7fcaa3]">contact</dt>
99- <dd class="mt-1">laura@vestauth.com, scott@vestauth.com</dd>
100- </div>
101- <div>
102- <dt class="text-[#7fcaa3]">last_updated</dt>
103- <dd class="mt-1">2026-02-05</dd>
104- </div>
105- </dl>
54+ <div class="mt-5" data-manifest-panel="agent">
55+ <dl class="grid gap-4 text-sm">
56+ <div>
57+ <dt class="text-[#7fcaa3]">product_name</dt>
58+ <dd class="mt-1">vestauth</dd>
59+ </div>
60+ <div>
61+ <dt class="text-[#7fcaa3]">purpose</dt>
62+ <dd class="mt-1">Auth for agents. One command to sign up for services.</dd>
63+ </div>
64+ <div>
65+ <dt class="text-[#7fcaa3]">primary_users</dt>
66+ <dd class="mt-1">AI agents</dd>
67+ </div>
68+ <div>
69+ <dt class="text-[#7fcaa3]">core_flow</dt>
70+ <dd class="mt-1">
71+ <ol class="mt-2 list-decimal space-y-1 pl-5 text-[#c7f7db]">
72+ <li>Install CLI: <span class="text-[#d9ffe9]">curl -sSf https://vestauth.sh | sh</span></li>
73+ <li>Initialize agent: <span class="text-[#d9ffe9]">vestauth agent init</span></li>
74+ <li>Verify identity: <span class="text-[#d9ffe9]">vestauth agent curl https://api.vestauth.com/whoami</span></li>
75+ </ol>
76+ </dd>
77+ </div>
78+ <div>
79+ <dt class="text-[#7fcaa3]">identity_outputs</dt>
80+ <dd class="mt-1">AGENT_PUBLIC_JWK, AGENT_PRIVATE_JWK, AGENT_ID (stored in .env)</dd>
81+ </div>
82+ <div>
83+ <dt class="text-[#7fcaa3]">public_key_discovery</dt>
84+ <dd class="mt-1">/.well-known/http-message-signatures-directory</dd>
85+ </div>
86+ <div>
87+ <dt class="text-[#7fcaa3]">signing_standard</dt>
88+ <dd class="mt-1">RFC 9421 (HTTP Message Signatures)</dd>
89+ </div>
90+ <div>
91+ <dt class="text-[#7fcaa3]">signed_headers</dt>
92+ <dd class="mt-1">Signature, Signature-Input, Signature-Agent</dd>
93+ </div>
94+ <div>
95+ <dt class="text-[#7fcaa3]">signature_agent_format</dt>
96+ <dd class="mt-1">sig1=<AGENT_ID>.agents.vestauth.com</dd>
97+ </div>
98+ <div>
99+ <dt class="text-[#7fcaa3]">auth_tag</dt>
100+ <dd class="mt-1">web-bot-auth</dd>
101+ </div>
102+ <div>
103+ <dt class="text-[#7fcaa3]">auth_model</dt>
104+ <dd class="mt-1">Delegated, scoped access (agent-first)</dd>
105+ </div>
106+ <div>
107+ <dt class="text-[#7fcaa3]">integration_surface</dt>
108+ <dd class="mt-1">CLI + API (public details forthcoming)</dd>
109+ </div>
110+ <div>
111+ <dt class="text-[#7fcaa3]">contact</dt>
112+ <dd class="mt-1">laura@vestauth.com, scott@vestauth.com</dd>
113+ </div>
114+ <div>
115+ <dt class="text-[#7fcaa3]">last_updated</dt>
116+ <dd class="mt-1">2026-02-05</dd>
117+ </div>
118+ </dl>
119+
120+ <script type="application/json" data-agent-manifest="vestauth">
121+ {
122+ "schema_version": "1.0",
123+ "product_name": "vestauth",
124+ "purpose": "Auth for agents. One command to sign up for services.",
125+ "primary_users": ["AI agents"],
126+ "core_flow": [
127+ "curl -sSf https://vestauth.sh | sh",
128+ "vestauth agent init",
129+ "vestauth agent curl https://api.vestauth.com/whoami"
130+ ],
131+ "identity_outputs": ["AGENT_PUBLIC_JWK", "AGENT_PRIVATE_JWK", "AGENT_ID"],
132+ "public_key_discovery": "/.well-known/http-message-signatures-directory",
133+ "signing_standard": "RFC 9421 (HTTP Message Signatures)",
134+ "signed_headers": ["Signature", "Signature-Input", "Signature-Agent"],
135+ "signature_agent_format": "sig1=<AGENT_ID>.agents.vestauth.com",
136+ "auth_tag": "web-bot-auth",
137+ "auth_model": "delegated_scoped_access",
138+ "integration_surface": "cli_api",
139+ "contact": "laura@vestauth.com, scott@vestauth.com",
140+ "last_updated": "2026-02-05"
141+ }
142+ </script>
143+ </div>
144+
145+ <div class="mt-5 hidden" data-manifest-panel="provider">
146+ <dl class="grid gap-4 text-sm">
147+ <div>
148+ <dt class="text-[#7fcaa3]">product_name</dt>
149+ <dd class="mt-1">vestauth</dd>
150+ </div>
151+ <div>
152+ <dt class="text-[#7fcaa3]">purpose</dt>
153+ <dd class="mt-1">Verify agent requests and authenticate agents at the provider edge.</dd>
154+ </div>
155+ <div>
156+ <dt class="text-[#7fcaa3]">primary_users</dt>
157+ <dd class="mt-1">Service providers, tool builders</dd>
158+ </div>
159+ <div>
160+ <dt class="text-[#7fcaa3]">core_flow</dt>
161+ <dd class="mt-1">
162+ <ol class="mt-2 list-decimal space-y-1 pl-5 text-[#c7f7db]">
163+ <li>Install: <span class="text-[#d9ffe9]">npm install express vestauth --save</span></li>
164+ <li>Verify: <span class="text-[#d9ffe9]">vestauth.provider.verify(req.method, fullUrl, req.headers)</span></li>
165+ <li>Return agent: <span class="text-[#d9ffe9]">res.json(agent)</span></li>
166+ </ol>
167+ </dd>
168+ </div>
169+ <div>
170+ <dt class="text-[#7fcaa3]">verification_function</dt>
171+ <dd class="mt-1">vestauth.provider.verify(method, fullUrl, headers)</dd>
172+ </div>
173+ <div>
174+ <dt class="text-[#7fcaa3]">full_url_construction</dt>
175+ <dd class="mt-1">`${req.protocol}://${req.get('host')}${req.originalUrl}`</dd>
176+ </div>
177+ <div>
178+ <dt class="text-[#7fcaa3]">success_response</dt>
179+ <dd class="mt-1">HTTP 200 with agent JSON</dd>
180+ </div>
181+ <div>
182+ <dt class="text-[#7fcaa3]">error_response</dt>
183+ <dd class="mt-1">HTTP 401 with error message</dd>
184+ </div>
185+ <div>
186+ <dt class="text-[#7fcaa3]">last_updated</dt>
187+ <dd class="mt-1">2026-02-05</dd>
188+ </div>
189+ </dl>
190+
191+ <script type="application/json" data-provider-manifest="vestauth">
192+ {
193+ "schema_version": "1.0",
194+ "product_name": "vestauth",
195+ "purpose": "Verify agent requests and authenticate agents at the provider edge.",
196+ "primary_users": ["Service providers", "tool builders"],
197+ "core_flow": [
198+ "npm install express vestauth --save",
199+ "vestauth.provider.verify(req.method, fullUrl, req.headers)",
200+ "res.json(agent)"
201+ ],
202+ "verification_function": "vestauth.provider.verify(method, fullUrl, headers)",
203+ "full_url_construction": "${req.protocol}://${req.get('host')}${req.originalUrl}",
204+ "success_response": "HTTP 200 with agent JSON",
205+ "error_response": "HTTP 401 with error message",
206+ "last_updated": "2026-02-05"
207+ }
208+ </script>
209+ </div>
210+
211+ <script>
212+ (() => {
213+ const root = document.querySelector('[data-manifest-tabs]');
214+ if (!root) return;
215+ const buttons = root.querySelectorAll('[data-manifest-tab]');
216+ const panels = root.querySelectorAll('[data-manifest-panel]');
217+ const activeClasses = ['bg-[#0b2a1d]', 'border-[#1f6a4a]', 'text-[#7fffb2]'];
218+ const inactiveClasses = ['border-[#1a3b2c]', 'text-[#9fd8b6]'];
219+
220+ const setActive = (name) => {
221+ buttons.forEach((button) => {
222+ const isActive = button.dataset.manifestTab === name;
223+ activeClasses.forEach((cls) => button.classList.toggle(cls, isActive));
224+ inactiveClasses.forEach((cls) => button.classList.toggle(cls, !isActive));
225+ });
226+
227+ panels.forEach((panel) => {
228+ panel.classList.toggle('hidden', panel.dataset.manifestPanel !== name);
229+ });
230+ };
106231
107- <script type="application/json" data-agent-manifest="vestauth">
108- {
109- "schema_version": "1.0",
110- "product_name": "vestauth",
111- "purpose": "Auth for agents. One command to sign up for services.",
112- "primary_users": ["AI agents", "service providers"],
113- "core_flow": [
114- "curl -sSf https://vestauth.sh | sh",
115- "vestauth agent init",
116- "vestauth agent curl https://api.vestauth.com/whoami"
117- ],
118- "identity_outputs": ["AGENT_PUBLIC_JWK", "AGENT_PRIVATE_JWK", "AGENT_ID"],
119- "public_key_discovery": "/.well-known/http-message-signatures-directory",
120- "signing_standard": "RFC 9421 (HTTP Message Signatures)",
121- "signed_headers": ["Signature", "Signature-Input", "Signature-Agent"],
122- "signature_agent_format": "sig1=<AGENT_ID>.agents.vestauth.com",
123- "auth_tag": "web-bot-auth",
124- "auth_model": "delegated_scoped_access",
125- "integration_surface": "cli_api",
126- "contact": "laura@vestauth.com, scott@vestauth.com",
127- "last_updated": "2026-02-05"
128- }
232+ buttons.forEach((button) => {
233+ button.addEventListener('click', () => setActive(button.dataset.manifestTab));
234+ });
235+ })();
129236 </script>
130237 </section>
131238 </div>
0 commit comments