Files
sentryagent-idp/portal/.next/server/app/get-started.html
SentryAgent.ai Developer d1e6af25aa feat(phase-4): WS2 + WS3 — Developer Portal (Next.js 14) and CLI tool (sentryagent)
WS2: Developer Portal (portal/)
- Standalone Next.js 14 + Tailwind CSS app — independent deployment
- Home page: hero, feature grid, CTA to /get-started
- /pricing: free tier limits table (10 agents, 1k calls/day) + paid tier CTA
- /sdks: all 4 SDKs (Node.js, Python, Go, Java) with install + code examples
- /api-explorer: Swagger UI from NEXT_PUBLIC_API_URL/openapi.json, persistAuthorization
- /get-started: 4-step wizard (setup → register agent → credentials → SDK snippet)
- Shared Nav component with active-link highlighting
- Build: 8/8 static pages, zero TypeScript errors

WS3: CLI Tool (cli/ — npm package: sentryagent)
- configure, register-agent, list-agents, issue-token, rotate-credentials, tail-audit-log
- Auto OAuth2 token fetch + 30s-buffer cache via client_credentials flow
- chalk-formatted table output, confirmation prompts, bounded audit log dedup
- bash + zsh shell completion scripts
- README with installation, all commands, and completion setup
- Build: tsc clean, node dist/index.js --help verified

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 04:29:50 +00:00

1 line
11 KiB
HTML

