Shellflow syntax:
A ; B ; C → sequential
{ A & B & C } → parallel
A ; { B & C } ; D → mixed
Usage:
zsh("mkdir dist ; { cp a dist/ & cp b dist/ } ; zip out.zip dist/")
Compiles to JSON AST then executes via DAG.
Bump to v0.4.0
- ZshTool now includes full DAG functionality (serial, parallel, graph)
- Single "zsh" command for all shell operations
- Usage: zsh("ls") or zsh(["cmd1", "cmd2"]) or zsh([...], parallel=True)
- DagTool kept in codebase for backwards compatibility
- Removed DagTool from default TOOLS list
- Bump hanzo-tools-shell to v0.3.1
- Add _exec_api method for OpenAI/Anthropic-compatible API calls
- Add httpx and uvloop as optional dependencies [api] [perf]
- Auto-background long-running agent processes with ps --logs support
- Configure YOLO mode flags for all CLI agents
- Bump hanzo-tools-agent to v0.2.7, hanzo-mcp to v0.10.26
- hanzo-tools now contains core infrastructure (BaseTool, ToolRegistry, etc.)
- hanzo-tools-core becomes a thin backwards-compat wrapper
- All tool packages now depend on hanzo-tools>=0.3.0
- Reduces package count and simplifies dependency tree
- MCPMesh: Register agents as MCP servers
- MCPAgent: Call tools on other agents
- run_mcp_consensus: N rounds of discussion via MCP
- create_mesh: Convenience factory
Each agent in consensus is available as MCP to every other.
- New package: hanzo-metastable-consensus
- Two-phase finality: Sampling + Finality
- Used by hanzo-tools-agent for consensus action
- Reference: https://github.com/luxfi/consensus
Consolidated agent tool with actions:
- run: single agent execution (claude -p default)
- dag: DAG execution with dependencies and {dep_id} injection
- swarm: work distribution with max_concurrent semaphore
- consensus: Lux Quasar protocol (Nova + Quasar phases)
- dispatch: different agents for different tasks
Removed hanzo-agents SDK dependency. Lightweight CLI execution.
Consensus: https://github.com/luxfi/consensus
Add three new shell tools that bypass shell escaping issues by using
subprocess with list arguments instead of shell interpretation:
- curl: HTTP client with proper JSON body handling
- jq: JSON processor with direct filter passing
- wget: File/site downloads with mirror mode support
These tools solve the common problem of shell escaping nightmares
when working with complex JSON or special characters.
Updates:
- Added CurlTool, JqTool, WgetTool to hanzo-tools-shell
- Updated __all__ exports and TOOLS list
- Added tools to entrypoint_loader PACKAGE_TOOL_PREFIXES
Major improvements to mode and tool management:
1. Essential System Tools - Critical tools (llm, consensus, config, mode,
tool, version, stats) are now ALWAYS enabled regardless of active mode.
Previously, mode system disabled all tools then only enabled mode-specific
ones, causing critical tools to be unavailable.
2. Unified 'tool' Command - Consolidates tool_install, tool_enable,
tool_disable, tool_list into single 'tool' command with actions:
- list: List all tools by category
- enable/disable: Toggle tool state
- install/uninstall: Package management
- upgrade/reload: Update tools
- self_update: Update hanzo-mcp
3. Fixed Permission Manager - Made permission_manager optional in:
- FileSystemTool base class
- ComputerTool
- ConfigTool
- ReadTool, WriteTool, EditTool
Now creates default PermissionManager if not provided.
4. Fixed Mode System - Builtin modes (hanzo, minimal, fullstack, devops,
security) are now always registered alongside hanzo-persona profiles.
Previously they were skipped when hanzo-persona was available.
5. Updated ESSENTIAL_TOOLS constant with modern tool names and added
llm, consensus, config, mode to ensure they're in all default modes.
Version bump: 0.10.19 -> 0.10.20
- git_search.py: All 6 subprocess.run calls converted to asyncio.create_subprocess_exec
- search_tool.py: All 6 subprocess.run + 3 blocking file reads converted to async
- npx.py: Converted to asyncio.create_subprocess_exec with proper timeout
- uvx.py: Both subprocess calls converted to async with timeout handling
- open.py: Platform openers converted to async fire-and-forget pattern
All tools now use non-blocking async I/O for better concurrency.
Tests: 31/31 passing.
- Delete deprecated agent_tool_v1_deprecated.py and swarm_tool_v1_deprecated.py
- Keep CriticTool as name='critic' (not code_review) per user request
- Add missing stub classes for CLI agents when hanzo-agents unavailable
- Fix NameError: ClaudeCodeAgent not defined in tests
- Document hanzo-mcp vs hanzo-tools-* architecture in CLAUDE.md
Updated tool descriptions with DISPLAY INSTRUCTIONS to guide LLM output rendering:
- read.py: Show output in fenced code block with language hint
- write.py: Show brief status message
- edit.py: Show diff in fenced code block
- find_tool.py: Show formatted file list directly
This helps agent and other LLMs render tool output more readably
instead of showing raw JSON.