-
Choose the alert path
Use option A, revised: a direct ForgeBot Slack mention creates a ForgeBot alert in #forgebot_private, Adam's background comms channel, and Slack mobile notification mirroring carries that channel notification to Apple Watch.
-
Keep Hermes as the Slack harness
Handle the Slack event inside Hermes, where ForgeBot gateway traffic already enters the system. The alert should fire before the agent run continues.
-
Keep the scope narrow
Do not add a native Apple Watch push path, phone bridge, iMessage route, Reminders workflow, or macOS Notification Center dependency.
-
Start with the red TDD tracer
Use the focused TypeScript behavior test as the contract for turning a Hermes Slack mention context into one #forgebot_private background comms alert payload. Current state: green for the existing policy shape; update the target from the older private alert payload to the channel payload.
-
Build the alert payload policy
The policy should produce a stable dedupe key, disable link unfurling, and include concise channel, sender, permalink, and trimmed source message details.
-
Require Doppler-injected auth
Verify the required Slack credential names through Doppler and fail loudly if any are missing. The canonical names are SLACK_BOT_TOKEN, SLACK_FORGEBOT_BOT_USER_OAUTH_TOKEN, and SLACK_FORGEBOT_APP_LEVEL_TOKEN. Run pnpm --dir apps/forgebot watch-alert:readiness under Doppler for the repeatable machine-side gate. Do not read dotenv files or create local fallback secrets.
-
Run the gateway under Doppler
The live Hermes gateway inherits its Slack credentials from Doppler at process launch. Current audit found PID 12989 alive, launched under doppler run --project forgeapps --config prd, with the ForgeBot app-level token exported as the runtime SLACK_APP_TOKEN alias.
-
Confirm the hook loads
Check gateway logs for the mention-alert hook loading successfully before testing detection or Slack delivery.
-
Dry-run the mention detector
Feed a synthetic direct mention into the hook with sending disabled. Current state: dry-run prints the alert text without calling Slack or writing state.
-
Send one controlled live mention
Use a safe test mention in a controlled Slack location. Current target: live synthetic delivery should send exactly one ForgeBot alert to #forgebot_private and Slack history should confirm one match. Separate proof already shows ForgeBot can write to C08QU8FMB44.
-
Verify the Apple Watch side
Confirm the #forgebot_private alert appears on Adam's phone and Apple Watch mirrors it. If the channel alert arrives but the Watch does not buzz, the remaining issue is notification configuration.
-
Monitor and tighten
Watch for duplicate channel alerts, missing channel metadata, failed Slack sends, or suppressed Watch notifications, then tune dedupe, permissions, and notification settings.