This script carried its key as a literal. A key in a source file is a key in every clone of that file, and this repo mirrors publicly, so the value must be rotated independently of this change — removing it from the tip does not remove it from history. Reads OPENROUTER_API_KEY and exits with a clear message when it is unset.
hanzo
Python orchestration helpers for Hanzo AI, and the older Python implementation of the Hanzo CLI.
The hanzo command lives elsewhere now
The Hanzo CLI is a native binary. Install it with:
curl -fsSL https://hanzo.sh | sh
hanzo auth login
That gives you hanzo (and hanzo-node, a symlink to the same build) with one
command group per Hanzo Cloud product. This package's console script is
hanzo-py — deliberately not hanzo, so it cannot shadow the real CLI on
your PATH:
pip install hanzo
hanzo-py --help
Nothing here is being removed. If you have scripts on hanzo-py, they keep
working; new work should target the native CLI.
What's still useful here
The Python library pieces, importable without touching the CLI:
from hanzo.batch_orchestrator import BatchOrchestrator
orchestrator = BatchOrchestrator()
results = await orchestrator.run_batch([
"Summarize the incident report",
"Draft the follow-up email",
])
from hanzo.memory_manager import MemoryManager
memory = MemoryManager()
memory.add_to_context("user", "What changed in the last deploy?")
context = memory.get_context()
from hanzo.fallback_handler import FallbackHandler
handler = FallbackHandler()
result = await handler.handle_with_fallback(
primary_fn=api_call,
fallback_fn=local_inference,
)
For the typed Hanzo Cloud API client, install hanzoai.
Configuration
HANZO_API_KEY=sk-...
HANZO_BASE_URL=https://api.hanzo.ai
Model ids come from the cloud catalog, not from this file — zen5,
zen5-coder, zen5-flash, zen5-mini, zen5-pro, enso, enso-flash,
enso-ultra. Ask the cloud rather than hardcoding: hanzo models list.
Development
cd pkg/hanzo
uv sync --all-extras
uv build
License
Apache 2.0