Two New Capabilities: Speaking and Initiating
Modules so far cover an agent that responds when spoken to, by text. This lesson adds two things: voice, so interaction doesn’t require typing, and cron, so the agent can act on a schedule without being asked in the moment.
Voice Mode
Voice works across three surfaces:
CLI microphone mode, for talking to Hermes directly in your terminal:
hermes --voice
Spoken replies in messaging, using the TTS tools from Lesson 8 (Tool Gateway or a direct ELEVENLABS_API_KEY/VOICE_TOOLS_OPENAI_KEY connection) to have the gateway (Lesson 16) reply with audio instead of, or alongside, text.
Discord voice-channel conversations, where the bot joins an actual voice channel:
gateway:
discord:
enabled: true
voice:
enabled: true
Voice adds latency (transcription in, synthesis out) on top of the model call itself, worth keeping in mind if you’re also running against a self-hosted model (Lesson 5) with its own latency characteristics, the two compound.
Cron: Making the Agent Proactive
Everything up to this point in the course has been reactive. Cron flips that: schedule a task to run automatically, with full agent capability, memory, skills, tools, and have the result delivered through the gateway.
# ~/.hermes/config.yaml
cron:
- name: "morning-status"
schedule: "0 8 * * *" # standard cron syntax: 8am daily
prompt: "/daily-status-check" # the skill from Lesson 11
deliver_to:
platform: telegram
chat_id: "your-chat-id"
or from the CLI:
hermes cron add --name morning-status --schedule "0 8 * * *" \
--prompt "/daily-status-check" --deliver telegram:your-chat-id
This is where Module 4’s skills system and Module 6’s gateway compose into something neither delivers alone: the daily-status-check skill you taught Hermes in Lesson 11 was useful when you remembered to invoke it manually. Cron-scheduled, it becomes genuinely proactive, checking staging health every morning and messaging you a summary whether or not you thought to ask.
hermes cron list # see scheduled jobs
hermes cron logs morning-status # check recent run history
Lightweight Notification Channels
Not every automated output needs a full conversational platform. For simple, one-directional alerts, ntfy (a lightweight push-notification service) or a generic webhook are a better fit than standing up a Discord or Slack integration just to receive a single status line:
cron:
- name: "error-rate-alert"
schedule: "*/15 * * * *" # every 15 minutes
prompt: "Check the error dashboard; if error rate exceeds 2%, report it, otherwise say nothing"
deliver_to:
platform: ntfy
topic: "prod-alerts"
gateway:
webhooks:
- name: "internal-alerts"
url: "https://hooks.internal.corp/agent-alerts"
Matching integration weight to the actual need matters: a full Slack bot for a task that’s really just “ping me if X happens” is more surface area (and more to secure, Module 7) than the task warrants.
Exercise: schedule a cron job that runs a skill or a simple prompt on a short interval (every few minutes, for testing) and delivers to whichever platform you connected in Lesson 16. Confirm it fires without you initiating anything, then check
hermes cron logsto see the run history. Once confirmed working, adjust the schedule to something realistic and remove the test-interval version.