mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
The MCP wire (what tools/list reports) ships exactly one tool per axis: fs, exec, code, git, fetch, plan — action-routed. The per-action classes (ReadTool, WriteTool, EditTool, …) stay importable for in-process read-only sandboxing (swarm sub-agents) but are NOT on the wire. PyPI 0.3.1 of hanzo-tools-fs shipped the legacy split (7 tools) while the local 0.3.1 source had already migrated to TOOLS=[FsTool]. Same version number, two different contracts — the source of the 'Python MCP surfaces 32 tools, Node MCP surfaces 13' divergence that breaks contract parity. Bumping to 0.3.2 publishes the HIP-0300 surface for the first time. - pkg/hanzo-tools-fs 0.3.1 → 0.3.2: TOOLS=[FsTool]; legacy classes importable; dropped 'Edit = EditTool' alias; cleaner __init__. - pkg/hanzo-tools-shell 0.6.3 → 0.6.4: bump only (source already TOOLS=_get_detected_shell_tools()). - pkg/hanzo-tools-code 0.1.0 → 0.1.1: bump only (TOOLS=[CodeTool]). - pkg/hanzo-tools-vcs 0.1.0 → 0.1.1: bump only (TOOLS=[GitTool]). - pkg/hanzo-tools-net 0.1.0 → 0.1.1: bump only (TOOLS=[FetchTool]). - pkg/hanzo-tools-plan 0.1.0 → 0.1.1: bump only (TOOLS=[PlanTool]). - pkg/hanzo-tools-agent 0.3.1 → 0.3.2: 'Edit' alias is gone — call EditTool by its real name in swarm_tool.py. - pkg/hanzo-mcp 0.15.3 → 0.15.4: gets the HIP-0300-clean wire when consumed via 'uvx --refresh-package hanzo-tools-fs hanzo-mcp serve'.
hanzo-tools-shell
Shell execution tools for Hanzo MCP with DAG support and Shellflow DSL.
Installation
pip install hanzo-tools-shell
Tools
dag - DAG Execution Engine
Execute commands with directed acyclic graph semantics.
# Serial execution (default)
dag(["ls", "pwd", "git status"])
# Parallel execution
dag(["npm install", "cargo build"], parallel=True)
# Mixed DAG with parallel blocks
dag([
"mkdir -p dist",
{"parallel": ["cp a.txt dist/", "cp b.txt dist/"]},
"zip -r out.zip dist/"
])
# Tool invocations
dag([{"tool": "search", "input": {"pattern": "TODO"}}])
# Named nodes with dependencies
dag([
{"id": "build", "run": "make build"},
{"id": "test", "run": "make test", "after": ["build"]},
])
zsh - Primary Shell with Shellflow DSL
Execute shell commands with optional Shellflow syntax.
# Simple command
zsh("ls -la")
# Shellflow DSL syntax
zsh("mkdir dist ; { cp a dist/ & cp b dist/ } ; zip out")
# With shell parameter
zsh("echo $BASH_VERSION", shell="bash")
Shellflow Syntax:
A ; B- Sequential execution{ A & B }- Parallel executionA ; { B & C } ; D- Mixed DAG
ps - Process Management
Monitor and control background processes.
ps() # List all processes
ps(id="abc123") # Get specific process
ps(kill="abc123") # Kill process (SIGTERM)
ps(logs="abc123", n=50) # Last 50 lines of output
Additional Tools
- shell - Smart shell (zsh > bash fallback)
- bash - Explicit bash execution
- npx - Node package execution with auto-backgrounding
- uvx - Python package execution with auto-backgrounding
- open - Open files/URLs in system apps
- curl - HTTP client without shell escaping issues
- jq - JSON processor
- wget - File/site downloads
Auto-Backgrounding
Commands that exceed the timeout (default 60s) are automatically backgrounded:
dag(["long-running-command"], timeout=30)
# If command exceeds 30s, it continues in background
# Use ps --logs <id> to view output
Performance
Shellflow DSL is optimized for high throughput:
- Simple commands: ~7M ops/sec
- Sequential: ~2.2M ops/sec
- Mixed DAG: ~100k ops/sec
License
MIT