3229 Commits
Author SHA1 Message Date
zeekay c6715d734d The SDK pages state the contract as the behaviour, without today's contrasts. 2026-09-28 18:21:59 -07:00
zeekay 935dae9566 The SDK pages cover the four reach codes, the versioned id and the Jev layer's model list. 2026-09-28 17:44:28 -07:00
zeekay ed2511b721 The Decisions reference, the Jev guide and the Kai pages follow the contract as built: four reach codes, the versioned id, Jev billed per token on both paths. 2026-09-28 17:32:32 -07:00
zeekay 97df06bc2f The Kai overview says a TypeSafe SDK moves with two settings. 2026-09-28 16:37:44 -07:00
zeekay fc40593f93 Kai has its own docs section, and every Jev asset maps to a Kai page in parity/jev.yaml, checked before each deploy. 2026-09-28 16:36:46 -07:00
zeekay 47b17262e9 docs: The Jev guide says a Kai call spends about 400 ms outside the model, and 835 ms in it for five typed questions. 2026-09-28 11:28:54 -07:00
zeekay 259e849bd1 docs: Kai is live on /v1/decisions, and a Jev migration guide sends one request both ways with each side's measured price, accuracy and speed. 2026-09-28 11:27:10 -07:00
zeekay 5283c03b25 docs: /v1/decisions serves Kai a7 at $0.021 per million input tokens, and says which errors the gateway answers first. 2026-09-28 07:27:24 -07:00
zeekayandHanzo Dev 235a0c7d87 docs: /v1/decisions is live on api.hanzo.ai, serving kai (stage a5) and Jev.
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-27 18:35:13 -07:00
zeekayandHanzo Dev 11c1cc3e4c Release and update docs name @hanzo/bot in npm and npx commands
RELEASING told maintainers to dist-tag, view and `npx -y` npm `bot`,
someone else's package; running the npx line executes it. The update page
checked `npm view bot version`. Both now name @hanzo/bot.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-27 18:04:46 -07:00
zeekay 0c69c0a93a Level a callout's text with its icon, and drop empty table headers
MDX leaves newline strings between the blocks inside a blockquote.
flow() set each one as an empty text block, and the column's gap still
spaced it, so a callout's first line sat 8px under its icon.  Drop
whitespace-only strings there.

A key/value table written as `| | |` has a header row of empty cells;
it drew as a blank grey band above every operation page's address
table.  Thead now renders nothing when no cell holds text.

Claude-Session: https://claude.ai/code/session_01HuMDfgFssPUptYUzgZ6Cp8
2026-09-27 17:23:50 -07:00
zeekayandHanzo Dev 00aae8beec The bot installs as @hanzo/bot: npm's bot is someone else's package
Every install, update and removal line said bot@latest or -g bot, which on npm
is an unrelated third-party package. @hanzo/bot is ours and ships the bot and
hanzo-bot commands.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-27 16:06:03 -07:00
zeekayandHanzo Dev 4e6e00755c docs: Kai is the model every recipe and program calls, with its real stage a5 answers and calibration, and the held-out results where Laya leads.
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-27 16:02:47 -07:00
zeekay 1186dc6ffa Build the docs without Tailwind, Radix or base-ui
Nothing apps/docs renders names a utility class, a Radix primitive or a
base-ui part any more, so the build stops carrying them.  global.css is
plain CSS: the faces, the ground, the color-scheme the code tokens read
through light-dark(), and the shell footer.  postcss.config.mjs goes
with the Tailwind plugin, and the app drops tailwindcss and its postcss
plugin and animate plugin, tailwind-merge, class-variance-authority,
every @radix-ui package, @hanzo/docs-base-ui, @hanzo/docs-ui and
lucide-react.

The MDX pipeline drops twoslash, the auto type table and ts2js, which
existed to emit base-ui and Radix parts and which no page uses, and the
graph view's d3 and force-graph go with the graph.  base-ui's shiki
stylesheet no longer answers .t_dark; the docs were its only reason to.

The framework packages stay: each still has consumers among the other
apps and examples.

