Field notes · AI agents, Hermes & Claude Code By Julian Goldie

Hermes Agent For Marketing: How I'd Set Up A Draft-Only Content Desk In 8 Steps

Profiles, skills, cron, gateways and plugins, in the order I'd set them up, with the one rule that keeps public posts in human hands.

Get The AI Profit Stack Join AIPB →
  • 01 1,000+ done-for-you AI agent workflows
  • 02 5 live coaching calls / week with me
  • 03 7-day refund, cancel anytime
  • 04 3,400+ AI operators inside

Hermes Agent for marketing works best as a draft desk: it researches, writes and reports on a schedule, and a person still presses publish.

This is the order I'd build it in, with every command and setting taken from the official Hermes docs.

Eight steps, two worked examples and one rule that matters more than the rest: anything that posts or sends stays a draft.

If you'd rather have my team map this onto your own marketing, book a free SEO strategy session.

Step 1: Give Marketing Its Own Profile

Start with a separate profile so brand notes never mix with your personal agent.

hermes profile create marketing
hermes -p marketing chat

The Hermes FAQ says each profile has its own memory store, session database and skills directory, fully isolated from the others.

In the Desktop app the same profile shows up as a Bot, because the Bot Mode docs say a Bot simply is a Hermes profile.

An agency with three clients makes three profiles, one per client, and nothing bleeds across.

Step 2: Write The Brand-Voice Skill Before Any Job

Skills are the instruction files Hermes loads only when a task calls for them.

The skills docs put them in ~/.hermes/skills/ and say they follow the agentskills.io open standard.

My brand-voice skill holds five things:

  • Who the customer is, in two lines.
  • Three sample posts the owner likes.
  • Words and claims the brand never uses.
  • The call to action for each channel.
  • A closing line: "Every output is a draft for a human to review."

One gotcha: the docs say the agent can modify or delete any skill.

Keep a copy of the brand skill in a git folder so you can see when it changes.

Step 3: Pick The Research Backend

Hermes ships two web tools, web_search and web_extract, and you choose the provider behind them in hermes tools.

The web search page lists Firecrawl as the default, plus SearXNG, Brave Search, DuckDuckGo, Exa, Tavily, Perplexity and xAI among others.

Brave, DuckDuckGo, xAI and OpenAI Native only search, so pair one of them with an extract-capable backend if the job needs to read full pages.

For marketing research that pairing matters, because a topic list without the source pages is just a list of headlines.

🔥 Want this marketing desk already wired into an Agent OS? Inside the AI Profit Boardroom you get step-by-step video trainings, the installable Agent OS, four coaching calls a week and 3,400+ members building agents for their own marketing. → Join the AI Profit Boardroom

Step 4: Connect One Gateway For The Team

The gateway is how your team talks to the agent from a chat app instead of a terminal.

The messaging gateway docs list Telegram, Discord, Slack, WhatsApp, Signal, SMS, Email, Microsoft Teams, Matrix, LINE and more, all run by one background process.

I'd connect one platform first, usually the one the team already lives in.

  • Slack: the Slack page uses Socket Mode, and SLACK_ALLOWED_USERS limits who can command the bot.
  • Channels: in a Slack channel the bot only answers when someone @mentions it, and it replies in a thread.
  • Email: the email adapter uses IMAP and SMTP, and EMAIL_ALLOWED_USERS restricts which senders it acts on.

Lock the allowlist down before the first scheduled job runs.

Step 5: Schedule The Monday Content Brief

Cron is where the desk starts working without being asked.

hermes cron create "0 8 * * 1" \
  "Research this week's questions about spring garden care. List six topics, each with a working headline and two source links. Draft only: do not post or send anything." \
  --skill brand-voice \
  --name "Monday brief" \
  --deliver slack

The cron docs say schedules take natural language or cron expressions, and a job can attach one or more skills.

Output goes to the delivery target you set: the origin chat, local files, a Slack, Telegram or Discord channel, email, or a list of several.

The docs also say the agent doesn't send messages itself in a cron run; its final answer is handed to the deliver target.

That's fine for an internal team channel, and it's why the public-facing step below needs a different rule.

