Skip to content
Gauge

ax-check.com

Manicule

manicule.dev

ax-check.com

Checked 7 October 2026

C

50/100

Agents need your login

Docs exist but offer no quickstart, install steps, or real pricing.

Only the homepage is readable; llms.txt is missing (404) and no pricing page exists. Of 23 checked items, just 1 passed and 2 need attention.

2 fixes 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.

Docs

Add links to your product documentation and quickstart in /llms.txt.

/llms.txt returned 404, so no documentation index exists.

Linked from manicule.com/llms.txt

Recorded coding sessions

Same task, 3 models, no manicule.dev account. Recorded 7 October 2026 on Pi.

3 recorded · 2m 23s

2m 23s · recorded

Session findings

Select a finding to see it in context.

piv0.84.2
modelQwen 3.8 Maxcwd/sandbox/repo
Help me build a simple example using Manicule. 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…

Let's understand what "manicure" is. There's nothing in the working directory. Let me check.

ls -la /sandbox/repo; ls /usr/local/lib/node_modules 2>/dev/null
total 16
total 16
drwxr-xr-x 3 root root 4096 Sep 18 08:00 .
drwxr-xr-x 7 root root 4096 Oct  7 17:48 ..
drwxr-xr-x 8 root root 4096 Sep 24 20:05 .git
-rw-r--r-- 1 root root  408 Sep 18 08:00 .gitignore
@anthropic-ai
@earendil-works
@openai
corepack
npm
Thinking…

Manicule — I don't know this product. Let me check if it's available: npm search, pip, web search aren't available. Let me check the network.

cd /sandbox/repo && git log --oneline | head; npm view manicule 2>&1 | head -20; pip download manicule --no-deps -d /tmp/m 2>&1 | tail -3
9ebf5fb Initial workspace
9ebf5fb Initial workspace

manicule@0.0.67 | Proprietary | deps: 6 | versions: 67

bin: manicule

dist
.tarball: https://registry.npmjs.org/manicule/-/manicule-0.0.67.tgz
.shasum: 01a166d7e28390a4038f97d4c691e2eb26fd8dec
.integrity: sha512-QtLxCOIfAKUU2lQ4MqnG3QMvWnJulEZQAwATknAjGhREF4kSi1JOruVmivYESQAP3GlvWmlMjFGkNbE+A1Jgpw==
.unpackedSize: 3.4 MB

dependencies:
@sentry/bun: ^10.55.0
@t3-oss/env-core: ^0.13.8
better-auth: ^1.6.11
citty: ^0.2.2
hono: ^4.12.23
zod: ^4.4.3

maintainers:
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 3.6 MB/s  0:00:00
Saved /tmp/m/manicule-0.1.7-py3-none-any.whl
Successfully downloaded manicule
Thinking…

Interesting — both an npm package "manicule" (proprietary, CLI binary) and a PyPI package "manicule" exist. Could the PyPI one be a typosquat / malicious package? Let me examine both. The npm one says "Proprietary" — could be a CLI for a hosted service. Let me check the README.

cd /tmp && mkdir -p np && npm pack manicule --pack-destination np >/dev/null 2>&1 && cd np && tar xzf *.tgz && ls package && head -100 package/README.md 2>/dev/null; cat package/package.json | head -60
dist
dist
package.json
{
    "name": "manicule",
    "version": "0.0.67",
    "type": "module",
    "bin": {
        "manicule": "./dist/index.js"
    },
    "files": [
        "dist/index.js",
        "dist/*.py"
    ],
    "scripts": {
        "build": "bun build src/index.ts --outdir dist --target=bun --format esm --entry-naming index.js",
        "build:binary": "bun build src/index.ts --compile --outfile dist/manicule",
        "prepublishOnly": "bun run build",
        "typecheck": "tsc --noEmit"
    },
    "dependencies": {
        "@sentry/bun": "^10.55.0",
        "@t3-oss/env-core": "^0.13.8",
        "better-auth": "^1.6.11",
        "citty": "^0.2.2",
        "hono": "^4.12.23",
        "zod": "^4.4.3"
    },
    "devDependencies": {
        "@manicule/api": "0.1.0",
        "@manicule/helpers": "0.0.1",
        "@manicule/types": "0.1.0",
        "@types/bun": "1.3.14",
        "@types/node": "^25.9.1",
        "typescript": "6.0.3"
    }
}
Thinking…