Claude-Session: https://claude.ai/code/session_01HuMDfgFssPUptYUzgZ6Cp8
2026-09-27 15:33:28 -07:00
zeekay 0d7c74917d Draw the app's own pages with @hanzo/gui
What was left of Tailwind and base-ui in apps/docs was the pages around
the docs: the front page, the hero and product sections on /docs, the
catalogs, search, feedback, the 404, the blog and the sign-in screens.
Each is a gui part on the theme now, and the app source carries no
utility class, no Radix and no base-ui import.

The front page follows the reader's theme instead of forcing a dark
subtree, and its API Reference card pointed at /reference, which is not
a route; it goes to /docs/openapi.  Search is one gui dialog opened
from the rail or with Cmd-K, over the same static index, with the jump
and the ask-an-agent rows it had.  The feedback control sends a
docs.feedback event on the one telemetry stream; it used to hand the
reader's answer to a stub that logged it to their own console.

The blog sits in the docs shell on the same page frame, and a post no
longer prints its title twice.  The registry build, the fork's preview
components, the unused AI-search dialogs, the API page and the tree's
icon plugin go: nothing rendered them, and the icons were an SVG tree
serialised into every page.

Claude-Session: https://claude.ai/code/session_01HuMDfgFssPUptYUzgZ6Cp8
2026-09-27 15:23:16 -07:00
zandClaude Opus 5.5 5af1e60dfb Decisions gets its page, and Kai says what it computes and how it measured
/docs/decisions is the endpoint: POST api.hanzo.ai/v1/decisions on the
Decisions API wire, the three question types each with a request and an
answer, the response field by field, Kai or Jev by model id, and every error
with the runtime's own message. It is a page now, so its redirect goes.

/docs/models/kai: a multilingual encoder that scores each option alone, so
option order does not move the answer, noul is label-symmetric and score is
ordinal; pure Rust on hanzo-ml. The frozen-harness result for stage a5 (macro
0.851 over 11 suites against Laya 0.702 and Jev 0.770, best in 8 of 12, behind
Jev on jailbreak and MASSIVE and Laya on typed decisions and email spam) with
its link. The runtime serves the baseline as laya, laya-multilingual and
laya-agent, and kai is Kai: the agent program and the cookbook name the ids it
serves.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 15:13:45 -07:00
zeekay 0bc191f749 Draw page bodies with @hanzo/gui
A page body was Tailwind's typography plugin reaching into compiled MDX
by selector, around base-ui's Callout, Cards, Tabs, Steps and code
blocks.  Every markdown element and every part the content names is a
gui element now, chosen by tag through components/mdx.tsx.  Blocks are
spaced by the body's gap rather than their own margins, so a list in a
callout or a table in a tab keeps its own rhythm, and tables keep the
browser's table layout so columns line up.

Code tokens carry color: light-dark(...) straight from shiki, so the
theme class picks the palette through color-scheme and no stylesheet
has to know which theme is on.  remark-steps' marked divs become the
Steps parts, and a link to another page carries that page's title and
description instead of mounting a hover card per link.

Content no longer imports the framework's parts: the generators stop
writing the imports and the second "# title", 49 authored pages drop
theirs, and ported and studio pages reach the same parts through the
aliases they already used.

RELEASE.md says how a publish actually fires today: the forge mirror
does not pull on its own and a push queues no run, so sync and dispatch.

Claude-Session: https://claude.ai/code/session_01HuMDfgFssPUptYUzgZ6Cp8
2026-09-27 15:05:11 -07:00
zeekay f11eb49dc2 Draw the docs chrome with @hanzo/gui
The rail, the tree, the bar, the outline and the page header were
Fumadocs' base-ui layout: Tailwind utilities over a CSS grid, with the
width decisions made twice, once in classes and once in a JS media
query.  They are gui stacks on theme tokens now, with every breakpoint a
media prop, so a phone hydrates the markup the export wrote.  Atomic
rules ship as hoisted <style> tags and <html> carries t_dark, so a page
is styled before any script runs.

