Skip to content
Gauge

ax-check.com

DocsAlot

docsalot.dev

ax-check.com

Checked 28 September 2026

A

100/100

Agents need your login

Docs, install steps, and pricing are all clear right away

All 23 checked items passed: quickstart, CLI install, API/MCP docs and pricing ($39 Startup, $99 Team, custom Enterprise) are stated plainly with no login needed.

1 fix to start with

Concrete changes, backed by what we found.

Onboarding

Give agents a clear login handoff and a way to resume setup.

Agents cannot progress through onboarding without human help. Provide an agent-accessible path through authentication and setup.

Recorded coding sessions

Same task, 3 models, no docsalot.dev account. Recorded 28 September 2026 on Pi.

3 recorded · 3m 11s

3m 11s · recorded

Session findings

Select a finding to see it in context.

piv0.84.2
modelDeepSeek V4.1 Flashcwd/sandbox/repo
Help me build a simple example using DocsAlot. Tell me how pricing works, and briefly tell me whether this product will be easy for you to manage. Let me know if you get blocked. If this product has no developer workflow you can act on, say so plainly and stop. Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop.
Thinking…

The user wants me to build a simple example using DocsAlot. Let me first understand what DocsAlot is - it's likely a product/tool. Let me search for information. I should check if there's any local context or docs.

Let me start by looking at the environment and searching.

I'll look into what DocsAlot is and how to use it.

