Skip to content

Commit b2f4f81

Browse files
Add provider manifest tab and endpoint
1 parent 59e1fe1 commit b2f4f81

4 files changed

Lines changed: 219 additions & 91 deletions

File tree

_includes/layouts/meta.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
{% seo %}
66
{% favicon %}
77
<link rel="alternate" type="application/json" title="vestauth agent manifest" href="/agent-manifest.json">
8+
<link rel="alternate" type="application/json" title="vestauth provider manifest" href="/provider-manifest.json">
89
<link rel="preconnect" href="https://fonts.googleapis.com">
910
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
1011
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">

agent-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ layout: null
66
"schema_version": "1.0",
77
"product_name": "vestauth",
88
"purpose": "Auth for agents. One command to sign up for services.",
9-
"primary_users": ["AI agents", "service providers"],
9+
"primary_users": ["AI agents"],
1010
"core_flow": [
1111
"curl -sSf https://vestauth.sh | sh",
1212
"vestauth agent init",

index.md

Lines changed: 197 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -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=&lt;AGENT_ID&gt;.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=&lt;AGENT_ID&gt;.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>

provider-manifest.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
permalink: /provider-manifest.json
3+
layout: null
4+
---
5+
{
6+
"schema_version": "1.0",
7+
"product_name": "vestauth",
8+
"purpose": "Verify agent requests and authenticate agents at the provider edge.",
9+
"primary_users": ["Service providers", "tool builders"],
10+
"core_flow": [
11+
"npm install express vestauth --save",
12+
"vestauth.provider.verify(req.method, fullUrl, req.headers)",
13+
"res.json(agent)"
14+
],
15+
"verification_function": "vestauth.provider.verify(method, fullUrl, headers)",
16+
"full_url_construction": "${req.protocol}://${req.get('host')}${req.originalUrl}",
17+
"success_response": "HTTP 200 with agent JSON",
18+
"error_response": "HTTP 401 with error message",
19+
"last_updated": "2026-02-05"
20+
}

0 commit comments

Comments
 (0)