Step 6: Add Plugins Only For Jobs You Actually Run

The plugin catalog is a human-reviewed list you install from with hermes plugins install <name>.

Most marketing entries in it are third-party community plugins, not Nous Research products, so read each one's catalog entry before you install it.

JobCatalog entryTypeWhat the entry says about approval
Social schedulingpostroomCommunity pluginMarks its server untrusted, so Hermes asks before write calls
Social drafts on many networksadaptlypostCommunity pluginUntrusted server; write tools refused in unattended runs
Viral-post research and draftspostelCommunity pluginSign-in drops the untrusted flag unless you add it back
Competitor ad researchproxyCommunity pluginRead-only, no ad-account access
Ad campaign draftsadkitCommunity pluginCreates stay drafts until you approve publishing
Email campaigns and flowsklaviyoNous-reviewed MCP catalog entryVendor-hosted server; set it untrusted yourself

Klaviyo and similar entries sit in the separate MCP catalog, which the MCP docs describe as servers Nous staff has reviewed, installed with hermes mcp install <name>.

The catalog has no dedicated HubSpot, Mailchimp, Shopify or GoHighLevel entry, so don't plan around one.

Step 7: The Draft-Only Rule For Anything That Posts Or Sends

Hermes approvals cover risky shell commands, not outgoing messages.

The security page describes a check against a list of dangerous command patterns, set with approvals.mode, with cron_mode: deny as the default for scheduled runs.

No Hermes docs page describes a built-in approval step for posts, emails or replies the agent sends.

So every job that touches a public channel gets the words "draft only" written into the prompt.

There are two documented opt-in exceptions.

  • Untrusted MCP servers: the MCP config reference says trust: untrusted makes every write-capable tool call wait for approval, with Allow Once, Session and Always options.
  • Draft-and-approve plugins: some catalog entries add their own review step, such as Postroom's approved previews.
mcp_servers:
  postel:
    trust: untrusted

That block matters for Postel, because its catalog entry says the sign-in command replaces the package's untrusted setting.

Also note that YOLO mode and approvals.mode: off skip the untrusted prompt, so leave both off on a marketing profile.

Step 8: Turn The Desk Into A Small Team With Group Chats

Once one profile works, split the job across Bots.

The Bot Mode docs say a group chat seats two to six Bots, and gateway group chats keep running after you close the Desktop app.

The v0.23.0 release notes add a lead bot or an automatic router to pick who answers, and let cron jobs post into a room.

My split, which is my own suggestion rather than a docs template:

  1. A researcher Bot that runs the Monday brief.
  2. A copywriter Bot with the brand-voice skill.
  3. An editor Bot that checks drafts against the "never say" list.

Each Bot can run its own model, so the editor can sit on a stronger one than the researcher.

📞 Want help choosing the first marketing job to hand over? Book a free SEO strategy session and my team will look at your channels and content with you. → Book your free strategy session

Worked Example: A Two-Person Agency With Three Client Desks

Here's how a small agency would run the setup above for three clients.

  1. Create one profile per client, each with its own brand-voice skill.
  2. Connect Slack once and give each client its own channel.
  3. Schedule a Monday brief per client, delivered to that client's channel.
  4. Ask the copywriter Bot for three post drafts from the topics the account manager picks.
  5. Load approved drafts into Postroom, where the server is untrusted, so Hermes asks before it schedules anything.
  6. Check delivery status on Friday with hermes cron list, which flags failed deliveries separately from failed runs.

Worked Example: A Plumber's Weekly Local Post

A one-van plumbing firm wants one useful post a week on its Google Business Profile.

  1. The brand skill lists the service area, the jobs the firm takes and the phone number.
  2. A Thursday cron job researches seasonal questions such as frozen pipes or boiler checks.
  3. The job prompt ends with "Draft only: write one post and one photo idea, then stop."
  4. The owner reads the draft on Telegram, edits a line and posts it himself.
  5. Later, if he adds AdaptlyPost, whose catalog entry lists Google Business Profile, Hermes asks before each write because the server is untrusted.

Optional: Image, Music And Design Drafts

Text drafts are the core, but the desk can also rough out visuals.

