Implements Phase 1 and Phase 2 tooling from issue #1125: - nexus/computer_use.py: four Hermes tools with poka-yoke safety * computer_screenshot() — capture & base64-encode desktop snapshot * computer_click(x, y, button, confirm) — right/middle require confirm=True * computer_type(text, confirm) — sensitive keywords blocked without confirm=True; text value is never written to audit log * computer_scroll(x, y, amount) — scroll wheel * read_action_log() — inspect recent JSONL audit entries * pyautogui.FAILSAFE=True; all tools degrade gracefully when headless - nexus/computer_use_demo.py: Phase 1 demo (baseline screenshot → open browser → navigate to Gitea forge → evidence screenshot) - tests/test_computer_use.py: 32 unit tests, fully headless (pyautogui mocked), all passing - docs/computer-use.md: API reference, safety table, phase roadmap, pilot recipes - docker-compose.desktop.yml: sandboxed Xvfb + noVNC container Fixes #1125 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
47 lines
1.3 KiB
YAML
47 lines
1.3 KiB
YAML
version: "3.9"
|
|
|
|
# Sandboxed desktop environment for Hermes computer-use primitives.
|
|
# Provides Xvfb (virtual framebuffer) + noVNC (browser-accessible VNC).
|
|
#
|
|
# Usage:
|
|
# docker compose -f docker-compose.desktop.yml up -d
|
|
# # Visit http://localhost:6080 to see the virtual desktop
|
|
#
|
|
# docker compose -f docker-compose.desktop.yml run hermes-desktop \
|
|
# python -m nexus.computer_use_demo
|
|
#
|
|
# docker compose -f docker-compose.desktop.yml down
|
|
|
|
services:
|
|
hermes-desktop:
|
|
image: dorowu/ubuntu-desktop-lxde-vnc:focal
|
|
environment:
|
|
# Resolution for the virtual display
|
|
RESOLUTION: "1280x800"
|
|
# VNC password (change in production)
|
|
VNC_PASSWORD: "hermes"
|
|
# Disable HTTP password for development convenience
|
|
HTTP_PASSWORD: ""
|
|
ports:
|
|
# noVNC web interface
|
|
- "6080:80"
|
|
# Raw VNC port (optional)
|
|
- "5900:5900"
|
|
volumes:
|
|
# Mount repo into container so scripts are available
|
|
- .:/workspace
|
|
# Persist nexus runtime data (heartbeats, logs, evidence)
|
|
- nexus_data:/root/.nexus
|
|
working_dir: /workspace
|
|
shm_size: "256mb"
|
|
# Install Python deps on startup then keep container alive
|
|
command: >
|
|
bash -c "
|
|
pip install --quiet pyautogui Pillow &&
|
|
/startup.sh
|
|
"
|
|
|
|
volumes:
|
|
nexus_data:
|
|
driver: local
|