The theme has one authority, the t_dark/t_light class that gui's
NextThemeProvider writes before paint; <Hanzo> follows it and the
Tailwind dark variant answers it.  The corner dock that covered content
on phones is gone; theme and help sit at the foot of the rail.

A body's leading "# heading" is dropped at compile time, since the
header already prints the frontmatter title: /docs/sdks and
/docs/openapi said their names twice.  The /docs hero stops printing a
second title.

The rail narrows by tree path, so an operation page opens the reference
it belongs to, and the drawer carries the top nav a phone had no way to
reach.

LLM.md carries the four-phase plan and the inventory it is measured by.

Claude-Session: https://claude.ai/code/session_01HuMDfgFssPUptYUzgZ6Cp8
2026-09-27 14:15:45 -07:00
zeekayandHanzo Dev 4526190653 A filled docs button kept the page's light text, so the label disappeared.
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-27 12:34:48 -07:00
zeekayandHanzo Dev da72bf0527 A summary that stops inside its description's first sentence prints that sentence whole
GET /v1/ai/memory/recall's comment has no full stop, so zipdoc cut its
summary at the end of the first line: the CLI row and the API index read
"Recall recent/relevant memories for context injection; with q it". The
loader now prints the description's first sentence when the summary is a
strict prefix of it, and early() names a line that ends on no stop while its
paragraph goes on; the whole-document test reads every printed summary
against its description.

