The product is hanzoai/datastore. ClickHouse is its upstream, named where
provenance is the subject and nowhere else.
Co-authored-by: Hanzo Dev <dev@hanzo.ai>
- Mount AISearch panel + floating "Ask AI" trigger in the home layout
(parity with /docs) so the landing page has it too.
- Default the docs-AI model to `enso` (was zen-coder-flash/zen5) —
matches hanzo.chat/hanzo.app; override via HANZO_AI_MODEL.
Fresh buildId also busts the cached "Powered by Inkeep AI" chat chunk
(the Inkeep rebrand shipped in 7ed5e4c but lingers in already-open tabs).
docs.hanzo.ai's AI chat now runs entirely on our own stack. The live
/api/chat route was already native (Hanzo gateway) but ungrounded — it
now retrieves from our rag-api index before answering, and cites sources:
- retrieval: rag-api /query — native index over the docs
- generation: Hanzo gateway (api.hanzo.ai/v1, zen-coder-flash)
- sources: provideLinks tool, populated from the indexed metadata
Purged Inkeep repo-wide (only our stack, one way):
- removed the dead third-party Inkeep handler (lib/inkeep -> lib/ai)
- widget credit "Powered by Inkeep AI" -> "Powered by Hanzo AI"
- create-app generator: dead `inkeep` provider -> native `hanzo`
(installs the ai/hanzo registry bundle; INKEEP_API_KEY -> HANZO_API_KEY)
- 4 legacy *-docs apps: de-Inkeeped schema, fixed dangling imports
Zero `inkeep` references remain in the codebase.
cloud split the noun: /v1/bots is the run the bot runtime executes, and a
kind=bot machine plus its agent binding is compute, under visor's namespace.
These published specs described the machine at the run's path.
Applied surgically rather than re-copied from hanzoai/openapi: these snapshots
have drifted from that source, so a wholesale copy would sweep in unrelated
changes.
The Smart-routing page closed with "For the methodology and full numbers:" and a
card linking papers.hanzo.ai/hanzo-router. That URL 404s, and no such paper
exists: ~/work/hanzo/papers holds 25 sources, none about routing, and the 77
papers published on papers.hanzo.ai contain nothing on routing, model selection
or routing cost.
So the sentence "We never publish fabricated benchmarks" was followed by a link
to a fabricated citation. The card is removed and the lead-in now says what is
actually true of each number on the page: the 89% mix is a worked illustration,
the RouterBench figure is a third-party public result, and there is no Hanzo
paper to cite.
The zen-router model card stays — huggingface.co/zenlm/zen-router resolves (200).
The generator's contract is that it never breaks the build: if the catalog is
unavailable it keeps the committed meta.json and exits 0. The guard tested the
wrong thing — that `import("@hanzo/products")` resolved — so it only held when
nothing was installed.
`@hanzo/products` on the public registry is an unrelated package (a Svelte
component library), which resolves fine and exports no catalog. The import then
succeeded, `docsCoverage` destructured to undefined, and `build:pre` died with
`TypeError: docsCoverage is not a function` — taking the whole docs build with
it, since it is the first command in the chain.
Checking the API the generator actually calls makes the guard match its contract
for both cases: absent, or present but not the catalog.
Note for whoever owns the catalog: apps/docs declares `@hanzo/products: ^0.1.0`,
which resolves to that unrelated third-party package. Nothing else imports it.
It cannot supply the taxonomy this script wants, so the dependency is worth
removing or repointing at the real catalog — a call for the dependency owner,
not this fix.
turbo runs tasks in strict env mode (2.x default): a task only sees the env
vars declared for it. `build` declared none, so every var the deploy workflow
exports was dropped before the build ran:
NEXT_EXPORT -> next.config gates `output: 'export'` on it. Stripped, the
build emits no out/, and the next workflow step is
`wrangler pages deploy out`.
HANZO_DOCS_SYNC -> pre-build gates the project-docs sync on it. Stripped, the
sync runs — the workflow sets it to 0 precisely so the
committed snapshot is used instead.
NODE_OPTIONS -> the heap ceiling the workflow raises for this build.
`turbo run build --filter=docs --dry=json` reported envMode "strict" with
configured [] and passthrough null; it now lists NEXT_EXPORT, HANZO_DOCS_SYNC
and NODE_OPTIONS.
This regressed in 6167d746c, which moved NEXT_EXPORT and NODE_OPTIONS out of the
app's build script — where they were inline and immune to turbo's env filter —
into the workflow's env block.
The two vars that select what is built (NEXT_EXPORT, HANZO_DOCS_SYNC) belong in
`env`, where they also key the cache: a non-export build and an export build are
not interchangeable artifacts. NODE_OPTIONS only shapes how the build runs, so
it is passThroughEnv and stays out of the hash. The wildcards cover the rest of
the HANZO_DOCS_*/HANZO_SEARCH_* knobs the build scripts read, so the next one
added does not silently vanish.
hanzo.ai's Network, Node and Cloud CTAs link bare paths on docs.hanzo.ai that
never had pages: /network, /network/quickstart, /node, /node/quickstart and
/self-host all 404. Route them to their canonical pages through _redirects, the
one mechanism this site has for HTTP redirects (the static export ignores
next.config redirects()), extending the existing bare-product-path list rather
than adding thin duplicate pages.
The network and self-host story is the same page — content/docs/network.mdx,
"the AI cloud you can run yourself". Running a node is the Node Operator Guide
under proof-of-ai, the one node doc whose live/roadmap table matches the shipped
source. Neither product has a separate quickstart page and neither has a
verified standalone start sequence to write one from, so the guessed /quickstart
children resolve to the canonical page, which opens with its own start steps.
Every target in the file is verified to resolve to real content.
Ground docs.hanzo.ai in HIP-0127 (V8 · Open Edition). The spine: "the AI cloud
you can run yourself" — one unified binary, hanzo.network is the cloud, category-
first descent by the eight movements, API reference as its own separated surface.
- Sidebar (content/docs/meta.json): flat ~85-item dump with overlapping
ad-hoc labels → the eight canonical movements from openapi/capabilities.yaml
(Identity & Trust · Intelligence · Data · Streams · Observability · Commerce ·
Platform · Applications), as icon-bearing separators (---[Icon]Name---). Files
stay flat — no URL/back-link breakage. openapi/sdks/api removed from the root
descent; they remain the dedicated top-nav surfaces.
- Top nav (components/layouts/shared.tsx): add Docs + Network; API and SDKs kept
as separated surfaces.
- Landing (app/(home)/page.tsx): hero → decentralized spine; ecosystem grid →
the eight movements (category-first); breadth stats bar + models/SDKs/MCP
panels making the full surface visible. Every number traces to a source:
67 caps / 8 movements (capabilities.yaml), 157 models (ai/conf/models.yaml),
706 connectors (cloud/.../catalog.json), 6 SDK langs (openapi/CLAUDE.md).
- Docs home (content/docs/index.mdx): 69-services pitch → the run-it-yourself
spine + the eight-movements grid.
- New content/docs/network.mdx: hanzo.network / self-host — one binary, BYO GPU
or K8s, mine on any device (TEE/CC), free for public+OSS, the language seam is
the wire not FFI.
- New content/docs/architecture/philosophy.mdx: the engineering pedagogy —
one-and-one-way, decomplect, one contract → N SDKs → thin CLIs, ZAP-native.
- architecture/index.mdx: "ten categories" → the eight movements; link
philosophy + network.
Content review only — do not merge yet.
Ground docs.hanzo.ai in HIP-0127 (V8 · Open Edition). The spine: "the AI cloud
you can run yourself" — one unified binary, hanzo.network is the cloud, category-
first descent by the eight movements, API reference as its own separated surface.
- Sidebar (content/docs/meta.json): flat ~85-item dump with overlapping
ad-hoc labels → the eight canonical movements from openapi/capabilities.yaml
(Identity & Trust · Intelligence · Data · Streams · Observability · Commerce ·
Platform · Applications), as icon-bearing separators (---[Icon]Name---). Files
stay flat — no URL/back-link breakage. openapi/sdks/api removed from the root
descent; they remain the dedicated top-nav surfaces.
- Top nav (components/layouts/shared.tsx): add Docs + Network; API and SDKs kept
as separated surfaces.
- Landing (app/(home)/page.tsx): hero → decentralized spine; ecosystem grid →
the eight movements (category-first); breadth stats bar + models/SDKs/MCP
panels making the full surface visible. Every number traces to a source:
67 caps / 8 movements (capabilities.yaml), 157 models (ai/conf/models.yaml),
706 connectors (cloud/.../catalog.json), 6 SDK langs (openapi/CLAUDE.md).
- Docs home (content/docs/index.mdx): 69-services pitch → the run-it-yourself
spine + the eight-movements grid.
- New content/docs/network.mdx: hanzo.network / self-host — one binary, BYO GPU
or K8s, mine on any device (TEE/CC), free for public+OSS, the language seam is
the wire not FFI.
- New content/docs/architecture/philosophy.mdx: the engineering pedagogy —
one-and-one-way, decomplect, one contract → N SDKs → thin CLIs, ZAP-native.
- architecture/index.mdx: "ten categories" → the eight movements; link
philosophy + network.
Content review only — do not merge yet.
- services/index.mdx rebuilt as a Stripe-'Browse by product'-style grid: a
one-binary hero (One API key. One binary. api.hanzo.ai) + get-started cards,
then 10 canonical category sections (AI & Models, Compute, Data, Network,
Security & Identity, Observability, Platform, Web3, Apps, Developer Tools),
45 product cards. Names + one-line descriptions are DERIVED from the canonical
console product registry (@hanzo/products) so docs align with console + hanzo.ai.
All 44 internal links verified to resolve; OSS/standalone forks link out.
- Naming fix (per CTO): 'Hanzo DB' -> 'Hanzo SQL'. Renamed services/db.mdx ->
services/sql.mdx (git mv, /docs/services/sql), title + body normalized, 0
residual 'Hanzo DB'; meta.json 'db' -> 'sql'.
- Removed the duplicate 'Getting Started' (section header + page): the page title
is now 'Introduction' under the 'Getting Started' section.
Follow-ups (scoped, not in this PR): top-nav header (Fumadocs layout), authoring
the ~10 canonical products with no page yet (playground, secrets, projects, ...),
per-OSS-fork external doc merges, and de-duping the top-level vs services/ pages.
Co-authored-by: Hanzo AI <ai@hanzo.ai>
- services/index.mdx rebuilt as a Stripe-'Browse by product'-style grid: a
one-binary hero (One API key. One binary. api.hanzo.ai) + get-started cards,
then 10 canonical category sections (AI & Models, Compute, Data, Network,
Security & Identity, Observability, Platform, Web3, Apps, Developer Tools),
45 product cards. Names + one-line descriptions are DERIVED from the canonical
console product registry (@hanzo/products) so docs align with console + hanzo.ai.
All 44 internal links verified to resolve; OSS/standalone forks link out.
- Naming fix (per CTO): 'Hanzo DB' -> 'Hanzo SQL'. Renamed services/db.mdx ->
services/sql.mdx (git mv, /docs/services/sql), title + body normalized, 0
residual 'Hanzo DB'; meta.json 'db' -> 'sql'.
- Removed the duplicate 'Getting Started' (section header + page): the page title
is now 'Introduction' under the 'Getting Started' section.
Follow-ups (scoped, not in this PR): top-nav header (Fumadocs layout), authoring
the ~10 canonical products with no page yet (playground, secrets, projects, ...),
per-OSS-fork external doc merges, and de-duping the top-level vs services/ pages.
Co-authored-by: Hanzo AI <ai@hanzo.ai>
Corrects the plugin-platform + architecture-index pages on two axes:
1. One-binary reality. The pages framed Hanzo Cloud as 'many services, each its
own repo/image, deployed independently, behind a gateway/ingress tier.' That
is the pre-unification story. hanzoai/cloud is ONE Go binary (cmd/cloud): IAM,
KMS, ingress, billing, MPC, o11y, agents, etc. are native clients/* subsystems
compiled in, served under /v1, mapped to hanzoai/openapi — no separate gateway
(there is no clients/gateway; routing is native clients/ingress). This is the
unified cloud binary (HIP-0106), already substantially shipped. The plugin
platform is reframed as NOT a re-layering: same one binary; plugins just become
PLACED so nodes specialize (run a dynamic subset) — horizontal scale without
fragmenting back into services. Remaining standalone apps (Sign/Dataroom/
Captable) noted honestly as being absorbed, not the end state.
2. Fault model corrected to N=7 / 5-of-7 quorum / f=2 (matches the fixed HIP-0125
+ LaTeX paper + shipped controlplane's 1-based N=7). Fixes the impossible
'five-voter tolerating two failures' (BFT needs N>=3f+1=7, quorum 2f+1=5).
3. Faithful proposed-vs-shipped: the Quasar engine + seven-voter ceremony are
built and tested but deliberately kept OUT of the live serving path (behind
-tags controlplane); placement does not yet drive serving; no cloud.Register
runtime yet. Added a 'dynamic scaling lives in the data plane, voter set is
fixed by design' explanation (BFT cost grows with voters; N data nodes scale
unbounded).
Co-authored-by: Hanzo AI <ai@hanzo.ai>
Corrects the plugin-platform + architecture-index pages on two axes:
1. One-binary reality. The pages framed Hanzo Cloud as 'many services, each its
own repo/image, deployed independently, behind a gateway/ingress tier.' That
is the pre-unification story. hanzoai/cloud is ONE Go binary (cmd/cloud): IAM,
KMS, ingress, billing, MPC, o11y, agents, etc. are native clients/* subsystems
compiled in, served under /v1, mapped to hanzoai/openapi — no separate gateway
(there is no clients/gateway; routing is native clients/ingress). This is the
unified cloud binary (HIP-0106), already substantially shipped. The plugin
platform is reframed as NOT a re-layering: same one binary; plugins just become
PLACED so nodes specialize (run a dynamic subset) — horizontal scale without
fragmenting back into services. Remaining standalone apps (Sign/Dataroom/
Captable) noted honestly as being absorbed, not the end state.
2. Fault model corrected to N=7 / 5-of-7 quorum / f=2 (matches the fixed HIP-0125
+ LaTeX paper + shipped controlplane's 1-based N=7). Fixes the impossible
'five-voter tolerating two failures' (BFT needs N>=3f+1=7, quorum 2f+1=5).
3. Faithful proposed-vs-shipped: the Quasar engine + seven-voter ceremony are
built and tested but deliberately kept OUT of the live serving path (behind
-tags controlplane); placement does not yet drive serving; no cloud.Register
runtime yet. Added a 'dynamic scaling lives in the data plane, voter set is
fixed by design' explanation (BFT cost grows with voters; N data nodes scale
unbounded).
Co-authored-by: Hanzo AI <ai@hanzo.ai>
Bring the docs API reference in line with the source of truth
(hanzoai/openapi): 69 services, zero `/v1/*svc` paths, unified `cloud`
binary (HIP-0106). The committed openapi-specs snapshot had drifted to
38 services because the `openapi-specs/` .gitignore rule silently hid
newly-synced specs from git — CI cannot clone the private openapi repo
and falls back to this checked-in snapshot, so it must be tracked and
complete.
- Sync openapi-specs/ from hanzoai/openapi via scripts/sync-openapi.sh:
31 new service specs (admin, affiliates, agents, authors, authz,
automations, billing, crm, do, eval, exec, framework, functions, git,
graph, integrations, kb, notify, observe, plan, plugin, product,
projects, prompts, provisioning, referrals, security, tasks, templates,
tracker, websearch) + 6 refreshed (cloud, hanzo, platform, pubsub,
visor, zt). All 69 now tracked as the CI snapshot.
- Regenerate the API reference index (meta.json) via
scripts/gen-openapi-pages.ts — 69 pages; the per-service .mdx stay
gitignored (CI regenerates them from the committed specs).
- Add curated cards for all 31 new services to content/docs/openapi/index.mdx
and fix the 38-services counts to 69.
- Cross-link the new agents/functions/tasks guides to their API reference
(scripts/link-api-refs.ts).
- Fix stale service-surface counts in prose: docs index (33+→69),
services index (40+→69), hanzo-openapi skill (26→69, drop stale
33KB/v4.0.0 claims).
- Stop ignoring openapi-specs/: these are the committed CI snapshot;
ignoring them is what caused the drift.
Verified: zero kmssvc/paassvc/projectsvc/s3svc and zero /v1/*svc across
docs; specs==meta==source of truth==69; all 70 specs parse; generator
runs clean and deterministic.
Bring the docs API reference in line with the source of truth
(hanzoai/openapi): 69 services, zero `/v1/*svc` paths, unified `cloud`
binary (HIP-0106). The committed openapi-specs snapshot had drifted to
38 services because the `openapi-specs/` .gitignore rule silently hid
newly-synced specs from git — CI cannot clone the private openapi repo
and falls back to this checked-in snapshot, so it must be tracked and
complete.
- Sync openapi-specs/ from hanzoai/openapi via scripts/sync-openapi.sh:
31 new service specs (admin, affiliates, agents, authors, authz,
automations, billing, crm, do, eval, exec, framework, functions, git,
graph, integrations, kb, notify, observe, plan, plugin, product,
projects, prompts, provisioning, referrals, security, tasks, templates,
tracker, websearch) + 6 refreshed (cloud, hanzo, platform, pubsub,
visor, zt). All 69 now tracked as the CI snapshot.
- Regenerate the API reference index (meta.json) via
scripts/gen-openapi-pages.ts — 69 pages; the per-service .mdx stay
gitignored (CI regenerates them from the committed specs).
- Add curated cards for all 31 new services to content/docs/openapi/index.mdx
and fix the 38-services counts to 69.
- Cross-link the new agents/functions/tasks guides to their API reference
(scripts/link-api-refs.ts).
- Fix stale service-surface counts in prose: docs index (33+→69),
services index (40+→69), hanzo-openapi skill (26→69, drop stale
33KB/v4.0.0 claims).
- Stop ignoring openapi-specs/: these are the committed CI snapshot;
ignoring them is what caused the drift.
Verified: zero kmssvc/paassvc/projectsvc/s3svc and zero /v1/*svc across
docs; specs==meta==source of truth==69; all 70 specs parse; generator
runs clean and deterministic.
The unified-architecture + openapi content branches added workspace deps
(openapi-sampler, @hanzo/docs-base-ui in packages/openapi) and three new
apps (engine-docs, ml-docs, router-docs) without updating the lockfile,
which broke `pnpm install --frozen-lockfile` used by every deploy-*.yml.
Regenerated with the pinned pnpm@11.1.0 (lockfile-only); frozen validation
now passes.
Claude-Session: https://claude.ai/code/session_01XsNmNwzHUSKXfN7gYruUsM
The unified-architecture + openapi content branches added workspace deps
(openapi-sampler, @hanzo/docs-base-ui in packages/openapi) and three new
apps (engine-docs, ml-docs, router-docs) without updating the lockfile,
which broke `pnpm install --frozen-lockfile` used by every deploy-*.yml.
Regenerated with the pinned pnpm@11.1.0 (lockfile-only); frozen validation
now passes.
Claude-Session: https://claude.ai/code/session_01XsNmNwzHUSKXfN7gYruUsM
getting-started references /docs/startups + /docs/deploy but those slugs 404
(the mdx pages didn't survive an earlier merge). Redirect to the pages that
carry the content: getting-started ($5/startup on-ramp) + services/paas (deploy).
getting-started references /docs/startups + /docs/deploy but those slugs 404
(the mdx pages didn't survive an earlier merge). Redirect to the pages that
carry the content: getting-started ($5/startup on-ramp) + services/paas (deploy).
Document how to install/connect every Hanzo surface — browser, IDEs,
desktop, Office, design, comms, business, dev, productivity, and
industry verticals. Every surface shares one foundation: the
@hanzo/ai gateway (api.hanzo.ai /v1) + @hanzo/iam identity — sign in
once or paste one hk- key.
New nav group 'Integrations & Extensions' (content/docs/apps/) with an
index + 10 category pages, registered in content/docs/meta.json under
Platform & Services. Downloadable installers link the actual v1.9.31
release assets from github.com/hanzoai/extension/releases.
Document how to install/connect every Hanzo surface — browser, IDEs,
desktop, Office, design, comms, business, dev, productivity, and
industry verticals. Every surface shares one foundation: the
@hanzo/ai gateway (api.hanzo.ai /v1) + @hanzo/iam identity — sign in
once or paste one hk- key.
New nav group 'Integrations & Extensions' (content/docs/apps/) with an
index + 10 category pages, registered in content/docs/meta.json under
Platform & Services. Downloadable installers link the actual v1.9.31
release assets from github.com/hanzoai/extension/releases.
- spec: remove dead 'Components' nav item (/docs/components) — spec renders
only synced HIPs (index + hip-*.mdx via scripts/sync-hips.ts), it has no
components section, so the route 404s. Drop now-unused ComponentIcon import.
- tasks-docs: point home 'REST API' link at /docs/sdk/api (the real REST API
reference) instead of the non-existent /docs/api.
- spec: remove dead 'Components' nav item (/docs/components) — spec renders
only synced HIPs (index + hip-*.mdx via scripts/sync-hips.ts), it has no
components section, so the route 404s. Drop now-unused ComponentIcon import.
- tasks-docs: point home 'REST API' link at /docs/sdk/api (the real REST API
reference) instead of the non-existent /docs/api.
All 14 hanzo docs deploy-*.yml used runs-on: [self-hosted, linux, amd64] — a label triplet the ARC scale-set runners (which advertise only their set-name hanzo-build-linux-amd64) do NOT carry, so every docs deploy queued until the next push cancelled it. Result: docs.hanzo.ai served a stale build for ~1 week; merged doc changes (redirects, new product pages) never deployed. Aligns these with the repo's already-correct lint/test/release workflows. deploy-liquid-docs.yml intentionally not touched.
Co-authored-by: Hanzo AI <ai@hanzo.ai>
All 14 hanzo docs deploy-*.yml used runs-on: [self-hosted, linux, amd64] — a label triplet the ARC scale-set runners (which advertise only their set-name hanzo-build-linux-amd64) do NOT carry, so every docs deploy queued until the next push cancelled it. Result: docs.hanzo.ai served a stale build for ~1 week; merged doc changes (redirects, new product pages) never deployed. Aligns these with the repo's already-correct lint/test/release workflows. deploy-liquid-docs.yml intentionally not touched.
Co-authored-by: Hanzo AI <ai@hanzo.ai>
The API reference is the single-page OpenAPI reference at /docs/openapi.
/docs/api (and /api, /api-reference) returned 404 because they were never
routes, and the /api redirect declared in next.config redirects() is dead:
docs.hanzo.ai deploys as a static export (out/) to Cloudflare Pages, which
ignores next.config redirects() and middleware (proven live: /api and
/tutorials both 404 despite being declared there).
Add public/_redirects -- the mechanism CF Pages actually honors, exactly like
the existing public/_headers -- as the single source of truth for redirects:
/docs/api, /docs/api/*, /api, /api/*, /api-reference, /api-reference/* -> /docs/openapi
/tutorials, /tutorials/* -> /docs/services (migrated from the dead config)
Remove the now-dead redirects() block from next.config so there is one
mechanism, not two.
Also fix two broken internal links in services/chat.mdx that pointed at
non-existent pages:
/docs/api/pricing -> /docs/services/pricing
/docs/models -> /docs/chat/models
Verified with `wrangler pages dev` against the exact _redirects file:
/docs/api -> 301 -> /docs/openapi (200); the real /docs/api-keys page is not
over-captured (passes through, no redirect).
Co-authored-by: Hanzo AI <ai@hanzo.ai>
The API reference is the single-page OpenAPI reference at /docs/openapi.
/docs/api (and /api, /api-reference) returned 404 because they were never
routes, and the /api redirect declared in next.config redirects() is dead:
docs.hanzo.ai deploys as a static export (out/) to Cloudflare Pages, which
ignores next.config redirects() and middleware (proven live: /api and
/tutorials both 404 despite being declared there).
Add public/_redirects -- the mechanism CF Pages actually honors, exactly like
the existing public/_headers -- as the single source of truth for redirects:
/docs/api, /docs/api/*, /api, /api/*, /api-reference, /api-reference/* -> /docs/openapi
/tutorials, /tutorials/* -> /docs/services (migrated from the dead config)
Remove the now-dead redirects() block from next.config so there is one
mechanism, not two.
Also fix two broken internal links in services/chat.mdx that pointed at
non-existent pages:
/docs/api/pricing -> /docs/services/pricing
/docs/models -> /docs/chat/models
Verified with `wrangler pages dev` against the exact _redirects file:
/docs/api -> 301 -> /docs/openapi (200); the real /docs/api-keys page is not
over-captured (passes through, no redirect).
Co-authored-by: Hanzo AI <ai@hanzo.ai>
console.hanzo.ai deep-links each product to docs.hanzo.ai/docs/<slug>; ~43 of
those slugs had no page and 404'd. Add real, accurate Fumadocs pages for every
one — Data (sql/vector/kv/search/datastore/docdb/storage/base/memory), Compute
(gpus/machines/edge/pipelines/registry/networks/blockchain), Observability
(metrics/logs/traces/sessions/dashboards), Evaluation (datasets/experiments/
scores/score-configs/annotation-queues), Security (iam/kms/authz/mpc/zero-trust),
Platform (api/gateway/console/integrations), Commerce (billing/referrals), and
AI (agents/prompts/embeddings/marketplace/ai-studio/crawl).
Each page: real /v1 examples with Bearer hk- auth, grounded in the actual
product repos + the console registry — no placeholder/coming-soon. Wired into
the sidebar nav (meta.json).
console.hanzo.ai deep-links each product to docs.hanzo.ai/docs/<slug>; ~43 of
those slugs had no page and 404'd. Add real, accurate Fumadocs pages for every
one — Data (sql/vector/kv/search/datastore/docdb/storage/base/memory), Compute
(gpus/machines/edge/pipelines/registry/networks/blockchain), Observability
(metrics/logs/traces/sessions/dashboards), Evaluation (datasets/experiments/
scores/score-configs/annotation-queues), Security (iam/kms/authz/mpc/zero-trust),
Platform (api/gateway/console/integrations), Commerce (billing/referrals), and
AI (agents/prompts/embeddings/marketplace/ai-studio/crawl).
Each page: real /v1 examples with Bearer hk- auth, grounded in the actual
product repos + the console registry — no placeholder/coming-soon. Wired into
the sidebar nav (meta.json).
* docs: current-state product pages (sign/dataroom/captable) + plugin-platform architecture
Product pages — corrected to what each app actually does today:
- sign: esign.hanzo.ai (not sign.hanzo.ai); image ghcr.io/hanzoai/esign; IAM_URL;
real FieldType enum; /api/v1 (ts-rest, stable) + /api/v2 (tRPC) surfaces;
framed as the AGPLv3 open-source e-signature app it is.
- dataroom: Papermark fork; embedded SQLite default (not Postgres); drop the
fabricated LinkedIn OAuth and invented clean-REST contract; add real features
(conversations, AI Q&A, file requests, SCIM, Hanko passkeys, BoxyHQ SAML);
honest unversioned /api surface.
- captable: drop fabricated 409A history / waterfall / round-modeling and the
invented REST endpoints; document the real tRPC + Hono /api/v1 API
(OpenAPI at /v1/docs); IAM_URL; note incorporation is WIP.
Architecture section (new) — explicitly direction, not shipped:
- content/docs/architecture/{index,plugin-platform}.mdx + meta.json, wired into
the root nav after Proof of AI. Documents the consensus-backed plugin platform
(HIP-0116, Draft): plugins as the unit (cloud.Register, HIP-0105); a small
post-quantum BFT (Quasar) control plane holding the placement map + writer
leases, with the data plane reusing existing S3/ZapDB replication (HIP-0107);
5 voters + N data nodes, pinned writers, per-connection pinning, per-tenant
sharding; ZAP-native authoring (HIP-0114). Every code sample is labeled
proposed / not-yet-available; consensus-off-the-data-path is called out.
The services nav derives from @hanzo/products (gen-services-nav.ts); sign,
dataroom and captable remain under the generated "More" group until they are
added to the commerce catalog + snapshot — a registry change out of scope for a
docs-only PR.
* docs: HIP-0116->0125 for the plugin platform
Matches hanzo-apps/HIPs#29 — 0116 is owned by plugin-vm-model; this
proposal renumbered to 0125. Other HIP refs (0105/0106/0107/0112/0114)
unchanged.
---------
Co-authored-by: Hanzo AI <ai@hanzo.ai>
* docs: current-state product pages (sign/dataroom/captable) + plugin-platform architecture
Product pages — corrected to what each app actually does today:
- sign: esign.hanzo.ai (not sign.hanzo.ai); image ghcr.io/hanzoai/esign; IAM_URL;
real FieldType enum; /api/v1 (ts-rest, stable) + /api/v2 (tRPC) surfaces;
framed as the AGPLv3 open-source e-signature app it is.
- dataroom: Papermark fork; embedded SQLite default (not Postgres); drop the
fabricated LinkedIn OAuth and invented clean-REST contract; add real features
(conversations, AI Q&A, file requests, SCIM, Hanko passkeys, BoxyHQ SAML);
honest unversioned /api surface.
- captable: drop fabricated 409A history / waterfall / round-modeling and the
invented REST endpoints; document the real tRPC + Hono /api/v1 API
(OpenAPI at /v1/docs); IAM_URL; note incorporation is WIP.
Architecture section (new) — explicitly direction, not shipped:
- content/docs/architecture/{index,plugin-platform}.mdx + meta.json, wired into
the root nav after Proof of AI. Documents the consensus-backed plugin platform
(HIP-0116, Draft): plugins as the unit (cloud.Register, HIP-0105); a small
post-quantum BFT (Quasar) control plane holding the placement map + writer
leases, with the data plane reusing existing S3/ZapDB replication (HIP-0107);
5 voters + N data nodes, pinned writers, per-connection pinning, per-tenant
sharding; ZAP-native authoring (HIP-0114). Every code sample is labeled
proposed / not-yet-available; consensus-off-the-data-path is called out.
The services nav derives from @hanzo/products (gen-services-nav.ts); sign,
dataroom and captable remain under the generated "More" group until they are
added to the commerce catalog + snapshot — a registry change out of scope for a
docs-only PR.
* docs: HIP-0116->0125 for the plugin platform
Matches hanzo-apps/HIPs#29 — 0116 is owned by plugin-vm-model; this
proposal renumbered to 0125. Other HIP refs (0105/0106/0107/0112/0114)
unchanged.
---------
Co-authored-by: Hanzo AI <ai@hanzo.ai>
The cloud API now sits behind one front door (ingress -> gateway -> cloud).
api.cloud.hanzo.ai / cloud-api.hanzo.ai / functions.hanzo.ai are redundant
aliases routing to the same backend, so migrate clients to api.hanzo.ai.
- docs + bot-docs lib/hanzo/client.ts, scripts/update-hanzo-index.ts:
search/index/chat-docs default base cloud-api|api.cloud.hanzo.ai ->
api.hanzo.ai (RAG paths stay /api/* — served there per cloud AUTH_PUBLIC_PATHS)
- cloud landing page.tsx: curl base + request-flow label api.cloud.hanzo.ai ->
api.hanzo.ai
- functions.mdx (x2): collapse Endpoint+Gateway to one canonical
api.hanzo.ai/v1/functions/*
- hanzo-openapi.mdx: Cloud endpoint label api.cloud.hanzo.ai -> api.hanzo.ai
Non-breaking: the aliases still resolve to the same backend.
The cloud API now sits behind one front door (ingress -> gateway -> cloud).
api.cloud.hanzo.ai / cloud-api.hanzo.ai / functions.hanzo.ai are redundant
aliases routing to the same backend, so migrate clients to api.hanzo.ai.
- docs + bot-docs lib/hanzo/client.ts, scripts/update-hanzo-index.ts:
search/index/chat-docs default base cloud-api|api.cloud.hanzo.ai ->
api.hanzo.ai (RAG paths stay /api/* — served there per cloud AUTH_PUBLIC_PATHS)
- cloud landing page.tsx: curl base + request-flow label api.cloud.hanzo.ai ->
api.hanzo.ai
- functions.mdx (x2): collapse Endpoint+Gateway to one canonical
api.hanzo.ai/v1/functions/*
- hanzo-openapi.mdx: Cloud endpoint label api.cloud.hanzo.ai -> api.hanzo.ai
Non-breaking: the aliases still resolve to the same backend.
ZAP docs are a zap-proto brand surface, not hanzoai. Per-language SDK
content (c, cpp, csharp, erlang, go, haskell, java, javascript, ocaml,
python, rust) is migrated to zap-proto/dev under /sdks/<lang>.mdx and
deployed at https://zap-proto.dev. The zap.hanzo.ai DNS entry can be
retired or 301-redirected at the edge.
ZAP docs are a zap-proto brand surface, not hanzoai. Per-language SDK
content (c, cpp, csharp, erlang, go, haskell, java, javascript, ocaml,
python, rust) is migrated to zap-proto/dev under /sdks/<lang>.mdx and
deployed at https://zap-proto.dev. The zap.hanzo.ai DNS entry can be
retired or 301-redirected at the edge.
Was: 'Weights' / 'Repo' as small text links with 10px (h-2.5 w-2.5)
icons. Tiny tap target, no clear visual affordance, easy to miss on
the 8-column model grid.
Now:
- Chat stays as the primary text CTA on the left (h-8 = 32px tall).
- HF + GitHub + Paper become 32x32px icon-only buttons on the right,
framed with a border, generous hover state, aria-label + title for
accessibility.
- Used the canonical HuggingFace logo SVG inline (not lucide-react's
ExternalLink) so the brand is recognizable at a glance.
- Right-aligned via 'ml-auto' so the icon cluster sits cleanly opposite
the Chat CTA — gives the eye an obvious 'try it / get it' split.
No dropdowns, no hover-hidden actions — every link is visible at idle.
Was: 'Weights' / 'Repo' as small text links with 10px (h-2.5 w-2.5)
icons. Tiny tap target, no clear visual affordance, easy to miss on
the 8-column model grid.
Now:
- Chat stays as the primary text CTA on the left (h-8 = 32px tall).
- HF + GitHub + Paper become 32x32px icon-only buttons on the right,
framed with a border, generous hover state, aria-label + title for
accessibility.
- Used the canonical HuggingFace logo SVG inline (not lucide-react's
ExternalLink) so the brand is recognizable at a glance.
- Right-aligned via 'ml-auto' so the icon cluster sits cleanly opposite
the Chat CTA — gives the eye an obvious 'try it / get it' split.
No dropdowns, no hover-hidden actions — every link is visible at idle.
- New configuration.mdx documents the IAM_* env var contract for
consumer services (single canonical name per identity var, no
HANZO_IAM_* aliases).
- Updated cross-references: /api/userinfo -> /oauth/userinfo,
RFC 6749 / OIDC Core paths everywhere, basic/how-to-connect/
integration/provider/token now point at canonical surface.
- meta.json: register configuration page.
- New configuration.mdx documents the IAM_* env var contract for
consumer services (single canonical name per identity var, no
HANZO_IAM_* aliases).
- Updated cross-references: /api/userinfo -> /oauth/userinfo,
RFC 6749 / OIDC Core paths everywhere, basic/how-to-connect/
integration/provider/token now point at canonical surface.
- meta.json: register configuration page.
Local builds with HANZO_DOCS_SYNC=0 still failed because bun
resolves all top-level imports at parse time, and pnpm symlinks
the @octokit/plugin-retry package under octokit@5.0.5/node_modules/
which bun's resolver doesn't follow. Top-level 'import { Octokit }
from octokit' triggered ENOENT before any code ran.
Fix: dynamic-import octokit inside createOctokit(), which only
runs when HANZO_DOCS_SYNC isn't '0'. Sync builds (CI, full deploy)
continue to work identically; local builds with the sync disabled
no longer crash on a never-used module tree.
Verified: HANZO_DOCS_SYNC=0 pnpm build now succeeds end-to-end,
generating 1300+ static pages including all 24 services/* sections.
Local builds with HANZO_DOCS_SYNC=0 still failed because bun
resolves all top-level imports at parse time, and pnpm symlinks
the @octokit/plugin-retry package under octokit@5.0.5/node_modules/
which bun's resolver doesn't follow. Top-level 'import { Octokit }
from octokit' triggered ENOENT before any code ran.
Fix: dynamic-import octokit inside createOctokit(), which only
runs when HANZO_DOCS_SYNC isn't '0'. Sync builds (CI, full deploy)
continue to work identically; local builds with the sync disabled
no longer crash on a never-used module tree.
Verified: HANZO_DOCS_SYNC=0 pnpm build now succeeds end-to-end,
generating 1300+ static pages including all 24 services/* sections.
56 .mdx + meta.json files updated. White-label IAM/KMS/MPC/Base
images ship with no mention of the upstream forks. Mapping:
Casdoor → Hanzo IAM
PocketBase → Hanzo Base
Infisical → Hanzo KMS (incl. INFISICAL_* env vars → KMS_* / HANZO_KMS_*)
HashiCorp Vault → external secret manager (where reference was generic;
migration guides keep the proper noun where needed)
Code-level identifiers preserved where they're real runtime names
in our forks (e.g. INFISICAL_CLIENT_ID renamed to KMS_CLIENT_ID
because that's what hanzo/kms actually reads — verified against
universe k8s manifests).
No-op for behavior; user-facing docs no longer surface the upstream
brand to anyone reading docs.hanzo.ai. Pairs with the recent
liquidity/iam tenant-neutral rip (admin@hanzo.ai → admin@localhost,
staticBaseUrl='' default, etc.).
56 .mdx + meta.json files updated. White-label IAM/KMS/MPC/Base
images ship with no mention of the upstream forks. Mapping:
Casdoor → Hanzo IAM
PocketBase → Hanzo Base
Infisical → Hanzo KMS (incl. INFISICAL_* env vars → KMS_* / HANZO_KMS_*)
HashiCorp Vault → external secret manager (where reference was generic;
migration guides keep the proper noun where needed)
Code-level identifiers preserved where they're real runtime names
in our forks (e.g. INFISICAL_CLIENT_ID renamed to KMS_CLIENT_ID
because that's what hanzo/kms actually reads — verified against
universe k8s manifests).
No-op for behavior; user-facing docs no longer surface the upstream
brand to anyone reading docs.hanzo.ai. Pairs with the recent
liquidity/iam tenant-neutral rip (admin@hanzo.ai → admin@localhost,
staticBaseUrl='' default, etc.).
- services/brain.mdx — five-runtime brain.db substrate (TS canonical,
Python, Go, C++, Rust), wallet-style BLAKE3 content-addressable ids,
hybrid search algorithm surface, brain profiles, multi-tenant layout.
- services/agents.mdx — 88 specialists + 15 orchestrators + 42 tools,
control plane in Go, SDKs for Go/Python/TypeScript, plugin format
for Claude Code marketplace.
- run-your-org.mdx — under-10-minute end-to-end: signup → IAM org →
KMS secrets → brain profile install → bot wire-up → team workspace.
Single landing page that ties every service together for a new
organization owner.
- meta.json wires brain + agents into the services sidebar, run-your-org
into top-level Getting Started.
- index.mdx Quick Links promote Run-Your-Org over generic Getting Started
and surface Brain + Agents on the products grid.
- services/brain.mdx — five-runtime brain.db substrate (TS canonical,
Python, Go, C++, Rust), wallet-style BLAKE3 content-addressable ids,
hybrid search algorithm surface, brain profiles, multi-tenant layout.
- services/agents.mdx — 88 specialists + 15 orchestrators + 42 tools,
control plane in Go, SDKs for Go/Python/TypeScript, plugin format
for Claude Code marketplace.
- run-your-org.mdx — under-10-minute end-to-end: signup → IAM org →
KMS secrets → brain profile install → bot wire-up → team workspace.
Single landing page that ties every service together for a new
organization owner.
- meta.json wires brain + agents into the services sidebar, run-your-org
into top-level Getting Started.
- index.mdx Quick Links promote Run-Your-Org over generic Getting Started
and surface Brain + Agents on the products grid.
Lux Liquid (self-repaying lending protocol) docs were temporarily
mirrored here during the initial doc-system migration. Canonical site
is the Docusaurus build at github.com/luxfi/liquid/docs.
260 files removed. No content lost — same content lives upstream.
Lux Liquid (self-repaying lending protocol) docs were temporarily
mirrored here during the initial doc-system migration. Canonical site
is the Docusaurus build at github.com/luxfi/liquid/docs.
260 files removed. No content lost — same content lives upstream.
Replaces all ghcr.io/hanzoai/<svc>:latest pins with the latest published
semver tag for each service. Per CLAUDE.md auto-bump policy: mutable
branch tags (:latest, :main, :dev) are deprecated for cluster pins —
only immutable semver permitted.
Bulk update across services with published v* tags. Services without a
published semver remain on :latest until their release pipeline cuts a
v* tag.
Replaces all ghcr.io/hanzoai/<svc>:latest pins with the latest published
semver tag for each service. Per CLAUDE.md auto-bump policy: mutable
branch tags (:latest, :main, :dev) are deprecated for cluster pins —
only immutable semver permitted.
Bulk update across services with published v* tags. Services without a
published semver remain on :latest until their release pipeline cuts a
v* tag.
- /docs/projects/support/security: full rewrite pointing at the Lux security
stack (audits/formal-verif/KMS/cosign/disclosure) instead of placeholder TODOs
- Cross-links: /docs/governance for the DAO execution path, github.com/luxfi/{security,compliance,audits,dao,kms}
- /docs/projects/support/security: full rewrite pointing at the Lux security
stack (audits/formal-verif/KMS/cosign/disclosure) instead of placeholder TODOs
- Cross-links: /docs/governance for the DAO execution path, github.com/luxfi/{security,compliance,audits,dao,kms}
Replaces 'transition phase / multisig' placeholder with the actual stack:
- ~/work/lux/dao: ModuleGovernorV1 + Safe + StrategyV1 + VotesERC20StakedV1
- DLUX governance token, backed by staked LUX
- Proposals on https://lux.vote
- Curator/allocator/classifier/gauge admin = Safe owned by the module
- Voting/quorum table with the real contracts
Updated:
- governance/intro.mdx: full rewrite, no 'expected shortly' note
- governance/index.mdx: synced
- user/newguides/risk-considerations.mdx: 'DAO multisig + timelock' → 'Lux DAO (DLUX vote → Safe)'
- projects/support/security.mdx: drop placeholder timelock, point to luxfi/dao
Replaces 'transition phase / multisig' placeholder with the actual stack:
- ~/work/lux/dao: ModuleGovernorV1 + Safe + StrategyV1 + VotesERC20StakedV1
- DLUX governance token, backed by staked LUX
- Proposals on https://lux.vote
- Curator/allocator/classifier/gauge admin = Safe owned by the module
- Voting/quorum table with the real contracts
Updated:
- governance/intro.mdx: full rewrite, no 'expected shortly' note
- governance/index.mdx: synced
- user/newguides/risk-considerations.mdx: 'DAO multisig + timelock' → 'Lux DAO (DLUX vote → Safe)'
- projects/support/security.mdx: drop placeholder timelock, point to luxfi/dao