The image generation page says Hermes makes images through FAL.ai, and you pick the active model in hermes tools.

The v0.23.0 release adds official ElevenLabs Music and Sound Effects plugins as one-command installs, which suits short video promos.

For layouts, the MCP catalog has a Canva entry for creating and managing designs, plus a Gamma entry for presentations, docs and sites.

I'd keep all of these on the copywriter Bot and treat every file they make as a first draft for a designer or owner to finish.

Optional: Trigger Drafts From Events With Webhooks

Schedules aren't the only trigger.

The webhooks page says external services such as GitHub, GitLab, JIRA and Stripe can post an event that starts an agent run.

A webhook route can also fire an existing cron job the moment something happens, instead of waiting for the next tick.

A content team that tracks articles in JIRA could have a ticket moving to "Published" kick off the social drafts for that article.

The same page advises scoping the toolset on webhook sessions and keeping approvals on for outbound actions, so give that route read and draft tools only.

Gotchas I'd Check Before Going Live

  • No cron inside cron: the docs say cron runs can't create more cron jobs.
  • One stop button: hermes pause halts every scheduled fire, and hermes resume lifts it.
  • Quiet runs: the cron guide shows a [SILENT] reply for runs with nothing to report.
  • Sign in first: Proxy's catalog entry says to sign in from an interactive chat before you schedule cron runs.
  • Unattended limits: untrusted servers such as AdaptlyPost refuse write tools in cron, so a scheduled job can only draft there.
  • Config checks: a job with a missing key or unknown target is marked blocked_config and makes no model call.

Where This Sits Next To Our Other Hermes Guides

This page covers marketing only.

For the wider setup across admin, inbox and reporting jobs, read the Hermes Agent for business walkthrough.

Members of the AI Profit Boardroom get the installable Agent OS with profiles and cron jobs like these already set up.

Start with Step 1 today and add one step a day.

Also On Our Network

FAQ: Hermes Agent For Marketing

Does Hermes ask before it publishes a social post?

Not by default. Hermes approvals cover dangerous shell commands, so write "draft only" into posting jobs, or use an MCP server set to trust: untrusted, which asks before each write call.

Which Slack setting stops strangers using the marketing bot?

SLACK_ALLOWED_USERS takes a comma-separated list of member IDs, and only those people can command the bot.

Can one Hermes install run marketing for several clients?

Yes. Create one profile per client; each profile keeps its own memory, sessions and skills.

Why does my Postel plugin post without asking?

Its catalog entry says the sign-in command replaces the package's untrusted setting. Add trust: untrusted under mcp_servers.postel in config.yaml to bring the prompt back.

Where do cron results go if I don't set a target?

The cron docs say the default is the origin chat on messaging platforms and local files when the job was created from the CLI.

📺 Video notes + links to the tools 👉

🎥 Learn how I make these videos 👉

🆓 Get a FREE AI Course + Community + 1,000 AI Agents 👉

About Julian

I'm Julian Goldie, an SEO entrepreneur, author and founder of the AI Profit Boardroom, which has 3,400+ members.

I help business owners scale with AI agents, automation and SEO.

  • I've built a 7-figure SEO and link building agency, Goldie Agency, with a team of 70+ SEO experts.
  • I've grown a YouTube channel to 400,000+ subscribers.
  • I wrote "Link Building Mastery".
  • My Udemy courses have taught over 29,000 students.

→ Get my best AI training inside the AI Profit Boardroom

Build the profile and the brand skill tonight, schedule one draft-only brief this week, and book a free strategy session if you want my team to review your Hermes Agent for marketing setup.

§ Field reports

Real wins from inside the AI Profit Boardroom

See all 3,400+ members →
AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot

Scroll sideways →

⚑ Next step

Ready to run AI agents that actually do the work?

Join 3,400+ operators inside the AI Profit Boardroom. Get 1,000+ plug-and-play AI agent workflows, 5 coaching calls a week, and a community that holds you accountable.

Join The AI Agent Community →

7-day no-questions refund · Cancel anytime

Found this useful? Get more of this site in your Google.

One tap adds us as a preferred source — Google then shows you our posts more often in Search, Top Stories, and AI Overviews.

← Back to all posts