Skip to main content

galvanize: wake your agents when the world moves

Wake your AI agent when something happens, not on a timer.

galvanize watches the real world (new mail in an inbox, a file landing in a folder, a git commit, a webhook call, an event from a script) and wakes a fresh AI agent session the moment one of those things occurs, with a prompt you wrote. Until now, the only event an agent could see was the clock: "trigger me when X" always became an hourly cron poll, because polling was the only surface the agent had. galvanize puts real event triggers directly into the agent's own tool list (native plugin for Hermes, MCP server for Claude Code and Codex), so when you say "wake me when resumes land", the agent wires an actual push trigger instead. Passwords go to your OS keyring, each trigger starts watching in seconds, and results arrive wherever you asked (Telegram, Discord, or just the log).

Install

Works on Windows, macOS, and Linux (Python 3.10+). No cloning needed — one command installs straight from GitHub:

pipx install "git+https://github.com/jarvis959/galvanize.git"
# or: uv tool install --from "git+https://github.com/jarvis959/galvanize.git" galvanize
# or: pip install git+https://github.com/jarvis959/galvanize.git

Then run setup once:

galvanize init

init enables the Hermes webhook platform (backs up your config first), installs the agent plugin, registers the daemon to start at login, and auto-registers the MCP tool surface into Claude Code / Codex if it finds them on this machine. Everything is confirmed on screen and reversible; --yes accepts defaults.

After that, the whole surface is five verbs:

galvanize add folder ~/watch --wake hermes             # + a live test fire
galvanize add imap you@gmail.com --wake hermes         # app-password to keyring
galvanize status           # watching? last fire, errors, health
galvanize doctor           # deep health check
galvanize test cad-drops   # inject a synthetic event through the real path

Why

Every "trigger me when X" conversation defaults to an hourly cron poller, because polling is the only surface the agent can see. galvanize puts event triggers in the agent's own tool list, so when you say "wake me when resumes land", the agent wires a real push trigger instead of a poll job.

  • Fresh sessions, not thread injections. Each event spawns a clean one-shot run: no context pollution, results delivered where you asked.
  • Management everywhere cron is managed. Dashboard /triggers tab, /triggers slash command, hermes triggers CLI, agent tools, plus galvanize status / doctor / daemon: all surfaces, one ops core.
  • Push email that survives real life. IDLE with 25-min re-arm, UID dedupe, reconnect catch-up, keyring-held credentials, and a migrate hermes-cron command that converts your existing email pollers.
  • Zero-inbound-port webhooks. Optional user-owned Cloudflare Worker relay (relay/worker.js): services POST to your URL, your laptop pulls the queue.

Working with each harness

Hermes

galvanize init does the setup: enables platforms.webhook in your config.yaml (backup saved first), pip-installs the package into the interpreter Hermes runs in, copies the plugin into ~/.hermes/plugins and enables it. Restart the Hermes gateway once to load the webhook platform; the trigger_* tools appear in new sessions. From then on, "wake me when a file lands in ~/cad-drops" creates a real trigger in conversation.

Claude Code / Codex

init writes the MCP server entry into ~/.claude.json / ~/.codex/config.toml automatically when it finds them (Codex gets default_tools_approval_mode = "approve" pre-declared, as newer Codex builds otherwise hide the tools). New session: trigger_add and friends are in the tool list. Wake presets:

galvanize add folder ~/inbox --wake claude   # claude -p "{prompt}"
galvanize add folder ~/inbox --wake codex    # codex exec (sandbox pre-declared)
galvanize add git-hook ~/code/myrepo --wake codex   # wake Codex on commits

Any other CLI agent

galvanize add folder ~/watch --wake shell --command 'myagent run "{prompt}"'

Daily use

Triggers the agent creates itself with its trigger_add tool are the primary path; the CLI is the no-agent fallback. Both write the same ~/.galvanize/triggers.yaml, and the dashboard tab manages what either creates (creation stays conversation-first by design).

Development

git clone https://github.com/jarvis959/galvanize && cd galvanize
python -m venv .venv && .venv/bin/pip install -e ".[dev]"   # Scripts/ on Windows
.venv/bin/pytest                     # unit suite; live-lane + docker tests skip cleanly

The live Hermes-lane test runs inside a Hermes checkout's venv (pytest tests/test_live_hermes_lane.py); the IMAP suite drives a GreenMail container and skips when Docker is unavailable.

MIT licensed. Built for the Hermes ecosystem; architecture is harness-neutral.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

galvanize-0.2.0.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

galvanize-0.2.0-py3-none-any.whl (68.8 kB view details)

Uploaded Python 3

File details

Details for the file galvanize-0.2.0.tar.gz.

File metadata

  • Download URL: galvanize-0.2.0.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for galvanize-0.2.0.tar.gz
Algorithm Hash digest
SHA256 2a88b9ef7f1eb91f88434290ea6f89711fdf16cec266737c563b038c812569f6
MD5 52be312852f9d0f5e84de85c2af0ad6f
BLAKE2b-256 dddc7d7834eae68bfaae1f98223b88a988cc6074705dff2198a11e76c531c802

See more details on using hashes here.

File details

Details for the file galvanize-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: galvanize-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 68.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for galvanize-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cb41c2ba1db800b102de1fb3cde5aa749c520e4832a598965835f9a53db5930a
MD5 ca37e3327b3c279292e3b4b02fb43856
BLAKE2b-256 bb656b96cc421d4ae9a4383217ec52fb27e7c3c2d56c70e8022d96b78a4304d0

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page