Files
python-sdk/pkg/hanzo
zeekayandHanzo Dev d6ecee069c iam: pass the scope through, and let the server's refusal speak
Which list routes insist on an owner is the server's rule, and it moves. The
deployed binary requires one on users, sessions and applications and not on
roles, permissions, providers, workspaces, invitations, tokens or audit-logs;
the change that resolves a listing's tenant centrally is written but unreleased.

So nothing here keeps a copy of that rule. The IAM tool no longer refuses a
missing owner on applications and sessions, get_applications takes an owner
rather than demanding one, and no docstring or parameter description promises
that leaving it off makes the credential decide — today that answers 400.

A refusal now reaches the caller as the reason IAM gave rather than as a
transcribed body: the RFC 9457 detail, or the envelope's msg where the route
answers the envelope, which is how memberships refuses.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-24 03:42:08 -07:00
..

hanzo

PyPI Python Version

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