Glorya for Hermes
Ask Hermes for an ad. Get the finished video back in your chat.
Glorya already knows your brand: logo, colors, fonts, products. Tell Hermes what you want, like "video ad for our new serum", and the plugin does the rest:
- It starts the job and keeps one message updated while Glorya works.
- When Glorya needs a choice, it asks you in the chat. Reply, or tap a button.
- It sends the finished video or images back as real files.
Works in Telegram, Discord, Slack, WhatsApp, the terminal and Hermes Desktop. Makes image ads, video ads, landing pages and websites, and runs ad campaigns on Meta, Google and TikTok.
Also included:
/glorya video new serum launchstarts a job without the AI model.jobs,answer,refine,publishandcancelwork the same way./glorya campaign new serum, 30 a daybuilds and launches an ad campaign once you confirm./glorya campaignsshows spend and results,/glorya creditsshows what's left.- Weekly autopilot: fresh image ads or a video ad posted to your chat every week (
/blueprint glorya:weekly-video-ad). - Hermes Desktop: a Glorya Studio tab with every job, its videos and its questions.
Requirements
- Hermes Agent 0.22.5 or newer.
- A Glorya account with an active plan ($99/month Starter at glorya.ai). Jobs use your Glorya credits, the same as in the Glorya platform.
Install
hermes plugins install glorya --enable # from the Hermes plugin catalog, once listed
# or straight from this repo:
hermes plugins install Glorya-AI/hermes-plugin --enable
hermes glorya setup # add Glorya and grant what the plugin needs
Nothing to restart: Hermes loads the plugin and the new config into the running gateway. Then ask for an ad in any chat. The first time, Hermes shows a Glorya sign-in link (a card in the TUI and Desktop). Open it on the computer running Hermes and sign in.
hermes glorya setup asks before each step and only runs Hermes' own commands:
hermes plugins enable gloryahermes config set mcp_servers.glorya.url https://platform.glorya.ai/mcpand… .auth oauth: adds the Glorya MCP server. Hermes signs in with OAuth and keeps the token. The plugin never sees it.hermes config set plugins.entries.glorya.mcp_allowlist '["glorya"]': lets the plugin call that server throughctx.call_mcp, so it can follow jobs.hermes config set plugins.entries.glorya.allow_gateway_injection true: optional. Lets the plugin start one short agent turn in a chat when a job finishes, so the files arrive as attachments. Without it you get links.
Signing in uses Hermes' own connection flow (manage_connections), started by the agent when the Glorya tools are missing. It reuses a saved sign-in, and the gateway waits for the browser itself, so no terminal has to stay open. Run setup in your own terminal: inside a chat it only tells you to do that.
Check the result any time with hermes glorya status.
Use it
Just ask:
Make a UGC video ad for our new serum
Image ad for the summer sale, let me review the concept first
Landing page for the spring collection
Make the headline shorter · Publish it
Or type:
/glorya image summer sale for our bestseller
/glorya video --format ugc --review new serum, first week offer
/glorya page spring collection launch
/glorya jobs
/glorya answer # choices as buttons
/glorya refine make the background darker
/glorya publish my-spring-page
/glorya cancel
/glorya campaign --platform meta --budget 30 new serum launch
/glorya campaigns | credits | sites
/glorya brand | formats
Scheduled: /blueprint glorya:weekly-image-ads or /blueprint glorya:weekly-video-ad, or pick them on the Desktop Cron page.
In Hermes Desktop: ⌘K → Glorya: open studio.
If something is off
| What you see | What to do |
| --- | --- |
| Hermes doesn't know about Glorya | Run hermes glorya setup in your terminal, then ask again. |
| "Start a plan" with a link | Open the link, start the plan, then ask again. |
| "Brand still setting up" | Finish your brand in the browser and try again in a few minutes. |
| Sign-in expired | Ask Hermes for an ad: it shows the sign-in link again. From a terminal: hermes mcp login glorya. |
| Links instead of files | Run hermes glorya setup again and say yes to sending files. Telegram bots upload up to 50 MB; bigger files come as links. |
Full walkthrough: glorya.ai/docs/mcp/hermes.
Settings
Settings → Plugins → Glorya in Desktop, or plugins.entries.glorya.settings in config.yaml:
| Key | Default | |
| --- | --- | --- |
| server | glorya | The mcp_servers entry for https://platform.glorya.ai/mcp. |
| follow | true | Follow jobs in the background. With false, the model polls with get_job. |
| deliver | attach | attach sends files as attachments (needs allow_gateway_injection); links posts links. |
| attach_max_mb | 45 | Larger files are sent as links. Telegram bots can upload up to 50 MB. |
| follow_minutes | 90 | Stop following a job after this long. |
How it works
The Glorya MCP server does the work. Hermes connects to it with OAuth, and the model uses its tools (mcp__glorya__create_video_ad, …).
- A
transform_tool_resulthook sees a Glorya create, refine, answer or publish result. It posts a progress message, starts a background follower and tells the model the plugin has the job, so the turn ends right away. - The follower long-polls
get_jobthroughctx.call_mcp(Hermes' own MCP client and token) and edits the message as the job moves. It runs in a copy of the turn's context, so it keeps posting to that chat. - Glorya's questions are posted once each. A
pre_llm_callhook tells the model about this chat's open questions and recent jobs, so "the second script" or "make it calmer" goes to the right job. - When the job finishes, the follower downloads the files into the plugin's data folder. It then injects one turn so the agent replies with
MEDIA:attachments. Without that grant, or if a file is too big, it posts links. - Scheduled runs and chats without a live gateway are left to the model. It follows the job with
get_joband attaches files withglorya_attach.
Native tools: glorya_attach (download a finished job's files and return MEDIA: lines) and glorya_jobs (the jobs the plugin follows).
What it does on your machine (disclosure)
- Network: Glorya tool calls go to
https://platform.glorya.ai/mcpthrough Hermes' MCP client, using your Glorya sign-in. Finished files are downloaded over https from the links Glorya returns: https only, public hosts only, size-capped. Nothing else is contacted. No telemetry or analytics. - Credits and ad spend: creating, refining and answering jobs uses your Glorya credits.
create_campaignand/glorya campaignlaunch campaigns that spend real money from your ad account, so both ask you first: the plugin'spre_tool_callhook sends everycreate_campaigncall through Hermes' approval prompt (platform and daily budget), and/glorya campaignasks before it starts. Answering "always" lets later campaigns start without asking. Publishing puts a page on the internet; it only happens when you ask, and bothpublish_site(through Hermes' approval prompt) and/glorya publishask you to confirm first. - Data: the plugin keeps a SQLite file and downloaded files under
<HERMES_HOME>/plugin-data/glorya/. The file holds job ids, titles, statuses, the chat a job belongs to (session key and id) and file paths. Finished jobs older than 30 days are pruned. - Agent turns: with
allow_gateway_injection, the plugin starts one agent turn in the job's chat when files are ready. That turn costs one model call. - Shell: only
hermes glorya setupruns commands, and only thehermes …commands listed above, each after you say yes. - Credentials: none are read or stored by the plugin. Hermes holds the Glorya OAuth token.
- Background threads: one daemon thread per followed job (at most 8). Each stops when the job finishes, fails or runs past
follow_minutes. - Hermes internals: to route updates to the right chat, the plugin reads the session key with
gateway.session_context.get_session_env, as the plugin guide documents. To tell the agent when Glorya is signed out, it readstools.mcp_tool_discovery.mcp_servers_not_connected()(server names only, no credentials).
Develop
uv run --no-project --with 'pytest>=8,<9' python -m pytest -q
hermes plugins validate . && hermes plugins doctor . --ci
The folder must be named glorya (a valid Python package name), as it is when Hermes installs it.
License
MIT
README from the reviewed commit e6ffa2b; it updates when the author re-pins.

Glorya