A lead name whose first word would be one letter (iCloud, eBay, gRPC,
OAuth2Client) stays whole instead of reading "I cloud", so the rules name it.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 07:33:20 -07:00
zeekayandHanzo Dev 781e5e64e2 The browser suite reads the device-code row and the sandbox entries cell whole
/docs/cli/iam must carry `Answers "what am I approving?" for a pending device
code.` and no row ending on a quotation; the read-sandbox-file page must carry
the `entries` sentence through ".." excluded (ls -1A).

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 07:03:43 -07:00
zeekayandHanzo Dev 8cc675870d A lone capital after a dash closes a range, so "A–M." ends the sentence
Counting a dash as the space an abbreviation may follow ("the value—e.g. a
count") also made the M of "A–M" an initial, and the tax profile's `fatca` cell
ran on into a second sentence: "FATCA is the FATCA exemption code, A–M.
Entities only." After a dash only a named abbreviation or an initialism
(U.S.) continues the sentence. Over every summary and description, the first
sentences that differ from the version red reviewed are now only the six it
asked for: four quotations, and two colon lead-ins that end with a full stop.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 07:01:36 -07:00
zeekayandHanzo Dev 9196110388 A line that stops at a quotation its sentence goes on after fails one shared rule, read against the whole document and every tool
english.ts states it once as early(line, text): a first sentence ending at a
quotation's own "?" or full stop, while its paragraph goes on in lower case or
after a dash. The API reference reads it over all of the document's prose, so
tag and document descriptions (CLI group lines, product blurbs) are held too,
and the MCP reference over every published tool's own line.

Tests pin the four texts it once cut, as the document carries them: books ask,
deploy session userinfo, iam oauth device info and sandbox entries. With the
quotation rule taken out of firstSentence, three tests fail and name all seven
places. A brand the loader keeps is English to the rules too, since both read
one BRANDS list.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 06:59:19 -07:00
zeekayandHanzo Dev 586e9d7177 The reference is built from cloud 1e34b9e, which drops marketing calendar publish and says what ask by POST answers
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 01:36:24 -07:00
zeekayandHanzo Dev 5e195e07f9 A reference line runs past a quotation its sentence goes on after, and a summary stops where its first paragraph does
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 01:33:23 -07:00
zeekayandHanzo Dev b2ba94a6c8 Every upstream Discord invite on the bot docs points at Hanzo's server
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 00:56:54 -07:00
zeekayandHanzo Dev 7d9aa24970 A reference line runs past e.g. to its sentence's end, and opens without what a stripped Go name left
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-26 00:56:54 -07:00
zeekayandHanzo Dev 57d30248ce Format the breadcrumb search and the browser suite
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:53 -07:00
zeekayandHanzo Dev 5f4b64ff19 The API reference's examples are highlighted as each page renders, not held by the compile
Eight examples on each of 2,400 operation pages made every token a JSX element in the bundle: the export's compile peaked at 24 GB against the runner's 24 GiB. As <Example lang code /> the compile peaks at 9.5 GB, and the page renders the same block with the same themes.



Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:53 -07:00
zeekayandHanzo Dev a1d4597266 The API reference test reads every page's description for a Go name and a 501 stub
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:53 -07:00
zeekayandHanzo Dev 7134deb49b A page ships the page tree without its fallback, and an operation page breadcrumbs as its product
The fallback listed the 2,400 operation pages no meta lists, and every page carried it five times over: 16 GB of the 19 GB export. The browser used it only for an operation page's breadcrumb, which now comes from the product page above it.


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev fb991d3403 The bot docs converter points upstream Discord invites at Hanzo's server
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev 3559d21c74 The blog reads in light mode: its dates are muted text and its pre-footer sits on the dark ground
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev 5f45f9322c An MCP tool page finishes every operation's line, or names the operation and stops
MCP names an operation by a verb phrase the document does not carry, so a cut line is finished from the one operation whose description it starts.



Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev 98b1c9058e Every CLI row reads without a Go name or a 501 stub, under a titled section
A comment that opens with another function's name (ListGPUTiers returns, Delete removes) loses it; an operation whose prose says every call answers 501 is not documented; a section is headed KYC, OAuth, GitHub or Sign, never Kyc or O. A test reads every row of every CLI page for all three.



Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev 59fed2ae28 The reference is built from cloud 5b113e3, which drops bot runs create and four other 501 stubs
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev ebb4ddba95 The bot docs render again, on the base-ui chrome and with brand marks that exist
Every page of apps/bot-docs answered 500: its root layout took
TreeContextProvider from @hanzo/docs/ui, which now re-exports @hanzo/docs-gui's
contexts, a module with no provider and no 'use client'. The app imports the
chrome from @hanzo/docs-base-ui, as docs does. The home page drew lucide's
GithubIcon and ChromeIcon, which lucide 1.x no longer ships; they are
@hanzo/ui's brand marks now. The OpenClaw migration guide renders with the
rest.


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev 9b9e866fdf The landing reads in light mode: its headings and the pre-footer sit on its dark ground
The route is dark by class, but @hanzo/ui's ramp has no .dark, so a light
reader's --text-primary stayed #0a0a0a and every section heading printed at
1.02:1 on #050505. The dark div names the site's foreground as that token, and
the pre-footer's translucent glass moves onto that ground instead of the white
body, where it was grey with a 2.38:1 heading.


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev 2da91984d7 The index copy check reads past the quoted HIP
A capability's HIP is quoted on its index at its pin, and HIP-1063 and the
connector catalogue's doc comment describe the route in nearly the same
words; neither is the generator copying an operation description.


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev f640a0bdd8 Economy groups the principal and tax capabilities
cloud's document now serves both, and a capability no domain groups fails
the pre-build capability check, so the next refresh of the document could
not build without them.


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev 001dd7aa5a /docs hydrates: a product section no longer puts a paragraph in a paragraph
MDX hands a multi-line child over wrapped in <p>, and ProductSection wrapped
its children in another <p>. The browser splits nested paragraphs, so the
server's HTML never matched the client's and React threw #418 on /docs.


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev 6cff8b6f7e A page description prints its code as code
Descriptions write a command or a field in backticks, and every place that
printed one as text showed them: each CLI page read "The `hanzo bot`
commands." under its title and on its neighbours' previous/next cards.
inlineCode renders each span as a code element, for the subtitle, the link
hover card and, through the page tree, the cards; the metadata description
drops the marks.


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev e3c99055b3 Code comments and tokens pass WCAG AA in both themes
Vesper wrote comments at 58% alpha, #555 on the near-black code ground at
2.65:1, and github-light's keyword red, orange and green sat under 4.5 on
#fcfcfc. The light theme is github-light-default, GitHub's AA palette, and a
colorReplacements map gives vesper's comment its opaque grey (5.8:1) and
github-light-default's comment the darker muted grey (5.9:1 on #fcfcfc).
source.config spreads shikiConfig, so the MDX blocks carry the same map.


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:52 -07:00
zeekayandHanzo Dev d2cf408bbc @hanzo/ui 8.27.18, whose element defaults lose to the site's own styles
@hanzo/ui 8.27.0 set `a { color: inherit }`, `p { margin: 0 }` and the rest of
its element ground outside any cascade layer, and an unlayered rule beats
every layered one: the sidebar's "Get an API key" printed near-white on its
white fill, and no paragraph in the prose had a margin. 8.27.17 moved them
into `@layer base`. @hanzo/gui and @hanzogui/shell go to 8.3.5, the version
8.27.18 declares as its peer.

8.3.5 types a gui prop by the shorthand the config registers, so the
landing's cards say bg, rounded, p and py; and @hanzogui/scroll-view 8.3.5
imports react-native outright, so / failed to compile until next.config
took GUI_ALIAS from @hanzo/ui/next (react-native is react-native-web).


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:51 -07:00
zeekayandHanzo Dev f0f8b79f48 The bot docs converter copies the bot's own words, in MDX that parses
The bot repo's docs are branded at the source, so the rebrand map only still
matched names written on purpose, and rewrote the clawdbot compatibility shim
and would rewrite an OpenClaw migration guide's commands and paths into ones
that do not exist. It is gone. Source and destination are the argument and
this app's content/, not two absolute paths into other checkouts, and a page
a fixed nav list leaves out is reported. install/ lists migrate-from-openclaw.

Converting today's docs left five pages MDX refuses to parse (an HTML
comment, an autolink, a bare `<->`), and a page that does not parse is not
rendered. mdxSafe turns each into its MDX form outside code; all 317 pages
compile. The converter runs only as a script, so its test can import it.


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:51 -07:00
zeekayandHanzo Dev 2ba52888e1 A browser suite checks the reference as a reader sees it
apps/docs/e2e runs under Playwright against a dev server, a served export or
docs.hanzo.ai itself (DOCS_URL): the sidebar's primary button and every code
token at WCAG AA in both themes, the table of contents at the top of the rail,
paragraph spacing, no prose cell ending in "…", no row for an operation that
only answers 501, no cell opening with a Go identifier, CLI headings as titles,
the subtitle's code as code, and /docs/graph (an export or the live site: a dev
server serves no redirect pages).


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:51 -07:00
zeekayandHanzo Dev 48dd6a5f89 /docs/graph lands on the Graph page
Graph (HIP-1198) is documented as its capability at /docs/openapi/graph, like
every other product; /docs/graph answered 404. It redirects there now, and the
export gate requires the page.


Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:51 -07:00
zeekayandHanzo Dev 120805293e The reference prints whole sentences, titled sections and one title per page
A table cell, a card blurb and a page description were the summary cut to a
character budget and ended "…": /docs/cli/bot read "Returns the caller org's
bots as space members — each with the member account uuid and the Person
reference the roster…". firstSentence now returns the first sentence of the
first paragraph whole, and the MCP legend prints the document's sentence for
an operation it names instead of the server's cut line.

CLI sections were headed by the raw token ("members", "runs"); they are
titles now, and the noun is read from the CLI's coordinates, so an example
argument in a placeholder's place is not taken for one.

Operation titles were deduplicated against the summaries they replaced, so
no name ever matched and 226 pages shared a title with a sibling ("List
global"); they are measured against the names, and a CRUD verb spelled as a
path segment names the collection before it ("List memory", not "List list").

The surfaces test read toolOps and a document without byId, both gone.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:58:51 -07:00
zeekayandHanzo Dev 9cf9ffdf87 The Migrate from OpenClaw guide says where copied links point and which workspaces stay in place.
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:38:17 -07:00
zeekayandHanzo Dev 42ddaa7523 The Migrate from OpenClaw guide covers leftover allowlists, Anthropic keys outside main, ~/.clawdbot paths, linked .agents dirs and OpenClaw's gateway service.
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-25 23:26:51 -07:00