emma-hermes/scripts/README.md

2.8 KiB

Smoke / helper scripts

This directory includes a few operator-facing smoke runners that exercise real tools instead of mocks.

ego-browser smoke runners

Form smoke

./scripts/ego_browser_form_smoke.sh
# or override the value
./scripts/ego_browser_form_smoke.sh SmokeValue42

What it does:

  • creates a tiny local form page
  • serves it over http.server
  • opens it with ego-browser
  • fills the text field
  • reads the field value and status text back from the page

Expected output is JSON containing:

  • title: "Hermes Ego Browser Form Smoke"
  • value
  • status
  • a local loopback url

Screenshot smoke

./scripts/ego_browser_screenshot_smoke.sh

What it does:

  • runs a real hermes chat browser task against https://www.google.com/
  • verifies the run loads the ego-browser skill
  • verifies it does not load the generic software-development:screenshot skill
  • extracts the screenshot path from verbose output
  • OCRs the saved screenshot and confirms expected page text is present

Expected output is JSON containing:

  • title: "Google"
  • url beginning with https://www.google.com/
  • capture_method: "browser_vision-via-hermes-chat"
  • screenshot_path
  • ocr_text

If you want the script to keep a machine-readable copy of the JSON result for CI or artifact upload, set:

EGO_BROWSER_SCREENSHOT_RESULT_JSON=/tmp/ego-browser-screenshot-result.json \
  ./scripts/ego_browser_screenshot_smoke.sh

Opt-in pytest wrapper

There is an opt-in pytest wrapper at:

tests/tools/test_ego_browser_smoke_scripts.py

Run the form smoke test through pytest with:

RUN_EGO_BROWSER_SMOKE=1 python -m pytest tests/tools/test_ego_browser_smoke_scripts.py -q

That run executes the form smoke and skips the screenshot smoke unless you explicitly opt in:

RUN_EGO_BROWSER_SMOKE=1 RUN_EGO_BROWSER_SCREENSHOT_SMOKE=1 \
  python -m pytest tests/tools/test_ego_browser_smoke_scripts.py -q

Why the extra flag?

  • the screenshot smoke shells into a full hermes chat session
  • that path is slower and more environment-sensitive than the direct form smoke
  • we keep it opt-in so normal targeted runs stay stable and low-noise

Manual CI workflow

There is also an opt-in GitHub Actions workflow:

.github/workflows/ego-browser-smoke.yml

It is intentionally workflow_dispatch only and expects a self-hosted macOS runner that already has:

  • ego-browser
  • tesseract
  • Python 3 available for uv sync

Use it when you want a real CI-hosted smoke pass without forcing browser-smoke noise into the default PR lanes. When screenshot smoke is enabled there, the workflow also uploads the captured screenshot plus the parsed JSON result as an artifact, and writes the screenshot path / OCR summary into the Actions job summary.