ax-check.com
by Gauge
C
Clerk
clerk.com
ax-check.com
Checked 6 October 2026
A
100/100
Agents need your login
Clerk's docs, setup, and pricing are clear and agent-ready.
All 23 checklist items passed: quickstarts, CLI, SDKs, MCP server, and API specs are all directly reachable with stated pricing.
1 fix to start with
Concrete changes, backed by what we found.
Recorded coding sessions
Same task, 3 models, no clerk.com account. Recorded 6 October 2026 on Pi.
3 recorded · 1m 14s
1m 14s · recorded
Session findings
Select a finding to see it in context.
›Thinking…
The user is asking about Clerk — a hosted authentication product. Let's check the environment: network access? Let's investigate the sandbox and see whether there are any existing projects. Also, the user is asking how the pricing works, and whether this product is easy to manage.
Let's check the cwd and whether network access is available (e.g., can we install the clerk SDK from npm).
ls -la /sandbox/repo && node --version 2>/dev/null; npm --version 2>/dev/null
total 16
total 16 drwxr-xr-x 3 root root 4096 Sep 18 08:00 . drwxr-xr-x 7 root root 4096 Oct 6 01:49 .. drwxr-xr-x 8 root root 4096 Sep 24 20:05 .git -rw-r--r-- 1 root root 408 Sep 18 08:00 .gitignore v22.23.2 10.9.8
Recorded tool call
{
"type": "tool_call",
"seq": 3,
"ts": "2026-10-06T01:49:20.378Z",
"name": "bash",
"turn": 1,
"input": {
"command": "ls -la /sandbox/repo && node --version 2>/dev/null; npm --version 2>/dev/null"
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-9583561399c0be5d",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 5,
"ts": "2026-10-06T01:49:20.378Z",
"turn": 1,
"output": {
"content": [
{
"text": "total 16\ndrwxr-xr-x 3 root root 4096 Sep 18 08:00 .\ndrwxr-xr-x 7 root root 4096 Oct 6 01:49 ..\ndrwxr-xr-x 8 root root 4096 Sep 24 20:05 .git\n-rw-r--r-- 1 root root 408 Sep 18 08:00 .gitignore\nv22.23.2\n10.9.8\n",
"type": "text"
}
]
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-9583561399c0be5d",
"is_error": false,
"tool_kind": "shell"
}timeout 15 npm view @clerk/nextjs version 2>&1 | tail -5; echo "exit: $?"
npm notice
npm notice npm notice New major version of npm available! 10.9.8 -> 12.2.0 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.2.0 npm notice To update run: npm install -g npm@12.2.0 npm notice exit: 0
Recorded tool call
{
"type": "tool_call",
"seq": 4,
"ts": "2026-10-06T01:49:20.378Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 15 npm view @clerk/nextjs version 2>&1 | tail -5; echo \"exit: $?\""
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-9ef72c57e7d37b60",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 6,
"ts": "2026-10-06T01:49:22.859Z",
"turn": 1,
"output": {
"content": [
{
"text": "npm notice\nnpm notice New major version of npm available! 10.9.8 -> 12.2.0\nnpm notice Changelog: https://github.com/npm/cli/releases/tag/v12.2.0\nnpm notice To update run: npm install -g npm@12.2.0\nnpm notice\nexit: 0\n",
"type": "text"
}
]
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-9ef72c57e7d37b60",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Let's check whether the npm view output actually returned a version (was it cut off by tail -5?). I'll try running it again in a cleaner form. Also, I'll check network access to the clerk documentation.
timeout 20 npm view @clerk/nextjs version 2>/dev/null; timeout 20 npm view @clerk/clerk-js version 2>/dev/null; timeout 20 npm view @clerk/backend version 2>/dev/null
7.9.11
7.9.11 6.38.0 3.23.0
Recorded tool call
{
"type": "tool_call",
"seq": 9,
"ts": "2026-10-06T01:49:27.276Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 20 npm view @clerk/nextjs version 2>/dev/null; timeout 20 npm view @clerk/clerk-js version 2>/dev/null; timeout 20 npm view @clerk/backend version 2>/dev/null"
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-963ca57803414edd",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 12,
"ts": "2026-10-06T01:49:32.481Z",
"turn": 1,
"output": {
"content": [
{
"text": "7.9.11\n6.38.0\n3.23.0\n",
"type": "text"
}
]
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-963ca57803414edd",
"is_error": false,
"tool_kind": "shell"
}timeout 15 curl -sI https://clerk.com/docs/pricing 2>&1 | head -5; echo "---"; timeout 15 curl -s https://clerk.com/pricing 2>/dev/null | grep -oiE '(free|\\$[0-9]+|per (MAU|user)|monthly)[^<]{0,80}' | head -30HTTP/2 500
HTTP/2 500
cache-control: public, max-age=0, must-revalidate
date: Tue, 06 Oct 2026 01:49:27 GMT
referrer-policy: same-origin
server: Vercel
---
Free Up to 50K Users | Plans from $0/mo
free for up to 50,000 monthly retained users. Pro plans from $20/mo. No credit card
Free Up to 50K Users | Plans from $0/mo"/>
free for up to 50,000 monthly retained users. Pro plans from $20/mo. No credit card
Free Up to 50K Users | Plans from $0/mo"/>
free for up to 50,000 monthly retained users. Pro plans from $20/mo. No credit card
free for up to 50,000 monthly retained users. Pro plans from $20/mo. No credit card
Free
free
Monthly
Monthly
Free in all plans
Free in all plans
Monthly retained organizations (MROs)
monthly retained user for that month.
free
Free for your first 50,000 monthly retained users and 100 monthly retained orgs. No
free tier is generous at 25K MAU, but its paid plans start at $35/mo for Essentials
monthly retained users or 100 monthly retained organizations?","acceptedAnswer":{"@type
monthly retained users you will be required to upgrade to the Pro plan. Once you exceed
monthly retained organizations, you will be required to upgrade to the B2B Authenticati
free tier allowance will be added to your monthly bill.\u003c/p>\n\u003cp>You'll be
free trial?","acceptedAnswer":{"@type":"Answer","text":"\u003cp>All of our Pro tier
Free\"?","acceptedAnswer":{"@type":"Answer","text":"\u003cp>\"First Day Free\" is ou
free of charge.\u003c/p>"}},{"@type":"Question","name":"Is Clerk pricing based on MA
Monthly Retained Users (MRU), not traditional MAU. A user only counts as retained if th
monthly retained user?","acceptedAnswer":{"@type":"Answer","text":"\u003cp>A monthly re
free day avoids unwelcome fees from users who don't activate.\u003c/p>"}},{"@type":"
monthly retained organization?","acceptedAnswer":{"@type":"Answer","text":"\u003cp>A mo
monthly retained user for that month. Like users, you are only billed for retained orga
Recorded tool call
{
"type": "tool_call",
"seq": 10,
"ts": "2026-10-06T01:49:27.276Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 15 curl -sI https://clerk.com/docs/pricing 2>&1 | head -5; echo \"---\"; timeout 15 curl -s https://clerk.com/pricing 2>/dev/null | grep -oiE '(free|\\\\$[0-9]+|per (MAU|user)|monthly)[^<]{0,80}' | head -30"
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-91a5e38d8b7bc264",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 11,
"ts": "2026-10-06T01:49:28.375Z",
"turn": 1,
"output": {
"content": [
{
"text": "HTTP/2 500 \r\ncache-control: public, max-age=0, must-revalidate\r\ndate: Tue, 06 Oct 2026 01:49:27 GMT\r\nreferrer-policy: same-origin\r\nserver: Vercel\r\n---\nFree Up to 50K Users | Plans from $0/mo\nfree for up to 50,000 monthly retained users. Pro plans from $20/mo. No credit card \nFree Up to 50K Users | Plans from $0/mo\"/>\nfree for up to 50,000 monthly retained users. Pro plans from $20/mo. No credit card \nFree Up to 50K Users | Plans from $0/mo\"/>\nfree for up to 50,000 monthly retained users. Pro plans from $20/mo. No credit card \nfree for up to 50,000 monthly retained users. Pro plans from $20/mo. No credit card \nFree\nfree\nMonthly\nMonthly\nFree in all plans\nFree in all plans\nMonthly retained organizations (MROs)\nmonthly retained user for that month.\nfree\nFree for your first 50,000 monthly retained users and 100 monthly retained orgs. No \nfree tier is generous at 25K MAU, but its paid plans start at $35/mo for Essentials \nmonthly retained users or 100 monthly retained organizations?\",\"acceptedAnswer\":{\"@type\nmonthly retained users you will be required to upgrade to the Pro plan. Once you exceed\nmonthly retained organizations, you will be required to upgrade to the B2B Authenticati\nfree tier allowance will be added to your monthly bill.\\u003c/p>\\n\\u003cp>You'll be \nfree trial?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"\\u003cp>All of our Pro tier \nFree\\\"?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"\\u003cp>\\\"First Day Free\\\" is ou\nfree of charge.\\u003c/p>\"}},{\"@type\":\"Question\",\"name\":\"Is Clerk pricing based on MA\nMonthly Retained Users (MRU), not traditional MAU. A user only counts as retained if th\nmonthly retained user?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"\\u003cp>A monthly re\nfree day avoids unwelcome fees from users who don't activate.\\u003c/p>\"}},{\"@type\":\"\nmonthly retained organization?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"\\u003cp>A mo\nmonthly retained user for that month. Like users, you are only billed for retained orga\n",
"type": "text"
}
]
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-91a5e38d8b7bc264",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Good — network access is working. Clerk has an actual developer workflow via SDKs. Now, the constraints:
- Keep it lightweight: use the hosted product via SDK or API. Don't spin up a local service stack or wait on long-running commands.
- Building a "simple example" with Clerk requires publishable/secret keys from a Clerk account/dashboard. I can't create a Clerk account (needs email signup). I'll be blocked at the point of getting actual API keys.
Options: I could scaffold a Next.js app with the Clerk SDK integrated and use placeholder keys from env, but installing Next.js and creating the app is a long-running command (npx create-next-app takes time, downloads). "Keep it light" — I might be able to create a minimal example: manually create a small Next.js project file (without create-next-app) and install dependencies. But actually running it requires a dev server (long-running) and real keys.
Alternative lightweight approach: use Clerk's Backend API (REST) with curl, but this also needs a secret key from an instance.
Honest path: scaffold code that uses the Clerk SDK (a minimal Next.js app, or even simpler: a plain HTML page using @clerk/clerk-js via CDN. This is the lightest option — clerk-js from CDN with publishable key, no build step). This is Clerk's "vanilla JS" quickstart. I can write this file without installing anything. This satisfies "use the hosted product via SDK" without a local stack.
But it can't be fully "executed" without a Clerk instance/keys. I should state this clearly: scaffold the sample code, note that the user needs to drop in a publishable key from the Clerk dashboard, and I'm blocked on running/verifying against an actual instance.
Also, answer the pricing question, and whether this product is easy for me to manage.
Pricing (from the pricing page): free up to 50K monthly retained users (MRUs); Pro starts at $20/month (usage-based billing beyond that); B2B plans; billing is based on MRUs, not MAUs — a user counts if they've been active for at least one day of the month. Let me fetch a bit more detail for accuracy. From grep results: "The first 50,000 monthly retained users and 100 monthly retained organizations are free", "Pro plan starts at $20/month". Let me get Pro's overage rate (historically $0.02/MRU/month). Rather than guess, I should fetch the page a bit more to confirm.
After that, write the example. Let me create a minimal vanilla JS example:
- index.html that loads @clerk/clerk-js from CDN
- Uses a publishable key from a placeholder/env
- Shows sign-in button and user display
Should I include a small server-side verification example with the Backend SDK? Keep it light — vanilla JS example plus notes. Might also add a README with quickstart steps.
Should I run anything? Opening index.html requires a browser and real keys — can't do it. I'll state clearly that I'm blocked on running without a Clerk account/keys.
Let me quickly fetch Pro's overage pricing.
The network is working, and Clerk has an actual developer workflow (CDN JS SDK, npm SDK, REST Backend API), so I can respond. Before I get started, let me check the pricing details:
timeout 15 curl -s https://clerk.com/pricing 2>/dev/null | grep -oiE '(0\.0[0-9]|per (additional )?(monthly retained|MRU|user|seat))[^<"]{0,100}' | sort -u | head -150.00001 each
0.00001 each 0.000Z\ 0.001 each 0.01 per SMS. International: market rate 0.012/mo each 0.015/mo each 0.0172 35.9158 10.0172H40.829C40.9198 10.0172 40.9869 9.93217 40.9617 9.84491C40.6268 8.68592 39.7772 7. 0.0176 35.9163 10.0176H40.8293C40.9201 10.0175 40.9874 9.93196 40.9622 9.84473C40.6273 8.68588 39.7775 7 0.018/mo each 0.02)] dark:border-[rgba(255,255,255,0)] dark:bg-[rgba(255,255,255,0)] dark:hover:border-[rgba(255,255,2 0.02/MRU/mo with volume discounts at higher tiers. 0.02/MRU/mo with volume discounts at higher tiers.\ 0.02/MRU/mo with volume discounts at higher tiers.\\u003c/p\u003e\ 0.02/MRU/mo with volume discounts at higher tiers.\u003c/p> 0.02/mo each
Recorded tool call
{
"type": "tool_call",
"seq": 15,
"ts": "2026-10-06T01:49:46.285Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 15 curl -s https://clerk.com/pricing 2>/dev/null | grep -oiE '(0\\.0[0-9]|per (additional )?(monthly retained|MRU|user|seat))[^<\"]{0,100}' | sort -u | head -15"
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-956fa139250409e2",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 16,
"ts": "2026-10-06T01:49:47.581Z",
"turn": 1,
"output": {
"content": [
{
"text": "0.00001 each\n0.000Z\\\n0.001 each\n0.01 per SMS. International: market rate\n0.012/mo each\n0.015/mo each\n0.0172 35.9158 10.0172H40.829C40.9198 10.0172 40.9869 9.93217 40.9617 9.84491C40.6268 8.68592 39.7772 7.\n0.0176 35.9163 10.0176H40.8293C40.9201 10.0175 40.9874 9.93196 40.9622 9.84473C40.6273 8.68588 39.7775 7\n0.018/mo each\n0.02)] dark:border-[rgba(255,255,255,0)] dark:bg-[rgba(255,255,255,0)] dark:hover:border-[rgba(255,255,2\n0.02/MRU/mo with volume discounts at higher tiers.\n0.02/MRU/mo with volume discounts at higher tiers.\\\n0.02/MRU/mo with volume discounts at higher tiers.\\\\u003c/p\\u003e\\\n0.02/MRU/mo with volume discounts at higher tiers.\\u003c/p>\n0.02/mo each\n",
"type": "text"
}
]
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-956fa139250409e2",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Got enough pricing info already: free for up to 50,000 MRUs, Pro is $20/month (base fee included?) then $0.02 per MRU/month after that, with volume discounts applied. B2B plans available for organizations.
Now I'll build the example. The lightest option is a vanilla HTML page using the Clerk JS SDK via CDN (no build step, no local stack). I'll write the following:
- /sandbox/repo/clerk-example/index.html — loads clerk-js from CDN, uses a publishable key, mounts SignIn/SignUp or uses openSignIn, displays the session user
- README.md — how to obtain keys from the Clerk dashboard, how to run it (just open it in a browser / serve statically)
Blocker: without a Clerk account I can't obtain a real publishable key, so I can't run it end-to-end. I'll communicate this clearly.
Also, I'll add an optional server-side snippet in the README showing token verification via @clerk/backend (curl or node), but keep it concise.
Pricing confirmed. Clerk is a hosted authentication service with a full-fledged developer workflow (CDN JS SDK, npm SDK, REST Backend API), and there's an actionable approach. The lightest possible quickstart is the Clerk JS SDK via CDN — no build steps, no local stack required. I'll build that now:
File edits
1 file
Writtenclerk-example/index.htmlView changes
/sandbox/repo/clerk-example/index.html
Written content · previous contents were not recorded
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Clerk Vanilla JS Example</title><style>body { font-family: system-ui, sans-serif; max-width: 640px; margin: 4rem auto; padding: 0 1rem; }pre { background: #f4f4f5; padding: 1rem; border-radius: 8px; overflow-x: auto; }button { padding: 0.6rem 1.2rem; font-size: 1rem; border-radius: 8px; border: 1px solid #ccc; cursor: pointer; }#error { color: #b00020; }</style></head><body><h1>Clerk Auth Demo</h1><p id="error"></p><div id="signed-out"><p>You are signed out.</p><button id="sign-in-btn">Sign in / Sign up</button></div><div id="signed-in" hidden><p>Signed in as <strong id="user-identifier"></strong></p><pre id="session-token"></pre><button id="sign-out-btn">Sign out</button></div><script>// Replace with the publishable key from your Clerk dashboard// (Dashboard -> Instances -> your instance -> API Keys).// Publishable keys (pk_...) are safe to expose in client code.const PUBLISHABLE_KEY = "pk_test_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";const errorEl = document.getElementById("error");if (PUBLISHABLE_KEY.includes("XXXX")) {errorEl.textContent = "Set your Clerk publishable key (pk_...) in index.html first.";}// Load Clerk JS from the CDN (no build step, no bundler)const script = document.createElement("script");script.async = true;script.src = "https://cdn.jsdelivr.net/npm/@clerk/clerk-js@latest/dist/clerk.browser.js";script.dataset.clerkPublishableKey = PUBLISHABLE_KEY;script.onload = () => init();script.onerror = () => (errorEl.textContent = "Failed to load Clerk JS from CDN.");document.head.appendChild(script);async function init() {const clerk = new window.Clerk(PUBLISHABLE_KEY);await clerk.load();const signedOutEl = document.getElementById("signed-out");const signedInEl = document.getElementById("signed-in");function render(session) {signedOutEl.hidden = !!session;signedInEl.hidden = !session;if (session) {const user = session.user;const identifier =user.primaryEmailAddress?.emailAddress ||user.primaryPhoneNumber?.phoneNumber ||user.username ||user.id;document.getElementById("user-identifier").textContent = identifier;// The session JWT is what you'd send to your backend for verification// (e.g. via @clerk/backend's verifyToken or the JWKS endpoint).session.getToken().then((jwt) => {document.getElementById("session-token").textContent ="Session JWT (truncated):\n" + jwt.slice(0, 60) + "...";});}}// Re-render on any auth state changeclerk.addListener(({ session }) => render(session));render(clerk.session);document.getElementById("sign-in-btn").onclick = () => clerk.openSignIn();document.getElementById("sign-out-btn").onclick = () => clerk.signOut();}</script></body></html>
Source: write · chatcmpl-tool-b02457b5cc9173a3
Recorded tool call
{
"type": "tool_call",
"seq": 19,
"ts": "2026-10-06T01:50:05.942Z",
"name": "write",
"turn": 1,
"input": {
"path": "/sandbox/repo/clerk-example/index.html",
"content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Clerk Vanilla JS Example</title>\n <style>\n body { font-family: system-ui, sans-serif; max-width: 640px; margin: 4rem auto; padding: 0 1rem; }\n pre { background: #f4f4f5; padding: 1rem; border-radius: 8px; overflow-x: auto; }\n button { padding: 0.6rem 1.2rem; font-size: 1rem; border-radius: 8px; border: 1px solid #ccc; cursor: pointer; }\n #error { color: #b00020; }\n </style>\n</head>\n<body>\n <h1>Clerk Auth Demo</h1>\n <p id=\"error\"></p>\n\n <div id=\"signed-out\">\n <p>You are signed out.</p>\n <button id=\"sign-in-btn\">Sign in / Sign up</button>\n </div>\n\n <div id=\"signed-in\" hidden>\n <p>Signed in as <strong id=\"user-identifier\"></strong></p>\n <pre id=\"session-token\"></pre>\n <button id=\"sign-out-btn\">Sign out</button>\n </div>\n\n <script>\n // Replace with the publishable key from your Clerk dashboard\n // (Dashboard -> Instances -> your instance -> API Keys).\n // Publishable keys (pk_...) are safe to expose in client code.\n const PUBLISHABLE_KEY = \"pk_test_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\";\n\n const errorEl = document.getElementById(\"error\");\n if (PUBLISHABLE_KEY.includes(\"XXXX\")) {\n errorEl.textContent = \"Set your Clerk publishable key (pk_...) in index.html first.\";\n }\n\n // Load Clerk JS from the CDN (no build step, no bundler)\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = \"https://cdn.jsdelivr.net/npm/@clerk/clerk-js@latest/dist/clerk.browser.js\";\n script.dataset.clerkPublishableKey = PUBLISHABLE_KEY;\n script.onload = () => init();\n script.onerror = () => (errorEl.textContent = \"Failed to load Clerk JS from CDN.\");\n document.head.appendChild(script);\n\n async function init() {\n const clerk = new window.Clerk(PUBLISHABLE_KEY);\n await clerk.load();\n\n const signedOutEl = document.getElementById(\"signed-out\");\n const signedInEl = document.getElementById(\"signed-in\");\n\n function render(session) {\n signedOutEl.hidden = !!session;\n signedInEl.hidden = !session;\n if (session) {\n const user = session.user;\n const identifier =\n user.primaryEmailAddress?.emailAddress ||\n user.primaryPhoneNumber?.phoneNumber ||\n user.username ||\n user.id;\n document.getElementById(\"user-identifier\").textContent = identifier;\n // The session JWT is what you'd send to your backend for verification\n // (e.g. via @clerk/backend's verifyToken or the JWKS endpoint).\n session.getToken().then((jwt) => {\n document.getElementById(\"session-token\").textContent =\n \"Session JWT (truncated):\\n\" + jwt.slice(0, 60) + \"...\";\n });\n }\n }\n\n // Re-render on any auth state change\n clerk.addListener(({ session }) => render(session));\n render(clerk.session);\n\n document.getElementById(\"sign-in-btn\").onclick = () => clerk.openSignIn();\n document.getElementById(\"sign-out-btn\").onclick = () => clerk.signOut();\n }\n </script>\n</body>\n</html>\n"
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-b02457b5cc9173a3",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 21,
"ts": "2026-10-06T01:50:05.942Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully wrote 3217 bytes to /sandbox/repo/clerk-example/index.html",
"type": "text"
}
]
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-b02457b5cc9173a3",
"is_error": false,
"tool_kind": "file_edit"
}File edits
1 file
Writtenclerk-example/README.mdView changes
/sandbox/repo/clerk-example/README.md
Written content · previous contents were not recorded
# Clerk Vanilla JS ExampleMinimal Clerk auth demo using the hosted Clerk service through its CDN-hostedJS SDK (`@clerk/clerk-js`). No build step, no local server stack, no npm install.## Setup (2 minutes)1. Create a free account at https://dashboard.clerk.com and create anapplication/instance (pick Email or Social sign-in options).2. Copy the **publishable key** (`pk_test_...` or `pk_live_...`) from**Configure → API Keys**.3. Paste it into `PUBLISHABLE_KEY` in `index.html`.4. Open `index.html` in a browser (double-click it, or `npx serve .` if youwant a static host). Sign in — the page shows your identifier and atruncated session JWT.## Notes- `pk_` keys are safe in client code. The **secret key** (`sk_...`) must stayserver-side only.- The session JWT (`session.getToken()`) is what a backend verifies. With the`@clerk/backend` SDK that's `verifyToken(jwt, { secretKey })`; with plainHTTPS you can fetch the instance's JWKS and verify the signature yourself.- To call the Clerk Backend API from a server:`curl https://api.clerk.com/v1/users -H "Authorization: Bearer sk_..."`.## Pricing (as of check date, from clerk.com/pricing)- **Free tier**: up to 50,000 Monthly Retained Users (MRUs) and 100 monthlyretained organizations per month, no credit card required.- **Pro**: from $20/mo, then $0.02/MRU/mo beyond the free allowance, withvolume discounts at higher tiers.- Billing is based on **MRUs, not MAU**: a user counts only if they wereactive on at least one day ("First Day Free" model), so signups that neveractivate don't cost you anything.- Add-ons priced separately, e.g. SMS at $0.01/message (international atmarket rate); B2B/organizations features on dedicated plans.
Source: write · chatcmpl-tool-9aab8857fe719346
Recorded tool call
{
"type": "tool_call",
"seq": 20,
"ts": "2026-10-06T01:50:05.942Z",
"name": "write",
"turn": 1,
"input": {
"path": "/sandbox/repo/clerk-example/README.md",
"content": "# Clerk Vanilla JS Example\n\nMinimal Clerk auth demo using the hosted Clerk service through its CDN-hosted\nJS SDK (`@clerk/clerk-js`). No build step, no local server stack, no npm install.\n\n## Setup (2 minutes)\n\n1. Create a free account at https://dashboard.clerk.com and create an\n application/instance (pick Email or Social sign-in options).\n2. Copy the **publishable key** (`pk_test_...` or `pk_live_...`) from\n **Configure → API Keys**.\n3. Paste it into `PUBLISHABLE_KEY` in `index.html`.\n4. Open `index.html` in a browser (double-click it, or `npx serve .` if you\n want a static host). Sign in — the page shows your identifier and a\n truncated session JWT.\n\n## Notes\n\n- `pk_` keys are safe in client code. The **secret key** (`sk_...`) must stay\n server-side only.\n- The session JWT (`session.getToken()`) is what a backend verifies. With the\n `@clerk/backend` SDK that's `verifyToken(jwt, { secretKey })`; with plain\n HTTPS you can fetch the instance's JWKS and verify the signature yourself.\n- To call the Clerk Backend API from a server:\n `curl https://api.clerk.com/v1/users -H \"Authorization: Bearer sk_...\"`.\n\n## Pricing (as of check date, from clerk.com/pricing)\n\n- **Free tier**: up to 50,000 Monthly Retained Users (MRUs) and 100 monthly\n retained organizations per month, no credit card required.\n- **Pro**: from $20/mo, then $0.02/MRU/mo beyond the free allowance, with\n volume discounts at higher tiers.\n- Billing is based on **MRUs, not MAU**: a user counts only if they were\n active on at least one day (\"First Day Free\" model), so signups that never\n activate don't cost you anything.\n- Add-ons priced separately, e.g. SMS at $0.01/message (international at\n market rate); B2B/organizations features on dedicated plans.\n"
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-9aab8857fe719346",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 22,
"ts": "2026-10-06T01:50:05.942Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully wrote 1756 bytes to /sandbox/repo/clerk-example/README.md",
"type": "text"
}
]
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-9aab8857fe719346",
"is_error": false,
"tool_kind": "file_edit"
}›Thinking…
Perform a sanity check that the CDN URL resolves (a simple HEAD request), and verify that the sample HTML is valid. After that, report back.
timeout 15 curl -sI https://cdn.jsdelivr.net/npm/@clerk/clerk-js@latest/dist/clerk.browser.js | head -3
HTTP/2 200
HTTP/2 200 date: Tue, 06 Oct 2026 01:50:08 GMT content-type: application/javascript; charset=utf-8
Recorded tool call
{
"type": "tool_call",
"seq": 25,
"ts": "2026-10-06T01:50:08.415Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 15 curl -sI https://cdn.jsdelivr.net/npm/@clerk/clerk-js@latest/dist/clerk.browser.js | head -3"
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-bb8939fbfc5be1fd",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 26,
"ts": "2026-10-06T01:50:08.781Z",
"turn": 1,
"output": {
"content": [
{
"text": "HTTP/2 200 \r\ndate: Tue, 06 Oct 2026 01:50:08 GMT\r\ncontent-type: application/javascript; charset=utf-8\r\n",
"type": "text"
}
]
},
"run_id": "cmuw0t0g800zu0ivpwt6rib08",
"tool_id": "chatcmpl-tool-bb8939fbfc5be1fd",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Confirmed that the CDN URL is valid. Done. To summarize: the files created, pricing, ease of management, and where we ran into obstacles.
Done. Here's the summary:
What I built
clerk-example/index.html— a complete auth demo using the Clerk JS SDK via CDN (@clerk/clerk-js, URL verified live, HTTP 200). No npm install, no build step, no local stack. It handles sign-in/sign-up, displays the signed-in user, and fetches the session JWT (what you'd verify server-side).clerk-example/README.md— setup steps, backend token-verification notes, and pricing.
How pricing works (verified from clerk.com/pricing)
- Free tier: up to 50,000 Monthly Retained Users (MRUs) and 100 monthly retained organizations per month — no credit card.
- Pro: from $20/mo, then $0.02/MRU/mo beyond the free allowance, with volume discounts.
- Billing uses MRU, not MAU: a user only counts if active on ≥1 day of the month ("First Day Free"), so inactive signups are free.
- Add-ons separate (e.g., SMS $0.01/message; B2B org features on their own plan).
Is it easy for me to manage?
Mostly yes. Clerk is API-first: npm SDKs, a REST Backend API, and JWKS-based token verification — all scriptable with curl/SDK calls, which suits an agent workflow well. The one friction point: instance creation and key issuance happen in a web dashboard tied to a human account, so there's no fully headless bootstrap path for me.
Where I'm blocked (stating plainly)
I can't complete an end-to-end run: the example needs a publishable key (pk_...) from a Clerk dashboard account, which requires you to sign up (email/OAuth). I verified everything I can without it — SDK availability on npm (@clerk/nextjs 7.9.11, @clerk/backend 3.23.0) and the CDN asset. Once you paste your key into index.html, opening the file in a browser is the entire "run" step. I did not start any dev servers or long-running processes.
AX Fundamentals
23 checks. Open an area for details.
This check is a quick preview. Test more tasks and models with Gauge Agents.
Test your product with Gauge Agents