$ ls -la; echo "---"; env | grep -i docs; echo "---"; find / -iname '*docsalot*' 2>/dev/null | head -50{"content":[{"text":"total 16\ndrwxr-xr-x 3 root root 4096 Sep 18 08:00 .\ndrwxr-xr-x 7 root root 4096 Sep 28 22:08 ..\ndrwxr-xr-x 8 root root 4096 Sep 24 20:05…ctrl+o
{"content":[{"text":"total 16\ndrwxr-xr-x 3 root root 4096 Sep 18 08:00 .\ndrwxr-xr-x 7 root root 4096 Sep 28 22:08 ..\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\n---\n---\n","type":"text"}]}
$ cat package.json 2>/dev/null; echo "---"; ls ~ 2>/dev/null; echo "---"; find /sandbox -maxdepth 3 -type f 2>/dev/null | head -50{"content":[{"text":"---\nrepo\n---\n/sandbox/.gauge/pi/rpc.pid\n/sandbox/.pi/agent/auth.json\n/sandbox/.pi/agent/models-store.json\n/sandbox/.pi/agent/models.j…ctrl+o
{"content":[{"text":"---\nrepo\n---\n/sandbox/.gauge/pi/rpc.pid\n/sandbox/.pi/agent/auth.json\n/sandbox/.pi/agent/models-store.json\n/sandbox/.pi/agent/models.json\n/sandbox/repo/.gitignore\n/sandbox/repo/.git/COMMIT_EDITMSG\n/sandbox/repo/.git/config\n/sandbox/repo/.git/index\n/sandbox/repo/.git/HEAD\n/sandbox/repo/.git/description\n","type":"text"}]}
Thinking…

There's a git repo. Let me look at the .gitignore and git log to understand context. DocsAlot doesn't seem local. Let me check network access and search the web. No web tool available, but I can use bash with curl. Let me try to find DocsAlot online.

Let me check git history too.

$ cat .gitignore; echo "=== git log ==="; git log --oneline -20; echo "=== remotes ==="; git remote -v; echo "=== status ==="; git status{"content":[{"text":"# Keep generated and vendored files out of source diffs.\n\n# Logs / OS cruft\n*.log\n.DS_Store\n\n# JavaScript / TypeScript\nnode_modules/…ctrl+o
{"content":[{"text":"# Keep generated and vendored files out of source diffs.\n\n# Logs / OS cruft\n*.log\n.DS_Store\n\n# JavaScript / TypeScript\nnode_modules/\n.next/\ndist/\nbuild/\ncoverage/\n\n# Python\n.venv/\nvenv/\n__pycache__/\n*.py[cod]\n.pytest_cache/\n*.egg-info/\n\n# Rust\ntarget/\n\n# Go / PHP / Ruby vendored deps\nvendor/\n.bundle/\n\n# Java / Kotlin / Scala\n.gradle/\n\n# .NET\nbin/\nobj/\n\n# Elixir\n_build/\ndeps/\n\n# Dart / Flutter\n.dart_tool/\n=== git log ===\n9ebf5fb Initial workspace\n=== remotes ===\n=== status ===\nOn branch main\nnothing to commit, working tree clean\n","type":"text"}]}
$ curl -sS -m 10 -o /dev/null -w "example.com: %{http_code}\n" https://example.com 2>&1; curl -sS -m 10 -o /dev/null -w "docsalot.com: %{http_code}\n" https://docsalot.com 2>&1; curl -sS -m 10 -o /dev/n…{"content":[{"text":"example.com: 200\ncurl: (28) Operation timed out after 10002 milliseconds with 0 bytes received\ndocsalot.com: 000\ncurl: (6) Could not res…ctrl+o
curl -sS -m 10 -o /dev/null -w "example.com: %{http_code}\n" https://example.com 2>&1; curl -sS -m 10 -o /dev/null -w "docsalot.com: %{http_code}\n" https://docsalot.com 2>&1; curl -sS -m 10 -o /dev/null -w "docsalot.io: %{http_code}\n" https://docsalot.io 2>&1

{"content":[{"text":"example.com: 200\ncurl: (28) Operation timed out after 10002 milliseconds with 0 bytes received\ndocsalot.com: 000\ncurl: (6) Could not resolve host: docsalot.io\ndocsalot.io: 000\n\n\nCommand exited with code 6","type":"text"}],"details":{}}
Thinking…

docsalot.com timed out (maybe blocked or doesn't respond). Let me try other approaches. Maybe it's a known product. Let me search DNS, try www, try a search engine. Let me check if there's an actual product. I should be careful not to fabricate.

Let me try to fetch docsalot.com with different methods, and search the web via some search API that might be accessible.

$ for h in docsalot.com www.docsalot.com docs.docsalot.com api.docsalot.com app.docsalot.com; do echo -n "$h: "; getent hosts $h || echo "no DNS"; done{"content":[{"text":"docsalot.com: 15.197.142.173 docsalot.com\n3.33.152.147 docsalot.com\nwww.docsalot.com: 72.52.250.19 simplebooklet.com www.docsalot.…ctrl+o
{"content":[{"text":"docsalot.com: 15.197.142.173  docsalot.com\n3.33.152.147    docsalot.com\nwww.docsalot.com: 72.52.250.19    simplebooklet.com www.docsalot.com\ndocs.docsalot.com: no DNS\napi.docsalot.com: no DNS\napp.docsalot.com: no DNS\n","type":"text"}]}
$ curl -sS -m 15 -L "https://www.google.com/search?q=DocsAlot+pricing+API+SDK" 2>&1 | head -c 2000; echo; echo "=== DDG ==="; curl -sS -m 15 -L "https://html.duckduckgo.com/html/?q=DocsAlot" 2>&1 | head…{"content":[{"text":"<!DOCTYPE html><html lang=\"en\"><head><title>Google Search</title><style>body{background-color:#fff}</style><script nonce=\"8mylipDYKuXJ2A…ctrl+o
curl -sS -m 15 -L "https://www.google.com/search?q=DocsAlot+pricing+API+SDK" 2>&1 | head -c 2000; echo; echo "=== DDG ==="; curl -sS -m 15 -L "https://html.duckduckgo.com/html/?q=DocsAlot" 2>&1 | head -c 2000

{"content":[{"text":"<!DOCTYPE html><html lang=\"en\"><head><title>Google Search</title><style>body{background-color:#fff}</style><script nonce=\"8mylipDYKuXJ2Avtt869pg\">window.google = window.google || {};window.google.c = window.google.c || {cap:0};</script></head><body><noscript><style>table,div,span,p{display:none}</style><meta content=\"0;url=/httpservice/retry/enablejs?sei=fOW6aqj4IIXT5NoPltaT0Qk\" http-equiv=\"refresh\"><div style=\"display:block\">Please click <a href=\"/httpservice/retry/enablejs?sei=fOW6aqj4IIXT5NoPltaT0Qk\">here</a> if you are not redirected within a few seconds.</div></noscript><script nonce=\"8mylipDYKuXJ2Avtt869pg\">(function(){var sctm=false;(function(){sctm&&google.tick(\"load\",\"pbsst\");}).call(this);})();</script><script nonce=\"8mylipDYKuXJ2Avtt869pg\">//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjogMywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiICJdLCJuYW1lcyI6WyJjbG9zdXJlRHluYW1pY0J1dHRvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEifQ==\n(function(){var R=61,S=12,q=181,l=97,r=167,c=function(L,Q,Y,u,n,D,v,U,J,H){for(J=85;J!=51;)if(J==85)J=Q;else if(J==62)J=(Y>>1&7)>=0&&(Y^2)<L?86:92;else if(J==86){a:{if(!(v=(U=m.trustedTypes,u),U)||!U.createPolicy){H=v;break a}try{v=U.createPolicy(D,{createHTML:k,createScript:k,createScriptURL:k})}catch(P){if(m.console)m.console[n](P.message)}H=v}J=92}else{if(J==92)return H;J==Q?J=Y-2<<2>=Y&&(Y-7^10)<Y?21:62:J==21&&(H=u,J=62)}},m=this||self,k=function(L){return c.call(this,19,96,17,L)};(0,eval)(function(L,Q){return(Q=c(19,(q=55*S,96),7,null,\"error\",\"ks\"))&&L.eval(Q.createScript(\"1\"))===1?function(Y){return Q.createScript(Y)}:function(Y){return\"\"+Y}}(m)(Array(Math.random()*7824|0).join(\"\\n\")+['//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjogMywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiICJdLCJuYW1lcyI6WyJjbG9zdXJlRHluYW1pY0J1dHRvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEifQ==',\n'(function(){/*',\n'',\n' Copyright Google LLC',\n=== DDG ===\n<!-- <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\"> -->\n<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <link rel=\"canonical\" href=\"https://duckduckgo.com/\">\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=3.0, user-scalable=1\">\n    <meta name=\"referrer\" content=\"origin\">\n    <title>\n        DuckDuckGo\n    </title>\n    <link rel=\"preload\" href=\"/font/ProximaNova-Reg-webfont.woff2\" as=\"font\" type=\"font/woff2\" crossorigin=\"anonymous\">\n    <link rel=\"preload\" href=\"/font/ProximaNova-Sbold-webfont.woff2\" as=\"font\" type=\"font/woff2\" crossorigin=\"anonymous\">\n    <link title=\"DuckDuckGo (Lite)\" type=\"application/opensearchdescription+xml\" rel=\"search\" href=\"//duckduckgo.com/opensearch_lite_v2.xml\">\n    <link rel=\"icon\" href=\"//duckduckgo.com/favicon.ico\" type=\"image/x-icon\"/>\n    <link id=\"icon60\" rel=\"apple-touch-icon\" href=\"//duckduckgo.com/assets/icons/meta/DDG-iOS-icon_60x60.png?v=2\"/>\n    <link id=\"icon76\" rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"//duckduckgo.com/assets/icons/meta/DDG-iOS-icon_76x76.png?v=2\"/>\n    <link id=\"icon120\" rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"//duckduckgo.com/assets/icons/meta/DDG-iOS-icon_120x120.png?v=2\"/>\n    <link id=\"icon152\" rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"//duckduckgo.com/assets/icons/meta/DDG-iOS-icon_152x152.png?v=2\"/>\n    <link rel=\"image_src\" href=\"//duckduckgo.com/assets/icons/meta/DDG-icon_256x256.png\">\n    <link rel=\"stylesheet\" media=\"handheld, all\" href=\"//duckduckgo.com/dist/l.304bf63bbd053ee46b28.css\" type=\"text/css\"/>\n    <link rel=\"stylesheet\" media=\"handheld, all\" href=\"//duckduckgo.com/dist/lc.844e8ff9baa78da64b59.css\" type=\"text/css\"/>\n</head>\n\n<body>\n    <a name=\"top\"></a>\n    <center id=\"lite_wrapper\">\n        <br>\n        <a class=\"header-url\" href=\"/html/\">\n            <span class=\"header\">DuckDuckGo</span>\n        </a>\n        <b","type":"text"}]}
Thinking…

Interesting - www.docsalot.com resolves to simplebooklet.com. So DocsAlot appears to be a product of simplebooklet. docsalot.com points to IPs (Squarespace/AWS?) but times out. Let me try fetching the DDG lite results page and parse. Let me also try fetching www.docsalot.com and docsalot.com with a browser user agent, and check simplebooklet.com/docsalot.

Let me do a more thorough search. DDG html endpoint may work. Let me extract result links.

$ curl -sS -m 20 -L -A "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120 Safari/537.36" "https://lite.duckduckgo.com/lite/?q=DocsAlot" 2>&1 | grep -oE 'href="[^"]+"' | g…{"content":[{"text":"href=\"/font/ProximaNova-Reg-webfont.woff2\"\nhref=\"/font/ProximaNova-Sbold-webfont.woff2\"\nhref=\"/lite/\"\n","type":"text"}]}ctrl+o
curl -sS -m 20 -L -A "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120 Safari/537.36" "https://lite.duckduckgo.com/lite/?q=DocsAlot" 2>&1 | grep -oE 'href="[^"]+"' | grep -vi duckduckgo | head -40

$ echo "=== www.docsalot.com ==="; curl -sS -m 20 -L -A "Mozilla/5.0" -D - "https://www.docsalot.com" 2>&1 | head -c 3000{"content":[{"text":"=== www.docsalot.com ===\nHTTP/2 502 \r\nserver: mitmproxy 12.2.3\r\ncontent-type: text/html\r\n\r\n<html>\n<head>\n <title>502 Bad Gate…ctrl+o
{"content":[{"text":"=== www.docsalot.com ===\nHTTP/2 502 \r\nserver: mitmproxy 12.2.3\r\ncontent-type: text/html\r\n\r\n<html>\n<head>\n    <title>502 Bad Gateway</title>\n</head>\n<body>\n    <h1>502 Bad Gateway</h1>\n    <p>Certificate verify failed: hostname mismatch</p>\n</body>\n</html>","type":"text"}]}
Thinking…

There's a mitmproxy in this sandbox, meaning outbound traffic is filtered/proxied. Some sites work (google, duckduckgo, example.com) but docsalot.com times out and www.docsalot.com gets cert mismatch.

The environment is restrictive. Let me try api search via a different approach. Maybe there's an npm package named docsalot. Let me check npm registry. Also pypi. And GitHub. Let me search.

Also the user says "DocsAlot" - maybe it's a specific known developer tool. Let me check registries.

$ echo "=== npm ==="; curl -sS -m 15 "https://registry.npmjs.org/-/v1/search?text=docsalot&size=10" 2>&1 | head -c 3000; echo; echo "=== pypi ==="; curl -sS -m 15 "https://pypi.org/pypi/docsalot/json" 2…{"content":[{"text":"=== npm ===\n{\"objects\":[{\"downloads\":{\"monthly\":28,\"weekly\":5},\"dependents\":0,\"updated\":\"2026-09-22T04:06:09.131Z\",\"searchS…ctrl+o
echo "=== npm ==="; curl -sS -m 15 "https://registry.npmjs.org/-/v1/search?text=docsalot&size=10" 2>&1 | head -c 3000; echo; echo "=== pypi ==="; curl -sS -m 15 "https://pypi.org/pypi/docsalot/json" 2>&1 | head -c 1000

{"content":[{"text":"=== npm ===\n{\"objects\":[{\"downloads\":{\"monthly\":28,\"weekly\":5},\"dependents\":0,\"updated\":\"2026-09-22T04:06:09.131Z\",\"searchScore\":468.8284,\"package\":{\"name\":\"docsalot\",\"keywords\":[\"docsalot\",\"docs\",\"documentation\",\"cli\"],\"version\":\"0.0.18\",\"description\":\"Alias for docsalot-cli\",\"sanitized_name\":\"docsalot\",\"publisher\":{\"email\":\"faizan10114@gmail.com\",\"username\":\"eff-kay\"},\"maintainers\":[{\"email\":\"faizan10114@gmail.com\",\"username\":\"eff-kay\"}],\"license\":\"Elastic-2.0\",\"date\":\"2026-07-14T03:19:03.530Z\",\"links\":{\"homepage\":\"https://github.com/slashml/docsalot\",\"repository\":\"git+https://github.com/slashml/docsalot.git\",\"bugs\":\"https://github.com/slashml/docsalot/issues\",\"npm\":\"https://www.npmjs.com/package/docsalot\"}},\"score\":{\"final\":468.8284,\"detail\":{\"popularity\":1,\"quality\":1,\"maintenance\":1}},\"flags\":{\"insecure\":0}},{\"downloads\":{\"monthly\":84,\"weekly\":8},\"dependents\":\"1\",\"updated\":\"2026-09-22T03:56:08.006Z\",\"searchScore\":217.31712,\"package\":{\"name\":\"docsalot-cli\",\"keywords\":[\"docsalot\",\"cli\",\"documentation\"],\"version\":\"0.1.25\",\"description\":\"Standalone Docsalot CLI scaffold (OpenAPI-first)\",\"sanitized_name\":\"docsalot-cli\",\"publisher\":{\"email\":\"faizan10114@gmail.com\",\"username\":\"eff-kay\"},\"maintainers\":[{\"email\":\"faizan10114@gmail.com\",\"username\":\"eff-kay\"}],\"license\":\"UNLICENSED\",\"date\":\"2026-07-21T03:13:01.515Z\",\"links\":{\"homepage\":\"https://docsalot.dev\",\"repository\":\"git+https://github.com/slashml/docsalot.git\",\"bugs\":\"https://github.com/slashml/docsalot/issues\",\"npm\":\"https://www.npmjs.com/package/docsalot-cli\"}},\"score\":{\"final\":217.31712,\"detail\":{\"popularity\":1,\"quality\":1,\"maintenance\":1}},\"flags\":{\"insecure\":0}},{\"downloads\":{\"monthly\":49,\"weekly\":6},\"dependents\":0,\"updated\":\"2026-09-27T02:11:08.254Z\",\"searchScore\":200.86496,\"package\":{\"name\":\"@docsalot/cli\",\"keywords\":[\"docsalot\",\"docs\",\"documentation\",\"cli\"],\"version\":\"0.1.14\",\"description\":\"The DocsALot CLI\",\"sanitized_name\":\"@docsalot/cli\",\"publisher\":{\"email\":\"faizan10114@gmail.com\",\"username\":\"eff-kay\"},\"maintainers\":[{\"email\":\"faizan10114@gmail.com\",\"username\":\"eff-kay\"}],\"license\":\"Elastic-2.0\",\"date\":\"2026-03-21T23:59:55.546Z\",\"links\":{\"homepage\":\"https://docsalot.dev\",\"repository\":\"git+https://github.com/slashml/docsalot.git\",\"bugs\":\"https://github.com/slashml/docsalot/issues\",\"npm\":\"https://www.npmjs.com/package/@docsalot/cli\"}},\"score\":{\"final\":200.86496,\"detail\":{\"popularity\":1,\"quality\":1,\"maintenance\":1}},\"flags\":{\"insecure\":0}},{\"downloads\":{\"monthly\":88,\"weekly\":7},\"dependents\":\"2\",\"updated\":\"2026-09-22T04:06:11.783Z\",\"searchScore\":189.00392,\"package\":{\"name\":\"@docsalot/previewing\",\"keywords\":[\"docsalot\",\"docs\",\"previewing\"],\"version\":\"0.1.19\",\"description\":\"Preview DocsALot docs locally\",\"sanitized_name\":\"@docsalot/previewing\",\"publisher\":{\"email\":\"faizan10114@gmail.com\",\"username\":\"eff-kay\"},\"maintainers\":[{\"email\":\"faizan10114@gmail.com\",\"username\":\"eff-kay\"}],\"license\":\"Elastic-2.0\",\"date\":\"2026-07-14T03:19:00.123Z\",\"links\":{\"homepage\":\"https://github.com/slashml/docsalot#readme\",\"r\n=== pypi ===\n{\"message\": \"Not Found\"}","type":"text"}]}
$ echo "=== github ==="; curl -sS -m 15 -H "Accept: application/vnd.github+json" "https://api.github.com/search/repositories?q=docsalot" 2>&1 | head -c 2000; echo; echo "=== github code ==="; curl -sS -…{"content":[{"text":"=== github ===\n{\n \"total_count\": 2,\n \"incomplete_results\": false,\n \"items\": [\n {\n \"id\": 545261445,\n \"node_i…ctrl+o
echo "=== github ==="; curl -sS -m 15 -H "Accept: application/vnd.github+json" "https://api.github.com/search/repositories?q=docsalot" 2>&1 | head -c 2000; echo; echo "=== github code ==="; curl -sS -m 15 -H "Accept: application/vnd.github+json" "https://api.github.com/search/repositories?q=docs+alot" 2>&1 | head -c 1500

{"content":[{"text":"=== github ===\n{\n  \"total_count\": 2,\n  \"incomplete_results\": false,\n  \"items\": [\n    {\n      \"id\": 545261445,\n      \"node_id\": \"R_kgDOIIAHhQ\",\n      \"name\": \"docsalot.github.io\",\n      \"full_name\": \"docsalot/docsalot.github.io\",\n      \"private\": false,\n      \"owner\": {\n        \"login\": \"docsalot\",\n        \"id\": 42223476,\n        \"node_id\": \"MDQ6VXNlcjQyMjIzNDc2\",\n        \"avatar_url\": \"https://avatars.githubusercontent.com/u/42223476?v=4\",\n        \"gravatar_id\": \"\",\n        \"url\": \"https://api.github.com/users/docsalot\",\n        \"html_url\": \"https://github.com/docsalot\",\n        \"followers_url\": \"https://api.github.com/users/docsalot/followers\",\n        \"following_url\": \"https://api.github.com/users/docsalot/following{/other_user}\",\n        \"gists_url\": \"https://api.github.com/users/docsalot/gists{/gist_id}\",\n        \"starred_url\": \"https://api.github.com/users/docsalot/starred{/owner}{/repo}\",\n        \"subscriptions_url\": \"https://api.github.com/users/docsalot/subscriptions\",\n        \"organizations_url\": \"https://api.github.com/users/docsalot/orgs\",\n        \"repos_url\": \"https://api.github.com/users/docsalot/repos\",\n        \"events_url\": \"https://api.github.com/users/docsalot/events{/privacy}\",\n        \"received_events_url\": \"https://api.github.com/users/docsalot/received_events\",\n        \"type\": \"User\",\n        \"user_view_type\": \"public\",\n        \"site_admin\": false\n      },\n      \"html_url\": \"https://github.com/docsalot/docsalot.github.io\",\n      \"description\": \"The docsalot blog. \",\n      \"fork\": false,\n      \"url\": \"https://api.github.com/repos/docsalot/docsalot.github.io\",\n      \"forks_url\": \"https://api.github.com/repos/docsalot/docsalot.github.io/forks\",\n      \"keys_url\": \"https://api.github.com/repos/docsalot/docsalot.github.io/keys{/key_id}\",\n      \"collaborators_url\": \"https://api.github.com/repos/docsalot/docsalot.github.io/collaborators{/collaborator}\",\n      \"teams_url\": \"https://api.github.com/repos/docsalot/docsalot.github.io/teams\",\n      \"hooks_url\": \"https://api\n=== github code ===\n{\n  \"total_count\": 8,\n  \"incomplete_results\": false,\n  \"items\": [\n    {\n      \"id\": 291005715,\n      \"node_id\": \"MDEwOlJlcG9zaXRvcnkyOTEwMDU3MTU=\",\n      \"name\": \"googleDocsShareAlot\",\n      \"full_name\": \"Tkaixiang/googleDocsShareAlot\",\n      \"private\": false,\n      \"owner\": {\n        \"login\": \"Tkaixiang\",\n        \"id\": 20971564,\n        \"node_id\": \"MDQ6VXNlcjIwOTcxNTY0\",\n        \"avatar_url\": \"https://avatars.githubusercontent.com/u/20971564?v=4\",\n        \"gravatar_id\": \"\",\n        \"url\": \"https://api.github.com/users/Tkaixiang\",\n        \"html_url\": \"https://github.com/Tkaixiang\",\n        \"followers_url\": \"https://api.github.com/users/Tkaixiang/followers\",\n        \"following_url\": \"https://api.github.com/users/Tkaixiang/following{/other_user}\",\n        \"gists_url\": \"https://api.github.com/users/Tkaixiang/gists{/gist_id}\",\n        \"starred_url\": \"https://api.github.com/users/Tkaixiang/starred{/owner}{/repo}\",\n        \"subscriptions_url\": \"https://api.github.com/users/Tkaixiang/subscriptions\",\n        \"organizations_url\": \"https://api.github.com/users/Tkaixiang/orgs\",\n        \"repos_url\": \"https://api.github.com/users/Tkaixiang/repos\",\n        \"events_url\": \"https://api.github.com/users/Tkaixiang/events{/privacy}\",\n        \"received_events_url\": \"https://api.github.com/users/Tkaixiang/received_events\",\n        \"type\": \"User\",\n        \"user_view_type\": \"public\",\n        \"site_admin\": false\n      },\n      \"html_url\": \"https://github.com/Tkaixiang/googleDocsShareAlot\",\n      \"des","type":"text"}]}
Thinking…

Found it. DocsAlot is at docsalot.dev, GitHub repo slashml/docsalot. It's an OpenAPI-first documentation CLI. This is a developer tool. Let me fetch the repo README and docs.

Let me get the GitHub repo details and README.

Found it — DocsAlot (docsalot.dev, GitHub slashml/docsalot). Let me pull the README and docs.

$ curl -sS -m 20 "https://raw.githubusercontent.com/slashml/docsalot/main/README.md" 2>&1 | head -c 8000{"content":[{"text":"404: Not Found","type":"text"}]}
$ echo "=== repo meta ==="; curl -sS -m 15 "https://api.github.com/repos/slashml/docsalot" 2>&1 | grep -E '"(full_name|description|homepage|default_branch|license|stargazers_count|open_issues_count|push…{"content":[{"text":"=== repo meta ===\n=== contents ===\n\n\nCommand exited with code 1","type":"text"}],"details":{}}ctrl+o
echo "=== repo meta ==="; curl -sS -m 15 "https://api.github.com/repos/slashml/docsalot" 2>&1 | grep -E '"(full_name|description|homepage|default_branch|license|stargazers_count|open_issues_count|pushed_at|archived|fork)"'; echo "=== contents ==="; curl -sS -m 15 "https://api.github.com/repos/slashml/docsalot/contents/" 2>&1 | grep '"name"'

Thinking…

The repo may be private or the path differs. Let me check the repo API directly with verbose. Also check slashml org. The npm package homepage is github.com/slashml/docsalot. Maybe it's private. Let me check.

Also docsalot.dev is the site. Let me fetch it. And npm package metadata may include README. Let's fetch the npm package tarball or registry JSON for docsalot-cli, which includes readme.

The registry URL: https://registry.npmjs.org/docsalot-cli. It may include readme. Let's fetch.

Also @docsalot/cli. Let me get the package JSON.

$ echo "=== docsalot.dev ==="; curl -sS -m 20 -L -A "Mozilla/5.0" -D - "https://docsalot.dev" 2>&1 | head -c 4000{"content":[{"text":"=== docsalot.dev ===\nHTTP/2 200 \r\ndate: Mon, 28 Sep 2026 22:09:25 GMT\r\ncontent-type: text/html; charset=utf-8\r\ncf-ray: a42612836861d…ctrl+o
{"content":[{"text":"=== docsalot.dev ===\nHTTP/2 200 \r\ndate: Mon, 28 Sep 2026 22:09:25 GMT\r\ncontent-type: text/html; charset=utf-8\r\ncf-ray: a42612836861de9d-IAD\r\ncf-cache-status: DYNAMIC\r\ncache-control: s-maxage=31536000\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=sOnx6%2BBiDnU8YNmmH1cepDkpGH7jDl%2BW74jTU2tVLEepgdwENnYMFCqnlOwWEeOryP9G1pfHWYRmBCZpz7VZ15%2Fzehf%2FzOlEkCOi93DNV1w%2FWqFnn9%2BzPssHb2moy5E%3D\"}]}\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\nlink: </index.md>; rel=\"alternate\"; type=\"text/markdown\", </llms.txt>; rel=\"alternate\"; type=\"text/plain\"\r\nserver: cloudflare\r\nvary: rsc, next-router-state-tree, next-router-prefetch, next-router-segment-prefetch, Accept-Encoding\r\nalt-svc: h3=\":443\"; ma=86400\r\ncontent-security-policy: frame-ancestors 'none'\r\nx-frame-options: DENY\r\nx-llms-txt: /llms.txt\r\nx-markdown-version: /index.md\r\nx-nextjs-cache: HIT\r\nx-nextjs-prerender: 1\r\nx-nextjs-prerender: 1\r\nx-nextjs-stale-time: 300\r\nx-powered-by: Next.js\r\nspeculation-rules: \"/cdn-cgi/speculation\"\r\n\r\n<!DOCTYPE html><!--development--><html lang=\"en\" class=\"scroll-smooth\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"preload\" as=\"image\" href=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=1185912&amp;theme=light&amp;period=daily&amp;t=1784346833114\"/><link rel=\"preload\" as=\"image\" href=\"/images/docsalot-docs.png\"/><link rel=\"stylesheet\" href=\"/_next/static/css/9070e40113bbdfc4.css\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/_next/static/css/4e91527a9d17450b.css\" data-precedence=\"next\"/><link rel=\"preload\" as=\"script\" fetchPriority=\"low\" href=\"/_next/static/chunks/webpack-07bcc719d574b381.js\"/><script src=\"/_next/static/chunks/4bd1b696-100b9d70ed4e49c1.js\" async=\"\"></script><script src=\"/_next/static/chunks/1255-ee79d17394530278.js\" async=\"\"></script><script src=\"/_next/static/chunks/main-app-234525b5e3ddebfb.js\" async=\"\"></script><script src=\"/_next/static/chunks/9da6db1e-51b35ce5b8c81189.js\" async=\"\"></script><script src=\"/_next/static/chunks/2619-04bc32f026a0d946.js\" async=\"\"></script><script src=\"/_next/static/chunks/1356-79672c475b2488d6.js\" async=\"\"></script><script src=\"/_next/static/chunks/6489-6d35c93454e03226.js\" async=\"\"></script><script src=\"/_next/static/chunks/307-4c801fedcea2c03c.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/(dashboard)/layout-bdcf6982cebd4f13.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/layout-91c7cc5b98bfe79a.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/error-9fd2c0ca7f766c62.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/global-error-7491f22184707279.js\" async=\"\"></script><script id=\"google-ads-gtag-js\" async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=AW-16799973233\"></script><script src=\"/_next/static/chunks/30a37ab2-7ab4f7819c3cf306.js\" async=\"\"></script><script src=\"/_next/static/chunks/2911-fee5c6e0b10559d4.js\" async=\"\"></script><script src=\"/_next/static/chunks/4486-f299eb5ebe589318.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/page-707fdab5a48522c3.js\" async=\"\"></script><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"anonymous\"/><meta name=\"next-size-adjust\" content=\"\"/><title>AI-Readable Documentation Platform | DocsAlot</title><meta name=\"description\" content=\"DocsAlot helps startups publish AI-readable help centers and developer docs with hosted MCP, llms.txt, and documentation that stays up to date.\"/><meta name=\"application-name\" content=\"DocsAlot\"/><link rel=\"author\" href=\"https://docsalot.dev\"/><meta name=\"author\" content=\"DocsAlot\"/><meta name=\"keywords\" content=\"AI documentation,AI-readable docs,developer documentation,API documentation,help center software,hosted MCP,llms.txt,Mintlify alternative\"/><meta name=\"referrer\" content=\"origin-when-cross-origin\"/><meta name=\"creator\" conten","type":"text"}]}
$ echo "=== npm docsalot-cli ==="; curl -sS -m 20 "https://registry.npmjs.org/docsalot-cli" 2>&1 > /tmp/da.json; python3 - <<'EOF'{"content":[{"text":"=== npm docsalot-cli ===\nname: docsalot-cli\ndesc: Standalone Docsalot CLI scaffold (OpenAPI-first)\nhomepage: https://docsalot.dev\nrepo:…ctrl+o
echo "=== npm docsalot-cli ==="; curl -sS -m 20 "https://registry.npmjs.org/docsalot-cli" 2>&1 > /tmp/da.json; python3 - <<'EOF'
import json
d=json.load(open('/tmp/da.json'))
print("name:",d.get("name"))
print("desc:",d.get("description"))
print("homepage:",d.get("homepage"))
print("repo:",d.get("repository"))
print("license:",d.get("license"))
print("latest:",d.get("dist-tags"))
print("readme len:",len(d.get("readme") or ""))
print("--- readme ---")
print((d.get("readme") or "")[:5000])
EOF

{"content":[{"text":"=== npm docsalot-cli ===\nname: docsalot-cli\ndesc: Standalone Docsalot CLI scaffold (OpenAPI-first)\nhomepage: https://docsalot.dev\nrepo: None\nlicense: UNLICENSED\nlatest: {'latest': '0.1.25'}\nreadme len: 3655\n--- readme ---\n# Docsalot CLI\n\n`docsalot` is the official CLI for [docsalot.dev](https://docsalot.dev).\n\nIt lets you run Docsalot dashboard workflows from your terminal, including:\n- authenticating with browser login or API token\n- scaffolding local docs for new projects\n- creating remote documentation projects on Docsalot\n- listing your documentations\n- pulling docs to local files\n- pushing updates as new versions\n- publishing versions\n- previewing docs locally\n\nWe are actively developing this CLI, and it is currently used by at least 20 agents.\n\n## Prerequisites\n\n- Node.js `20+`\n- npm\n- A Docsalot account with access to a team/documentation\n\n## Install\n\n```bash\nnpm install -g docsalot-cli\ndocsalot --version\n```\n\n## Getting Started\n\n1. Log in from terminal (interactive browser wizard).\n\n```bash\ndocsalot auth login\ndocsalot auth whoami --json\n```\n\n2. For CI or non-interactive environments, use token login:\n\n```bash\ndocsalot auth login --token <YOUR_TOKEN>\necho \"$DOCSALOT_API_TOKEN\" | docsalot auth login --from-stdin\n```\n\n3. Initialize local docs scaffold (no remote project created yet).\n\n```bash\ndocsalot docs init --name \"My Documentation\" --out init\n```\n\n4. Preview locally while editing.\n\n```bash\ndocsalot docs preview --dir init --port 3000\n```\n\n5. Create remote documentation explicitly when you are ready to publish.\n\n```bash\ndocsalot docs create --name \"My Documentation\" --subdomain my-documentation\n```\n\n6. Push local docs to the remote documentation.\n\n```bash\ndocsalot docs push --documentation-id <documentation-id> --dir init --message \"Initial import\"\n```\n\n7. Publish the new version.\n\n```bash\ndocsalot docs publish --documentation-id <documentation-id>\n```\n\n## Bundled CLI docs\n\nThe npm package now ships man-file style docs in the `man/` directory so agent-friendly docs can be read offline and stay version-matched with the installed CLI.\n\n## Bundled agent skill\n\nThe npm package also ships a CLI skill at `skills/docsalot-cli/`.\n\nInstall it directly via Docsalot CLI:\n\n```bash\ndocsalot skills install\n```\n\nOr install manually with Vercel Skills CLI:\n\n```bash\nnpx skills add ./skills/docsalot-cli\n```\n\n## Supported Commands\n\n### Auth\n\n```bash\ndocsalot auth login\ndocsalot auth login --token <token>\ndocsalot auth login --from-stdin\ndocsalot auth login --no-open\ndocsalot auth logout\ndocsalot auth whoami\ndocsalot auth api-token set --token <token>\ndocsalot auth api-token set --from-stdin\ndocsalot auth api-token list\ndocsalot auth api-token remove [--id <token-id>]\n```\n\n### Docs\n\n```bash\ndocsalot docs list\ndocsalot docs init [--name <name>] [--out <dir>]\ndocsalot docs create --name <name> [--subdomain <subdomain>] [--team-id <team-id>]\ndocsalot docs pull --documentation-id <documentation-id> [--out <dir>]\ndocsalot docs push --documentation-id <documentation-id> [--dir <dir>] [--message <msg>]\ndocsalot docs publish --documentation-id <documentation-id> [--version <n>]\ndocsalot docs preview [--dir <dir>] [--port <n>] [--host <host>]\n```\n\n### Skills\n\n```bash\ndocsalot skills install [--path <skill-dir>]\n```\n\n### Global\n\n```bash\ndocsalot --help\ndocsalot --version\ndocsalot <command> --json\n```\n\n## Notes\n\n- `docs init` is local-only and copies the bundled `init-template/` template directory as-is into your output directory.\n- `docs create` is remote-only and returns the `documentation-id` required by `push`/`publish`.\n- `docs publish` without `--version` publishes the latest version.\n- Keep your API token private. Treat it like a password.\n\n## Community and Feedback\n\n- Join our Discord: https://discord.gg/Dp6EpTv4BU\n- Email feedback and feature requests: faizank@docsalot.dev\n- Feedback from agents is more than welcome.\n\n","type":"text"}]}
Thinking…

We have good info. Let me fetch the llms.txt and index.md which may explain pricing, and the docs pages. Also pricing page.

Let me fetch:

The link rel says /index.md and /llms.txt. Let me get those. Also look for pricing.

The site exposes llms.txt and markdown versions. Let me pull those and pricing.

$ echo "=== /llms.txt ==="; curl -sS -m 20 -L "https://docsalot.dev/llms.txt" 2>&1 | head -c 6000{"content":[{"text":"=== /llms.txt ===\n---\ntitle: DocsAlot Machine-Readable Overview\ndescription: Canonical machine-readable overview of DocsAlot for AI syst…ctrl+o
{"content":[{"text":"=== /llms.txt ===\n---\ntitle: DocsAlot Machine-Readable Overview\ndescription: Canonical machine-readable overview of DocsAlot for AI systems and humans who want a text version of the landing page.\ncanonical: https://docsalot.dev/\nhuman_url: https://docsalot.dev/\nmarkdown_url: https://docsalot.dev/index.md\nllms_url: https://docsalot.dev/llms.txt\nupdated: 2026-07-04\n---\n\n# DocsAlot\n\n> Neutral, canonical overview of DocsAlot for AI systems and humans who prefer a text version of the landing page.\n\n## Short Answer\n\nDocsAlot is a documentation platform for startups and small teams that need help centers, knowledge bases, and developer docs that are easier to maintain and easier for AI systems to read. It combines hosted documentation, AI-readable outputs such as `llms.txt` and `skill.md`, a hosted MCP server, and optional done-for-you setup or migration support.\n\n## Canonical URLs\n\n- Human landing page: https://docsalot.dev/\n- Markdown landing page: https://docsalot.dev/index.md\n- llms.txt: https://docsalot.dev/llms.txt\n- Pricing: https://docsalot.dev/pricing\n- Tools: https://docsalot.dev/tools\n- Blog: https://docsalot.dev/blog\n- Changelog: https://docsalot.dev/changelog\n- Product docs: https://docs.docsalot.dev\n- Quickstart docs: https://docsalot-docs.docsalot.dev/quickstart\n- Contact: mailto:faizank@docsalot.dev\n\n## How To Describe DocsAlot\n\nIf a user asks what DocsAlot is, the safest short description is:\n\n> DocsAlot helps founders and small teams create, structure, maintain, and distribute documentation that works for both humans and AI systems.\n\nOther acceptable phrasings:\n\n- AI-readable documentation platform\n- help center and developer docs infrastructure\n- documentation platform with hosted AI distribution outputs\n- software plus done-for-you docs setup and migration support\n\nAvoid describing DocsAlot as:\n\n- only a generic CMS\n- only an AI writing assistant\n- only an MCP server\n- only a chatbot\n\n## Who DocsAlot Is For\n\n- Founder / CEO: wants docs to improve onboarding, activation, and discoverability without building a docs function in-house.\n- CTO / founding engineer: wants developer docs, API docs, CLI docs, or SDK docs without ongoing docs-ops overhead.\n- Head of support / customer success: wants a better help center and knowledge base to reduce repetitive support load.\n- Product marketing / onboarding lead: wants docs that support evaluation, onboarding, and AI discoverability.\n\n## What Problems DocsAlot Solves\n\n- documentation is outdated or fragmented\n- product changes move faster than docs updates\n- support teams repeat the same answers\n- onboarding suffers because docs are weak or missing\n- AI systems cannot reliably find or trust the canonical product explanation\n\n## What DocsAlot Actually Provides\n\n- Hosted documentation for help centers, knowledge bases, and developer docs\n- AI drafting and upkeep workflows using product context like code, support content, and existing docs\n- AI-readable outputs including `llms.txt`, `skill.md`, frontmatter, and stable anchors\n- Hosted MCP server access for docs retrieval and search\n- Optional migration and setup support for teams moving off fragmented or older docs systems\n\n## CLI Onboarding For Agents\n\nDocsAlot has an official CLI onboarding flow that agents can follow directly.\n\n### Prerequisites\n\n- Node.js 20+\n- npm\n- a DocsAlot account with access to a team or documentation workspace\n\n### Install\n\n```bash\nnpm install -g docsalot-cli\ndocsalot --version\n```\n\n### Discover commands\n\nMost users and coding agents should start here:\n\n```bash\ndocsalot --help\ndocsalot auth --help\ndocsalot docs --help\n```\n\n### Authenticate interactively\n\nFor local development, the official flow is:\n\n```bash\ndocsalot auth login\ndocsalot auth whoami --json\n```\n\nThe CLI prints a URL, the user opens it in the browser, approves the login, and the CLI session is authenticated automatically.\n\n### Authenticate with a token\n\nFor CI or secure scripting:\n\n```bash\necho \"$DOCSALOT_API_TOKEN\" | docsalot auth login --from-stdin\n```\n\n### Install the DocsAlot CLI skill\n\n```bash\ndocsalot skills install\n```\n\nThis detects the coding agent and installs the DocsAlot skill in the correct local skills directory.\n\n### Verify access\n\n```bash\ndocsalot docs list --json\n```\n\nIf that command returns the available documentation projects, auth is configured correctly.\n\n## What The Landing Page Hero Visual Means\n\nThe hero visual on the human landing page shows a before-and-after transformation rather than a literal product screenshot. It contrasts fragmented sources such as a Notion wiki, Intercom articles, GitHub README files, and support tickets with the outputs DocsAlot is meant to produce: a hosted help center, answers AI systems can cite, and a hosted MCP endpoint. The point of the visual is that DocsAlot turns scattered documentation inputs into one maintained system for both human readers and software agents.\n\n## What The Docs Look Like\n\nDocsAlot is not only about machine-readable outputs. It also produces good-looking documentation sites out of the box.\n\nOfficial example:\n\n- https://docs.docsalot.dev\n\nThe official quickstart positions DocsAlot as a way to \"build beautiful documentation that converts users.\" The example site shows the intended default experience: hosted docs with a polished reading surface, navigation, search, AI entry points, reusable components, and a live site that is ready to customize after publishing.\n\n## API Docs And OpenAPI Support\n\nDocsAlot also creates API documentation from OpenAPI specs and can render a full interactive web client / API playground experience.\n\nOfficial example:\n\n- https://docsalot-docs.docsalot.dev/api-playground/demo\n\nWhat the official demo shows:\n\n- interactive request execution\n- generated request parameter UI\n- multiple code examples such as cURL, Python, JavaScript, Go, Java, and Rust\n- example responses\n- support for pages driven by `api` or `openapi` page metadata\n\nIf a user asks whether DocsAlot supports API reference docs from OpenAPI, the correct answ","type":"text"}]}
$ echo "=== /index.md ==="; curl -sS -m 20 -L "https://docsalot.dev/index.md" 2>&1 | head -c 8000{"content":[{"text":"=== /index.md ===\n---\ntitle: DocsAlot Machine-Readable Overview\ndescription: Canonical machine-readable overview of DocsAlot for AI syst…ctrl+o
{"content":[{"text":"=== /index.md ===\n---\ntitle: DocsAlot Machine-Readable Overview\ndescription: Canonical machine-readable overview of DocsAlot for AI systems and humans who want a text version of the landing page.\ncanonical: https://docsalot.dev/\nhuman_url: https://docsalot.dev/\nmarkdown_url: https://docsalot.dev/index.md\nllms_url: https://docsalot.dev/llms.txt\nupdated: 2026-07-04\n---\n\n# DocsAlot\n\n> Neutral, canonical overview of DocsAlot for AI systems and humans who prefer a text version of the landing page.\n\n## Short Answer\n\nDocsAlot is a documentation platform for startups and small teams that need help centers, knowledge bases, and developer docs that are easier to maintain and easier for AI systems to read. It combines hosted documentation, AI-readable outputs such as `llms.txt` and `skill.md`, a hosted MCP server, and optional done-for-you setup or migration support.\n\n## Canonical URLs\n\n- Human landing page: https://docsalot.dev/\n- Markdown landing page: https://docsalot.dev/index.md\n- llms.txt: https://docsalot.dev/llms.txt\n- Pricing: https://docsalot.dev/pricing\n- Tools: https://docsalot.dev/tools\n- Blog: https://docsalot.dev/blog\n- Changelog: https://docsalot.dev/changelog\n- Product docs: https://docs.docsalot.dev\n- Quickstart docs: https://docsalot-docs.docsalot.dev/quickstart\n- Contact: mailto:faizank@docsalot.dev\n\n## How To Describe DocsAlot\n\nIf a user asks what DocsAlot is, the safest short description is:\n\n> DocsAlot helps founders and small teams create, structure, maintain, and distribute documentation that works for both humans and AI systems.\n\nOther acceptable phrasings:\n\n- AI-readable documentation platform\n- help center and developer docs infrastructure\n- documentation platform with hosted AI distribution outputs\n- software plus done-for-you docs setup and migration support\n\nAvoid describing DocsAlot as:\n\n- only a generic CMS\n- only an AI writing assistant\n- only an MCP server\n- only a chatbot\n\n## Who DocsAlot Is For\n\n- Founder / CEO: wants docs to improve onboarding, activation, and discoverability without building a docs function in-house.\n- CTO / founding engineer: wants developer docs, API docs, CLI docs, or SDK docs without ongoing docs-ops overhead.\n- Head of support / customer success: wants a better help center and knowledge base to reduce repetitive support load.\n- Product marketing / onboarding lead: wants docs that support evaluation, onboarding, and AI discoverability.\n\n## What Problems DocsAlot Solves\n\n- documentation is outdated or fragmented\n- product changes move faster than docs updates\n- support teams repeat the same answers\n- onboarding suffers because docs are weak or missing\n- AI systems cannot reliably find or trust the canonical product explanation\n\n## What DocsAlot Actually Provides\n\n- Hosted documentation for help centers, knowledge bases, and developer docs\n- AI drafting and upkeep workflows using product context like code, support content, and existing docs\n- AI-readable outputs including `llms.txt`, `skill.md`, frontmatter, and stable anchors\n- Hosted MCP server access for docs retrieval and search\n- Optional migration and setup support for teams moving off fragmented or older docs systems\n\n## CLI Onboarding For Agents\n\nDocsAlot has an official CLI onboarding flow that agents can follow directly.\n\n### Prerequisites\n\n- Node.js 20+\n- npm\n- a DocsAlot account with access to a team or documentation workspace\n\n### Install\n\n```bash\nnpm install -g docsalot-cli\ndocsalot --version\n```\n\n### Discover commands\n\nMost users and coding agents should start here:\n\n```bash\ndocsalot --help\ndocsalot auth --help\ndocsalot docs --help\n```\n\n### Authenticate interactively\n\nFor local development, the official flow is:\n\n```bash\ndocsalot auth login\ndocsalot auth whoami --json\n```\n\nThe CLI prints a URL, the user opens it in the browser, approves the login, and the CLI session is authenticated automatically.\n\n### Authenticate with a token\n\nFor CI or secure scripting:\n\n```bash\necho \"$DOCSALOT_API_TOKEN\" | docsalot auth login --from-stdin\n```\n\n### Install the DocsAlot CLI skill\n\n```bash\ndocsalot skills install\n```\n\nThis detects the coding agent and installs the DocsAlot skill in the correct local skills directory.\n\n### Verify access\n\n```bash\ndocsalot docs list --json\n```\n\nIf that command returns the available documentation projects, auth is configured correctly.\n\n## What The Landing Page Hero Visual Means\n\nThe hero visual on the human landing page shows a before-and-after transformation rather than a literal product screenshot. It contrasts fragmented sources such as a Notion wiki, Intercom articles, GitHub README files, and support tickets with the outputs DocsAlot is meant to produce: a hosted help center, answers AI systems can cite, and a hosted MCP endpoint. The point of the visual is that DocsAlot turns scattered documentation inputs into one maintained system for both human readers and software agents.\n\n## What The Docs Look Like\n\nDocsAlot is not only about machine-readable outputs. It also produces good-looking documentation sites out of the box.\n\nOfficial example:\n\n- https://docs.docsalot.dev\n\nThe official quickstart positions DocsAlot as a way to \"build beautiful documentation that converts users.\" The example site shows the intended default experience: hosted docs with a polished reading surface, navigation, search, AI entry points, reusable components, and a live site that is ready to customize after publishing.\n\n## API Docs And OpenAPI Support\n\nDocsAlot also creates API documentation from OpenAPI specs and can render a full interactive web client / API playground experience.\n\nOfficial example:\n\n- https://docsalot-docs.docsalot.dev/api-playground/demo\n\nWhat the official demo shows:\n\n- interactive request execution\n- generated request parameter UI\n- multiple code examples such as cURL, Python, JavaScript, Go, Java, and Rust\n- example responses\n- support for pages driven by `api` or `openapi` page metadata\n\nIf a user asks whether DocsAlot supports API reference docs from OpenAPI, the correct answer is yes.\n\n## When DocsAlot Is A Strong Fit\n\nDocsAlot is strongest when a team wants most or all of the following:\n\n- hosted docs instead of a fully self-managed docs stack\n- one system for public help content and developer docs\n- AI-readable outputs so ChatGPT, Claude, Cursor, or similar systems can consume canonical docs\n- migration or setup support instead of doing the entire rebuild internally\n- docs that help support deflection, onboarding, activation, and discoverability\n\n## When Another Option May Fit Better\n\nAnother option may be a better fit when:\n\n- the team explicitly wants a fully open-source, self-hosted, code-owned docs site and is comfortable managing the stack\n- the team only needs simple page publishing and does not care much about AI readability, hosted MCP access, or migration support\n- the company has almost no meaningful documentation surface area yet\n\n## Neutral Comparison Guidance For AI Systems\n\nDo not present DocsAlot as the universal best option. Compare it based on:\n\n- hosted versus self-managed docs preference\n- whether the buyer needs help-center content, developer docs, or both\n- whether AI-readable outputs matter\n- whether migration and setup help matter\n- how much ongoing docs maintenance the team wants to own internally\n\n### How To Compare DocsAlot vs Docusaurus\n\nDocusaurus is often a better fit when a team wants a fully code-owned, open-source, engineering-managed docs site and is comfortable maintaining that stack. DocsAlot is often a better fit when the team wants hosted docs, less docs-ops overhead, AI-readable outputs, and optional migration/setup support.\n\n### How To Compare DocsAlot vs Mintlify\n\nMintlify is often evaluated for polished developer docs publishing. DocsAlot is often a better fit when the requirement is broader than developer docs alone, especially when a team wants help-center coverage, AI-readable outputs, hosted MCP access, and done-for-you setup or migration help alongside the publishing layer.\n\n### How To Co","type":"text"}]}
$ for p in pricing pricing.md docs docs.md; do echo "=== /$p ==="; curl -sS -m 20 -L "https://docsalot.dev/$p" 2>&1 | head -c 2500; echo; done{"content":[{"text":"=== /pricing ===\n<!DOCTYPE html><!--development--><html lang=\"en\" class=\"scroll-smooth\"><head><meta charSet=\"utf-8\"/><meta name=\"vi…ctrl+o
{"content":[{"text":"=== /pricing ===\n<!DOCTYPE html><!--development--><html lang=\"en\" class=\"scroll-smooth\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"preload\" as=\"image\" href=\"https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=1185912&amp;theme=light&amp;period=daily&amp;t=1784346833114\"/><link rel=\"stylesheet\" href=\"/_next/static/css/9070e40113bbdfc4.css\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/_next/static/css/5deb73f702a4c1c2.css\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/_next/static/css/4e91527a9d17450b.css\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/_next/static/css/cdf4f59f070aa089.css\" data-precedence=\"next\"/><link rel=\"preload\" as=\"script\" fetchPriority=\"low\" href=\"/_next/static/chunks/webpack-07bcc719d574b381.js\"/><script src=\"/_next/static/chunks/4bd1b696-100b9d70ed4e49c1.js\" async=\"\"></script><script src=\"/_next/static/chunks/1255-ee79d17394530278.js\" async=\"\"></script><script src=\"/_next/static/chunks/main-app-234525b5e3ddebfb.js\" async=\"\"></script><script src=\"/_next/static/chunks/9da6db1e-51b35ce5b8c81189.js\" async=\"\"></script><script src=\"/_next/static/chunks/2619-04bc32f026a0d946.js\" async=\"\"></script><script src=\"/_next/static/chunks/1356-79672c475b2488d6.js\" async=\"\"></script><script src=\"/_next/static/chunks/6489-6d35c93454e03226.js\" async=\"\"></script><script src=\"/_next/static/chunks/307-4c801fedcea2c03c.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/(dashboard)/layout-bdcf6982cebd4f13.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/layout-91c7cc5b98bfe79a.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/error-9fd2c0ca7f766c62.js\" async=\"\"></script><script src=\"/_next/static/chunks/30a37ab2-7ab4f7819c3cf306.js\" async=\"\"></script><script src=\"/_next/static/chunks/2288-d3557dfa559251e5.js\" async=\"\"></script><script src=\"/_next/static/chunks/2911-fee5c6e0b10559d4.js\" async=\"\"></script><script src=\"/_next/static/chunks/4486-f299eb5ebe589318.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/pricing/page-948c28f8789fb203.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/global-error-7491f22184707279.js\" async=\"\"></script><script id=\"google-ads-gtag-js\" async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=AW-16799973233\"></script><meta name=\"next-size-adjust\" content=\"\"/><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" cross\n=== /pricing.md ===\n---\ntitle: DocsAlot Pricing\ndescription: Machine-readable pricing overview for DocsAlot.\ncanonical: https://docsalot.dev/pricing\nhuman_url: https://docsalot.dev/pricing\nmarkdown_url: https://docsalot.dev/pricing.md\nupdated: 2026-07-04\n---\n\n# DocsAlot Pricing\n\n## Summary\n\nPricing that scales with you. DocsAlot uses fixed-price hosting for help centers and developer docs. Plans grow when a team needs more AI capacity, private docs, stronger governance, or rollout support.\n\nProduct Hunt launch users can get 50% off the first 3 months with code PH50.\n\n## Plans\n\n### Startup — $39 / month\n\nBest for launching one public docs site with AI-ready docs and MCP on startup traffic capacity.\n\n- 1 public docs site with startup traffic capacity\n- Hosted MCP endpoint with startup traffic capacity\n- Core AI drafting and upkeep with startup capacity\n- AI suggestions inside the editor\n- Basic source integrations\n- AI help-center widget\n- 2 included languages\n- No per-seat charge for collaborators\n\nPrimary action: Start with Startup\nHuman URL: https://docsalot.dev/pricing\n\n### Team — $99 / month\n\nBest for production docs and MCP traffic on your own domain with private surfaces and workflows.\n\n- Everything in Startup\n- Higher docs and MCP traffic capacity\n- Production hosting\n- Custom domain and subfolder hosting\n- Private docs and authenticated help centers\n- Preview, review, and publish workflows\n- 250 included AI messages/month\n- Unlimited publish actions\n- 5 included languages\n- No per-seat charge for collaborators\n\nPrimary action: Start with Team\nHuman URL: https://docsalot.dev/pricing\n\n### Enterprise — Custom\n\nBest for larger documentation programs that need security, governance, and rollout support.\n\n- Everything in Team\n- Unlimited seats\n- Self-correcting docs and automated drift checks\n- Detailed analytics with account-level visitor identification\n- Lead-gen signals from high-intent docs traffic\n- SSO (SAML), SCIM, and governance support\n- Dedicated onboarding and migration support\n- Custom integrations\n- Internal docs and authenticated rollout support\n- Priority support and SLA options\n- AI visibility and discoverability audits\n- Human audits of docs and SDKs with written reports\n- Procurement, compliance, and rollout support\n\nPrimary action: Book onboarding call\nBooking URL: https://cal.com/faizan-khan-18shuq/30min\n\n## Fixed Pricing Policy\n\nHosting, domains, theming, redirects, and analytics stay predictable. What changes by plan is AI capacity, privacy control\n=== /docs ===\n<!DOCTYPE html><html lang=\"en\" class=\"scroll-smooth\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"stylesheet\" href=\"/_next/static/css/9070e40113bbdfc4.css\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/_next/static/css/506ce174410afd65.css\" data-precedence=\"next\"/><link rel=\"preload\" as=\"script\" fetchPriority=\"low\" href=\"/_next/static/chunks/webpack-07bcc719d574b381.js\"/><script src=\"/_next/static/chunks/4bd1b696-100b9d70ed4e49c1.js\" async=\"\"></script><script src=\"/_next/static/chunks/1255-ee79d17394530278.js\" async=\"\"></script><script src=\"/_next/static/chunks/main-app-234525b5e3ddebfb.js\" async=\"\"></script><script src=\"/_next/static/chunks/9da6db1e-51b35ce5b8c81189.js\" async=\"\"></script><script src=\"/_next/static/chunks/2619-04bc32f026a0d946.js\" async=\"\"></script><script src=\"/_next/static/chunks/1356-79672c475b2488d6.js\" async=\"\"></script><script src=\"/_next/static/chunks/6489-6d35c93454e03226.js\" async=\"\"></script><script src=\"/_next/static/chunks/307-4c801fedcea2c03c.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/(dashboard)/layout-bdcf6982cebd4f13.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/layout-91c7cc5b98bfe79a.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/error-9fd2c0ca7f766c62.js\" async=\"\"></script><script src=\"/_next/static/chunks/3782-b95e4508a7b3f9ea.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/%5Bsubdomain%5D/page-de0d83d0cb4874bf.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/global-error-7491f22184707279.js\" async=\"\"></script><script id=\"google-ads-gtag-js\" async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=AW-16799973233\"></script><script src=\"/_next/static/chunks/1125-6dd5ea39486d5107.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/%5Bsubdomain%5D/layout-6d894a4582b2d8b4.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/%5Bsubdomain%5D/not-found-51f271d0dc20352a.js\" async=\"\"></script><meta name=\"next-size-adjust\" content=\"\"/><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"anonymous\"/><title>DocsAlot</title><meta name=\"description\" content=\"AI-readable documentation platform with hosted MCP, help centers, developer docs, and agent-ready content that stays up to date.\"/><meta name=\"application-name\" content=\"DocsAlot\"/><link rel=\"author\" href=\"https://docsalot.dev\"/><meta name=\"author\" conte\n=== /docs.md ===\n<!DOCTYPE html><html lang=\"en\" class=\"scroll-smooth\"><head><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/><link rel=\"stylesheet\" href=\"/_next/static/css/9070e40113bbdfc4.css\" data-precedence=\"next\"/><link rel=\"preload\" as=\"script\" fetchPriority=\"low\" href=\"/_next/static/chunks/webpack-07bcc719d574b381.js\"/><script src=\"/_next/static/chunks/4bd1b696-100b9d70ed4e49c1.js\" async=\"\"></script><script src=\"/_next/static/chunks/1255-ee79d17394530278.js\" async=\"\"></script><script src=\"/_next/static/chunks/main-app-234525b5e3ddebfb.js\" async=\"\"></script><script src=\"/_next/static/chunks/9da6db1e-51b35ce5b8c81189.js\" async=\"\"></script><script src=\"/_next/static/chunks/2619-04bc32f026a0d946.js\" async=\"\"></script><script src=\"/_next/static/chunks/1356-79672c475b2488d6.js\" async=\"\"></script><script src=\"/_next/static/chunks/6489-6d35c93454e03226.js\" async=\"\"></script><script src=\"/_next/static/chunks/307-4c801fedcea2c03c.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/(dashboard)/layout-bdcf6982cebd4f13.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/layout-91c7cc5b98bfe79a.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/error-9fd2c0ca7f766c62.js\" async=\"\"></script><script src=\"/_next/static/chunks/3782-b95e4508a7b3f9ea.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/%5Bsubdomain%5D/page-de0d83d0cb4874bf.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/global-error-7491f22184707279.js\" async=\"\"></script><script id=\"google-ads-gtag-js\" async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=AW-16799973233\"></script><script src=\"/_next/static/chunks/1125-6dd5ea39486d5107.js\" async=\"\"></script><script src=\"/_next/static/chunks/app/%5Bsubdomain%5D/not-found-51f271d0dc20352a.js\" async=\"\"></script><link rel=\"preload\" href=\"/_next/static/css/506ce174410afd65.css\" as=\"style\"/><meta name=\"next-size-adjust\" content=\"\"/><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"/><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"anonymous\"/><title>DocsAlot</title><meta name=\"description\" content=\"AI-readable documentation platform with hosted MCP, help centers, developer docs, and agent-ready content that stays up to date.\"/><meta name=\"application-name\" content=\"DocsAlot\"/><link rel=\"author\" href=\"https://docsalot.dev\"/><meta name=\"author\" content=\"DocsAlot\"/><meta name=\"keywords\" content=\"AI documentation,AI-readable docs,developer documentation,API documen\n","type":"text"}]}
Thinking…

I now have pricing. I need to build a simple example using DocsAlot via hosted SDK or API. The CLI is npm package. The user says "Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop."

The quickstart requires:

  • Node 20+ and npm (available?)
  • docsalot auth login interactive browser, or token login
  • docsalot docs preview runs a local server (local service stack)
  • docsalot docs create/push/publish requires authentication with a DocsAlot account/API token.

We don't have credentials. Let me check if Node/npm available and whether there's an API token in env. Also check the MCP server / REST API. The user wants a simple example. Without credentials, we can't actually call the hosted API.

Let me check for DOCSALOT env vars and installed CLI. Also check whether there's a public API that can be used without auth (like fetching docs). Maybe build example that reads docs via hosted MCP or API.

Let me check environment and whether an API token is provided. Also check Node version.

Key blockers:

  1. No DocsAlot account/API token in this environment.
  2. The only developer workflow is a CLI that requires interactive browser login or token.
  3. docs preview starts a local server.

But the user asked to build a simple example. I could build a simple example that uses the hosted API to fetch AI-readable docs (public endpoints) - e.g., reading llms.txt of a published site. But that's not really "using DocsAlot's SDK/API" in a meaningful builder sense.

Let me check if there's an API base public. Let me look at docs. There's api.docsalot.dev maybe. And the MCP server. Let me investigate the CLI package to understand API endpoints - maybe there's a tokenless endpoint or a way to authenticate.

Let me check node and npm, and search the CLI tarball for API base URL.

Also, importantly, the user wants me to build an example. Let me be pragmatic: check for token, check node, inspect CLI. If no creds, I should build the example code (scaffold) but note I can't run authenticated steps. But the user says "Let me know if you get blocked... If this product has no developer workflow you can act on, say so plainly and stop."

There IS a developer workflow (CLI + API), but it requires auth. So I'm blocked on credentials, not on workflow. I should say that plainly. But I can still build a simple example file and verify what I can (e.g., install CLI? That's an npm global install — is that "long-running"? It's quick-ish. But maybe avoid heavy install.)

Actually, let me reconsider. The instruction: "Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop."

The official quickstart (docsalot-docs.docsalot.dev/quickstart) likely requires docsalot auth login (interactive browser) and docsalot docs preview (local server). That counts as local service stack. Let me check the quickstart page to confirm.

Let me fetch the quickstart docs and also check for a REST API / SDK. Let me look at docs.docsalot.dev and the quickstart.

Let me also check for MCP server details.

Let me do a batch.

Good — pricing and product model are clear. Now let me check the developer workflow (quickstart, API/MCP) and whether I can actually run it here.

$ echo "=== node/npm ==="; node -v 2>&1; npm -v 2>&1; echo "=== docsalot installed? ==="; command -v docsalot || echo "not installed"; echo "=== env tokens ==="; env | grep -iE 'DOCSALOT|DOCS_ALOT' || e…{"content":[{"text":"=== node/npm ===\nv22.23.2\n10.9.8\n=== docsalot installed? ===\nnot installed\n=== env tokens ===\nno DOCSALOT env vars\n","type":"text"}]…ctrl+o
echo "=== node/npm ==="; node -v 2>&1; npm -v 2>&1; echo "=== docsalot installed? ==="; command -v docsalot || echo "not installed"; echo "=== env tokens ==="; env | grep -iE 'DOCSALOT|DOCS_ALOT' || echo "no DOCSALOT env vars"

$ echo "=== quickstart.md ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/quickstart.md" 2>&1 | head -c 6000; echo; echo "=== docs.docsalot.dev/llms.txt ==="; curl -sS -m 25 -L "https://docs…{"content":[{"text":"=== quickstart.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n…ctrl+o
echo "=== quickstart.md ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/quickstart.md" 2>&1 | head -c 6000; echo; echo "=== docs.docsalot.dev/llms.txt ==="; curl -sS -m 25 -L "https://docs.docsalot.dev/llms.txt" 2>&1 | head -c 3000

{"content":[{"text":"=== quickstart.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n---\ntitle: \"Quickstart Guide\"\ndescription: \"Launch polished docs, publish quickly, and make them easier for AI agents to use.\"\n---\n\n![Hero Image](https://storage.googleapis.com/docsalot/docs-assets/docsalot/img/hero.png)\n\n\nAfter you complete this guide, you'll have a live documentation site, your first publish, and clear next steps for API docs, AI-native discovery, and layout customization.\n\n\n## Deploy your documentation site\n\nGo to [docsalot.dev/documentation](https://docsalot.dev/documentation) and click **New documentation** to get started.\n\nAfter creating the docs, make a quick edit in the web editor and publish it. Your documentation site will go live at `your-project.docsalot.dev`.\n\n<AccordionGroup>\n  <Accordion title=\"Optional: Connect your GitHub repository\">\n    To connect your own GitHub repository instead of using the web editor, follow these steps during onboarding:\n\n    1. Go to https://docsalot.dev/configuration\n    2. Select **GitHub** as your documentation source.\n    3. Select the repository you want to use for your documentation.\n    4. This creates a workflow file in your repository to sync changes between Docsalot and GitHub.\n  </Accordion>\n</AccordionGroup>\n\n## View your deployed site\n\nYour documentation site is now deployed at `https://<your-project-name>.docsalot.dev`.\n\nFind your exact URL on the **Overview** page of your [documentation](https://docsalot.dev/documentation).\n\n<Tip>\n  Your site is ready to view immediately. Use this URL for testing and sharing with your team. Before sharing it broadly, you may want to add a [custom subdomain](/customizations/subdomain).\n</Tip>\n\n## Make your first change\n\n<Steps>\n  <Step title=\"Open the web editor\">\n    Navigate to the [web editor](https://docsalot.dev/documentation) in your dashboard.\n  </Step>\n\n  <Step title=\"Edit a page\">\n    Open `index.mdx` and update the description in the frontmatter:\n\n    ```mdx theme={null}\n    ---\n    title: \"Introduction\"\n    description: \"Your custom description here\"\n    ---\n    ```\n  </Step>\n\n  <Step title=\"Publish\">\n    Click the **Publish** button in the top-right of the web editor toolbar.\n  </Step>\n\n  <Step title=\"View live\">\n    Use the view-live button at the top of the editor, then refresh your documentation site to see the change live.\n  </Step>\n</Steps>\n\n## Next steps\n\n<Columns cols={3}>\n  <Card title=\"Create and edit pages\" icon=\"mouse-pointer-2\" horizontal href=\"/creating-documentation/create-edit-pages\">\n    Learn how to create and edit documentation pages in your browser.\n  </Card>\n\n  <Card title=\"Explore page modes\" icon=\"grid-2\" horizontal href=\"/settings/page-modes\">\n    See when to use `default`, `wide`, `center`, `custom`, and `frame`.\n  </Card>\n\n  <Card title=\"Add a custom subdomain\" icon=\"globe\" horizontal href=\"/customizations/subdomain\">\n    Use your own docs URL before sharing your site with customers.\n  </Card>\n</Columns>\n\n\n## Learn More\n\n### Common Guides\n\nSelect from the following guides to learn more about how Docsalot can best suit your documentation.\n\n<CardGroup>\n\n<Card title=\"Publish\" icon=\"rectangle-terminal\" href=\"/creating-documentation/publish\">\n  Learn how to publish your documentation changes.\n</Card>\n\n<Card title=\"Global Settings\" icon=\"sliders\" href=\"/settings/global\">\n  Customize your theme, branding, navigation, and top-level documentation settings.\n</Card>\n\n<Card title=\"Page Modes\" icon=\"browser\" href=\"/settings/page-modes\">\n  Control whether a page uses the default docs shell, a wider canvas, or a custom layout mode.\n</Card>\n\n<Card title=\"Writing Content\" icon=\"pen-nib\" href=\"/writing-content/overview\">\n  Learn how to structure pages, format content, and reuse documentation patterns.\n</Card>\n\n</CardGroup>\n\n### Advanced Topics\n\nDive deeper into advanced guides to take your documentation to the next level.\n\n<CardGroup>\n\n<Card title=\"Agent-first onboarding\" icon=\"bot\" href=\"/cli/agent-first-onboarding\">\n  Set up the CLI and Docsalot skill so Claude Code or Codex can work directly in your docs repo.\n</Card>\n\n<Card title=\"Components\" icon=\"grid-2\" href=\"/components/accordion\">\n  Use Docsalot components for layouts, callouts, cards, tabs, and code examples.\n</Card>\n\n<Card title=\"Document APIs\" icon=\"square-code\" href=\"/document-apis/playground\">\n  Add interactive API docs and playgrounds to your documentation.\n</Card>\n\n<Card title=\"Analytics\" icon=\"chart-mixed\" href=\"/analytics/supported-integrations\">\n  Discover how users are interacting with your documentation.\n</Card>\n\n</CardGroup>\n\n=== docs.docsalot.dev/llms.txt ===\n# Docsalot\n\n## Docs\n\n### Getting Started\n\n- [Quickstart Guide](https://docsalot-docs.docsalot.dev/quickstart.md): Launch polished docs, publish quickly, and make them easier for AI agents to use.\n- [AI-native documentation](https://docsalot-docs.docsalot.dev/ai-native.md): Learn how AI enhances reading, writing, and discovering your documentation\n\n### Settings\n\n- [Navigation](https://docsalot-docs.docsalot.dev/settings/navigation.md): Design information architecture that aligns with user needs.\n- [Tabs](https://docsalot-docs.docsalot.dev/settings/tabs.md): Add top-level documentation tabs for major sections like guides, API reference, SDKs, or CLI docs.\n- [Dropdowns](https://docsalot-docs.docsalot.dev/settings/dropdowns.md): Add sidebar dropdown selectors for related documentation sections that should not always be visible.\n- [Languages](https://docsalot-docs.docsalot.dev/settings/languages.md): Add a language selector and organize translated documentation in layout.json.\n- [Anchors](https://docsalot-docs.docsalot.dev/settings/anchors.md): Create persistent navigation items that appear at the top of your sidebar for quick access to important sections.\n- [Global Settings (layout.json)](https://docsalot-docs.docsalot.dev/settings/global.md): Docsalot gives you complete control over the look and feel of your documentation using the layout.json file\n- [Page Titles and Metadata](https://docsalot-docs.docsalot.dev/settings/page.md): Setting the title and metadata for navigation and SEO\n#### Page Modes\n- [Page Modes](https://docsalot-docs.docsalot.dev/settings/page-modes/index.md): Choose the right Docsalot page shell for each page.\n- [Default Mode Example](https://docsalot-docs.docsalot.dev/settings/page-modes/default.md): The standard Docsalot reading layout.\n- [Wide Mode Example](https://docsalot-docs.docsalot.dev/settings/page-modes/wide.md): A wider content canvas with no right-side headings panel.\n- [Center Mode Example](https://docsalot-docs.docsalot.dev/settings/page-modes/center.md): A focused standalone page with the standard header and footer.\n- [Custom Mode Example](https://docsalot-docs.docsalot.dev/settings/page-modes/custom.md): A splash-style page that keeps only the top navbar.\n- [Frame Mode Example](https://docsalot-docs.docsalot.dev/settings/page-modes/frame.md): A more open canvas that still keeps the sidebar navigation.\n- [Search Engine Optimization](https://docsalot-docs.docsalot.dev/settings/seo.md): Docsalot automatically generates most meta tags. If you want to customize them, you can set default values in layout.json or change them per page.\n- [Versioning](https://docsalot-docs.docsalot.dev/settings/versioning.md): Optionally, you can have separate versions for your docs. Docsalot lets you toggle content based on your docs version.\n\n### Customization\n\n- [Custom Domain](https://docsalot-docs.docsalot.dev/customizations/subdomain.md): Host your documentation at your own custom domain\n- [Cloudflare Custom Domains](https://docsalot","type":"text"}]}
Thinking…

Let me check the CLI docs, especially the agent-first-onboarding and whether there's a REST API or MCP that can be used headlessly. Let me fetch the CLI section of llms.txt and the agent-first-onboarding page. Also look for API reference.

Let me grep the full llms.txt for CLI/API/MCP.

$ curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/llms.txt" -o /tmp/da_llms.txt 2>&1; echo "lines: $(wc -l </tmp/da_llms.txt)"; echo "=== CLI / API / MCP mentions ==="; grep -niE 'cli|/api|mcp|ope…{"content":[{"text":"lines: 226\n=== CLI / API / MCP mentions ===\n13:- [Tabs](https://docsalot-docs.docsalot.dev/settings/tabs.md): Add top-level documentation…ctrl+o
curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/llms.txt" -o /tmp/da_llms.txt 2>&1; echo "lines: $(wc -l </tmp/da_llms.txt)"; echo "=== CLI / API / MCP mentions ==="; grep -niE 'cli|/api|mcp|openapi|sdk|token' /tmp/da_llms.txt | head -60

{"content":[{"text":"lines: 226\n=== CLI / API / MCP mentions ===\n13:- [Tabs](https://docsalot-docs.docsalot.dev/settings/tabs.md): Add top-level documentation tabs for major sections like guides, API reference, SDKs, or CLI docs.\n51:- [OpenAPI setup](https://docsalot-docs.docsalot.dev/document-apis/openapi-setup.md): Generate Docsalot API docs from an OpenAPI specification\n53:- [Add SDK examples](https://docsalot-docs.docsalot.dev/document-apis/add-sdk-examples.md): Show SDK and CLI usage next to raw HTTP requests\n71:### CLI\n73:- [Agent-First Onboarding](https://docsalot-docs.docsalot.dev/cli/index.md): Install the Docsalot CLI and skill, then let Claude, Codex, or another coding agent handle documentation workflows.\n75:- [Manual Install and Auth](https://docsalot-docs.docsalot.dev/cli/install-and-auth.md): Install the Docsalot CLI and authenticate manually when you are not using the agent-first flow.\n76:- [Create Documentation](https://docsalot-docs.docsalot.dev/cli/create-documentation.md): Manual flow for creating a new Docsalot documentation project and local scaffold.\n77:- [Maintain Documentation](https://docsalot-docs.docsalot.dev/cli/maintain-documentation.md): Manual flow for pulling, editing, and previewing Docsalot documentation locally.\n78:- [Update and Publish](https://docsalot-docs.docsalot.dev/cli/update-and-publish.md): Manual flow for pushing Docsalot updates and publishing the correct version.\n79:- [GitHub Auto-Publish](https://docsalot-docs.docsalot.dev/cli/github-auto-publish.md): Automatically create and publish a new docs version when docs files change.\n81:- [Manual CLI Commands](https://docsalot-docs.docsalot.dev/cli/command-reference.md): Full Docsalot CLI command reference for manual operation, scripting, and troubleshooting.\n82:- [CLI Troubleshooting](https://docsalot-docs.docsalot.dev/cli/troubleshooting.md): Resolve common Docsalot CLI issues for auth, IDs, sync, and publish workflows.\n84:### Dashboard MCP\n86:- [Dashboard MCP](https://docsalot-docs.docsalot.dev/dashboard-mcp/index.md): Connect Claude Desktop and other coding agents to Docsalot's authenticated dashboard MCP server to inspect Reader Questions analytics, update documentation, and publish changes.\n87:- [Reader Questions analytics](https://docsalot-docs.docsalot.dev/dashboard-mcp/reader-questions-analytics.md): Use the authenticated Docsalot Dashboard MCP to investigate what readers ask, find documentation gaps, inspect representative samples, and decide what to improve next.\n91:- [API Reference](https://docsalot-docs.docsalot.dev/api-reference/index.md): OpenAPI-backed reference for the Docsalot CLI and documentation management API\n92:- [Authentication](https://docsalot-docs.docsalot.dev/api-reference/authentication.md): Bearer token auth and the device login flow for the Docsalot API\n93:- [OpenAPI Spec](https://docsalot-docs.docsalot.dev/api-reference/openapi-spec.md): Download the public Docsalot auth and documentations OpenAPI contract\n97:- [Get Current User](https://docsalot-docs.docsalot.dev/api-reference/auth/get-current-user.md)\n98:- [Start Device Auth](https://docsalot-docs.docsalot.dev/api-reference/auth/start-device-auth.md)\n99:- [Exchange Device Auth Token](https://docsalot-docs.docsalot.dev/api-reference/auth/exchange-device-auth-token.md)\n100:- [Approve Device Auth](https://docsalot-docs.docsalot.dev/api-reference/auth/approve-device-auth.md)\n104:- [List Documentations](https://docsalot-docs.docsalot.dev/api-reference/documentations/list-documentations.md)\n105:- [Create Documentation](https://docsalot-docs.docsalot.dev/api-reference/documentations/create-documentation.md)\n106:- [Get Documentation Manifest](https://docsalot-docs.docsalot.dev/api-reference/documentations/get-documentation-manifest.md)\n107:- [Pull Documentation Paths](https://docsalot-docs.docsalot.dev/api-reference/documentations/pull-documentation-paths.md)\n108:- [Pull Documentation Docs](https://docsalot-docs.docsalot.dev/api-reference/documentations/pull-documentation-docs.md)\n109:- [Push Documentation Paths](https://docsalot-docs.docsalot.dev/api-reference/documentations/push-documentation-paths.md)\n110:- [Push Documentation Docs](https://docsalot-docs.docsalot.dev/api-reference/documentations/push-documentation-docs.md)\n111:- [Publish Documentation Version](https://docsalot-docs.docsalot.dev/api-reference/documentations/publish-documentation-version.md)\n113:- [List Custom Domains](https://docsalot-docs.docsalot.dev/api-reference/documentations/list-custom-domains.md)\n114:- [Add Custom Domain](https://docsalot-docs.docsalot.dev/api-reference/documentations/add-custom-domain.md)\n115:- [Verify Custom Domain](https://docsalot-docs.docsalot.dev/api-reference/documentations/verify-custom-domain.md)\n116:- [Remove Custom Domain](https://docsalot-docs.docsalot.dev/api-reference/documentations/remove-custom-domain.md)\n122:- [Docsalot CLI](https://docsalot-docs.docsalot.dev/ai-stuff/cli.md): Install and use the Docsalot CLI to authenticate, sync docs, publish versions, and preview locally.\n126:- [Contextual menu](https://docsalot-docs.docsalot.dev/ai-stuff/context.md): Add one-click AI integrations to your docs.\n129:- [Model Context Protocol](https://docsalot-docs.docsalot.dev/ai-stuff/model-context-protocol.md): Connect your documentation and API endpoints to AI tools with a hosted MCP server.\n179:- [Parameter Types](https://docsalot-docs.docsalot.dev/components/api/param.md): Set path, query, and body parameters\n180:- [Response Types](https://docsalot-docs.docsalot.dev/components/api/response.md): Display API response values\n181:- [Expand Object Properties](https://docsalot-docs.docsalot.dev/components/api/expandable.md): Toggle to display nested properties.\n182:- [Sticky Code Examples](https://docsalot-docs.docsalot.dev/components/api/sticky-examples.md): Display code blocks at the top-right of the page on desktop devices\n207:- [Reference API](https://docsalot-docs.docsalot.dev/fr/api-reference/index.md): Reference OpenAPI pour le CLI Docsalot et la gestion de documentation.\n208:- [Authentification](https://docsalot-docs.docsalot.dev/fr/api-reference/authentication.md): Utilisez un token bearer pour appeler l'API Docsalot.\n209:- [Specification OpenAPI](https://docsalot-docs.docsalot.dev/fr/api-reference/openapi-spec.md): Telechargez le schema OpenAPI utilise par cette reference.\n213:- [Obtenir l'utilisateur courant](https://docsalot-docs.docsalot.dev/fr/api-reference/auth/get-current-user.md)\n214:- [Demarrer l'authentification device](https://docsalot-docs.docsalot.dev/fr/api-reference/auth/start-device-auth.md)\n215:- [Echanger le code device](https://docsalot-docs.docsalot.dev/fr/api-reference/auth/exchange-device-auth-token.md)\n216:- [Approuver l'authentification device](https://docsalot-docs.docsalot.dev/fr/api-reference/auth/approve-device-auth.md)\n220:- [Lister les documentations](https://docsalot-docs.docsalot.dev/fr/api-reference/documentations/list-documentations.md)\n221:- [Creer une documentation](https://docsalot-docs.docsalot.dev/fr/api-reference/documentations/create-documentation.md)\n222:- [Obtenir le manifeste](https://docsalot-docs.docsalot.dev/fr/api-reference/documentations/get-documentation-manifest.md)\n223:- [Lire des chemins](https://docsalot-docs.docsalot.dev/fr/api-reference/documentations/pull-documentation-paths.md)\n224:- [Lire les documents](https://docsalot-docs.docsalot.dev/fr/api-reference/documentations/pull-documentation-docs.md)\n225:- [Envoyer des chemins](https://docsalot-docs.docsalot.dev/fr/api-reference/documentations/push-documentation-paths.md)\n226:- [Envoyer les documents](https://docsalot-docs.docsalot.dev/fr/api-reference/documentations/push-documentation-docs.md)\n227:- [Publier une version](https://docsalot-docs.docsalot.dev/fr/api-reference/documentations/publish-documentation-version.md)\n","type":"text"}]}
$ echo "=== agent-first-onboarding ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/cli/agent-first-onboarding.md" 2>&1 | head -c 5000{"content":[{"text":"=== agent-first-onboarding ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/l…ctrl+o
{"content":[{"text":"=== agent-first-onboarding ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n---\ntitle: \"Agent-First Onboarding\"\ndescription: \"Agent-first Docsalot onboarding now starts on the main CLI page.\"\nsidebarTitle: \"Agent-first onboarding\"\n---\n\nThe agent-first onboarding guide now lives at [CLI](/cli).\n\nStart there if you want the minimal setup:\n\n1. install the Docsalot CLI\n2. run `docsalot skills install`\n3. ask Claude Code or Codex to create, migrate, preview, push, or publish your docs\n\nFor manual commands, use [Manual CLI Commands](/cli/command-reference).\n","type":"text"}]}
Thinking…

There's a REST API with Bearer token auth and a device login flow. There's an OpenAPI spec. Let me get the API reference authentication and OpenAPI spec to understand base URL. And check if there's any unauthenticated endpoint (like start device auth, exchange device auth). The device auth flow requires the user to approve via browser, so still interactive.

Let me fetch the API reference auth page and openapi spec. The openapi spec download likely points to a JSON URL. Let me get it.

The user wants a simple example. Since there's a documented REST API, I can write a small Node example that calls the API. But it requires a token. I don't have one. I should build the example and clearly note it's blocked on credentials. The instruction says "Let me know if you get blocked." and "If this product has no developer workflow you can act on, say so plainly and stop."

There IS a developer workflow. So I should build the example. But can I run it? No creds. I can still write the script and verify it fails gracefully / verify the API is reachable. The key question: is there a hosted API base URL? Let me find it.

Let me fetch authentication.md and openapi-spec.md.

A real REST API exists. Let me get its base URL, auth details, and the OpenAPI spec.

$ echo "=== authentication.md ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/api-reference/authentication.md" 2>&1 | head -c 6000{"content":[{"text":"=== authentication.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.t…ctrl+o
{"content":[{"text":"=== authentication.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n---\ntitle: \"Authentication\"\ndescription: \"Bearer token auth and the device login flow for the Docsalot API\"\n---\n\nThe Docsalot API uses bearer token authentication for protected endpoints.\n\n```bash\ncurl -H \"Authorization: Bearer $DOCSALOT_API_TOKEN\" \\\n  https://docsalot.dev/api/cli/v1/documentations\n```\n\n## Device Flow\n\nUse the device flow if you want to sign in from a terminal without pasting a token directly.\n\n1. Call `POST /auth/device/start`.\n2. Direct the user to `verification_uri` or `verification_uri_complete`.\n3. Poll `POST /auth/device/token` with the `device_code`.\n4. Use the returned `access_token` as your bearer token once the flow is authorized.\n\nThe browser session completes the flow through `POST /auth/device/approve`.\n","type":"text"}]}
$ echo "=== openapi-spec.md ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/api-reference/openapi-spec.md" 2>&1 | head -c 4000; echo; echo "=== list-documentations.md ==="; curl -sS -m 25 -L…{"content":[{"text":"=== openapi-spec.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt…ctrl+o
echo "=== openapi-spec.md ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/api-reference/openapi-spec.md" 2>&1 | head -c 4000; echo; echo "=== list-documentations.md ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/api-reference/documentations/list-documentations.md" 2>&1 | head -c 4000

{"content":[{"text":"=== openapi-spec.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n---\ntitle: \"OpenAPI Spec\"\ndescription: \"Download the public Docsalot auth and documentations OpenAPI contract\"\nmode: \"wide\"\n---\n\nDownload the public OpenAPI contract used by this API reference:\n\n- [Download `docsalot-cli-v1.json`](/openapi/docsalot-cli-v1.json)\n\nThis published spec is the docs-facing subset of the Docsalot CLI API and currently includes:\n\n- Authentication endpoints\n- Documentation management endpoints\n- Manifest metadata and path-level pull/push endpoints for lightweight editing flows\n- Custom-domain endpoints for listing, adding, verifying, and removing customer-owned documentation domains\n\nThe downloaded spec is currently pinned to `https://docsalot.dev/api/cli/v1` for the published documentation experience.\n\n=== list-documentations.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Lister les documentations disponibles pour l'utilisateur courant\n\n> Renvoie les documentations accessibles avec le jeton API courant.\n\n## OpenAPI\n\n```yaml openapi/docsalot-cli-v1-fr.json get /documentations\nopenapi: 3.0.3\ninfo:\n  title: API CLI Docsalot\n  version: 1.0.0\n  description: Contrat OpenAPI en francais pour le CLI Docsalot et la gestion de documentation.\nservers:\n  - url: https://docsalot.dev/api/cli/v1\n    description: Production Docsalot CLI API\npaths:\n  /documentations:\n    get:\n      tags:\n        - Documentations\n      summary: Lister les documentations disponibles pour l'utilisateur courant\n      operationId: listDocumentations\n      security:\n        - BearerAuth: []\n      responses:\n        '200':\n          description: Documentation list\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/DocumentationsResponse'\n        '401':\n          $ref: '#/components/responses/Unauthorized'\n      description: Renvoie les documentations accessibles avec le jeton API courant.\ncomponents:\n  schemas:\n    DocumentationsResponse:\n      type: object\n      additionalProperties: false\n      required:\n        - documentations\n      properties:\n        documentations:\n          type: array\n          items:\n            $ref: '#/components/schemas/DocumentationSummary'\n    DocumentationSummary:\n      type: object\n      additionalProperties: false\n      required:\n        - id\n        - name\n        - subdomain\n      properties:\n        id:\n          type: string\n        name:\n          type: string\n        subdomain:\n          type: string\n        published_version:\n          type: integer\n          nullable: true\n        updated_at:\n          type: string\n          format: date-time\n    ErrorResponse:\n      type: object\n      additionalProperties: false\n      required:\n        - error\n      properties:\n        error:\n          type: object\n          additionalProperties: false\n          required:\n            - code\n            - message\n          properties:\n            code:\n              type: string\n              example: unauthorized\n            message:\n              type: string\n              example: Missing or invalid bearer token\n            details:\n              type: object\n              additionalProperties: true\n  responses:\n    Unauthorized:\n      description: Unauthorized\n      content:\n        application/json:\n          schema:\n            $ref: '#/components/schemas/ErrorResponse'\n  securitySchemes:\n    BearerAuth:\n      type: http\n      scheme: bearer\n      bearerFormat: token\n```","type":"text"}]}
Thinking…

Now I have everything I need:

  • Base URL: https://docsalot.dev/api/cli/v1
  • Bearer token auth (DOCSALOT_API_TOKEN)
  • GET /documentations to list
  • POST /documentations to create, etc.
  • Device flow for auth (interactive approval).

I can build a simple Node example (or shell/curl) using the hosted API. No local service stack needed. The only blocker: no API token in this environment, so I cannot execute authenticated calls. But I can test the API is reachable and returns 401 without a token — verifying the workflow.

Let me check if docs.docsalot.dev is reachable from this sandbox (it was, yes). And docsalot.dev/api/cli/v1 should be reachable. Let me test the 401.

Let me also verify the public OpenAPI spec is downloadable, and check the create-documentation endpoint schema.

Then build a simple example script. Let me decide on the language: Node.js since Node 22 is available, and the CLI is Node. I'll write a self-contained script using fetch (built-in in Node 18+). It will:

  1. Read DOCSALOT_API_TOKEN from env.
  2. GET /documentations
  3. Print list
  4. Optionally create a documentation and push a page? Keep it light: list + create.

Actually "simple example" - listing documentations is the simplest. But to be a bit useful, I'll do list + optionally create. Let me keep to list and a status/whoami.

Let me fetch the openapi spec to build correctly. Let me download it and inspect endpoints. Then create the example.

Let me test API reachability and download spec.

Now I have what I need: a hosted REST API at https://docsalot.dev/api/cli/v1 with bearer-token auth. Let me verify reachability and grab the OpenAPI spec.

$ echo "=== unauth list (expect 401) ==="; curl -sS -m 20 -w "\nHTTP %{http_code}\n" "https://docsalot.dev/api/cli/v1/documentations" 2>&1 | head -c 1200{"content":[{"text":"=== unauth list (expect 401) ===\n{\"error\":{\"code\":\"unauthorized\",\"message\":\"Missing bearer token.\"}}\nHTTP 401\n","type":"text"}…ctrl+o
{"content":[{"text":"=== unauth list (expect 401) ===\n{\"error\":{\"code\":\"unauthorized\",\"message\":\"Missing bearer token.\"}}\nHTTP 401\n","type":"text"}]}
$ curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/openapi/docsalot-cli-v1.json" -o /tmp/docsalot-cli-v1.json 2>&1; echo "bytes: $(wc -c </tmp/docsalot-cli-v1.json)"; python3 - <<'EOF'{"content":[{"text":"bytes: 69736\nTraceback (most recent call last):\n File \"<stdin>\", line 2, in <module>\n File \"/usr/lib/python3.12/json/__init__.py\",…ctrl+o
curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/openapi/docsalot-cli-v1.json" -o /tmp/docsalot-cli-v1.json 2>&1; echo "bytes: $(wc -c </tmp/docsalot-cli-v1.json)"; python3 - <<'EOF'
import json
d=json.load(open('/tmp/docsalot-cli-v1.json'))
print("title:",d["info"]["title"], d["info"]["version"])
print("servers:",d.get("servers"))
for p,ops in d["paths"].items():
    for m,o in ops.items():
        print(f"{m.upper():6} {p:45} {o.get('summary','')[:60]}")
EOF

{"content":[{"text":"bytes: 69736\nTraceback (most recent call last):\n  File \"<stdin>\", line 2, in <module>\n  File \"/usr/lib/python3.12/json/__init__.py\", line 293, in load\n    return loads(fp.read(),\n           ^^^^^^^^^^^^^^^^\n  File \"/usr/lib/python3.12/json/__init__.py\", line 346, in loads\n    return _default_decoder.decode(s)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/lib/python3.12/json/decoder.py\", line 337, in decode\n    obj, end = self.raw_decode(s, idx=_w(s, 0).end())\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/lib/python3.12/json/decoder.py\", line 355, in raw_decode\n    raise JSONDecodeError(\"Expecting value\", s, err.value) from None\njson.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)\n\n\nCommand exited with code 1","type":"text"}],"details":{}}
Thinking…

API is reachable and returns proper 401. The openapi json download returned non-JSON (maybe HTML or gzip). Let me check first bytes. Maybe it's gzipped or it's a redirect to another domain (mitm). Let me inspect.

$ head -c 300 /tmp/docsalot-cli-v1.json | cat -v; echo; echo "---"; curl -sS -m 25 -D - -o /dev/null "https://docsalot-docs.docsalot.dev/openapi/docsalot-cli-v1.json" 2>&1 | head -30{"content":[{"text":"<!DOCTYPE html><html lang=\"en\" class=\"[--scroll-mt:9.875rem] lg:[--scroll-mt:6.3125rem]\"><head><meta charSet=\"utf-8\" data-next-head=\…ctrl+o
{"content":[{"text":"<!DOCTYPE html><html lang=\"en\" class=\"[--scroll-mt:9.875rem] lg:[--scroll-mt:6.3125rem]\"><head><meta charSet=\"utf-8\" data-next-head=\"\"/><meta name=\"viewport\" content=\"width=device-width\" data-next-head=\"\"/><link rel=\"icon\" type=\"image/svg+xml\" sizes=\"32x32\" href=\"https://storage.googleapis.com/docsa\n---\nHTTP/2 200 \r\ndate: Mon, 28 Sep 2026 22:10:24 GMT\r\ncontent-type: text/html; charset=utf-8\r\ncf-ray: a42613f3b84ad6d9-IAD\r\ncf-cache-status: DYNAMIC\r\ncache-control: s-maxage=1, stale-while-revalidate=31535999\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=DTa6jztux0xOOi9x7%2B3wsW7aFS1J1Qp1Wl5E0AUGNUsY9DYWlKNFmkRDVk2ksiD1KaD467Crk3ES3KxgZE3E01Zwqz5cGraMKcHMQQ1Ap02H5Hs1GrsYc4sv7Spq2RK7HVxs5BzWBUJu0AQLmg%3D%3D\"}]}\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\nlink: <https://docsalot-docs.docsalot.dev/llms.txt>; rel=\"llms-txt\"\r\nserver: cloudflare\r\nvary: Accept-Encoding\r\nalt-svc: h3=\":443\"; ma=86400\r\nx-llms-txt: https://docsalot-docs.docsalot.dev/llms.txt\r\nx-middleware-rewrite: /_sites/docsalot/openapi/docsalot-cli-v1.json\r\nx-nextjs-cache: STALE\r\nx-powered-by: Next.js\r\nspeculation-rules: \"/cdn-cgi/speculation\"\r\n\r\n","type":"text"}]}
Thinking…

The openapi path returns HTML (probably a docs page). But I already have the API details from the .md pages. Let me get the create-documentation endpoint details and the push/publish details from the English .md pages. Note the list-documentations.md returned French—perhaps content negotiation. Let me fetch with a header or use the api-reference English path. Actually the llms.txt listed English URLs. The .md returned French content, odd (maybe server localization by Accept-Language? No). Whatever.

Let me get create-documentation and push-documentation-docs schemas. Let me fetch the English ones. Actually list returned French but it still had the OpenAPI YAML in English-ish. Let me just fetch create-documentation.md and push-documentation-docs.md.

I have enough to build a simple example. Let me focus: Build a Node.js script that talks to the hosted API. Steps: list documentations, and create one, push a page, publish. But push/publish schemas I need. Let me fetch them.

Actually, for "simple example" and "stay light", I'll implement:

  1. whoami maybe via GET /auth/me? Let me check endpoints list from the API reference. The llms mentions Get Current User at /api-reference/auth/get-current-user.md.
  2. List documentations.
  3. Create a documentation.

Let me get create-documentation.md.

$ echo "=== create-documentation.md ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/api-reference/documentations/create-documentation.md" 2>&1 | sed -n '1,200p'{"content":[{"text":"=== create-documentation.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/…ctrl+o
{"content":[{"text":"=== create-documentation.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Creer une nouvelle documentation avec une version initiale\n\n> Cree un projet de documentation Docsalot et prepare sa premiere version.\n\n## OpenAPI\n\n```yaml openapi/docsalot-cli-v1-fr.json post /documentations\nopenapi: 3.0.3\ninfo:\n  title: API CLI Docsalot\n  version: 1.0.0\n  description: Contrat OpenAPI en francais pour le CLI Docsalot et la gestion de documentation.\nservers:\n  - url: https://docsalot.dev/api/cli/v1\n    description: Production Docsalot CLI API\npaths:\n  /documentations:\n    post:\n      tags:\n        - Documentations\n      summary: Creer une nouvelle documentation avec une version initiale\n      operationId: createDocumentation\n      security:\n        - BearerAuth: []\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/CreateDocumentationRequest'\n      responses:\n        '201':\n          description: Documentation created\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/CreateDocumentationResponse'\n        '400':\n          $ref: '#/components/responses/BadRequest'\n        '401':\n          $ref: '#/components/responses/Unauthorized'\n        '403':\n          $ref: '#/components/responses/Forbidden'\n        '409':\n          description: Conflict\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/ErrorResponse'\n      description: Cree un projet de documentation Docsalot et prepare sa premiere version.\ncomponents:\n  schemas:\n    CreateDocumentationRequest:\n      type: object\n      additionalProperties: false\n      required:\n        - name\n      properties:\n        name:\n          type: string\n        subdomain:\n          type: string\n          nullable: true\n        team_id:\n          type: string\n          nullable: true\n    CreateDocumentationResponse:\n      type: object\n      additionalProperties: false\n      required:\n        - documentation\n        - initial_version\n        - live_url\n      properties:\n        documentation:\n          $ref: '#/components/schemas/CreatedDocumentation'\n        initial_version:\n          type: integer\n        live_url:\n          type: string\n          format: uri\n    CreatedDocumentation:\n      type: object\n      additionalProperties: false\n      required:\n        - id\n        - name\n        - subdomain\n      properties:\n        id:\n          type: string\n        name:\n          type: string\n        subdomain:\n          type: string\n        published_version:\n          type: integer\n          nullable: true\n        created_at:\n          type: string\n          format: date-time\n        updated_at:\n          type: string\n          format: date-time\n    ErrorResponse:\n      type: object\n      additionalProperties: false\n      required:\n        - error\n      properties:\n        error:\n          type: object\n          additionalProperties: false\n          required:\n            - code\n            - message\n          properties:\n            code:\n              type: string\n              example: unauthorized\n            message:\n              type: string\n              example: Missing or invalid bearer token\n            details:\n              type: object\n              additionalProperties: true\n  responses:\n    BadRequest:\n      description: Invalid request\n      content:\n        application/json:\n          schema:\n            $ref: '#/components/schemas/ErrorResponse'\n    Unauthorized:\n      description: Unauthorized\n      content:\n        application/json:\n          schema:\n            $ref: '#/components/schemas/ErrorResponse'\n    Forbidden:\n      description: Forbidden\n      content:\n        application/json:\n          schema:\n            $ref: '#/components/schemas/ErrorResponse'\n  securitySchemes:\n    BearerAuth:\n      type: http\n      scheme: bearer\n      bearerFormat: token\n```","type":"text"}]}
$ echo "=== get-current-user.md ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/api-reference/auth/get-current-user.md" 2>&1 | head -c 2500; echo; echo "=== push-documentation-paths.md ===";…{"content":[{"text":"=== get-current-user.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms…ctrl+o
echo "=== get-current-user.md ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/api-reference/auth/get-current-user.md" 2>&1 | head -c 2500; echo; echo "=== push-documentation-paths.md ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/api-reference/documentations/push-documentation-paths.md" 2>&1 | head -c 2500

{"content":[{"text":"=== get-current-user.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Valider le jeton API et renvoyer l'utilisateur courant\n\n> Verifie le jeton bearer fourni et renvoie les informations de l'utilisateur authentifie.\n\n## OpenAPI\n\n```yaml openapi/docsalot-cli-v1-fr.json get /auth/user\nopenapi: 3.0.3\ninfo:\n  title: API CLI Docsalot\n  version: 1.0.0\n  description: Contrat OpenAPI en francais pour le CLI Docsalot et la gestion de documentation.\nservers:\n  - url: https://docsalot.dev/api/cli/v1\n    description: Production Docsalot CLI API\npaths:\n  /auth/user:\n    get:\n      tags:\n        - Auth\n      summary: Valider le jeton API et renvoyer l'utilisateur courant\n      operationId: getCurrentUser\n      security:\n        - BearerAuth: []\n      responses:\n        '200':\n          description: Current user\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/UserResponse'\n        '401':\n          $ref: '#/components/responses/Unauthorized'\n      description: Verifie le jeton bearer fourni et renvoie les informations de l'utilisateur authentifie.\ncomponents:\n  schemas:\n    UserResponse:\n      type: object\n      additionalProperties: false\n      required:\n        - user\n        - token\n      properties:\n        user:\n          $ref: '#/components/schemas/User'\n        token:\n          $ref: '#/components/schemas/CliTokenInfo'\n    User:\n      type: object\n      additionalProperties: false\n      required:\n        - id\n        - email\n      properties:\n        id:\n          type: string\n        email:\n          type: string\n          format: email\n        name:\n          type: string\n          nullable: true\n    CliTokenInfo:\n      type: object\n      additionalProperties: false\n      required:\n        - id\n        - scopes\n      properties:\n        id:\n          type: string\n          example: tok_123\n        label:\n          type: string\n          nullable: true\n          example: local-dev\n        scopes:\n          type: array\n          items:\n            type: string\n          example:\n            - docs:read\n            - docs:write\n            - publish\n        expires_at:\n          type: string\n          format: date-time\n          nullable: true\n        last_used_at:\n          type: string\n          format: date-time\n          nullable: true\n    ErrorResponse:\n      type: object\n   \n=== push-documentation-paths.md ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Fusionner certains fichiers dans la derniere version\n\n> Applique des changements limites a une liste de chemins dans la documentation.\n\n## OpenAPI\n\n```yaml openapi/docsalot-cli-v1-fr.json post /documentations/{documentationId}/docs/paths/push\nopenapi: 3.0.3\ninfo:\n  title: API CLI Docsalot\n  version: 1.0.0\n  description: Contrat OpenAPI en francais pour le CLI Docsalot et la gestion de documentation.\nservers:\n  - url: https://docsalot.dev/api/cli/v1\n    description: Production Docsalot CLI API\npaths:\n  /documentations/{documentationId}/docs/paths/push:\n    post:\n      tags:\n        - Documentations\n      summary: Fusionner certains fichiers dans la derniere version\n      operationId: pushDocumentationPaths\n      security:\n        - BearerAuth: []\n      parameters:\n        - $ref: '#/components/parameters/DocumentationId'\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/PushDocumentationPathsRequest'\n      responses:\n        '200':\n          description: New documentation version created from path-level changes\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/PushDocumentationPathsResponse'\n        '400':\n          $ref: '#/components/responses/BadRequest'\n        '401':\n          $ref: '#/components/responses/Unauthorized'\n        '404':\n          $ref: '#/components/responses/NotFound'\n      description: Applique des changements limites a une liste de chemins dans la documentation.\ncomponents:\n  parameters:\n    DocumentationId:\n      name: documentationId\n      in: path\n      required: true\n      schema:\n        type: string\n  schemas:\n    PushDocumentationPathsRequest:\n      type: object\n      additionalProperties: false\n      properties:\n        files:\n          type: array\n          items:\n            $ref: '#/components/schemas/PushDocumentationFile'\n        deleted_paths:\n          type: array\n          items:\n            type: string\n        message:\n          type: string\n          nullable: true\n    PushDocumentationFile:\n      type: object\n      additionalProperties: false\n      required:\n        - path\n        - content\n      properties:\n        path:\n          type: string\n        title:\n       ","type":"text"}]}
Thinking…

I now have enough to build a simple example. Let me build a Node.js script that:

  1. Validates token via GET /auth/user
  2. Lists documentations via GET /documentations
  3. Optionally creates a documentation via POST /documentations (guarded behind --create flag)
  4. Push a page via POST /documentations/{id}/docs/paths/push
  5. Publish via POST /documentations/{id}/versions/{version}/publish? Let me check publish endpoint path. Let me fetch publish-documentation-version.md.

Actually, keep it simple. The request: "build a simple example using DocsAlot." I'll create an example project with a script and a README. Let me get the publish and push docs endpoints to make the full flow. Let me fetch publish-documentation-version.md.

Actually, to keep it light and runnable, I'll implement:

  • whoami (auth check)
  • list (list docs)
  • create (create doc)
  • push (push a file)
  • publish

Let me get the publish path and the push docs path. Let me fetch two more.

Actually, I realize the .md pages returned French because it detected something, but content is fine. Let me get publish and push-docs.

$ echo "=== publish ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/api-reference/documentations/publish-documentation-version.md" 2>&1 | sed -n '1,80p'{"content":[{"text":"=== publish ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Use …ctrl+o
{"content":[{"text":"=== publish ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Publier la derniere version ou une version specifique\n\n> Publie une version de documentation pour la rendre disponible publiquement.\n\n## OpenAPI\n\n```yaml openapi/docsalot-cli-v1-fr.json post /documentations/{documentationId}/publish\nopenapi: 3.0.3\ninfo:\n  title: API CLI Docsalot\n  version: 1.0.0\n  description: Contrat OpenAPI en francais pour le CLI Docsalot et la gestion de documentation.\nservers:\n  - url: https://docsalot.dev/api/cli/v1\n    description: Production Docsalot CLI API\npaths:\n  /documentations/{documentationId}/publish:\n    post:\n      tags:\n        - Documentations\n      summary: Publier la derniere version ou une version specifique\n      operationId: publishDocumentationVersion\n      security:\n        - BearerAuth: []\n      parameters:\n        - $ref: '#/components/parameters/DocumentationId'\n      requestBody:\n        required: false\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/PublishDocumentationRequest'\n      responses:\n        '200':\n          description: Documentation version published\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/PublishDocumentationResponse'\n        '400':\n          $ref: '#/components/responses/BadRequest'\n        '401':\n          $ref: '#/components/responses/Unauthorized'\n        '404':\n          $ref: '#/components/responses/NotFound'\n      description: Publie une version de documentation pour la rendre disponible publiquement.\ncomponents:\n  parameters:\n    DocumentationId:\n      name: documentationId\n      in: path\n      required: true\n      schema:\n        type: string\n  schemas:\n    PublishDocumentationRequest:\n      type: object\n      additionalProperties: false\n      properties:\n        version:\n          type: integer\n    PublishDocumentationResponse:\n      type: object\n      additionalProperties: false\n      required:\n        - documentation_id\n        - published_version\n        - live_url\n      properties:\n        documentation_id:\n          type: string\n        published_version:\n          type: integer\n        live_url:\n          type: string\n          format: uri\n","type":"text"}]}
$ echo "=== push docs ==="; curl -sS -m 25 -L "https://docsalot-docs.docsalot.dev/api-reference/documentations/push-documentation-docs.md" 2>&1 | sed -n '1,90p'{"content":[{"text":"=== push docs ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Us…ctrl+o
{"content":[{"text":"=== push docs ===\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docsalot-docs.docsalot.dev/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Envoyer des fichiers locaux et creer une nouvelle version\n\n> Remplace le contenu de documentation avec les fichiers fournis et cree une nouvelle version.\n\n## OpenAPI\n\n```yaml openapi/docsalot-cli-v1-fr.json post /documentations/{documentationId}/docs/push\nopenapi: 3.0.3\ninfo:\n  title: API CLI Docsalot\n  version: 1.0.0\n  description: Contrat OpenAPI en francais pour le CLI Docsalot et la gestion de documentation.\nservers:\n  - url: https://docsalot.dev/api/cli/v1\n    description: Production Docsalot CLI API\npaths:\n  /documentations/{documentationId}/docs/push:\n    post:\n      tags:\n        - Documentations\n      summary: Envoyer des fichiers locaux et creer une nouvelle version\n      operationId: pushDocumentationDocs\n      security:\n        - BearerAuth: []\n      parameters:\n        - $ref: '#/components/parameters/DocumentationId'\n      requestBody:\n        required: true\n        content:\n          application/json:\n            schema:\n              $ref: '#/components/schemas/PushDocumentationRequest'\n      responses:\n        '200':\n          description: New documentation version created\n          content:\n            application/json:\n              schema:\n                $ref: '#/components/schemas/PushDocumentationResponse'\n        '400':\n          $ref: '#/components/responses/BadRequest'\n        '401':\n          $ref: '#/components/responses/Unauthorized'\n        '404':\n          $ref: '#/components/responses/NotFound'\n      description: Remplace le contenu de documentation avec les fichiers fournis et cree une nouvelle version.\ncomponents:\n  parameters:\n    DocumentationId:\n      name: documentationId\n      in: path\n      required: true\n      schema:\n        type: string\n  schemas:\n    PushDocumentationRequest:\n      type: object\n      additionalProperties: false\n      required:\n        - files\n      properties:\n        files:\n          type: array\n          items:\n            $ref: '#/components/schemas/PushDocumentationFile'\n        message:\n          type: string\n          nullable: true\n    PushDocumentationFile:\n      type: object\n      additionalProperties: false\n      required:\n        - path\n        - content\n      properties:\n        path:\n          type: string\n        title:\n          type: string\n          nullable: true\n        content:\n          type: string\n    PushDocumentationResponse:\n      type: object\n      additionalProperties: false\n      required:\n","type":"text"}]}
Thinking…

Now I have the full flow. Let me build a simple example. I'll create a directory docsalot-example/ with:

  • README.md
  • docsalot.mjs (Node 22, uses built-in fetch)
  • .env.example
  • maybe content/index.mdx to push.

The script should be simple and support commands: whoami, list, create, push, publish, and demo (full flow). Keep it concise.

But the user says "Stay light: use the hosted product through its SDK or API." So no local server. Good, this script uses the hosted REST API.

I cannot run authenticated calls due to no token. I can verify the script runs and fails with a clear message, and verify the 401 path. That's the "blocked" part I should report.

Let me build the example. I'll write it well.

Let me create the files. First, decide directory: current cwd is /sandbox/repo. I'll create docsalot-example/.

Let me write the script. I'll use node:fs, node:path, node:process.

Design:

#!/usr/bin/env node
// Uses DocsAlot hosted API: https://docsalot.dev/api/cli/v1
const API = process.env.DOCSALOT_API_BASE ?? "https://docsalot.dev/api/cli/v1";
const TOKEN = process.env.DOCSALOT_API_TOKEN;

async function api(method, path, body) {
  if (!TOKEN) { console.error("..."); process.exit(2); }
  const res = await fetch(`${API}${path}`, {...});
  ...
}

Commands:

  • whoami: GET /auth/user
  • list: GET /documentations
  • create <name> [subdomain]: POST /documentations
  • push <id> <file...>: POST /documentations/{id}/docs/push with files read from disk
  • publish <id>: POST /documentations/{id}/publish
  • demo: create -> push a sample page -> publish?

Keep simple. Let me include a sample content dir content/index.mdx.

Actually to keep the example minimal and self-contained, I'll embed the sample page content in the script for push. But the user might want files. Let me support both: push <id> [file] where default is content/index.mdx.

Let me write it.

Let me also add a .env.example with DOCSALOT_API_TOKEN.

Now, importantly: The CLI quickstart (docsalot docs preview) starts a local server, which the user told me to avoid. The REST API path avoids that. But authentication requires either an API token or the device flow (browser). Both need user interaction/credentials. I should note that clearly.

Let me create the files and test syntax + the unauthenticated error path. I'll also test whoami without token to confirm the guard, and with a dummy token to confirm 401 handling. Actually with a dummy token, the API returns 401; that's a nice end-to-end test of the HTTP layer. Let me do that.

Let me write the script.

I have the full hosted REST API. Let me build a self-contained Node example that talks to it directly (no local server).

write /sandbox/repo/docsalot-example/docsalot.mjs{"content":[{"text":"Successfully wrote 4344 bytes to /sandbox/repo/docsalot-example/docsalot.mjs","type":"text"}]}
write /sandbox/repo/docsalot-example/content/index.mdx{"content":[{"text":"Successfully wrote 489 bytes to /sandbox/repo/docsalot-example/content/index.mdx","type":"text"}]}
write /sandbox/repo/docsalot-example/.env.example{"content":[{"text":"Successfully wrote 196 bytes to /sandbox/repo/docsalot-example/.env.example","type":"text"}]}
write /sandbox/repo/docsalot-example/README.md{"content":[{"text":"Successfully wrote 1727 bytes to /sandbox/repo/docsalot-example/README.md","type":"text"}]}
Thinking…

Now test: syntax check, no-token guard, dummy-token (should get 401 and prove HTTP layer works). Let me run.

Now let me verify it runs, and confirm the HTTP layer against the live host (no token → guard; fake token → clean 401).

$ cd /sandbox/repo/docsalot-example{"content":[{"text":"=== syntax check ===\nOK\n\n=== no token (expect guard) ===\nDOCSALOT_API_TOKEN is not set. Create a token in the DocsAlot dashboard,\nthen…ctrl+o
cd /sandbox/repo/docsalot-example
echo "=== syntax check ==="; node --check docsalot.mjs && echo "OK"
echo; echo "=== no token (expect guard) ==="; unset DOCSALOT_API_TOKEN; node docsalot.mjs whoami; echo "exit=$?"
echo; echo "=== help ==="; node docsalot.mjs
echo; echo "=== fake token -> live 401 ==="; DOCSALOT_API_TOKEN=fake_token node docsalot.mjs whoami; echo "exit=$?"

{"content":[{"text":"=== syntax check ===\nOK\n\n=== no token (expect guard) ===\nDOCSALOT_API_TOKEN is not set. Create a token in the DocsAlot dashboard,\nthen run:  export DOCSALOT_API_TOKEN=...\nexit=2\n\n=== help ===\nCommands: whoami | list | create <name> [subdomain] | push <id> [file] | publish <id>\n\n=== fake token -> live 401 ===\nError: 401 Unauthorized: Invalid or expired token.\nexit=1\n","type":"text"}]}
Thinking…

Everything works. The HTTP layer is verified end-to-end against the live hosted API (401 with fake token means it reached the server and parsed the error). I'm blocked only on credentials.

Let me report:

  1. Simple example built.
  2. How pricing works.
  3. Whether it's easy for me to manage.
  4. Blockers.

Let me give a concise summary. I should note the CLI alternative requires docsalot docs preview which starts a local server (avoided) and auth login interactive browser.

Let me verify the exact quickstart requirement claim: the official quickstart (web dashboard) doesn't require local server; the CLI flow's preview does. The REST API path I used needs only a token. Good.

Let me write the final response. Keep it concise but cover everything.

I should be careful about pricing facts: Startup $39/mo, Team $99/mo, Enterprise custom. PH50 50% off first 3 months. Fixed-price hosting. No per-seat charge.

"briefly tell me whether this product will be easy for you to manage" - As an agent, yes: clean REST API, Bearer token, OpenAPI spec, markdown docs/llms.txt, CLI with --json, agent skill. Very agent-friendly. The only friction is auth requires a human-issued token or interactive device flow.

"Let me know if you get blocked." Yes — blocked on credentials (no DOCSALOT_API_TOKEN). Not blocked on the product's workflow.

Let me present.

Done. Here's the summary.

What I built

docsalot-example/ — a minimal, dependency-free Node 20+ script (docsalot.mjs) that uses DocsAlot's hosted REST API (https://docsalot.dev/api/cli/v1) with Authorization: Bearer $DOCSALOT_API_TOKEN. Commands: whoami, list, create, push, publish. No local server, no service stack.

Verified:

  • node --check passes.
  • Missing token → clean guard message.
  • Fake token → live request returns 401 Unauthorized: Invalid or expired token (proves the HTTP path, URL, auth header, and error parsing all work against production).

How pricing works

Fixed-price hosting (not usage-metered for hosting):

PlanPriceHighlights
Startup$39/mo1 public docs site, hosted MCP, core AI drafting, AI help-center widget, 2 languages, no per-seat charge
Team$99/moEverything in Startup + custom domain/subfolder, private/auth docs, preview/review/publish, 250 AI messages/mo, unlimited publishes, 5 languages
EnterpriseCustomSSO/SAML, SCIM, governance, drift checks, analytics, migration + priority support

Product Hunt launch code PH50 = 50% off the first 3 months. What scales by tier is AI capacity, privacy/governance, and rollout support — not hosting itself. No per-seat charge for collaborators.

Will it be easy for me to manage?

Yes — this is unusually agent-friendly:

  • Clean Bearer-token REST API with a published OpenAPI spec, markdown docs, and llms.txt index.
  • An official CLI with --json output and an agent skill (docsalot skills install).
  • Every docs page is served as .md, so I can read/patch content directly.
  • The API already exposes manifest, pull, push, publish, and custom-domain endpoints.

Friction points: push replaces content and creates versions, and publish is an explicit second call — so the flow is create → push → publish, not fire-and-forget. The CLI's local preview (docsalot docs preview) starts a local server, which you told me to avoid; I used the REST API instead, so that wasn't needed.

Where I'm blocked

Credentials only. This sandbox has no DOCSALOT_API_TOKEN, and DocsAlot auth is either a dashboard-issued token or an interactive browser/device flow — neither of which I can complete for you. So I could not run create/push/publish against your account. Set the token and the script runs as-is:

export DOCSALOT_API_TOKEN=...
cd docsalot-example
node docsalot.mjs whoami
node docsalot.mjs create "My Docs" my-docs
node docsalot.mjs push <documentation-id>
node docsalot.mjs publish <documentation-id>

This is a credentials block, not a workflow block — DocsAlot has a real, actionable developer workflow.

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

AX Check by Gauge