feat: add email gateway platform (IMAP/SMTP)#797
Closed
0xbyt4 wants to merge 1 commit into
Closed
Conversation
Allow users to interact with Hermes by sending and receiving emails. Uses IMAP polling for incoming messages and SMTP for replies with proper threading (In-Reply-To, References headers). Integrates with all 14 gateway extension points: config, adapter factory, authorization, send_message tool, cron delivery, toolsets, prompt hints, channel directory, setup wizard, status display, and env example. 65 tests covering config, parsing, dispatch, threading, IMAP fetch, SMTP send, attachments, and all integration points.
teknium1
added a commit
that referenced
this pull request
Mar 11, 2026
Post-merge fixes for the email gateway (PR #797): 1. Add Platform.EMAIL to all 4 platform-to-toolset/config mapping dicts in gateway/run.py. Without this, email sessions silently fell back to the Telegram toolset because these dicts were added after the PR branched off main. 2. Add email (and signal) to hermes_cli/tools_config.py and hermes_cli/skills_config.py PLATFORMS dicts so they appear in 'hermes tools' and 'hermes skills' CLI commands. 3. Add full email setup documentation: - website/docs/user-guide/messaging/email.md — setup guide with Gmail/Outlook instructions, configuration, troubleshooting, security advice, and env var reference - Update messaging/index.md — add email to architecture diagram, platform toolset table, security examples, and next steps
Contributor
|
Merged in commit bdcf247 with contributor credit preserved. 🎉 Post-merge fixes applied in eac5f8f:
Excellent work @0xbyt4 — 65 tests, all 14 integration points, clean merge. Thank you! 🙏 |
lmsanch
added a commit
to lmsanch/hermes-agent
that referenced
this pull request
Apr 23, 2026
…earch#797 regression Addresses the permanence gap revealed by toryx-private#797: commit 19098b0 reverted the Fish Audio implementation (_generate_fish_audio + elif provider == 'fish' branch), and the broken state went unnoticed for nearly a day because the dispatcher's final else: silently fell back to Edge TTS. Ray's responses were generated in a generic Microsoft voice instead of his cloned Fish voice, but no error ever surfaced. This PR closes the mechanism: 1. text_to_speech_tool dispatch: unknown provider now returns a loud JSON error listing the known providers, rather than silently routing to Edge. The 'edge' default is preserved via an explicit elif provider == 'edge' branch. 2. tests/tools/test_tts_providers.py: new CI test that parses tts_tool.py and asserts every documented provider has a generator function AND a dispatch branch. Fish Audio has a dedicated canary test. Deleting Fish (or any other provider) will now fail CI. Together these make the NousResearch#797-class regression impossible to re-ship without an explicit, visible deletion from REQUIRED_PROVIDERS — which a human reviewer has to approve. Related: closes lmsanch/toryx-private#797 (reopened)
lmsanch
added a commit
to lmsanch/hermes-agent
that referenced
this pull request
Apr 23, 2026
…earch#797 regression (#9) Addresses the permanence gap revealed by toryx-private#797: commit 19098b0 reverted the Fish Audio implementation (_generate_fish_audio + elif provider == 'fish' branch), and the broken state went unnoticed for nearly a day because the dispatcher's final else: silently fell back to Edge TTS. Ray's responses were generated in a generic Microsoft voice instead of his cloned Fish voice, but no error ever surfaced. This PR closes the mechanism: 1. text_to_speech_tool dispatch: unknown provider now returns a loud JSON error listing the known providers, rather than silently routing to Edge. The 'edge' default is preserved via an explicit elif provider == 'edge' branch. 2. tests/tools/test_tts_providers.py: new CI test that parses tts_tool.py and asserts every documented provider has a generator function AND a dispatch branch. Fish Audio has a dedicated canary test. Deleting Fish (or any other provider) will now fail CI. Together these make the NousResearch#797-class regression impossible to re-ship without an explicit, visible deletion from REQUIRED_PROVIDERS — which a human reviewer has to approve. Related: closes lmsanch/toryx-private#797 (reopened)
angelburgosrosado
pushed a commit
to angelburgosrosado/hermes-agent
that referenced
this pull request
Apr 27, 2026
Post-merge fixes for the email gateway (PR NousResearch#797): 1. Add Platform.EMAIL to all 4 platform-to-toolset/config mapping dicts in gateway/run.py. Without this, email sessions silently fell back to the Telegram toolset because these dicts were added after the PR branched off main. 2. Add email (and signal) to hermes_cli/tools_config.py and hermes_cli/skills_config.py PLATFORMS dicts so they appear in 'hermes tools' and 'hermes skills' CLI commands. 3. Add full email setup documentation: - website/docs/user-guide/messaging/email.md — setup guide with Gmail/Outlook instructions, configuration, troubleshooting, security advice, and env var reference - Update messaging/index.md — add email to architecture diagram, platform toolset table, security examples, and next steps
02356abc
pushed a commit
to 02356abc/hermes-agent
that referenced
this pull request
May 14, 2026
Post-merge fixes for the email gateway (PR NousResearch#797): 1. Add Platform.EMAIL to all 4 platform-to-toolset/config mapping dicts in gateway/run.py. Without this, email sessions silently fell back to the Telegram toolset because these dicts were added after the PR branched off main. 2. Add email (and signal) to hermes_cli/tools_config.py and hermes_cli/skills_config.py PLATFORMS dicts so they appear in 'hermes tools' and 'hermes skills' CLI commands. 3. Add full email setup documentation: - website/docs/user-guide/messaging/email.md — setup guide with Gmail/Outlook instructions, configuration, troubleshooting, security advice, and env var reference - Update messaging/index.md — add email to architecture diagram, platform toolset table, security examples, and next steps
olympus-terminal
pushed a commit
to olympus-terminal/hermes-agent
that referenced
this pull request
May 16, 2026
Post-merge fixes for the email gateway (PR NousResearch#797): 1. Add Platform.EMAIL to all 4 platform-to-toolset/config mapping dicts in gateway/run.py. Without this, email sessions silently fell back to the Telegram toolset because these dicts were added after the PR branched off main. 2. Add email (and signal) to hermes_cli/tools_config.py and hermes_cli/skills_config.py PLATFORMS dicts so they appear in 'hermes tools' and 'hermes skills' CLI commands. 3. Add full email setup documentation: - website/docs/user-guide/messaging/email.md — setup guide with Gmail/Outlook instructions, configuration, troubleshooting, security advice, and env var reference - Update messaging/index.md — add email to architecture diagram, platform toolset table, security examples, and next steps
lmsanch
added a commit
to lmsanch/hermes-agent
that referenced
this pull request
May 23, 2026
…earch#797 regression (#9) Addresses the permanence gap revealed by toryx-private#797: commit 19098b0 reverted the Fish Audio implementation (_generate_fish_audio + elif provider == 'fish' branch), and the broken state went unnoticed for nearly a day because the dispatcher's final else: silently fell back to Edge TTS. Ray's responses were generated in a generic Microsoft voice instead of his cloned Fish voice, but no error ever surfaced. This PR closes the mechanism: 1. text_to_speech_tool dispatch: unknown provider now returns a loud JSON error listing the known providers, rather than silently routing to Edge. The 'edge' default is preserved via an explicit elif provider == 'edge' branch. 2. tests/tools/test_tts_providers.py: new CI test that parses tts_tool.py and asserts every documented provider has a generator function AND a dispatch branch. Fish Audio has a dedicated canary test. Deleting Fish (or any other provider) will now fail CI. Together these make the NousResearch#797-class regression impossible to re-ship without an explicit, visible deletion from REQUIRED_PROVIDERS — which a human reviewer has to approve. Related: closes lmsanch/toryx-private#797 (reopened)
Egavasyug
pushed a commit
to Egavasyug/hermes-agent
that referenced
this pull request
Jun 10, 2026
Post-merge fixes for the email gateway (PR NousResearch#797): 1. Add Platform.EMAIL to all 4 platform-to-toolset/config mapping dicts in gateway/run.py. Without this, email sessions silently fell back to the Telegram toolset because these dicts were added after the PR branched off main. 2. Add email (and signal) to hermes_cli/tools_config.py and hermes_cli/skills_config.py PLATFORMS dicts so they appear in 'hermes tools' and 'hermes skills' CLI commands. 3. Add full email setup documentation: - website/docs/user-guide/messaging/email.md — setup guide with Gmail/Outlook instructions, configuration, troubleshooting, security advice, and env var reference - Update messaging/index.md — add email to architecture diagram, platform toolset table, security examples, and next steps
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
How it works
EMAIL_ADDRESS,EMAIL_PASSWORD,EMAIL_IMAP_HOST,EMAIL_SMTP_HOSTin.envhermes gatewayFeatures
Integration points (14/14)
gateway/platforms/email.pygateway/config.pygateway/config.pygateway/config.pygateway/run.pygateway/run.pyagent/prompt_builder.pytoolsets.pycron/scheduler.pytools/send_message_tool.pygateway/channel_directory.pyhermes_cli/gateway.pyhermes_cli/status.py.env.exampleTest plan