<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/0d1e1814871c1ae4.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-75820735529c9609.js"/><script src="/_next/static/chunks/fd9d1056-0ffa74f19011bd1c.js" async=""></script><script src="/_next/static/chunks/23-eed73080eee64cfd.js" async=""></script><script src="/_next/static/chunks/main-app-ce894e58853e9441.js" async=""></script><script src="/_next/static/chunks/app/get-started/page-31e1ee0acda82a62.js" async=""></script><script src="/_next/static/chunks/231-711da40718c2508c.js" async=""></script><script src="/_next/static/chunks/app/layout-db75ca053106eec0.js" async=""></script><title>Get Started — SentryAgent AgentIdP</title><meta name="description" content="Set up your first AI agent with SentryAgent AgentIdP in four steps."/><script src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js" noModule=""></script></head><body class="min-h-screen bg-slate-50 text-slate-900 antialiased"><header class="sticky top-0 z-50 border-b border-slate-200 bg-white/90 backdrop-blur"><nav class="mx-auto flex max-w-7xl items-center justify-between px-6 py-4"><a class="flex items-center gap-2" href="/"><span class="text-xl font-bold text-brand-600">SentryAgent</span><span class="rounded bg-brand-100 px-1.5 py-0.5 text-xs font-semibold text-brand-700">AgentIdP</span></a><ul class="flex items-center gap-1"><li><a class="rounded-md px-3 py-2 text-sm font-medium transition-colors text-slate-600 hover:bg-slate-100 hover:text-slate-900" href="/">Home</a></li><li><a class="rounded-md px-3 py-2 text-sm font-medium transition-colors text-slate-600 hover:bg-slate-100 hover:text-slate-900" href="/api-explorer">API Explorer</a></li><li><a class="rounded-md px-3 py-2 text-sm font-medium transition-colors bg-brand-100 text-brand-700" href="/get-started">Get Started</a></li><li><a class="rounded-md px-3 py-2 text-sm font-medium transition-colors text-slate-600 hover:bg-slate-100 hover:text-slate-900" href="/sdks">SDKs</a></li><li><a class="rounded-md px-3 py-2 text-sm font-medium transition-colors text-slate-600 hover:bg-slate-100 hover:text-slate-900" href="/pricing">Pricing</a></li></ul><a class="rounded-lg bg-brand-600 px-4 py-2 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-brand-700" href="/get-started">Get Started Free</a></nav></header><main><div class="px-6 py-16"><div class="mb-12 text-center"><h1 class="mb-4 text-4xl font-extrabold text-slate-900">Get Started</h1><p class="text-xl text-slate-600">Register your first agent and get production-ready credentials in minutes.</p></div><div class="mx-auto max-w-3xl"><div class="mb-2 flex gap-2 text-xs font-medium text-slate-500"><span class="flex-1 text-center font-bold text-brand-700">Account Setup</span><span class="flex-1 text-center ">Register Agent</span><span class="flex-1 text-center ">Generate Credentials</span><span class="flex-1 text-center ">Choose SDK</span></div><div class="mb-8 flex items-center gap-2"><div class="flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold border-2 border-brand-600 bg-brand-50 text-brand-700">1</div><div class="h-0.5 flex-1 bg-slate-200"></div><div class="flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold bg-slate-200 text-slate-500">2</div><div class="h-0.5 flex-1 bg-slate-200"></div><div class="flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold bg-slate-200 text-slate-500">3</div><div class="h-0.5 flex-1 bg-slate-200"></div><div class="flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold bg-slate-200 text-slate-500">4</div></div><div class="rounded-2xl border border-slate-200 bg-white p-8 shadow-sm"><div><h2 class="mb-2 text-2xl font-bold text-slate-900">Step 1: Account Setup</h2><p class="mb-6 text-slate-600">Before registering your first agent, make sure you have the AgentIdP server running.</p><ol class="mb-8 space-y-4"><li class="flex gap-4"><span class="mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-brand-600 text-xs font-bold text-white">1</span><div class="flex-1"><p class="mb-1 font-medium text-slate-800">Clone the repository</p><div class="flex items-center rounded-lg bg-slate-900 px-3 py-2"><code class="flex-1 text-sm text-slate-100">git clone https://github.com/sentryagent/sentryagent-idp.git</code><button class="ml-2 rounded bg-slate-100 px-2 py-1 text-xs font-medium text-slate-600 transition-colors hover:bg-slate-200">Copy</button></div></div></li><li class="flex gap-4"><span class="mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-brand-600 text-xs font-bold text-white">2</span><div class="flex-1"><p class="mb-1 font-medium text-slate-800">Copy environment variables</p><div class="flex items-center rounded-lg bg-slate-900 px-3 py-2"><code class="flex-1 text-sm text-slate-100">cp .env.example .env</code><button class="ml-2 rounded bg-slate-100 px-2 py-1 text-xs font-medium text-slate-600 transition-colors hover:bg-slate-200">Copy</button></div></div></li><li class="flex gap-4"><span class="mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-brand-600 text-xs font-bold text-white">3</span><div class="flex-1"><p class="mb-1 font-medium text-slate-800">Start the server</p><div class="flex items-center rounded-lg bg-slate-900 px-3 py-2"><code class="flex-1 text-sm text-slate-100">docker compose up -d &amp;&amp; npm run db:migrate</code><button class="ml-2 rounded bg-slate-100 px-2 py-1 text-xs font-medium text-slate-600 transition-colors hover:bg-slate-200">Copy</button></div></div></li><li class="flex gap-4"><span class="mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-brand-600 text-xs font-bold text-white">4</span><div class="flex-1"><p class="mb-1 font-medium text-slate-800">Verify the server is healthy</p><div class="flex items-center rounded-lg bg-slate-900 px-3 py-2"><code class="flex-1 text-sm text-slate-100">curl http://localhost:3000/health</code><button class="ml-2 rounded bg-slate-100 px-2 py-1 text-xs font-medium text-slate-600 transition-colors hover:bg-slate-200">Copy</button></div></div></li></ol><button class="rounded-lg bg-brand-600 px-6 py-2.5 font-semibold text-white transition-colors hover:bg-brand-700">My server is running →</button></div></div></div></div></main><footer class="border-t border-slate-200 py-8 text-center text-sm text-slate-500"><p>© <!-- -->2026<!-- --> SentryAgent.ai — All rights reserved.</p></footer><script src="/_next/static/chunks/webpack-75820735529c9609.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/0d1e1814871c1ae4.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[95751,[],\"\"]\n4:I[63933,[\"719\",\"static/chunks/app/get-started/page-31e1ee0acda82a62.js\"],\"GetStartedWizard\"]\n5:I[39275,[],\"\"]\n6:I[61343,[],\"\"]\n7:I[56390,[\"231\",\"static/chunks/231-711da40718c2508c.js\",\"185\",\"static/chunks/app/layout-db75ca053106eec0.js\"],\"Nav\"]\n9:I[76130,[],\"\"]\na:[]\n"])</script><script>self.__next_f.push([1,"0:[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/0d1e1814871c1ae4.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"$L2\",null,{\"buildId\":\"h5w-rj60Vif8vQbejZCYz\",\"assetPrefix\":\"\",\"initialCanonicalUrl\":\"/get-started\",\"initialTree\":[\"\",{\"children\":[\"get-started\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"get-started\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[\"$\",\"div\",null,{\"className\":\"px-6 py-16\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-12 text-center\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"mb-4 text-4xl font-extrabold text-slate-900\",\"children\":\"Get Started\"}],[\"$\",\"p\",null,{\"className\":\"text-xl text-slate-600\",\"children\":\"Register your first agent and get production-ready credentials in minutes.\"}]]}],[\"$\",\"$L4\",null,{\"apiUrl\":\"http://localhost:3000\"}]]}]],null],null]},[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"get-started\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":null}],null]},[[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-slate-50 text-slate-900 antialiased\",\"children\":[[\"$\",\"$L7\",null,{}],[\"$\",\"main\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[],\"styles\":null}]}],[\"$\",\"footer\",null,{\"className\":\"border-t border-slate-200 py-8 text-center text-sm text-slate-500\",\"children\":[\"$\",\"p\",null,{\"children\":[\"© \",2026,\" SentryAgent.ai — All rights reserved.\"]}]}]]}]}],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L8\"],\"globalErrorComponent\":\"$9\",\"missingSlots\":\"$Wa\"}]]\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Get Started — SentryAgent AgentIdP\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Set up your first AI agent with SentryAgent AgentIdP in four steps.\"}]]\n3:null\n"])</script></body></html>