Hotfix Agent by Hermes turns high-signal GitHub bug issues into Hermes Agent draft pull requests without running a dedicated FireTonic orchestrator server.
Sentry → GitHub Issue + agent:fix → GitHub Actions dispatcher → Hermes /v1/runs
→ Hermes fixes/verifies → draft PR + issue labels/comments
src/— TypeScript source used by actual hotfix smoke tests.tests/— TypeScriptnode:testcontract and smoke-test coverage..github/workflows/sentry-auto-label.yml— optional source classifier for Sentry-origin issues..github/workflows/dispatch-hermes-agent.yml— genericagent:fixdispatcher to Hermes/v1/runs.templates/prompts/github_bugfix_v1.md— Hermes bugfix prompt contract.scripts/ensure-labels.sh— creates/updates required GitHub issue labels.docs/specs/2026-05-06-firetonic-mvp-design.md— MVP design spec.docs/plans/2026-05-06-firetonic-mvp-implementation-plan.md— implementation plan.
-
Configure repository variables and secrets:
AGENT_DISPATCH_ENABLED— repository variable. Set totrueonly in trusted/private deployments. Defaults to disabled when unset or any value other thantrue.HERMES_API_URL— base URL for Hermes API Server, for examplehttps://hermes.example.com.HERMES_API_KEY— bearer token accepted by Hermes API Server.
-
Create labels:
./scripts/ensure-labels.sh owner/repo
-
Configure Sentry GitHub issue alerts to include useful issue body context:
- Sentry issue URL
- error message
- top stacktrace frames
- environment
- release or commit
- event count or user impact
-
Add
agent:fixto an issue to dispatch Hermes.
npm ci
npm testCI runs the same TypeScript verification path plus bash -n scripts/ensure-labels.sh.
Retries are label-based. Remove stale status labels and re-add agent:fix:
remove agent:running / agent:failed / agent:done if applicable
remove agent:fix if already present
add agent:fix
- Public/demo mode keeps
AGENT_DISPATCH_ENABLED=false;agent:fixlabels are acknowledged and removed without calling Hermes. - Hermes PRs are always draft PRs.
- FireTonic MVP does not pass Sentry API credentials to Hermes.
- Actions only dispatches and records the run id; it does not poll long-running jobs.