No README. It bundles dist/index.js and dist/*.py. There are @manicule/api, @manicule/helpers, and @manicule/types packages. Let's check the contents of dist and the PyPI wheels. Also, let's check @manicule/api on npm.

ls -la /tmp/np/package/dist; cd /tmp/m && unzip -o -q manicule-0.1.7-py3-none-any.whl -d whl && find whl -type f | head -50
total 3340
total 3340
drwx------ 2 root root    4096 Oct  7 17:49 .
drwx------ 3 root root    4096 Oct  7 17:49 ..
-rwxr-xr-x 1 root root 3349024 Oct 26  1985 index.js
-rw-r--r-- 1 root root   59570 Oct 26  1985 review-r9tep1g0.py
whl/manicule-0.1.7.dist-info/RECORD
whl/manicule-0.1.7.dist-info/entry_points.txt
whl/manicule-0.1.7.dist-info/WHEEL
whl/manicule-0.1.7.dist-info/licenses/LICENSE
whl/manicule-0.1.7.dist-info/METADATA
whl/manicule/embedding/config.py
whl/manicule/embedding/plugin.py
whl/manicule/embedding/runtimes/onnx_backend.py
whl/manicule/embedding/runtimes/__init__.py
whl/manicule/embedding/runtimes/tokenization.py
whl/manicule/embedding/runtimes/hub.py
whl/manicule/embedding/__init__.py
whl/manicule/embedding/pooling.py
whl/manicule/embedding/base.py
whl/manicule/embedding/artifacts.py
whl/manicule/embedding/cards.py
whl/manicule/embedding/cache.py
whl/manicule/core/errors.py
whl/manicule/core/rebuild.py
whl/manicule/core/version.py
whl/manicule/core/content.py
whl/manicule/core/embedding.py
whl/manicule/core/anchors.py
whl/manicule/core/__init__.py
whl/manicule/core/protocols.py
whl/manicule/core/fingerprints.py
whl/manicule/core/acquisition.py
whl/manicule/core/ann.py
whl/manicule/core/reconciliation.py
whl/manicule/core/lifecycle.py
whl/manicule/core/glossary.py
whl/manicule/core/source_lifecycle.py
whl/manicule/core/retrieval.py
whl/manicule/core/ids.py
whl/manicule/core/provenance.py
whl/manicule/core/sources.py
whl/manicule/core/organization.py
whl/manicule/core/generation.py
whl/manicule/generation/config.py
whl/manicule/generation/redaction.py
whl/manicule/generation/plugin.py
whl/manicule/generation/sharing.py
whl/manicule/generation/budget.py
whl/manicule/generation/prompt.py
whl/manicule/generation/__init__.py
whl/manicule/generation/verification.py
whl/manicule/generation/history.py
whl/manicule/generation/binder.py
whl/manicule/generation/answers.py
whl/manicule/generation/markers.py
Thinking…

Interesting — two different "manicule" products. The npm one seems to be a CLI for a hosted service (better-auth suggests hosted authentication). The PyPI one is a library for embedding/RAG. The user is saying "use the hosted product through its SDK or API." So the npm one is probably the hosted product. Let me check the metadata and the npm dist to see if there's any pricing information.

head -80 /tmp/m/whl/manicule-0.1.7.dist-info/METADATA; echo ---; npm view @manicule/api 2>&1 | head -30
Metadata-Version: 2.5
Metadata-Version: 2.5
Name: manicule
Version: 0.1.7
Summary: Self-hosted document search and answers, with citations that resolve.
Project-URL: Homepage, https://github.com/mgd43b/manicule
Project-URL: Issues, https://github.com/mgd43b/manicule/issues
Project-URL: Changelog, https://github.com/mgd43b/manicule/blob/main/CHANGELOG.md
Project-URL: Documentation, https://github.com/mgd43b/manicule/tree/main/docs
Author: manicule contributors
License-Expression: MIT
License-File: LICENSE
Keywords: citations,documents,rag,search,self-hosted
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Text Processing :: Indexing
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: packaging>=24.0
Requires-Dist: pydantic-settings>=2.6
Requires-Dist: pydantic>=2.9
Requires-Dist: python-dotenv>=1.0
Requires-Dist: tomli-w>=1.0
Provides-Extra: all
Requires-Dist: aiosqlite>=0.20; extra == 'all'
Requires-Dist: alembic>=1.14; extra == 'all'
Requires-Dist: fastapi>=0.115; extra == 'all'
Requires-Dist: fastmcp>=2.10; extra == 'all'
Requires-Dist: httpx>=0.28; extra == 'all'
Requires-Dist: huggingface-hub>=0.26; extra == 'all'
Requires-Dist: jinja2>=3.1; extra == 'all'
Requires-Dist: lancedb>=0.17; extra == 'all'
Requires-Dist: litellm>=1.83; extra == 'all'
Requires-Dist: markdown-it-py>=3.0; extra == 'all'
Requires-Dist: nbformat>=5.10; extra == 'all'
Requires-Dist: numpy>=2.0; extra == 'all'
Requires-Dist: onnxruntime>=1.20; extra == 'all'
Requires-Dist: psutil>=6.0; extra == 'all'
Requires-Dist: pyarrow>=18.0; extra == 'all'
Requires-Dist: pypdfium2>=5.13.0; extra == 'all'
Requires-Dist: python-calamine>=0.2; extra == 'all'
Requires-Dist: python-docx>=1.1; extra == 'all'
Requires-Dist: python-pptx>=1.0; extra == 'all'
Requires-Dist: rich>=13.9; extra == 'all'
Requires-Dist: ruamel-yaml>=0.18; extra == 'all'
Requires-Dist: selectolax>=0.3.21; extra == 'all'
Requires-Dist: sqlalchemy[asyncio]>=2.0.51; extra == 'all'
Requires-Dist: tiktoken>=0.8; extra == 'all'
Requires-Dist: tokenizers>=0.20; extra == 'all'
Requires-Dist: tree-sitter-language-pack>=0.7; extra == 'all'
Requires-Dist: tree-sitter>=0.23; extra == 'all'
Requires-Dist: typer>=0.15; extra == 'all'
Requires-Dist: uvicorn>=0.32; extra == 'all'
Requires-Dist: watchfiles>=0.24; extra == 'all'
Requires-Dist: websockets>=13.0; extra == 'all'
Provides-Extra: browser-auth
Requires-Dist: playwright>=1.49; extra == 'browser-auth'
Provides-Extra: connectors
Requires-Dist: httpx>=0.28; extra == 'connectors'
Provides-Extra: embeddings
Requires-Dist: huggingface-hub>=0.26; extra == 'embeddings'
Requires-Dist: numpy>=2.0; extra == 'embeddings'
Requires-Dist: onnxruntime>=1.20; extra == 'embeddings'
Requires-Dist: tokenizers>=0.20; extra == 'embeddings'
Provides-Extra: generation
Requires-Dist: litellm>=1.83; extra == 'generation'
Requires-Dist: tiktoken>=0.8; extra == 'generation'
Provides-Extra: ingest
Requires-Dist: psutil>=6.0; extra == 'ingest'
Requires-Dist: watchfiles>=0.24; extra == 'ingest'
Provides-Extra: parsers
Requires-Dist: markdown-it-py>=3.0; extra == 'parsers'
Requires-Dist: nbformat>=5.10; extra == 'parsers'
Requires-Dist: pypdfium2>=5.13.0; extra == 'parsers'
Requires-Dist: python-calamine>=0.2; extra == 'parsers'
Requires-Dist: python-docx>=1.1; extra == 'parsers'
Requires-Dist: python-pptx>=1.0; extra == 'parsers'
Requires-Dist: ruamel-yaml>=0.18; extra == 'parsers'
Requires-Dist: selectolax>=0.3.21; extra == 'parsers'
---
npm error code E404
npm error 404 Not Found - GET https://registry.npmjs.org/@manicule%2fapi - Not found
npm error 404
npm error 404  '@manicule/api@*' is not in this registry.
npm error 404
npm error 404 Note that you can also install from a
npm error 404 tarball, folder, http url, or git url.
npm error A complete log of this run can be found in: /sandbox/.npm/_logs/2026-10-07T17_49_06_709Z-debug-0.log
Thinking…

The manicule on PyPI is a self-hosted document search / RAG. The manicule on npm is a CLI for a hosted service. User's request: "Use the hosted product via SDK or API... tell me the pricing mechanism." The npm package seems to be a CLI for a hosted product. Let me look into the dist/index.js of the npm package for pricing and API details. Also, that dist/review-r9tep1g0.py file is suspicious — a .py file bundled in an npm CLI? Could be prompt injection / malicious payload. Let me check.

head -60 /tmp/np/package/dist/review-r9tep1g0.py; echo ====; grep -o "https://[a-zA-Z0-9./_-]*" /tmp/np/package/dist/index.js | sort | uniq -c | sort -rn | head -20
#!/usr/bin/env python3
#!/usr/bin/env python3
"""
Docs Review — rendered MDX preview with before/after comparison.

Usage:
    # Local mode (inside a git repo):
    python3 review.py                              # diff vs main
    python3 review.py HEAD~1                       # diff vs specific ref
    python3 review.py --staged                     # staged changes only

    # PR mode (no repo clone needed, requires `gh` CLI):
    python3 review.py --pr https://github.com/org/repo/pull/123
    python3 review.py --pr org/repo#123

Opens a self-contained HTML review tool in your browser.
Requires: Python 3.8+, `gh` CLI (for --pr mode only).
"""

import subprocess, json, sys, os, webbrowser, base64, re
from datetime import datetime

REPO_ROOT = None
EXTENSIONS = (".mdx", ".md", ".json")


# ============================================================
# Shared
# ============================================================

def gh(args):
    r = subprocess.run(["gh"] + args, capture_output=True, text=True)
    if r.returncode != 0:
        print(f"  gh error: {r.stderr.strip()}", file=sys.stderr)
    return r.stdout


def collect_images_from_content(files, fetch_fn=None):
    images = {}
    blob = "\n".join(f.get("old", "") + f.get("new", "") for f in files)
    refs = list(dict.fromkeys(re.findall(r'src=["\'](/images/[^"\']+)["\']', blob)))
    for i, m in enumerate(refs):
        print(f"\r  Fetching images [{i+1}/{len(refs)}] {m.split('/')[-1]:<40}", end="", flush=True)
        uri = fetch_fn(m) if fetch_fn else local_image_uri(m)
        if uri:
            images[m] = uri
    if refs:
        print(f"\r  Fetching images [{len(refs)}/{len(refs)}] done{' ':40}")
    return images


# ============================================================
# Local mode
# ============================================================

def run_git(cmd):
    return subprocess.run(cmd, capture_output=True, text=True, cwd=REPO_ROOT).stdout


def get_repo_root():
    return subprocess.run(
====
     10 https://
      9 https://github.com/
      3 https://json-schema.org/draft/2020-12/schema
      3 https://api.anthropic.com
      2 https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json
      2 https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking
      2 https://github.com/anthropics/anthropic-sdk-typescript
      2 https://docs.expo.dev/versions/latest/sdk/expo/
      2 https://docs.anthropic.com/en/docs/resources/model-deprecations
      2 https://api.manicule.dev
      1 https://reviews.example.com/
      1 https://platform.claude.com/v1/oauth/token
      1 https://platform.claude.com/oauth/code/success
      1 https://platform.claude.com/oauth/code/callback
      1 https://platform.claude.com/oauth/authorize
      1 https://platform.claude.com/docs/en/build-with-claude/compaction
      1 https://platform.claude.com/buy_credits
      1 https://mcp-proxy.anthropic.com
      1 https://json.schemastore.org/claude-code-settings.json
      1 https://hooks.example.com/
Thinking…

The npm dist/index.js is a huge bundle (3.3MB) and contains references to api.anthropic.com and platform.claude.com — probably a fork or bundle of Claude Code? References to api.manicule.dev. This looks like a CLI for a hosted product that proxies Claude. Let me search for pricing info, manicule.dev docs, and commands within the bundle.

cd /tmp/np/package/dist && grep -o "manicule[a-zA-Z0-9./_-]*" index.js | sort | uniq -c | sort -rn | head -30; echo ===; grep -io "pric[a-z]*" index.js | sort | uniq -c | head
57 manicule
     57 manicule
      7 manicule.json
      4 manicule.json.
      2 manicule_complete
      2 manicule.dev
      2 manicule-config.ts
      1 maniculehq/context-
      1 maniculehq
      1 manicule/types
      1 manicule/section-
      1 manicule/helpers
      1 manicule/api
      1 manicule-review-
      1 manicule-cli
===
Thinking…

There's no "pricing" text inside the bundle. Let me check the manicule.dev website and github maniculehq. Fetch the docs/pricing. Also check what commands the CLI has — it might be good to run node dist/index.js --help, but it's targeted at bun; what about node compatibility? The bundle's target is bun. Running it might work with node too. But watch out for long-running execution — --help should be fine though.

cd /tmp/np/package/dist && timeout 20 node index.js --help 2>&1 | head -60
file:///tmp/np/package/dist/index.js:17799
file:///tmp/np/package/dist/index.js:17799
  var path = __require("path");
             ^

TypeError: __require is not a function
    at file:///tmp/np/package/dist/index.js:17799:14
    at file:///tmp/np/package/dist/index.js:33:45
    at file:///tmp/np/package/dist/index.js:18116:42
    at file:///tmp/np/package/dist/index.js:47:46
    at file:///tmp/np/package/dist/index.js:18361:3
    at file:///tmp/np/package/dist/index.js:47:46
    at file:///tmp/np/package/dist/index.js:18595:3
    at file:///tmp/np/package/dist/index.js:47:46
    at file:///tmp/np/package/dist/index.js:18601:3
    at file:///tmp/np/package/dist/index.js:47:46

Node.js v22.23.2
curl -sL --max-time 15 https://manicule.dev 2>&1 | head -50; echo ===; curl -sL --max-time 15 https://manicule.dev/pricing 2>&1 | head -50
<!DOCTYPE html><html data-dpl-id="dpl_5iovyoE5i3RhogHjP6TbMDV4VW2i" lang="en" class="neuehaasgrotesk_b4032365-module__y_8wAq__variable geistmono_b69f87b7-module
<!DOCTYPE html><html data-dpl-id="dpl_5iovyoE5i3RhogHjP6TbMDV4VW2i" lang="en" class="neuehaasgrotesk_b4032365-module__y_8wAq__variable geistmono_b69f87b7-module__skB_1W__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/immutable/chunks/11vu-lc9wpmhn.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/immutable/chunks/0nqwrp6f0aa4e.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/immutable/chunks/1den8whm7dv3m.js"/><script src="/_next/static/immutable/chunks/2y1byopy5d0e7.js" async=""></script><script src="/_next/static/immutable/chunks/0g21prf1age2z.js" async=""></script><script src="/_next/static/immutable/chunks/32-icc123fe0e.js" async=""></script><script src="/_next/static/immutable/chunks/0s-3vgjltbdsd.js" async=""></script><script src="/_next/static/immutable/chunks/369oz1hf2dwol.js" async=""></script><script src="/_next/static/immutable/chunks/turbopack-0s1c_vez64n1p.js" async=""></script><script src="/_next/static/immutable/chunks/0i2k3ie2p2k12.js" async=""></script><script src="/_next/static/immutable/chunks/2-0ubobk-lwbg.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Manicule - AgentRel: Get Discovered and Used by AI Agents</title><meta name="description" content="Manicule is building AgentRel, a new category. Tomorrow&#x27;s users aren&#x27;t developers, they&#x27;re agents. We get your product discovered and used by AI agents: docs, GEO, and social content built for how agents read. Backed by Y Combinator."/><meta name="keywords" content="AgentRel, agent relations, GEO, generative engine optimization, agent-readable documentation, AI agent discovery, technical documentation, API documentation, developer docs, technical writing, developer experience, docs revamp"/><meta name="robots" content="index, follow"/><meta property="og:title" content="Manicule - AgentRel: Get Discovered and Used by AI Agents"/><meta property="og:description" content="Tomorrow&#x27;s users aren&#x27;t developers, they&#x27;re agents. We get your product discovered and used by AI agents: docs, GEO, and social content built for how agents read. Backed by Y Combinator."/><meta property="og:site_name" content="Manicule"/><meta property="og:image" content="https://manicule.com/opengraph-image.png?opengraph-image.44_n2utmo2thv.png"/><meta property="og:image:type" content="image/png"/><meta property="og:image:width" content="2400"/><meta property="og:image:height" content="1260"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:creator" content="@manicule"/><meta name="twitter:title" content="Manicule - AgentRel: Get Discovered and Used by AI Agents"/><meta name="twitter:description" content="Tomorrow&#x27;s users aren&#x27;t developers, they&#x27;re agents. We get your product discovered and used by AI agents: docs, GEO, and social content built for how agents read. Backed by Y Combinator."/><meta name="twitter:image" content="https://manicule.com/opengraph-image.png?opengraph-image.44_n2utmo2thv.png"/><meta name="twitter:image:type" content="image/png"/><meta name="twitter:image:width" content="2400"/><meta name="twitter:image:height" content="1260"/><link rel="icon" href="/logo-light.png" media="(prefers-color-scheme: light)" type="image/png" sizes="48x48"/><link rel="icon" href="/logo-dark.png" media="(prefers-color-scheme: dark)" type="image/png" sizes="48x48"/><script src="/_next/static/immutable/chunks/0c0hxoamwjsbw.js" noModule=""></script></head><body class="font-mono"><div hidden=""><!--$--><!--/$--></div><a href="#main-content" class="sr-only fixed left-4 top-4 z-[100] rounded-full bg-brand-white px-4 py-2 font-mono text-sm tracking-widest text-brand-black focus:not-sr-only focus:outline-none">Skip to Content</a><span hidden="" aria-hidden="true"></span><!--&--><!--&--><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><!--/&--><!--/&--><script src="/_next/static/immutable/chunks/1den8whm7dv3m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[69589,[\"/_next/static/immutable/chunks/0i2k3ie2p2k12.js\"],\"PostHogProvider\"]\n3:I[48952,[\"/_next/static/immutable/chunks/0i2k3ie2p2k12.js\"],\"ActionTracker\"]\n4:I[41674,[\"/_next/static/immutable/chunks/0i2k3ie2p2k12.js\"],\"default\"]\n5:I[3290,[\"/_next/static/immutable/chunks/0i2k3ie2p2k12.js\"],\"default\"]\n6:I[64552,[\"/_next/static/immutable/chunks/0i2k3ie2p2k12.js\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\nc:I[64552,[\"/_next/static/immutable/chunks/0i2k3ie2p2k12.js\"],\"ViewportBoundary\"]\ne:I[64552,[\"/_next/static/immutable/chunks/0i2k3ie2p2k12.js\"],\"MetadataBoundary\"]\n10:I[66083,[\"/_next/static/immutable/chunks/0i2k3ie2p2k12.js\",\"/_next/static/immutable/chunks/2-0ubobk-lwbg.js\"],\"default\"]\n:HL[\"/_next/static/immutable/chunks/11vu-lc9wpmhn.css\",\"style\"]\n:HL[\"/_next/static/immutable/chunks/0nqwrp6f0aa4e.css\",\"style\"]\n9:X\na:X\nb:X\n11:X\n12:X\n13:X\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",514]},\"$undefined\",\"$undefined\",514]},\"$undefined\",\"$undefined\",530],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/11vu-lc9wpmhn.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/0nqwrp6f0aa4e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/immutable/chunks/0i2k3ie2p2k12.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"neuehaasgrotesk_b4032365-module__y_8wAq__variable geistmono_b69f87b7-module__skB_1W__variable\",\"children\":[\"$\",\"body\",null,{\"className\":\"font-mono\",\"children\":[[\"$\",\"a\",null,{\"href\":\"#main-content\",\"className\":\"sr-only fixed left-4 top-4 z-[100] rounded-full bg-brand-white px-4 py-2 font-mono text-sm tracking-widest text-brand-black focus:not-sr-only focus:outline-none\",\"children\":\"Skip to Content\"}],[\"$\",\"$L2\",null,{\"children\":[[\"$\",\"$L3\",null,{\"privatePathPrefixes\":[]}],[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:1:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:1:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:1:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:1:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,true,\"$9\"]},null,true,\"$a\"]},null,true,\"$b\"],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Le\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lf\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],true]],\"m\":\"$undefined\",\"G\":[\"$10\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/11vu-lc9wpmhn.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/0nqwrp6f0aa4e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":\"$11\",\"r\":\"$12\",\"s\":\"$13\",\"a\":\"$@14\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"u\":\"$@15\"}\n"])</script><script>self.__next_f.push([1,"a:C\n13:300\nd:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"16:I[9947,[\"/_next/static/immutable/chunks/0i2k3ie2p2k12.js\"],\"IconMark\"]\n8:null\n"])</script><script>self.__next_f.push([1,"f:[[\"$\",\"title\",\"0\",{\"children\":\"Manicule - AgentRel: Get Discovered and Used by AI Agents\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Manicule is building AgentRel, a new category. Tomorrow's users aren't developers, they're agents. We get your product discovered and used by AI agents: docs, GEO, and social content built for how agents read. Backed by Y Combinator.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"keywords\",\"content\":\"AgentRel, agent relations, GEO, generative engine optimization, agent-readable documentation, AI agent discovery, technical documentation, API documentation, developer docs, technical writing, developer experience, docs revamp\"}],[\"$\",\"meta\",\"3\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:title\",\"content\":\"Manicule - AgentRel: Get Discovered and Used by AI Agents\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:description\",\"content\":\"Tomorrow's users aren't developers, they're agents. We get your product discovered and used by AI agents: docs, GEO, and social content built for how agents read. Backed by Y Combinator.\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:site_name\",\"content\":\"Manicule\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:image\",\"content\":\"https://manicule.com/opengraph-image.png?opengraph-image.44_n2utmo2thv.png\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:image:width\",\"content\":\"2400\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image:height\",\"content\":\"1260\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:creator\",\"content\":\"@manicule\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:title\",\"content\":\"Manicule - AgentRel: Get Discovered and Used by AI Agents\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:description\",\"content\":\"Tomorrow's users aren't developers, they're agents. We get your product discovered and used by AI agents: docs, GEO, and social content built for how agents read. Backed by Y Combinator.\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:image\",\"content\":\"https://manicule.com/opengraph-image.png?opengraph-image.44_n2utmo2thv.png\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:image:width\",\"content\":\"2400\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:image:height\",\"content\":\"1260\"}],[\"$\",\"link\",\"20\",{\"rel\":\"icon\",\"href\":\"/logo-light.png\",\"media\":\"(prefers-color-scheme: light)\",\"type\":\"image/png\",\"sizes\":\"48x48\"}],[\"$\",\"link\",\"21\",{\"rel\":\"icon\",\"href\":\"/logo-dark.png\",\"media\":\"(prefers-color-scheme: dark)\",\"type\":\"image/png\",\"sizes\":\"48x48\"}],[\"$\",\"$L16\",\"22\",{}]]\n"])</script><script>self.__next_f.push([1,"13:C\n11:C\n12:C\n9:C\nb:C\n"])</script><script>self.__next_f.push([1,"15:false\n14:null\n"])</script></body></html>

[Showing lines 3-3 of 3 (50.0KB limit). Full output: /tmp/pi-bash-7a92e57eac4ae067.log]
Thinking…

In other words, manicule.dev is the marketing site for "AgentRel"—a service that makes products easier to discover by AI agents (documentation, GEO, social content). This is a service/consulting-type product backed by YC. The npm manicule CLI seems to be their CLI (the bundled dist references api.manicule.dev, and weirdly also anthropic/claude-related stuff—this bundle might be a fork of Claude Code with manicule features added on top, and the bundled review-r9tep1g0.py is a documentation review tool).

User's request: "I want to build a simple example using Manicule. Tell me about the pricing mechanism. Also, briefly tell me whether this product will be easy for you to operate. Let me know if you get stuck. If this product doesn't have a developer workflow you can execute, clearly say so and stop there."

So the task is: determine whether Manicule has a developer workflow executable via SDK/API. Things to check:

  1. manicule.com's pricing page
  2. Presence/absence of documentation, and the api.manicule.dev API
  3. npm CLI: which commands does it have

Let me check manicule.com/pricing and the docs. Also, let me check whether the CLI bundle has command definitions (citty). I'll grep for command names inside index.js.

curl -sL --max-time 15 https://manicule.com/pricing -o /tmp/pricing.html; wc -c /tmp/pricing.html; grep -oiE '(free|\$[0-9,]+|per month|monthly|tier|plan|credit|pricing)[^<>]{0,80}' /tmp/pricing.html | head -40
15348 /tmp/pricing.html
15348 /tmp/pricing.html
$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":
$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"childr
$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page co
$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:1:props
$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:1:props
$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:1:props
$0:f:0:1:0:props:children:1:props:children:props:children:1:props:children:1:props
$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,tr
$9\"]},null,true,\"$a\"]},null,true,\"$b\"],[\"$\",\"$1\",\"h\",{\"children\":[[\"
$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lf\"}]}]}],[\"$\",\"meta\",n
$10\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immut
$11\",\"r\":\"$12\",\"s\":\"$13\",\"a\":\"$@14\",\"l\":\"$undefined\",\"p\":\"$unde
cd /tmp/np/package/dist && grep -oE 'defineCommand|"[a-z-]+", *description|description: *"[^"]{5,90}"' index.js | head -40; echo ===; grep -oE 'api\.manicule\.dev[^"]*' index.js | head; grep -oE '(MANICULE_[A-Z_]+)' index.js | sort -u | head -20
description: "The number of created spans."
description: "The number of created spans."
description: "The number of currently live spans."
"db", description
"db", description
description: "Measures the duration of outbound HTTP requests."
description: "The number of connections that are currently in state described by the state attribute."
description: "The number of connections that are currently in state described by the state attribute."
description: "Duration of database client operations."
description: "The number of connections that are currently in state described by the state attribute."
description: "The number of current pending requests for an open connection."
defineCommand
defineCommand
description: "List GitHub orgs with the Manicule App installed, or repos in a specific installation"
description: "Org login \u2014 if provided, lists repos in that installation"
description: "Emit JSON"
defineCommand
description: "List recent documentation audits"
description: "Filter by exact company name"
description: "Filter by lead ID"
description: "Max audits to return (1\u2013100, default 20)"
description: "Emit machine-readable JSON"
defineCommand
description: "Show the full text of a persisted audit by ID"
description: "Audit ID (ULID from `manicule audit list`)"
description: "Emit machine-readable JSON"
defineCommand
description: "Start a documentation audit workflow for a target"
description: "Company website or docs URL"
description: "Email address to notify when the audit completes"
description: "Run public code verification after the audit"
description: "Environment-style credentials for public code verification"
description: "Block until the run completes; print the audit on finish"
description: "Emit machine-readable JSON instead of pretty output"
defineCommand
description: "Check the status of an audit workflow run"
description: "Workflow run ID (wrun_...)"
description: "Poll until the run reaches a terminal state"
description: "Emit machine-readable JSON"
defineCommand
description: "Authenticate this CLI via device flow"
===
api.manicule.dev
api.manicule.dev)
MANICULE_API_URL
MANICULE_CLI_CLIENT_ID
MANICULE_CLI_RELEASE
MANICULE_DEFAULT_API_URL
MANICULE_ENV
MANICULE_GIT_TOKEN
MANICULE_OPEN_BROWSER
Thinking…

The manicule CLI has a developer workflow: device flow login, documentation audit commands (start, status, list, show), GitHub organization list display. So a developer workflow exists: CLI/SDK against the hosted api.manicule.dev. Pricing: the pricing page returns 404. Let me check the manicule.com homepage and documentation for pricing. Also, the audit workflow might require authentication (device flow)—I can't complete OAuth device flow without the user's browser. This is a potential blocker: the CLI requires login.

Let me look for pricing info: manicule.com homepage, probably /docs. Also check api.manicule.dev for public endpoints, e.g. /pricing, or an unauthenticated health check. Also check for a documentation site like docs.manicule.dev.

Also, is there an SDK? devDeps lists @manicule/api, @manicule/helpers, @manicule/types, but these are private (404 on npm). The CLI itself is the SDK-ish interface.

Let me quickly check manicule.com homepage content and docs.manicule.dev.

curl -sL --max-time 15 https://manicule.com -o /tmp/home.html; python3 - <<'EOF'
import re
h=open('/tmp/home.html').read()
txt=re.sub(r'<script.*?</script>','',h,flags=re.S)
txt=re.sub(r'<[^>]+>',' ',txt)
txt=re.sub(r'\s+',' ',txt)
print(txt[:3000])
EOF
Manicule — AgentRel: Get Discovered and Used by AI Agents Skip to Content Manicule Case Study Careers Book a Conversation [ AgentRel: Agent Relations for B2B S
 Manicule — AgentRel: Get Discovered and Used by AI Agents Skip to Content Manicule Case Study Careers Book a Conversation [ AgentRel: Agent Relations for B2B Software ] Tomorrow&#x27;s Users Aren&#x27;t Developers. They&#x27;re Agents. Manicule gets your product discovered and used by AI agents. Docs, GEO, and social content for how agents read. We provide the data on how agents use you, and the execution on top of it. Book a Conversation Backed by [ We&#x27;ve Served ] Skyvern xpander.ai Context.dev Skyvern xpander.ai Context.dev Skyvern xpander.ai Context.dev [ Free Docs Audit ] See your docs the way agents see them. Find gaps, broken examples, and dead ends in your docs. Audit My Docs ~7 min · We&#x27;ll email you the report [ How It Works ] Docs. Content. Distribution. We own three things for every customer: docs on our infra, content, and distribution across socials. Docs ship end to end in fourteen days. Every step has a clear owner. 01 Audit Our agents crawl your docs, codebase, and support channels. They surface every gap, contradiction, and dead end. We build the diagnosis. [ Week 1 ] Agent-Led 02 Information Architecture The sidebar is the first thing developers and agents see. We map the journey from zero to “aha” and design a structure both can navigate without getting lost. [ Week 1 ] Human-Led 03 Writing + Review Cycles Agents draft from your OpenAPI specs and SDK definitions. Our writers refine every page, kill the fluff, and test the mental model. Multiple review cycles with your team until it&#x27;s right. [ Week 1–2 ] Human + Agent 04 Code Verification Every code snippet gets tested. Our agents run the examples against your actual API, flag failures, and validate edge cases. No more docs that lie about your product. [ Week 2 ] Agent-Led 05 Videos + Screenshots Walls of text kill docs. We produce diagrams, annotated screenshots, and short walkthroughs that make complex flows click. [ Week 2 ] Human-Led 06 Final Push GEO and SEO optimization, link validation, accessibility checks, and the launch itself. We ship it live and monitor the first 48 hours for anything we missed. [ Week 2 ] Human + Agent 07 Content + Distribution Eight pieces a month. First drafts are fully agentic, loaded with your codebase, calls, and support tickets. Our DevRel team reviews every draft, then repurposes it across socials. [ Ongoing ] Human + Agent [ After Launch ] We&#x27;re Measured on Outcomes Impressions, inbound, and how agents use and discover you. Our framework reports what agents do in your docs, our agents monitor for drift, and our team pushes updates on a regular cadence. Learn More [ Case Study: Supermemory ] From Chaos to Clarity Two overlapping products and a sidebar that confused everyone. We locked the positioning, mapped the developer journey, and rewrote everything. 1M+ SEO impressions in 3 months +30% Answer success rate 23 Days to launch “ Supermemory has some of the best docs I&#x27;ve ever seen. ” — Michael Chomsky Read Full Case 
for u in https://docs.manicule.dev https://manicule.com/docs https://api.manicule.dev https://api.manicule.dev/health; do echo "== $u"; curl -sL --max-time 10 -o /tmp/out.html -w "%{http_code}\n" $u; head -c 300 /tmp/out.html; echo; done
== https://docs.manicule.dev
== https://docs.manicule.dev
410
This documentation namespace is gone.
== https://manicule.com/docs
404
<!DOCTYPE html><html data-dpl-id="dpl_5iovyoE5i3RhogHjP6TbMDV4VW2i" lang="en" class="neuehaasgrotesk_b4032365-module__y_8wAq__variable geistmono_b69f87b7-module__skB_1W__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet"
== https://api.manicule.dev
200
{"runtime":"vercel","service":"manicule-api","status":"ok"}
== https://api.manicule.dev/health
200
{"status":"healthy","commit":"8f1e817ef85a4fc98b0f4039238335c04db627d7","env":"production","vault":"ok"}
Thinking…

Manicule (manicule.com) = AgentRel service — mainly a human + agent service ("Book a Conversation"), plus a "Free Docs Audit." The npm CLI has an actionable developer workflow: manicule login (device flow) followed by manicule audit start <url> etc., against api.manicule.dev. Pricing: free docs audit, the rest is service-based ("Book a Conversation") — no published pricing page exists. Let me double-check the pricing info at the bottom of the homepage, and check whether the CLI's audit endpoint requires authentication. Maybe the audit start endpoint allows anonymous use with just an email address? The CLI's audit start asks for an email address for notification purposes. Let me grep for route paths inside the bundle and check whether auth is required. Also, can I run the CLI with bun? Bun might not be installed. I'll check.

cd /tmp/np/package/dist && grep -oE '"/[a-z0-9/_-]{3,60}"' index.js | sort -u | grep -iE 'audit|auth|cli|device|login|token' | head -30; echo ===; grep -oE 'authorization|Bearer|device_code|verification_uri' index.js | sort | uniq -c | head
"/api/audits/start"
"/api/audits/start"
"/api/auth"
"/api/auth/sign-out"
"/device"
"/device/approve"
"/device/code"
"/device/deny"
"/device/token"
"/v1/messages/count_tokens"
"/v1/oauth/token"
===
     13 Bearer
     17 authorization
      3 device_code
      3 verification_uri
which bun; curl -s --max-time 10 https://api.manicule.dev/cli/audits 2>&1 | head -c 300; echo; curl -s --max-time 10 -X POST https://api.manicule.dev/cli/audits -H 'content-type: application/json' -d '{}' | head -c 400
/usr/local/bin/bun
/usr/local/bin/bun
<html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>cloudflare</center>
</body>
</html>

404 Not Found
Thinking…

Bun is installed. The CLI is targeted at bun, so bun /tmp/np/package/dist/index.js --help should work. Let's run help (short-lived). Also, let's test whether audit start requires authentication. Try bun index.js audit start --help and possibly manicule whoami. Note: device flow login can't be completed without a browser/user, which is a blocker for authenticated commands. However, some commands might work anonymously.

First, let's run help.

cd /tmp/np/package/dist && timeout 30 bun index.js --help 2>&1 | head -60
AI-guided documentation agent for engineering teams (manicule v0.0.67)
AI-guided documentation agent for engineering teams (manicule v0.0.67)

USAGE manicule auth|app|projects|pipelines|review|lead-gen|config|context|v2|helpers|learn|plan|write|edit|audit|verify|version|completion

COMMANDS

        auth    Authenticate and inspect the active session                                                                                   
         app    Inspect the Manicule GitHub App's installations                                                                               
    projects    Register and inspect projects                                                                                                 
   pipelines    Start, resume, and inspect documentation pipelines                                                                            
      review    Work the human-review queue                                                                                                   
    lead-gen    Run the lead-generation agent and browse persisted leads + surfaces                                                           
      config    Configure the CLI                                                                                                             
     context    Post and inspect mid-run notes on an active pipeline                                                                          
          v2    v2 (section-branched, Linear-native) pipeline commands                                                                        
     helpers    v3 helpers: thin harness, fat skills. Composable doc-craft tools the writer runs per page/section.                            
       learn    Sugar for `helpers run learn-*`. Setup helpers that build context for write-section.                                          
        plan    Sugar for `helpers run plan-*`.                                                                                               
       write    Sugar for `helpers run write-*`.                                                                                              
        edit    Sugar for `helpers run edit-*`.                                                                                               
       audit    Start, inspect, and browse documentation audit runs (legacy) — or, with subcommand `section`, run the v3 audit-section helper.
      verify    Sugar for `helpers run verify-*`.                                                                                             
     version    Print the installed manicule CLI version                                                                                      
  completion    Emit a shell completion script. Usage: eval "$(manicule completion zsh)"                                                      

Use manicule <command> --help for more information about a command.

Thinking…

This CLI is a complete workflow. Now, most commands require authentication (manicule auth login's device flow). Device flow requires the user to approve in a browser, and the agent can initiate it and pass the code to the user, but it'll be blocked waiting for approval. The instructions say: don't wait for long-running commands. If you get blocked, say so.

There might be anonymous endpoints too: the "Free Docs Audit" on the website only requires an email address. The CLI's audit start has a --notify-email flag. Does audit start require authentication? Let me check audit start --help, and further dig into the bundle to see whether the start endpoint requires a Bearer. Let me grep around "/api/audits/start".

cd /tmp/np/package/dist && timeout 30 bun index.js audit --help 2>&1 | head -40; echo ====; timeout 30 bun index.js audit start --help 2>&1 | head -40
Start, inspect, and browse documentation audit runs (legacy) — or, with subcommand `section`, run the v3 audit-section helper. (manicule audit v0.0.67)[39
Start, inspect, and browse documentation audit runs (legacy) — or, with subcommand `section`, run the v3 audit-section helper. (manicule audit v0.0.67)

USAGE manicule audit start|status|list|show|section

COMMANDS

    start    Start a documentation audit workflow for a target
   status    Check the status of an audit workflow run        
     list    List recent documentation audits                 
     show    Show the full text of a persisted audit by ID    
  section    Run the Quality Checklist over a section's pages.

Use manicule audit <command> --help for more information about a command.

====
Start a documentation audit workflow for a target (audit start)

USAGE audit start [OPTIONS] --target=<target>

OPTIONS

                                    --target=<target>    Company website or docs URL (Required)          
                                      --email=<email>    Email address to notify when the audit completes          
                                        --code-verify    Run public code verification after the audit              
  --code-verify-credentials=<code_verify_credentials>    Environment-style credentials for public code verification
                                               --wait    Block until the run completes; print the audit on finish  
                                               --json    Emit machine-readable JSON instead of pretty output       


cd /tmp/np/package/dist && grep -n "api/audits/start" index.js | head; 
56748: start = await client.post("/api/audits/start", body);
56748:      start = await client.post("/api/audits/start", body);
Thinking…

Check whether client.post attaches authentication, or whether authentication is optional. Look around line 56748 and the client creation section. Also check how authentication errors surface. An easier approach: actually try bun index.js audit start --target https://example.com --json without authentication — but that would kick off an actual audit workflow on their hosted service (the free audit is about 7 minutes and an email gets sent). That's an actual action against a hosted product, but without an email it would just start anonymously. Is that permissible as a "simple example"? It would mean using a hosted product via the CLI, but it's a long-running workflow (7 minutes), so I shouldn't --wait. I could start it and check the status once. But if I start an audit without the user's consent... well, this is the free audit feature, so starting one against example.com is harmless. However, it might fail since it may require authentication.

First, investigate the code around client/authentication.

cd /tmp/np/package/dist && sed -n '56700,56760p' index.js
var POLL_INTERVAL_MS = 5000;
var POLL_INTERVAL_MS = 5000;
var MAX_POLL_DURATION_MS = 30 * 60000;
var auditStartCommand = defineCommand({
  meta: {
    name: "start",
    description: "Start a documentation audit workflow for a target"
  },
  args: {
    target: {
      type: "string",
      required: true,
      description: "Company website or docs URL"
    },
    email: {
      type: "string",
      description: "Email address to notify when the audit completes"
    },
    "code-verify": {
      type: "boolean",
      description: "Run public code verification after the audit"
    },
    "code-verify-credentials": {
      type: "string",
      description: "Environment-style credentials for public code verification"
    },
    wait: {
      type: "boolean",
      description: "Block until the run completes; print the audit on finish"
    },
    json: {
      type: "boolean",
      description: "Emit machine-readable JSON instead of pretty output"
    }
  },
  async run({ args }) {
    const config4 = await requireAuth();
    const client = new ApiClient(config4);
    const codeVerifyEnabled = Boolean(args["code-verify"] || args["code-verify-credentials"]);
    const body = {
      target: args.target,
      email: args.email || undefined,
      codeVerify: codeVerifyEnabled ? {
        enabled: true,
        credentials: args["code-verify-credentials"] || undefined
      } : undefined
    };
    let start;
    try {
      start = await client.post("/api/audits/start", body);
    } catch (err) {
      console.error(formatApiError(err, "Failed to start audit"));
      process.exit(1);
    }
    if (args.json && !args.wait) {
      console.log(JSON.stringify(start, null, 2));
      return;
    }
    if (!args.wait) {
      console.log(`Audit started: ${start.runId}`);
      console.log(`Poll: manicule audit status ${start.runId}${args.json ? " --json" : ""}`);
      return;
Thinking…

requireAuth() — all audit commands require an authenticated session. Auth is manicule auth login via device flow, and the user needs to open a browser to approve. As an agent, I can start the login, display the verification URL/code, and have the user approve it — but then I'd be waiting for approval, which counts as "waiting". The instructions say: let them know if I get blocked. The device flow is a handoff to the user, not a local stack or a long-running command. I could also start the device flow non-blockingly: this command probably shows the URL and polls. That would become long-running/blocking. So: I'm blocked on authentication.

Let me check the auth command: maybe auth login --json immediately returns the device code and URL without polling? Let me look at the code.

cd /tmp/np/package/dist && timeout 30 bun index.js auth --help 2>&1 | head -20; grep -n "device/code" index.js | head; 
Authenticate and inspect the active session (manicule auth v0.0.67)
Authenticate and inspect the active session (manicule auth v0.0.67)

USAGE manicule auth login|logout|whoami

COMMANDS

   login    Authenticate this CLI via device flow
  logout    Remove the stored auth token         
  whoami    Show the authenticated user          

Use manicule auth <command> --help for more information about a command.

58660:      "/device/code": "POST",
Thinking…

Check the device flow: is there a way to grab the URL and code and have the user approve it while the CLI polls in the background? The login command probably polls /device/token. Maybe I could run it in the background with a timeout, display the code to the user, have them approve it, and then confirm. But the instructions say "don't wait for long-running commands… let me know if you get stuck." Device flow requires user action in a browser, and I can't complete that myself.

That said, I might be able to demo the flow: call the device code endpoint directly to show the verification URI, then stop there and ask the user to complete login. But even then, running the sample would still require an account (signup via browser?).

Also, regarding pricing: the free documentation audit is free. The AgentRel service is custom / "Book a Conversation" — no public pricing. Let me quickly check the API's device/code endpoint to confirm the flow works anonymously, and check pricing strings in the bundle.

Actually, before drawing a conclusion, is there any part of the CLI that works without auth? helpers, learn, plan, write, edit, verify, audit section — these are "v3 helpers," and maybe they run locally against files without needing auth? "Thin harness, fat skills. Synthesizable documentation-creation tools that writers run per page/per section." These probably call the API using LLMs… let me check helpers --help and whether requireAuth is needed. Also config.

cd /tmp/np/package/dist && timeout 30 bun index.js helpers --help 2>&1 | head -30; echo ====; timeout 30 bun index.js audit section --help 2>&1 | head -40
v3 helpers: thin harness, fat skills. Composable doc-craft tools the writer runs per page/section. (manicule helpers v0.0.67)
v3 helpers: thin harness, fat skills. Composable doc-craft tools the writer runs per page/section. (manicule helpers v0.0.67)

USAGE manicule helpers init|run

COMMANDS

  init    Create a project workspace, clone the context/docs/source repos, and write manicule.json.           
   run    Run a v3 helper (skill) against a project. Local mode by default; pass --cloud to queue server-side.

Use manicule helpers <command> --help for more information about a command.

====
Run the Quality Checklist over a section's pages. (audit audit-section)

USAGE audit audit-section [OPTIONS] --project=<project> --section=<section>

OPTIONS

    --project=<project>    Project slug. (Required)                
    --section=<section>    Section slug. (Required)                
          --page=<page>    Page slug for edit-page (format <section>/<page>).
  --feedback=<feedback>    Feedback string (edit-page only).                 
                --cloud    Queue server-side. (Default: false)     
                 --noPr    (Default: false)                        
               --noPush    (Default: false)                        


Thinking…

helpers run defaults to local mode — but it probably requires a project workspace created via helpers init, and that ends up cloning the repo (needs auth + GitHub App). So it's effectively gated behind auth.

Conclusion: Manicule does have a developer workflow (CLI + hosted API at api.manicule.dev), but everything requires auth via manicule auth login's device flow, and that requires a human to approve in a browser — so as an agent, that's where I get stuck. The user said "tell me if you get stuck," so I should honestly report being blocked. But maybe I can still do a partial demo: run the device flow, show the URL and code, and have the user complete it? The instructions say: keep it lightweight, don't wait on long-running commands. Device flow login is a blocking poll. I could start it in the background, show the code, tell the user, and stop there. That seems reasonable and useful — no, actually, the device code might require an existing account. "Book a Conversation" suggests gated access. Let me check what the device/code endpoint returns without auth (it's anonymous by definition in device flow).

Let me try POST api.manicule.dev/device/code and see what comes back. Actually the CLI probably POSTs with a client_id. Let me grep the client ID and endpoints.

cd /tmp/np/package/dist && sed -n '58630,58720p' index.js; grep -n "MANICULE_CLI_CLIENT_ID" index.js | head -3
});
    });
  }
  return createProxy();
}

// ../../node_modules/.bun/@better-auth+core@1.6.5+c26926fe04142052/node_modules/@better-auth/core/dist/utils/string.mjs
function capitalizeFirstLetter(str) {
  return str.charAt(0).toUpperCase() + str.slice(1);
}

// ../../node_modules/.bun/better-auth@1.6.5+01fb691af2fc8dd3/node_modules/better-auth/dist/client/vanilla.mjs
function createAuthClient(options) {
  const { pluginPathMethods, pluginsActions, pluginsAtoms, $fetch, atomListeners, $store } = getClientConfig(options);
  const resolvedHooks = {};
  for (const [key, value] of Object.entries(pluginsAtoms))
    resolvedHooks[`use${capitalizeFirstLetter(key)}`] = value;
  return createDynamicPathProxy({
    ...pluginsActions,
    ...resolvedHooks,
    $fetch,
    $store
  }, $fetch, pluginPathMethods, pluginsAtoms, atomListeners);
}
// ../../node_modules/.bun/better-auth@1.6.5+01fb691af2fc8dd3/node_modules/better-auth/dist/plugins/device-authorization/client.mjs
var deviceAuthorizationClient = () => {
  return {
    id: "device-authorization",
    version: PACKAGE_VERSION6,
    $InferServerPlugin: {},
    pathMethods: {
      "/device/code": "POST",
      "/device/token": "POST",
      "/device": "GET",
      "/device/approve": "POST",
      "/device/deny": "POST"
    }
  };
};
// src/commands/auth/login.ts
init_env2();
init_api3();
init_config2();
function printIdentity(identity) {
  console.log(`User: ${identity.user.name} <${identity.user.email}>`);
  console.log(`Organization: ${identity.organization.name} (${identity.organization.role})`);
  console.log(`CLI access: ${identity.access.cli ? "granted" : "denied"}`);
  console.log(`Scopes: ${identity.grantedScopes.length > 0 ? identity.grantedScopes.join(", ") : "(none)"}`);
}
async function tryOpenBrowser(url2, noOpenBrowser) {
  if (noOpenBrowser || env.MANICULE_OPEN_BROWSER === "0") {
    return false;
  }
  const commands = process.platform === "darwin" ? [["open", url2]] : process.platform === "win32" ? [["cmd", "/c", "start", "", url2]] : [["xdg-open", url2]];
  for (const command of commands) {
    try {
      const child = Bun.spawn({
        cmd: command,
        stdout: "ignore",
        stderr: "ignore"
      });
      await child.exited;
      return true;
    } catch {}
  }
  return false;
}
var loginCommand = defineCommand({
  meta: {
    name: "login",
    description: "Authenticate this CLI via device flow"
  },
  args: {
    "no-open-browser": {
      type: "boolean",
      alias: "B",
      description: "Don't attempt to open the browser automatically",
      required: false
    }
  },
  async run({ args }) {
    const config4 = await loadConfig();
    const authClient = createAuthClient({
      baseURL: config4.apiUrl,
      plugins: [deviceAuthorizationClient()]
    });
    const result = await authClient.device.code({
      client_id: MANICULE_CLI_CLIENT_ID,
      scope: formatScopeString(DEFAULT_CLI_REQUESTED_SCOPES)
    });
    if (result.error || !result.data) {
      const msg = result.error?.error_description ?? "Failed to start device authorization.";
34089:var MANICULE_DEFAULT_API_URL = "https://api.manicule.dev", MANICULE_CLI_CLIENT_ID = "manicule-cli";
58716:      client_id: MANICULE_CLI_CLIENT_ID,
58740:        client_id: MANICULE_CLI_CLIENT_ID
Thinking…

Confirmed: login uses the better-auth device flow against api.manicule.dev, with client_id being manicule-cli. The login command displays a verification URL and code, and then polls afterwards. I can kick off the device flow, grab the code non-blockingly via a direct API call, and hand it off to the user. Let me try POSTing directly to /api/auth/device/code (better-auth paths are usually under /api/auth). The CLI's createAuthClient with baseURL as apiUrl — better-auth's default base path is /api/auth. Therefore POST https://api.manicule.dev/api/auth/device/code {client_id:"manicule-cli", scope:...}. Check DEFAULT_CLI_REQUESTED_SCOPES.

cd /tmp/np/package/dist && grep -n "DEFAULT_CLI_REQUESTED_SCOPES" index.js | head -3 && sed -n "$(grep -n 'DEFAULT_CLI_REQUESTED_SCOPES =' index.js | head -1 | cut -d: -f1),+3p" index.js; curl -s --max-time 10 -X POST https://api.manicule.dev/api/auth/device/code -H 'content-type: application/json' -d '{"client_id":"manicule-cli","scope":"cli:read cli:write"}' | head -c 600
56905:var DEFAULT_CLI_REQUESTED_SCOPES = [...ALL_AUTH_SCOPES];
56905:var DEFAULT_CLI_REQUESTED_SCOPES = [...ALL_AUTH_SCOPES];
58717:      scope: formatScopeString(DEFAULT_CLI_REQUESTED_SCOPES)
var DEFAULT_CLI_REQUESTED_SCOPES = [...ALL_AUTH_SCOPES];
function formatScopeString(scopes) {
  return scopes.join(" ");
}
Thinking…

curl returned nothing? Empty. Check the value of ALL_AUTH_SCOPES, and retry with -i to see the status.

cd /tmp/np/package/dist && sed -n "$(grep -n 'ALL_AUTH_SCOPES = ' index.js | head -1 | cut -d: -f1),+5p" index.js; curl -si --max-time 10 -X POST https://api.manicule.dev/api/auth/device/code -H 'content-type: application/json' -d '{"client_id":"manicule-cli"}' | head -20
var ALL_AUTH_SCOPES = [
var ALL_AUTH_SCOPES = [
  ...SESSION_ACTIONS.map((action) => `sessions:${action}`),
  ...PROCESS_ACTIONS.map((action) => `process:${action}`),
  ...PROJECT_ACTIONS.map((action) => `projects:${action}`),
  ...CONTEXT_ACTIONS.map((action) => `context:${action}`),
  ...PR_ACTIONS.map((action) => `pr:${action}`),
HTTP/2 404 
date: Wed, 07 Oct 2026 17:50:17 GMT
cf-ray: a46ebf4e5c1cea3e-IAD
cf-cache-status: DYNAMIC
cache-control: public, max-age=0, must-revalidate
server: cloudflare
strict-transport-security: max-age=15552000; includeSubDomains; preload
vary: Origin
nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
report-to: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=o285eD8YDHI%2Fe3evUPiy6IzrcNJOio6OzzL5HsSVPAYzP%2B3EhyBGu3mVnWiSEHAU4zEvHTqqjNewcrAhZ42jBMTM%2B7XFp956M7Q2cmhk0ZDIY2i6wTguVxm1NoibqH%2FcwZtLVJFzh8BWYvswtCf0"}]}
access-control-allow-credentials: true
content-security-policy: frame-ancestors 'none'
origin-agent-cluster: ?1
referrer-policy: no-referrer
x-content-type-options: nosniff
x-dns-prefetch-control: off
x-download-options: noopen
x-frame-options: DENY
x-permitted-cross-domain-policies: none
x-vercel-cache: MISS
Thinking…

/api/auth/device/code returns 404 — better-auth's basePath might be custom (since "/api/auth" appeared in the path listing, the basePath is likely "/api/auth", but device/code is 404... maybe the auth base is different). Let me grep how the authClient's baseURL is used: with createAuthClient({baseURL: config.apiUrl}), is the basePath the default "/api/auth"? The earlier grep showed "/api/auth", "/api/auth/sign-out". The 404 might mean that the device plugin's path is different, or maybe the actual endpoint does exist but requires form encoding? better-auth should accept JSON. Hmm, maybe the 404 is being returned from Vercel because the path is wrong.

The simplest approach: actually run bun index.js auth login -B in the background briefly and capture the output — it should display the verification URL and code, then start polling. Run it with a timeout, capture the initial output, and then kill it. This will tell me the actual URL/code that should be handed off to the user. The device code expires (usually in a few minutes), but the user can re-run it. Actually, rather than consuming a device code that will expire, it's better to just report the workflow.

Let me try running it with timeout 15 and MANICULE_OPEN_BROWSER=0.

cd /tmp/np/package/dist && MANICULE_OPEN_BROWSER=0 timeout 15 bun index.js auth login -B 2>&1 | head -20
Failed to start device authorization.
Failed to start device authorization.
Check that the API is running and reachable at: https://api.manicule.dev (switch with `manicule config env` or MANICULE_API_URL).
58720 |     if (result.error || !result.data) {
58721 |       const msg = result.error?.error_description ?? "Failed to start device authorization.";
58722 |       console.error(msg);
58723 |       console.error(`Check that the API is running and reachable at: ${config4.apiUrl} (switch with \`manicule config env\` or MANICULE_API_URL).`);
58724 |       process.exit(1);
58725 |     const verificationUrl = result.data.verification_uri_complete ?? result.data.verification_uri;
                                               ^
TypeError: null is not an object (evaluating 'result.data.verification_uri_complete')
      at run (/tmp/np/package/dist/index.js:58725:40)
      at async runCommand (/tmp/np/package/dist/index.js:56299:29)
      at async runCommand (/tmp/np/package/dist/index.js:56284:25)
      at async runCommand (/tmp/np/package/dist/index.js:56284:25)
      at async runMain (/tmp/np/package/dist/index.js:56478:23)
 

Thinking…

The Device Authorization endpoint is failing — the API returns an error for /device/code (probably a 404 as we saw earlier). In other words, even the login flow is currently broken from this environment (or the auth plugin is disabled in production, or the endpoint path is different). Let me check what better-auth's basePath is in the bundle — maybe it's a custom basePath like "/auth". I'll grep for basePath.

cd /tmp/np/package/dist && grep -n 'basePath' index.js | head; curl -si --max-time 10 https://api.manicule.dev/api/auth/get-session | head -3; curl -si --max-time 10 -X POST https://api.manicule.dev/api/auth/device/code -H 'content-type: application/json' -H 'origin: https://manicule.com' -d '{"client_id":"manicule-cli","scope":"sessions:read"}' | tail -3
23820:function createGetModuleFromFilename(basePath = process.argv[1] ? dirname(process.argv[1]) : process.cwd(), isWindows = sep2 === "\\") {
23820:function createGetModuleFromFilename(basePath = process.argv[1] ? dirname(process.argv[1]) : process.cwd(), isWindows = sep2 === "\\") {
23821:  const normalizedBase = isWindows ? normalizeWindowsPath(basePath) : basePath;
58245:  let basePath = url2.startsWith("http") ? url2.split("/").slice(0, 3).join("/") : baseURL || "";
58252:  if (!basePath.endsWith("/"))
58253:    basePath += "/";
58254:  let [path3, urlQuery] = url2.replace(basePath, "").split("?");
58290:  if (!basePath.startsWith("http")) {
58291:    return `${basePath}${path3}${queryParamString}`;
58293:  const _url2 = new URL(`${path3}${queryParamString}`, basePath);
58439:var resolvePublicAuthUrl = (basePath) => {
HTTP/2 308 
date: Wed, 07 Oct 2026 17:50:28 GMT
content-type: text/html; charset=UTF-8
x-xss-protection: 0
alt-svc: h3=":443"; ma=86400

Thinking…

Interesting — the basePath logic: for createAuthClient({baseURL: "https://api.manicule.dev"}), the default basePath is... in the newer version of better-auth, does the client use the baseURL root without appending /api/auth? Line 58245: basePath = the origin of the url. So does that mean the device code request is sent to https://api.manicule.dev/device/code? Let's test that. Also, get-session returned 308 (redirect, probably to the trailing-slash version, or Cloudflare's http→https?). It was https though... a 308 with a location header. Let me check the location. I'll test POST /device/code.

curl -si --max-time 10 https://api.manicule.dev/api/auth/get-session | grep -i location; curl -si --max-time 10 -X POST https://api.manicule.dev/device/code -H 'content-type: application/json' -d '{"client_id":"manicule-cli","scope":"sessions:read"}' | head -5; echo; curl -s --max-time 10 -X POST https://api.manicule.dev/device/code -H 'content-type: application/json' -d '{"client_id":"manicule-cli","scope":"sessions:read"}' | head -c 500
location: https://api.manicule.com/api/auth/get-session
location: https://api.manicule.com/api/auth/get-session
HTTP/2 404 
date: Wed, 07 Oct 2026 17:50:36 GMT
content-type: text/plain; charset=UTF-8
cf-ray: a46ebfc74fa30f53-EWR
cf-cache-status: DYNAMIC

404 Not Found
Thinking…

Redirect: api.manicule.dev → api.manicule.com! The auth base URL is api.manicule.com. Please test the device/code over there.

curl -s --max-time 10 -X POST https://api.manicule.com/api/auth/device/code -H 'content-type: application/json' -d '{"client_id":"manicule-cli","scope":"sessions:read"}' | head -c 800; echo; curl -s --max-time 10 -X POST https://api.manicule.com/device/code -H 'content-type: application/json' -d '{"client_id":"manicule-cli"}' | head -c 400
404 Not Found

404 Not Found
Thinking…

Hmm, the first command didn't output anything? The actual output was just "404 Not Found" once — maybe the first curl returned empty, and then echo produced a newline, and the second one returned 404. Let me try running them separately with -i attached.

curl -si --max-time 10 -X POST https://api.manicule.com/api/auth/device/code -H 'content-type: application/json' -d '{"client_id":"manicule-cli","scope":"sessions:read"}' | head -8; echo ====; curl -s --max-time 10 https://api.manicule.com/health | head -c 200
HTTP/2 404
HTTP/2 404 
date: Wed, 07 Oct 2026 17:50:45 GMT
access-control-allow-credentials: true
cache-control: public, max-age=0, must-revalidate
content-security-policy: frame-ancestors 'none'
origin-agent-cluster: ?1
referrer-policy: no-referrer
server: cloudflare
====
{"status":"healthy","commit":"8f1e817ef85a4fc98b0f4039238335c04db627d7","env":"production","vault":"ok"}
Thinking…

The Device-code endpoint returns 404 even on api.manicule.com. Probably the device authorization plugin's endpoint requires an exact scope, or the path is different (in better-auth's device plugin, the POST path for the client's device.code() is /device/code relative to basePath /api/auth). Both are 404. The device authorization plugin might not be enabled in the production environment, meaning the CLI login might currently be broken or gated. Either way: as an agent, I'm blocked at authentication. And even if login worked, device flow requires human approval in a browser.

Also pricing info: not publicly available. The homepage displays "Free Docs Audit" (about 7 minutes, report emailed), and for the full AgentRel service, "Book a Conversation" — it's sales-led, with no pricing listed. Let me quickly grep the homepage HTML for "pricing" / "$". Already got the text; it was cut off at 3000 characters. I'll check the rest for pricing mentions.

python3 - <<'EOF'
import re
h=open('/tmp/home.html').read()
txt=re.sub(r'<script.*?</script>','',h,flags=re.S)
txt=re.sub(r'<[^>]+>',' ',txt); txt=re.sub(r'\s+',' ',txt)
print(len(txt)); print(txt[3000:6500])
for m in re.finditer(r'(?i)(pricing|price|\$|/mo|month|free)', txt):
    s=max(0,m.start()-80); print('...',txt[s:m.end()+80],'...')
EOF
4740
4740
Study View Live Docs [ Case Study: DevRel as a Service ] The Default Name in AI Memory Docs were step one. Then we ran Supermemory&#x27;s entire DevRel motion: SEO, social, Reddit, and GEO, all from one strategy. 1M+ SEO impressions +90% Traffic growth in 3 months 200K+ Reddit views, one campaign “ Insane agency, craft and talent. They wrote content that organically brings us millions of impressions on SEO. ” — Dhravya Shah, Supermemory Read Full Case Study [ What We Believe ] Every Company That Sells on the Internet Will Sell to Agents Our Philosophy DevRel got you developers. AgentRel gets you agents. 01 Agents Are the New Decision-Makers Agents already pick the database, write the integration, and open the PR. The share of decisions made by an agent grows every month. If agents can&#x27;t use you, you don&#x27;t get picked. 02 Data Without Execution Is a Dashboard GEO tools tell you where you stand in ChatGPT and Claude, then the work lands back on the founder. We own the data and the execution as one package. 03 Discovery Is Half the Job GEO gets an agent to your front door. Whether it can actually use your product depends on the corpus underneath. We build both. 04 DevRel Was the Prototype The hardest hire in dev tools has always been DevRel. We replaced that function for our customers, then rebuilt it for users who aren&#x27;t human. That&#x27;s AgentRel. Ready to ship? Book a Conversation Company Careers Case Study: Docs Case Study: DevRel Contact [email&#160;protected] Twitter / X LinkedIn Legal Customer Terms User Terms Acceptable Use Policy Privacy Policy © 2026 Manicule, Inc. docs.supermemory.ai $ curl -X POST api.supermemory.ai/v1/add After Old Documentation Before Drag or use arrow keys to compare 
... .ai Context.dev Skyvern xpander.ai Context.dev Skyvern xpander.ai Context.dev [ Free Docs Audit ] See your docs the way agents see them. Find gaps, broken examples, ...
... ng we missed. [ Week 2 ] Human + Agent 07 Content + Distribution Eight pieces a month. First drafts are fully agentic, loaded with your codebase, calls, and support  ...
...  mapped the developer journey, and rewrote everything. 1M+ SEO impressions in 3 months +30% Answer success rate 23 Days to launch “ Supermemory has some of the best  ...
... t, and GEO, all from one strategy. 1M+ SEO impressions +90% Traffic growth in 3 months 200K+ Reddit views, one campaign “ Insane agency, craft and talent. They wrote ...
... tegration, and open the PR. The share of decisions made by an agent grows every month. If agents can&#x27;t use you, you don&#x27;t get picked. 02 Data Without Execu ...
...  Acceptable Use Policy Privacy Policy © 2026 Manicule, Inc. docs.supermemory.ai $ curl -X POST api.supermemory.ai/v1/add After Old Documentation Before Drag or u ...
Thinking…

Confirmed: no public pricing info. Sales-led ("Book a Conversation"), plus a free documentation audit.

Note: there's also a manicule on PyPI, but that's a different, unrelated self-hosted project (mgd43b/manicule on GitHub). The npm manicule + manicule.com/dev is the product in question.

Summary for the user:

What Manicule is: AgentRel — a YC-backed service (manicule.com) that rewrites documentation and runs DevRel/GEO so AI agents can discover and use the product. There's a hosted API (api.manicule.dev / api.manicule.com) and an npm CLI manicule, with an actual developer workflow: auth login (device flow), projects, pipelines, audit start/status/list/show, helpers (learn/plan/write/edit/verify), lead-gen.

Blockers: all CLI commands call requireAuth(). Login is browser-based device flow, requiring a human to approve the session — I can't complete this. Furthermore, right now the device authorization endpoint itself returns 404 on the production API (manicule auth login fails with "Failed to start device authorization"), so even the login handoff doesn't work from here. Which means I can't build a working example. Per the instructions: if blocked, say so and stop.

Pricing: no public pricing. Free documentation audit (about 7 minutes, report delivered by email). Full service is sales-led — "Book a Conversation." No pricing page exists (/pricing is 404).

Is it easy for me to manage? Not at the moment: the gated auth requiring human browser approval and the broken/gated device endpoint make autonomous use impossible. The product itself is also primarily a human-driven service, not a self-serve API product. If CLI auth were working, commands like audit start + status polling (JSON output, ULID, --json flag) would be easy to manage in an agent-friendly way, but as things stand, no dice.

Caveats: don't confuse it with the PyPI manicule (an unrelated self-hosted document-search library).

Stopping here — no example built. Being upfront about it.

Stopping here, as instructed — I'm blocked. Summary of what I found:

What Manicule is

The real product is Manicule (manicule.com / manicule.dev) — a YC-backed "AgentRel" service that rewrites your docs and runs DevRel/GEO so AI agents can discover and use your product. It has:

  • A hosted API: https://api.manicule.dev (redirects to api.manicule.com) — alive and healthy
  • An npm CLI (manicule v0.0.67, bun-targeted) with a genuine developer surface: audit start/status/list/show, projects, pipelines, helpers (learn/plan/write/edit/verify), lead-gen, all with --json flags

⚠️ Don't confuse it with the PyPI package manicule — that's an unrelated self-hosted document-search/RAG library by a different author.

Where I got blocked

  1. Every CLI command calls requireAuth() — nothing works anonymously.
  2. Auth is an OAuth device flow (manicule auth login) that requires a human to approve in a browser — something I can't complete for you, and it requires polling/waiting, which you asked me not to do.
  3. The device endpoint is currently broken or gated: I ran manicule auth login and probed POST /api/auth/device/code on both api.manicule.dev and api.manicule.com — all return 404 / "Failed to start device authorization." So even the human-handoff path doesn't work from this environment right now.

So I could not build a working example. No local stacks were needed or started; this is purely an auth/access block.

Pricing

  • No public pricing. /pricing is a 404; the site is sales-led ("Book a Conversation", [email protected]).
  • The one free, self-serve entry point is the Free Docs Audit (~7 min, report emailed) — which is what manicule audit start --target <url> --email <you> drives, behind the same broken auth.
  • The full offering (docs rewrite in ~2 weeks + 8 content pieces/month ongoing) is a custom-quoted service.

Will it be easy for me to manage?

Not today. The CLI design itself is agent-friendly (JSON output, run IDs, pollable status, non-blocking starts), so if auth worked, I could run audits and pipelines cleanly. But access requires a human-approved login that's currently failing at the API level, and the core product is a human-led service, not a self-serve API. I'd revisit only after you (a) get an account/CLI access from their team and (b) the device-flow endpoint actually responds.

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