When name parameter is provided, screenshot saves to file and returns path
instead of base64 data. This prevents huge MCP responses.
Usage: computer(action='screenshot', name='screen.png')
Returns: {path: '/tmp/screen.png', size: ...}
- list_windows: Use unit separator (ASCII 31) instead of "|" as delimiter
to avoid parsing errors when window titles contain "|" characters
(e.g., "DNS | Records | hanzo.ai | Cloudflare")
- list_windows: Add try/except around int() parsing to skip malformed entries
- focus_window: Increase timeout from 5s to 10s
- focus_window: Add fallback to partial app name matching via System Events
when direct app activation fails (handles "Firefox" matching "Firefox Developer Edition")
MediaTool v0.4.0 - Smart video compression for Claude interpretation:
NEW ACTIONS:
- analyze: Detect activity segments (movement, scene changes)
- slice: Extract frames ONLY at activity points
- compress_session: Full pipeline for computer use sessions
ACTIVITY DETECTION:
- Frame differencing (PIL + numpy) for movement detection
- FFmpeg scene change detection for major transitions
- Activity clustering into segments with scores
- Configurable sensitivity thresholds
COMPRESSION:
- 512px max dimension for session frames (vs 768px default)
- 60% JPEG quality for aggressive compression
- Target 30 frames per 60-second session
- ~15KB per frame, ~450KB total for typical session
NEW ENV VARS:
HANZO_MEDIA_ACTIVITY_THRESHOLD=0.02
HANZO_MEDIA_SCENE_THRESHOLD=0.3
HANZO_MEDIA_SESSION_MAX_DURATION=60
HANZO_MEDIA_SESSION_TARGET_FRAMES=30
HANZO_MEDIA_SESSION_QUALITY=60
Usage:
media(action="compress_session", path="recording.mp4")
# Returns compressed keyframes + activity analysis
# Perfect for Claude to interpret computer use sessions
Added numpy>=1.26.0 dependency for frame differencing.
- Remove 'cmd' from default TOOLS list - only detected shell exposed
- Add KshTool, TcshTool, CshTool for enterprise Unix shells
- Fallback to ShellTool (smart auto-detect) if shell detection fails
- Support ksh93, pdksh, mksh as aliases for ksh
- Bump hanzo-tools-shell to 0.6.1, hanzo-mcp to 0.10.37
- 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
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