HIP-39: Zen — The Open-Weight Generative Family. Status Final. Hanzo architectural specification.
Zen is Hanzo's generative model family: models that write text and code and make images, speech, music, video and 3D, plus the embedding, rerank and guard models published beside them. It ships two ways: open weights in the zenlm organization on Hugging Face, and served SKUs on api.hanzo.ai (HIP-1211). This HIP says what a Zen name means, what an open-weight release must carry, and what exists.
Zen generates open weights, served SKUs this HIP; Zen6 in HIP-0904
Enso routes model=auto, the Enso SKUs HIP-0510
Kai decides typed decisions HIP-1332
Policy governs deterministic authority HIP-1332 §10
HIP-0511 maps every family to its HIP, API and host.
The current generation is Zen6 (HIP-0904). Zen7 is upcoming and unspecified. Satori is being retired; Zen7 succeeds it.
Three places describe the family, and they disagree:
@zenlm/models 1.0.4 lists the zen5 lineup and has no zen5.8 and no zen6;/v1/models serves zen5, zen5.8 and zen6;zenlm repositories, 81 of them public.A reader cannot tell which Zen models exist, which are open, or what a served id runs. A family name that means something different in each place is not a contract.
The key words MUST, MUST NOT, SHOULD, SHOULD NOT and MAY are to be interpreted as in RFC 2119.
zen<N>[-<role>]. The generations are zen3, zen4, zen5, zen5.8 and zen6, and zen7 is next. N orders releases. It says nothing about architecture, size or modality.
zen-<role>, for example zen-embedding, zen-guard or zen-vl.artifacts (§2.3).
zen-router names two things: the Hugging Face classifier zenlm/zen-router, and HIP-0510's alias for auto. Nothing in this HIP assumes one is the other.
zenlm.GET https://api.hanzo.ai/v1/models lists with owned_by: zenlm. A SKU is live if and only if that list contains it. A site, doc or catalog MUST NOT call a SKU available when that list does not contain it.
/v1/modelsreports them. It does not promise the weights of the repository with the same name, and a caller MUST NOT infer either one from the other.
Every new open-weight repository in zenlm MUST meet all six of the following:
license and base_model. base_model names therepository or repositories whose bytes were copied, quantized or fine-tuned, not just an ancestor of them.
LICENSE, and also NOTICE where the upstreamhas one.
base_model repositories.
quantization, a config edit, or a fine-tune together with its recipe. A card MUST NOT call a re-host trained.
config.json disagree, config.json is the fact and thecard is the defect.
hardware and the date, or with a receipt file in the repository. zen6's qualification.json is the form to follow (HIP-0904 §6).
Measured against the 81 public repositories:
(DeepSeek), zen3-guard (Granite), zen3-image-fast (FLUX), zen3-image-ssd (SSD-1B), zen-world, zen-director and zen-video-i2v (Wan), zen-musician (YuE) and zen-3d (TRELLIS).
LICENSE (HIP-0904 §8).Qwen/Qwen3.6-35B-A3B. Its prose says the GGUF was quantized from huihui-ai/Huihui-Qwen3.6-35B-A3B-abliterated, and its file name agrees with the prose.
This section is a measurement, not a normative list. The lineup changes with every release; the definitions in §2 do not. It is taken with:
curl -s https://api.hanzo.ai/v1/models \
| jq -r '.data[] | select(.owned_by=="zenlm") | "\(.id) \(.context_window)"'
curl -s 'https://huggingface.co/api/models?author=zenlm&limit=500' | jq -r '.[].id'
The authenticated listing returns 85 repositories. The four private ones are zen5-flash-gguf and zen5-nano-{0.8B,2B,4B}-gguf.
| Generation | Status | Served SKUs | Open weights (zenlm/…) | |:--|:--|:--|:--| | zen3 | open weights only; SKUs retired | none | zen3-asr, zen3-asr-0.6B, zen3-asr-aligner, zen3-guard, zen3-image, zen3-image-fast, zen3-image-ssd, zen3-nano, zen3-omni, zen3-tts, zen3-tts-0.6B, zen3-tts-custom-voice, zen3-tts-voice-design, zen3-vl | | zen4 | retired | none | none | | zen5 | shipped | zen5, zen5-coder, zen5-flash, zen5-mini, zen5-pro, zen5-spark, zen5-evo | zen5-gguf, zen5-coder-gguf, zen5-mini-gguf, zen5-pro-gguf, zen5-max-gguf, zen5-nano-9B-gguf | | zen5.8 | shipped, served only | zen5.8, zen5.8-coder, zen5.8-spark, zen5.8-evo | none | | zen6 | shipped | zen6, zen6-coder | zen6, zen6-coder, zen6-flash (HIP-0904) | | zen7 | upcoming | none | none |
Notes on the table:
zenlm/satori is a scaffold over Open-Sorawith no weights; its README says the model is not yet trained.
about its architecture, modality, size or date.
zenlm/zen5 repository. On GitHub it describes a routed "Mixture of Diverse Experts"design. No checkpoint of that design is published. The Zen5 open weights are the single-upstream repositories listed in the table.
-spark and -evo suffixes name hosts, not models; evo is the host halo.
SKUs with no open weights.
| Line | Open weights (zenlm/…) | Served SKU | |:--|:--|:--| | embedding | zen-embedding, zen-embedding-0.6B, zen-embedding-0.6B-GGUF, zen-embedding-4B, zen-embedding-8B, zen-embedding-8B-GGUF | zen-embedding | | rerank | zen-reranker, zen-reranker-0.6B, zen-reranker-0.6B-GGUF, zen-reranker-4B, zen-reranker-4B-GGUF, zen-reranker-8B, zen-reranker-8B-GGUF | none | | guard | zen-guard, zen-guard-gen, zen-guard-gen-8b, zen-guard-stream, zen-guard-stream-4b | zen-guard | | vision-language | zen-vl-4b-instruct, zen-vl-4b-agent, zen-vl-8b-instruct, zen-vl-8b-agent, zen-vl-30b-instruct, zen-vl-30b-agent | zen-vl | | omni | zen-omni, zen-omni-30b-instruct, zen-omni-30b-thinking | none | | small | zen-nano, zen-nano-0.6b, zen-eco, zen-eco-instruct, zen-eco-4b-instruct, zen-eco-4b-thinking, zen-eco-4b-agent-gguf, zen-eco-4b-agent-mlx, zen-agent-4b | none | | domain | zen-pro, zen-family, zen-blog, zen-finance, zen-legal, zen-medical, zen-multilingual, zen-sql, zen-translate | none | | design | zen-designer-235b-a22b-instruct, zen-designer-235b-a22b-thinking, zen-designer-gguf | none | | image, video, 3D | zen3-image family above, zen-image-edit, zen-world, zen-director, zen-video-i2v, zen-3d | none | | speech, music | zen3-tts and zen3-asr families above, zen-dub-live, zen-scribe, zen-translator, zen-musician | none | | router | zen-router | none | | free lane | none | zen-free |
Media SKUs. zen-image, zen-voice, zen-music, zen-foley, zen-video and zen-rerank are not served SKUs, because /v1/models does not list them (§2.2).
| Context (tokens) | SKUs | |:--|:--| | 1,000,000 | zen5, zen5-coder, zen5-flash, zen5-pro, zen5-spark, zen5.8, zen5.8-coder, zen5.8-spark, zen6, zen6-coder, zen-vl, zen-free | | 262,144 | zen5-evo, zen5.8-evo | | 131,072 | zen5-mini | | 128,000 | zen-guard | | 32,768 | zen-embedding |
@zenlm/models 1.0.4 (github.com/zenlm/models at b3fe63c) calls itself the single source of truth for Zen model definitions. It covers the zen3 and zen5 generations and the unversioned lines. It has no zen5.8 and no zen6, so it is behind §4.1.
release. The durable rule is §2.2: live means listed by /v1/models. That rule is what exposes a stale site, doc or catalog.
a served contract. Binding the two by name would promise callers something the serving path is not bound to keep, and would make every serving change a breaking change to a model card.
hanzoai/engine (HIP-0043) and one provenance chain to audit per release. The 15 exceptions in §3 are listed rather than hidden, so each can be retired or re-based on purpose.
been removed, and its card says so. Open weights carry no refusal guarantee. A deployer that needs content safety MUST put a classifier in front, such as the zen-guard line. A served SKU is governed by whatever serves it (§2.3), not by these weights.
their named upstreams, checked by LFS SHA-256 (HIP-0904 §5). A loader SHOULD pin a commit rather than main, which can change under it.
custom_code tag, so loading them runs Python from the repository. Pin the revision and read that code first. No other zenlm repository carries the tag.
LICENSE does not give recipients a copy of thelicense, which Apache-2.0 §4(a) requires. §3.2 closes this for new releases. The zen6 gap is recorded in HIP-0904 §8.
the same name (§2.3).
@zenlm/models 1.0.4)Copyright and related rights waived via CC0.