emma-hermes/scripts
Hermes Agent df09dfd304 chore: restore point before profile-isolation redesign 2026-07-29 23:41:46 +08:00
..
ci feat(ci): semantic package-lock.json diff as an upserted PR comment (#65206) 2026-07-16 03:18:15 +00:00
lib fix(hermes): heal broken managed Node tree instead of PATH fallback 2026-06-26 20:10:20 +05:30
tests test(install): add ConvertTo-LongPath helper for 8.3 short paths 2026-06-20 16:24:52 -07:00
whatsapp-bridge fix(whatsapp): unpin Baileys from git commit, use published 7.0.0-rc13 (#60643) 2026-07-07 19:49:26 -07:00
LIVETEST_README.md test(tool-search): add live A/B harness, drop checked-in transcripts 2026-05-29 02:04:12 -07:00
README.md chore: restore point before profile-isolation redesign 2026-07-29 23:41:46 +08:00
__init__.py chore: restore point before profile-isolation redesign 2026-07-29 23:41:46 +08:00
analyze_livetest.py fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
benchmark_browser_eval.py perf(browser): route browser_console eval through supervisor's persistent CDP WS (180x faster) (#23226) 2026-05-10 07:37:55 -07:00
build_model_catalog.py feat(models): catalog-labeled silent default — GLM-5.2 marked "default": true in the model catalog 2026-07-15 00:10:31 -07:00
build_skills_index.py fix(skills): let ClawHub index build walk past the 12s browse budget (#44500) 2026-06-11 18:03:11 -04:00
check-windows-footguns.py revert(windows): roll back terminal-popup PRs #53791 #53810 #53829 (#53853) 2026-06-27 15:59:00 -07:00
check_subprocess_stdin.py fix: keep interactive OAuth setup-token inheriting stdin 2026-06-08 22:46:57 -07:00
contributor_audit.py chore: release v0.18.0 (2026.7.1) (#56611) 2026-07-01 13:07:40 -07:00
dev-sandbox.sh feat(dev): add isolated sandbox script for local dev 2026-07-10 18:51:49 -04:00
discord-voice-doctor.py codebase: add encoding='utf-8' to all bare open() calls (PLW1514) 2026-05-08 14:27:40 -07:00
docker_config_migrate.py fix(docker): restore config backups after failed boot migration 2026-06-24 15:23:23 +10:00
docker_rebootstrap_nous_session.py fix(auth): apply newer hosted bootstrap session (#64612) 2026-07-16 08:52:47 +10:00
ego_browser_form_smoke.sh chore: restore point before profile-isolation redesign 2026-07-29 23:41:46 +08:00
ego_browser_screenshot_smoke.sh chore: restore point before profile-isolation redesign 2026-07-29 23:41:46 +08:00
ego_browser_smoke_utils.py chore: restore point before profile-isolation redesign 2026-07-29 23:41:46 +08:00
hermes-gateway
install.cmd fix(docs): update all install instructions everywhere 2026-06-04 21:07:45 -04:00
install.ps1 feat(desktop): ts-ify everything 2026-07-08 16:24:16 -07:00
install.sh feat(desktop): ts-ify everything 2026-07-08 16:24:16 -07:00
install_psutil_android.py revert(windows): roll back terminal-popup PRs #53791 #53810 #53829 (#53853) 2026-06-27 15:59:00 -07:00
keystroke_diagnostic.py docs: add Windows-Specific Quirks section to hermes-agent skill + keystroke diagnostic 2026-05-08 14:27:40 -07:00
kill_modal.sh
lint_diff.py feat(ci): add typecheck (warnings only in CI) 2026-05-06 10:58:12 -04:00
profile-tui.py revert(windows): roll back terminal-popup PRs #53791 #53810 #53829 (#53853) 2026-06-27 15:59:00 -07:00
release.py chore(release): map rlaehddus302's email in AUTHOR_MAP (PR #61985 salvage) 2026-07-16 07:17:55 -07:00
run_tests.sh fix(nix): dirty-tree wrapper bug + filtered rebuild scope + overlay alias (#65237) 2026-07-15 21:45:35 -04:00
run_tests_parallel.py feat(ci): python test speedups 2026-07-13 15:29:20 -04:00
sample_and_compress.py fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
tool_search_livetest.py test(tool-search): redact secrets from harness transcripts + console 2026-05-29 02:04:12 -07:00

README.md

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.