Files
python-sdk/pkg/hanzo-tools-shell
zeekay 98c079f4cb feat: add hanzo-async unified async I/O with uvloop support
New package: hanzo-async
- Automatic uvloop detection and configuration
- Async file I/O (read_file, write_file, append_file, read_json, write_json)
- Async path operations (path_exists, is_file, is_dir, mkdir, etc.)
- Async subprocess execution (run_command, run_shell)
- Graceful fallback to asyncio on Windows or when uvloop not installed

Updated packages to use hanzo-async:
- hanzo-tools-shell: base_process.py, ps_tool.py, shell_tools.py
- hanzo-tools-agent: agent_tool.py, dataset.py
- hanzo-tools-fs: search.py
- hanzo-mcp: cli.py, auto_timeout.py, event_loop.py, version_tool.py

Shell improvements:
- Renamed zsh_tool.py to shell_tools.py (better organization)
- Added DashTool for Debian/Ubuntu's fast POSIX shell
- All shell tools now thin shims over CmdTool

Version info now shows async backend:
- CLI: hanzo-mcp 0.10.27 (async: uvloop 0.22.1)
- Tool: async: uvloop 0.22.1
2026-01-03 17:39:48 -08:00
..

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 execution
  • A ; { 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