zeekayandHanzo Dev 4f11077b6c Let the security scan install, then say why each finding is not one
The lane never scanned anything. `pip --break-system-packages` cannot
install semgrep on the runner image: semgrep wants PyJWT, the image has
PyJWT 2.7.0 from its distro, a distro package carries no RECORD, so pip
cannot uninstall what it needs to replace and stops. The flag grants
permission to touch that environment; it does not make the uninstall
possible. uv gives semgrep its own environment and shims the binary onto
PATH — the same fix the insights lane took, so both read alike now.

With the install working the scan reports four, and all four are the
code being careful rather than careless. Each carries the reason at the
line, because a bare suppression is indistinguishable from someone
silencing a real one:

  alembic/env.py     the advisory-lock key is an int on both branches —
                     a sha256 digest reduced mod 2**63-1, or a literal
  auth/iam.py        decoded unverified only to read `iss` and pick a
                     validator; a token claiming our issuer then goes to
                     validate(), which checks the signature and raises
  auth/service.py    reads a claim without authenticating it, safe while
                     nothing authorises on the result — today only this
                     module's tests call it
  arxiv.py           imports the Element TYPE for annotations; parsing is
                     defusedxml.fromstring, two lines below

Placement matters and cost a round trip: the directive has to sit on the
line the rule anchors to, which for the jwt call is the `options=` line
carrying verify_signature, not the line opening the call.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-22 22:01:32 -07:00
2025-03-20 00:05:55 +00:00
2026-04-23 17:49:53 -07:00

Hanzo Flow

Release Notes PyPI - License PyPI - Downloads

Hanzo Flow is a powerful platform for building and deploying AI-powered agents and workflows. It provides developers with both a visual authoring experience and built-in API and MCP servers that turn every workflow into a tool that can be integrated into applications built on any framework or stack. Hanzo Flow comes with batteries included and supports all major LLMs, vector databases and a growing library of AI tools.

Highlight features

  • Visual builder interface to quickly get started and iterate.
  • Source code access lets you customize any component using Python.
  • Interactive playground to immediately test and refine your flows with step-by-step control.
  • Multi-agent orchestration with conversation management and retrieval.
  • Deploy as an API or export as JSON for Python apps.
  • Deploy as an MCP server and turn your flows into tools for MCP clients.
  • Observability with LangSmith, LangFuse and other integrations.
  • Enterprise-ready security and scalability.

Quickstart

Requires Python 3.10-3.13 and uv (recommended package manager).

Install

From a fresh directory, run:

uv pip install hanzoflow -U

Run

To start Hanzo Flow, run:

uv run hanzoflow run

Hanzo Flow starts at http://127.0.0.1:7860.

Other install options

Run from source

If you've cloned this repository and want to contribute, run this command from the repository root:

make run_cli

For more information, see DEVELOPMENT.md.

Docker

Start a Hanzo Flow container with default settings:

docker run -p 7860:7860 hanzoai/flow:latest

Hanzo Flow is available at http://localhost:7860/.

Deployment

Hanzo Flow is completely open source and you can deploy it to all major deployment clouds.

Contribute

We welcome contributions from developers of all levels. If you'd like to contribute, please check our contributing guidelines and help make Hanzo Flow more accessible.

S
Description
No description provided
Readme MIT
602 MiB
Languages
Python 58.6%
TypeScript 25.5%
JavaScript 14.8%
CSS 0.3%
Makefile 0.2%
Other 0.4%