<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Robin Beraud-Sudreau</title>
    <description>The latest articles on DEV Community by Robin Beraud-Sudreau (@robinberaud).</description>
    <link>https://dev.to/robinberaud</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3992645%2F05600fad-ea1a-406a-b264-8e6525d46f78.png</url>
      <title>DEV Community: Robin Beraud-Sudreau</title>
      <link>https://dev.to/robinberaud</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/robinberaud"/>
    <language>en</language>
    <item>
      <title>Automate Your X/Twitter Workflow with Hermes Tweet: A New AI Agent Skill</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Sun, 05 Jul 2026 15:33:56 +0000</pubDate>
      <link>https://dev.to/robinberaud/automate-your-xtwitter-workflow-with-hermes-tweet-a-new-ai-agent-skill-1ko7</link>
      <guid>https://dev.to/robinberaud/automate-your-xtwitter-workflow-with-hermes-tweet-a-new-ai-agent-skill-1ko7</guid>
      <description>&lt;h1&gt;
  
  
  Automate Your X/Twitter Workflow with Hermes Tweet: A New AI Agent Skill
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The Problem: Manual Social Media Monitoring Wastes Time
&lt;/h2&gt;

&lt;p&gt;Managing X/Twitter presence at scale is exhausting. Whether you're monitoring brand mentions, researching competitor activity, or managing community engagement, doing it manually drains productivity. What if your AI agent could handle Twitter research, monitoring, and approved actions automatically?&lt;/p&gt;

&lt;p&gt;That's exactly what &lt;strong&gt;Hermes Tweet&lt;/strong&gt; solves—a new marketing skill for the Hermes AI agent that brings X/Twitter automation directly into your AI workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Hermes Tweet
&lt;/h2&gt;

&lt;p&gt;Hermes Tweet (version 0.1.6) is an open-source skill developed by Xquik that extends Hermes Agent with powerful Twitter/X capabilities. It lets your AI agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search and explore tweets&lt;/strong&gt; with native Twitter search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read tweet replies and details&lt;/strong&gt; for deeper context&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Look up user profiles&lt;/strong&gt; and analytics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor tweet activity&lt;/strong&gt; in real-time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export followers&lt;/strong&gt; for analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gate X actions&lt;/strong&gt; through Xquik's secure API&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Hermes Tweet uses three core tools under the hood:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tweet_explore    → Search tweets and discover content
tweet_read       → Fetch tweet details and reply threads
tweet_action     → Execute approved X/Twitter actions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The skill requires network access and environment variables for authentication:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;XQUIK_API_KEY                    &lt;span class="c"&gt;# Your Xquik API credentials&lt;/span&gt;
HERMES_TWEET_ENABLE_ACTIONS      &lt;span class="c"&gt;# Enable/disable actions&lt;/span&gt;
HERMES_ENABLE_PROJECT_PLUGINS    &lt;span class="c"&gt;# Allow trusted plugins&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Getting Started with Hermes Agent
&lt;/h2&gt;

&lt;p&gt;Installing Hermes Tweet takes just two commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes plugins &lt;span class="nb"&gt;install &lt;/span&gt;Xquik-dev/hermes-tweet &lt;span class="nt"&gt;--enable&lt;/span&gt;
hermes tools list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then set your &lt;code&gt;XQUIK_API_KEY&lt;/code&gt; in your Hermes runtime environment—never paste it directly in chat.&lt;/p&gt;

&lt;p&gt;Once installed, you can start using natural language prompts with your Hermes Agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Search for tweets mentioning our product launch"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Get replies to this tweet URL"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Find followers of @username"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Monitor mentions of our brand"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The skill handles authentication, API routing, and action gating automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters for AI Automation
&lt;/h2&gt;

&lt;p&gt;Hermes Tweet bridges the gap between general-purpose AI agents and specialized social media workflows. Instead of switching between tools, your Hermes Agent now has native Twitter capabilities—perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content teams researching trends&lt;/li&gt;
&lt;li&gt;Community managers monitoring conversations&lt;/li&gt;
&lt;li&gt;Marketing analysts tracking campaign performance&lt;/li&gt;
&lt;li&gt;Growth teams discovering influencers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The skill is MIT-licensed and actively maintained by the Xquik team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to Automate?
&lt;/h2&gt;

&lt;p&gt;Hermes Tweet is now part of the official Hermes skills collection. Check out the full implementation and contribute:&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;&lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;Star the Hermes Skills repo&lt;/a&gt;&lt;/strong&gt; to stay updated on new AI agent capabilities.&lt;/p&gt;

&lt;p&gt;Get started today and let your AI agent handle the Twitter grunt work.&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>automation</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Cleaning Up Personal References: How Hermes Skills Maintains Security Best Practices</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Thu, 02 Jul 2026 12:50:35 +0000</pubDate>
      <link>https://dev.to/robinberaud/cleaning-up-personal-references-how-hermes-skills-maintains-security-best-practices-28kj</link>
      <guid>https://dev.to/robinberaud/cleaning-up-personal-references-how-hermes-skills-maintains-security-best-practices-28kj</guid>
      <description>&lt;h1&gt;
  
  
  Cleaning Up Personal References: How Hermes Skills Maintains Security Best Practices
&lt;/h1&gt;

&lt;p&gt;Security in open-source projects isn't just about cryptography and authentication—it's also about preventing accidental exposure of personal data. The Hermes Skills repository just completed a comprehensive security audit, removing lingering personal references that could compromise user privacy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Hidden Personal Data in Documentation
&lt;/h2&gt;

&lt;p&gt;When teams iterate quickly on documentation and examples, personal details can slip through: email addresses in config files, usernames in screenshots, internal URLs, or hardcoded identifiers. While these might seem harmless, they create security vectors and violate privacy principles. The recent cleanup across &lt;code&gt;voxtral-tts&lt;/code&gt;, &lt;code&gt;neuronwriter&lt;/code&gt;, and other skills demonstrates a mature approach to open-source maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed
&lt;/h2&gt;

&lt;p&gt;The commit focused on three skill modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;media/voxtral-tts&lt;/strong&gt;: Mistral's voice cloning API documentation now uses sanitized voice ID examples&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;seo/neuronwriter&lt;/strong&gt;: NeuronWriter integration now removes any site-specific URLs or internal references&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;README.md&lt;/strong&gt;: Updated to reflect these changes across the board&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't breaking changes—they're hygiene improvements that make the codebase safer for everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices for Your Own Projects
&lt;/h2&gt;

&lt;p&gt;If you maintain open-source tools, here's what you can learn:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit documentation regularly&lt;/strong&gt;: Search for domain names, email patterns, and UUIDs that might be personal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use placeholder syntax&lt;/strong&gt;: Replace real values with clearly marked placeholders like &lt;code&gt;$YOUR_API_KEY&lt;/code&gt; or &lt;code&gt;your-domain.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review before publishing&lt;/strong&gt;: Have a checklist: Are there hardcoded URLs? Environment variables? User IDs?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make it reproducible&lt;/strong&gt;: Ensure examples work for &lt;em&gt;anyone&lt;/em&gt; without requiring personal configuration&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How This Improves Hermes Skills
&lt;/h2&gt;

&lt;p&gt;Hermes AI agent users benefit from cleaner, more portable skill definitions. When you integrate the &lt;code&gt;voxtral-tts&lt;/code&gt; skill for voice cloning or &lt;code&gt;neuronwriter&lt;/code&gt; for SEO optimization, you're working with documentation that prioritizes your privacy while maintaining complete functionality.&lt;/p&gt;

&lt;p&gt;The skills still do everything they did before—generate speech with Mistral's API, analyze SEO with NeuronWriter—but now they do it without exposing anyone's personal infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;If you use Hermes Skills or contribute to the project, you'll notice smoother integration with fewer configuration gotchas. Documentation is now truly generic and reusable.&lt;/p&gt;

&lt;p&gt;Want to see the full scope of available skills? Check out the repository and star it if you find it useful:&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;&lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;github.com/RobinBeraud/hermes-skills&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Security through simplicity. That's the Hermes way.&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>security</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Hermes AI Skills Just Got More Secure: Personal Data Removed from Published Skills</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Thu, 02 Jul 2026 12:48:24 +0000</pubDate>
      <link>https://dev.to/robinberaud/hermes-ai-skills-just-got-more-secure-personal-data-removed-from-published-skills-d3p</link>
      <guid>https://dev.to/robinberaud/hermes-ai-skills-just-got-more-secure-personal-data-removed-from-published-skills-d3p</guid>
      <description>&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;When building open-source AI agent skills, it's easy to accidentally expose sensitive information in documentation—API keys, personal model IDs, user emails, or custom configuration details. Once published to a repository, this data becomes a security liability for anyone using your skills.&lt;/p&gt;

&lt;p&gt;The Hermes AI agent community just took a major step toward fixing this with a significant security push across seven popular skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed
&lt;/h2&gt;

&lt;p&gt;A recent commit to the &lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;hermes-skills repository&lt;/a&gt; removed all personal and sensitive data from published skill documentation. Skills affected include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;marketing/waitlister&lt;/strong&gt; — removed example waitlist keys and personal URLs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;media/photogpt&lt;/strong&gt; — stripped personal model IDs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;media/voxtral-tts&lt;/strong&gt; — cleaned up voice clone references&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;media/youtube-content&lt;/strong&gt; — removed example channel data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;productivity/mural&lt;/strong&gt; — eliminated workspace identifiers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;seo/neuronwriter&lt;/strong&gt; — removed project-specific credentials&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;wordpress/wpbakery&lt;/strong&gt; — scrubbed site-specific URLs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Each skill's documentation now uses placeholder variables (like &lt;code&gt;$YOUR_API_KEY&lt;/code&gt;, &lt;code&gt;YOUR_WAITLIST_KEY&lt;/code&gt;) instead of real values. This pattern:&lt;/p&gt;

&lt;p&gt;✅ Prevents accidental credential leaks&lt;br&gt;&lt;br&gt;
✅ Makes it clearer where users need to insert their own data&lt;br&gt;&lt;br&gt;
✅ Reduces social engineering attack surface&lt;br&gt;&lt;br&gt;
✅ Follows security best practices for open-source projects  &lt;/p&gt;
&lt;h2&gt;
  
  
  How It Works with Hermes
&lt;/h2&gt;

&lt;p&gt;When you use a skill with the Hermes AI agent, it reads credentials from your local environment (typically &lt;code&gt;~/.hermes/.env&lt;/code&gt;). The documentation now explicitly guides you to store sensitive data there:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# In ~/.hermes/.env&lt;/span&gt;
&lt;span class="nv"&gt;WAITLISTER_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_actual_key_here
&lt;span class="nv"&gt;PHOTOGPT_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_actual_key_here
&lt;span class="nv"&gt;MURAL_ACCESS_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_actual_token_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then skills reference these variables without exposing them in git history or public documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Should Do
&lt;/h2&gt;

&lt;p&gt;If you're using any of these skills:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pull the latest changes&lt;/strong&gt; — &lt;code&gt;git pull&lt;/code&gt; to get the security update&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review your &lt;code&gt;.env&lt;/code&gt; file&lt;/strong&gt; — ensure all credentials are stored locally, not in code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your git history&lt;/strong&gt; — if you've forked the repo, verify no secrets were committed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update your skill configs&lt;/strong&gt; — replace any hardcoded values with environment variable references&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Contributing Secure Skills
&lt;/h2&gt;

&lt;p&gt;If you're building new skills for Hermes, this commit sets the standard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use environment variables for all credentials&lt;/li&gt;
&lt;li&gt;Document &lt;em&gt;how&lt;/em&gt; to find/generate API keys, but never include examples of real keys&lt;/li&gt;
&lt;li&gt;Use placeholder names that make it obvious what needs replacing&lt;/li&gt;
&lt;li&gt;Store sensitive docs in private wikis, not public repositories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a great reminder that security in open-source isn't just about code—documentation matters too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Involved
&lt;/h2&gt;

&lt;p&gt;The Hermes AI agent is built by the community. If you've spotted other sensitive data in skills or want to contribute a new skill securely, check out the repository and help strengthen the ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;⭐ Star hermes-skills on GitHub&lt;/a&gt;&lt;/strong&gt; to stay updated on security improvements and new skill releases.&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>automation</category>
      <category>opensource</category>
    </item>
    <item>
      <title>4 New Skills for Hermes AI: Email Marketing, DNS Management, YouTube Moderation &amp; SEO Automation</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Wed, 01 Jul 2026 16:11:37 +0000</pubDate>
      <link>https://dev.to/robinberaud/4-new-skills-for-hermes-ai-email-marketing-dns-management-youtube-moderation-seo-automation-1pkf</link>
      <guid>https://dev.to/robinberaud/4-new-skills-for-hermes-ai-email-marketing-dns-management-youtube-moderation-seo-automation-1pkf</guid>
      <description>&lt;h1&gt;
  
  
  4 New Skills for Hermes AI: Email Marketing, DNS Management, YouTube Moderation &amp;amp; SEO Automation
&lt;/h1&gt;

&lt;p&gt;The Hermes AI agent just leveled up. Four fresh open-source skills are now available to automate email campaigns, manage your DNS infrastructure, moderate YouTube comments, and continuously optimize WordPress sites for search engines.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Managing multiple platforms drains time and focus. You're juggling SendFox for newsletters, Gandi for domains, YouTube's comment section, and SEO tools scattered across different tabs. Hermes unifies these workflows into conversational, reusable skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;SendFox&lt;/strong&gt; — Email Marketing Automation
&lt;/h3&gt;

&lt;p&gt;Manage your entire email operation through API calls:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;add_contact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;contact@example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;newsletter&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;VIP&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;first_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Alice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;campaign_stats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_campaign_stats&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;campaign_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create lists, segment contacts, launch campaigns, and track opens/clicks—all without leaving your AI agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Gandi&lt;/strong&gt; — Domain &amp;amp; DNS Management
&lt;/h3&gt;

&lt;p&gt;Stop logging into Gandi's dashboard. Ask Hermes instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;domains&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;gandi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;domain/domains&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;records&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;gandi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;livedns/domains/example.com/records&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;List domains, check expiration dates, modify DNS records, configure email redirections, and verify your infrastructure—all programmatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;YouTube Comment Management&lt;/strong&gt; — Moderation &amp;amp; SEO Linking
&lt;/h3&gt;

&lt;p&gt;Stay on top of YouTube comments with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;yt_cm_pending.py&lt;/code&gt; — Find unanswered comments across your channel&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;yt_cm_act.py&lt;/code&gt; — Reply or reject comments in bulk&lt;/li&gt;
&lt;li&gt;Built-in SEO interlinking to WordPress sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The skill handles the critical &lt;code&gt;youtube.force-ssl&lt;/code&gt; scope requirement so you can actually authenticate and moderate at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;SEO Optimizer&lt;/strong&gt; — Continuous Content Improvement
&lt;/h3&gt;

&lt;p&gt;A two-loop system that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Optimizes existing pages&lt;/strong&gt; — Fetches your Google Search Console data, identifies high-potential pages, scores them with NeuronWriter, improves content with Claude, and auto-publishes via WordPress.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creates new articles&lt;/strong&gt; — Detects genuinely searched topics and generates fresh content on demand.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run daily: 3 pages → NeuronWriter analysis → Content improvement → Live
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Use with Hermes
&lt;/h2&gt;

&lt;p&gt;Each skill is drop-in ready. Just set your API keys in &lt;code&gt;.env&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;SENDFOX_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_key&lt;/span&gt;
&lt;span class="py"&gt;GANDI_API_TOKEN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_token&lt;/span&gt;
&lt;span class="py"&gt;NEURONWRITER_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_key&lt;/span&gt;
&lt;span class="py"&gt;GSC_TOKEN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;path/to/token.json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then talk to Hermes naturally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Add &lt;a href="mailto:alice@example.com"&gt;alice@example.com&lt;/a&gt; to my VIP list in SendFox"&lt;/li&gt;
&lt;li&gt;"What's the expiration date of my domains?"&lt;/li&gt;
&lt;li&gt;"Show me unanswered YouTube comments from the last week"&lt;/li&gt;
&lt;li&gt;"Run my daily SEO optimization cycle"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hermes handles authentication, pagination, error handling, and rate limits transparently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;These aren't fancy wrappers—they're battle-tested integrations built to solve real workflow friction. The YouTube skill, for example, documents critical gotchas like scope requirements and token-swapping behavior. The SEO skill integrates &lt;em&gt;four different systems&lt;/em&gt; (GSC, NeuronWriter, Claude, WordPress) into a cohesive daily routine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;All four skills are open-source and ready to use. Check out the repo, explore the skill definitions, and start automating:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;Star the hermes-skills repo →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you build something cool with these skills, share it in the comments. The community is growing, and every integration makes Hermes smarter.&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>automation</category>
      <category>opensource</category>
    </item>
    <item>
      <title>14 New Skills for Hermes AI: From YouTube to TDD</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Wed, 01 Jul 2026 15:19:53 +0000</pubDate>
      <link>https://dev.to/robinberaud/14-new-skills-for-hermes-ai-from-youtube-to-tdd-1m51</link>
      <guid>https://dev.to/robinberaud/14-new-skills-for-hermes-ai-from-youtube-to-tdd-1m51</guid>
      <description>&lt;h1&gt;
  
  
  14 New Skills for Hermes AI: From YouTube to TDD
&lt;/h1&gt;

&lt;p&gt;The Hermes AI agent just got a major expansion. &lt;strong&gt;14 new generic skills&lt;/strong&gt; landed in the hermes-skills repository, covering everything from media processing to systematic debugging.&lt;/p&gt;

&lt;p&gt;Whether you're automating GitHub workflows, extracting YouTube transcripts, building presentations, or enforcing test-driven development, these skills give your Hermes agent production-ready capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New?
&lt;/h2&gt;

&lt;p&gt;The new skills span five major categories:&lt;/p&gt;

&lt;h3&gt;
  
  
  Media &amp;amp; Content
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;youtube-content&lt;/strong&gt;: Extract transcripts, generate summaries, upload videos, manage channels&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;voxtral-tts&lt;/strong&gt;: Mistral voice cloning and text-to-speech (perfect for voiceovers and voice messages)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;gif-search&lt;/strong&gt;: Tenor GIF search via curl — no extra dependencies needed&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Productivity
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;google-workspace&lt;/strong&gt;: Gmail, Calendar, Drive, Docs, Sheets through OAuth&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;notion&lt;/strong&gt;: Notion API + official &lt;code&gt;ntn&lt;/code&gt; CLI for pages, databases, and Workers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;airtable&lt;/strong&gt;: REST CRUD operations with Personal Access Tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;powerpoint&lt;/strong&gt;: Create, edit, read .pptx files with templates and speaker notes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nano-pdf&lt;/strong&gt;: Edit PDFs using natural-language instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Research
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;arxiv&lt;/strong&gt;: Search academic papers by keyword, author, or ID (free API, no key needed)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GitHub
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;github-repo-management&lt;/strong&gt;: Clone, fork, create repos; manage releases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;github-issues&lt;/strong&gt;: Create, triage, label, and assign issues&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;github-pr-workflow&lt;/strong&gt;: Full PR lifecycle from branch creation to merge&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Software Development
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;test-driven-development&lt;/strong&gt;: RED-GREEN-REFACTOR enforcement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;systematic-debugging&lt;/strong&gt;: 4-phase root cause debugging methodology&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Each skill is a standalone module with clear setup instructions, prerequisites, and dual-path implementations. Many skills offer both high-level tools (like &lt;code&gt;gh&lt;/code&gt; CLI or &lt;code&gt;ntn&lt;/code&gt;) and lower-level fallbacks (curl + Python) for maximum compatibility.&lt;/p&gt;

&lt;p&gt;For example, the GitHub issues skill auto-detects your environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; gh &amp;amp;&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; gh auth status &amp;amp;&amp;gt;/dev/null&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nv"&gt;AUTH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"gh"&lt;/span&gt;
&lt;span class="k"&gt;else
  &lt;/span&gt;&lt;span class="nv"&gt;AUTH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git"&lt;/span&gt;  &lt;span class="c"&gt;# falls back to curl + token&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means your Hermes agent works everywhere — GitHub runners, containers, headless servers, your laptop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using These Skills with Hermes
&lt;/h2&gt;

&lt;p&gt;Once installed, skills integrate seamlessly into your Hermes workflow. Ask your agent naturally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Summarize this YouTube video and turn it into a thread"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Create a presentation deck from this outline"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Search arXiv for papers on reinforcement learning from the last month"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Create a GitHub issue for this bug with these labels"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Write a test first, then implement the retry logic"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hermes picks the right skill, handles authentication (via &lt;code&gt;.env&lt;/code&gt; or existing credentials), and executes the command. No manual setup for each task — just ask.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;These skills solve real workflow pain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No more context switching&lt;/strong&gt; between YouTube, Notion, Gmail, and your code editor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation without custom glue code&lt;/strong&gt; — Hermes handles the orchestration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Methodology enforcement&lt;/strong&gt; — TDD and systematic debugging skills keep you honest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production-ready&lt;/strong&gt; — dual implementations mean reliability across environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The test-driven development and systematic debugging skills are especially powerful. They don't just execute commands — they enforce discipline, ensuring you write tests before code and find root causes before applying fixes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;Head to the hermes-skills repository and explore the skills that match your workflow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;github.com/RobinBeraud/hermes-skills&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each skill includes detailed documentation, examples, and prerequisites. Start with the ones you use daily (Gmail, GitHub, Notion) and expand from there.&lt;/p&gt;

&lt;p&gt;If you're building with Hermes or contributing skills, please &lt;strong&gt;star the repo&lt;/strong&gt; at &lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;https://github.com/RobinBeraud/hermes-skills&lt;/a&gt; — it helps the community discover what's possible.&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>automation</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Generate Realistic Photos with PhotoGPT in Hermes AI — Now with Personal Model Support</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Thu, 25 Jun 2026 08:49:43 +0000</pubDate>
      <link>https://dev.to/robinberaud/generate-realistic-photos-with-photogpt-in-hermes-ai-now-with-personal-model-support-28j0</link>
      <guid>https://dev.to/robinberaud/generate-realistic-photos-with-photogpt-in-hermes-ai-now-with-personal-model-support-28j0</guid>
      <description>&lt;h2&gt;
  
  
  Generate Studio-Quality Photos Programmatically
&lt;/h2&gt;

&lt;p&gt;Imagine building an AI workflow that generates realistic headshots, LinkedIn photos, or workshop scenes on demand—without hiring a photographer or spending hours editing. The new &lt;strong&gt;PhotoGPT skill&lt;/strong&gt; for Hermes AI does exactly that.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Problem Does This Solve?
&lt;/h3&gt;

&lt;p&gt;Content creators, recruiters, and marketing teams often need realistic photos for profiles, presentations, or social media. Traditional solutions require either hiring photographers or using generic stock images. PhotoGPT bridges this gap by leveraging AI to generate authentic-looking photos of real people—including support for &lt;strong&gt;personal trained models&lt;/strong&gt; (like the Robin model) that capture specific individuals.&lt;/p&gt;

&lt;p&gt;The Hermes integration makes it seamless: generate a photo → automatically upload to Mural via Azure Blob storage. No manual handoffs. No API fumbling.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;The PhotoGPT skill uses an &lt;strong&gt;async job-polling pattern&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Submit a generation request&lt;/strong&gt; with a prompt (e.g., "Robin in a professional headshot, blue background")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Receive a jobId&lt;/strong&gt; immediately&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poll the endpoint&lt;/strong&gt; until the image is ready&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optionally upscale&lt;/strong&gt; the result for higher quality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upload to Mural&lt;/strong&gt; if needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Under the hood, it bypasses Cloudflare blocks by using &lt;code&gt;curl&lt;/code&gt; via subprocess instead of Python's &lt;code&gt;urllib&lt;/code&gt;—a practical workaround documented in the skill.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Started with Hermes
&lt;/h3&gt;

&lt;p&gt;The PhotoGPT skill supports two model types:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personal Models&lt;/strong&gt; — Like the Robin model (ID: &lt;code&gt;019abc8d-e721-7066-80ee-e7286e27d007&lt;/code&gt;), trained on real photos. Perfect for consistent character representation across multiple images. Costs 10 credits per image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Public Models&lt;/strong&gt; — Free or low-cost alternatives like &lt;code&gt;nanobanana&lt;/code&gt;, &lt;code&gt;seedream&lt;/code&gt;, or &lt;code&gt;gpt-image-2&lt;/code&gt;. Great for experimentation and bulk generation.&lt;/p&gt;

&lt;p&gt;Simply authenticate with your &lt;code&gt;PHOTOGPT_API_KEY&lt;/code&gt; and &lt;code&gt;PHOTOGPT_MODEL_ROBIN&lt;/code&gt; (stored in &lt;code&gt;~/.hermes/.env&lt;/code&gt;), then craft your prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Generate a professional LinkedIn photo of Robin, medium shot, office background, warm lighting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The skill handles credits validation, training status checks, and error recovery automatically. It even integrates with Mural—generate a photo and upload it directly to your team's workspace.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-World Prompt Ideas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Headshots&lt;/strong&gt;: "Professional headshot, neutral background, studio lighting"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Social Media&lt;/strong&gt;: "Casual portrait, outdoor setting, natural lighting"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workshop Scenes&lt;/strong&gt;: "Group of people in a workshop, collaborative atmosphere"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn&lt;/strong&gt;: "Corporate portrait, business attire, office environment"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why This Matters for AI Workflows
&lt;/h3&gt;

&lt;p&gt;Hermes AI agents can now autonomously generate visual content, reducing bottlenecks in content pipelines. Imagine a recruitment workflow that auto-generates candidate materials, or a marketing agent that refreshes team photos monthly—all hands-free.&lt;/p&gt;

&lt;p&gt;The async job pattern also teaches a practical lesson in building resilient AI integrations: not every API responds instantly, and polling gracefully handles real-world delays.&lt;/p&gt;

&lt;h3&gt;
  
  
  Next Steps
&lt;/h3&gt;

&lt;p&gt;Check out the full skill documentation and examples in the &lt;strong&gt;hermes-skills&lt;/strong&gt; repo. The PhotoGPT skill is production-ready with comprehensive error handling and Mural integration.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;If this powers your AI workflow, star the repo:&lt;/strong&gt; &lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;https://github.com/RobinBeraud/hermes-skills&lt;/a&gt;&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>automation</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Mural Skill for Hermes AI Agent - Auth Fix &amp; New Helper Script</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Wed, 24 Jun 2026 08:40:47 +0000</pubDate>
      <link>https://dev.to/robinberaud/mural-skill-for-hermes-ai-agent-auth-fix-new-helper-script-1iob</link>
      <guid>https://dev.to/robinberaud/mural-skill-for-hermes-ai-agent-auth-fix-new-helper-script-1iob</guid>
      <description>&lt;h2&gt;
  
  
  What Changed
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/RobinBeraud/hermes-skills/blob/main/productivity/mural/SKILL.md" rel="noopener noreferrer"&gt;Mural skill&lt;/a&gt; for &lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;Hermes AI Agent&lt;/a&gt; just got a significant update, thanks to Hermes fixing its own bugs after real-world usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bug: Token Refresh Was Broken
&lt;/h2&gt;

&lt;p&gt;The original implementation put client_id and client_secret in the request body when refreshing OAuth tokens. Mural's API rejects this with 400 invalid_client.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix&lt;/strong&gt;: Mural requires HTTP Basic authentication for token refresh - credentials go in the Authorization header, not the body.&lt;/p&gt;

&lt;p&gt;`python&lt;br&gt;
import base64, urllib.request, urllib.parse&lt;/p&gt;

&lt;p&gt;creds = base64.b64encode(f"{CLIENT_ID}:{CLIENT_SECRET}".encode()).decode()&lt;/p&gt;

&lt;p&gt;req = urllib.request.Request(&lt;br&gt;
    "&lt;a href="https://app.mural.co/api/public/v1/authorization/oauth2/token" rel="noopener noreferrer"&gt;https://app.mural.co/api/public/v1/authorization/oauth2/token&lt;/a&gt;",&lt;br&gt;
    data=urllib.parse.urlencode({&lt;br&gt;
        "grant_type": "refresh_token",&lt;br&gt;
        "refresh_token": REFRESH_TOKEN,&lt;br&gt;
    }).encode(),&lt;br&gt;
    headers={&lt;br&gt;
        "Authorization": f"Basic {creds}",&lt;br&gt;
        "Content-Type": "application/x-www-form-urlencoded",&lt;br&gt;
    }&lt;br&gt;
)&lt;br&gt;
`&lt;/p&gt;

&lt;h2&gt;
  
  
  New: mural_api.py Helper Script
&lt;/h2&gt;

&lt;p&gt;Hermes also wrote a ready-to-use client script (~/.hermes/scripts/mural_api.py) that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-refreshes the token when it expires (every 15 min)&lt;/li&gt;
&lt;li&gt;Rewrites tokens back to .env automatically (refresh tokens are rotated)&lt;/li&gt;
&lt;li&gt;Avoids credential leakage via shell inline commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;ash&lt;br&gt;
python3 ~/.hermes/scripts/mural_api.py refresh               # force refresh&lt;br&gt;
python3 ~/.hermes/scripts/mural_api.py get /workspaces       # authenticated GET&lt;br&gt;
python3 ~/.hermes/scripts/mural_api.py get /workspaces/&amp;lt;id&amp;gt;/murals&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Hermes Can Do with Mural Now
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create full workshop boards from a document (we built a 40-widget training day board from a DOCX)&lt;/li&gt;
&lt;li&gt;Add stickies, shapes, connectors programmatically&lt;/li&gt;
&lt;li&gt;List and search murals across workspaces and rooms&lt;/li&gt;
&lt;li&gt;Duplicate murals from templates&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get the Skill
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
~/.hermes/skills/productivity/mural/SKILL.md&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or browse it on GitHub: &lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;https://github.com/RobinBeraud/hermes-skills&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Hermes is an open-source AI agent framework. Skills are markdown files that teach it how to use APIs. Star the repo if you find it useful!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>mural</category>
      <category>automation</category>
    </item>
    <item>
      <title>Automate Mural Board Creation with Hermes AI Agent</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Tue, 23 Jun 2026 15:38:45 +0000</pubDate>
      <link>https://dev.to/robinberaud/automate-mural-board-creation-with-hermes-ai-agent-3mf3</link>
      <guid>https://dev.to/robinberaud/automate-mural-board-creation-with-hermes-ai-agent-3mf3</guid>
      <description>&lt;h1&gt;
  
  
  Automate Mural Board Creation with Hermes AI Agent
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Managing visual collaboration boards manually is tedious. Creating murals, organizing them across workspaces and rooms, populating them with widgets—it all takes time. What if your AI agent could handle it all?&lt;/p&gt;

&lt;p&gt;The new &lt;strong&gt;Mural skill&lt;/strong&gt; for Hermes AI agent brings programmatic control over your Mural boards, enabling intelligent automation of collaborative workspace management.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New
&lt;/h2&gt;

&lt;p&gt;The Mural collaboration skill lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Create and manage workspaces &amp;amp; rooms&lt;/strong&gt; across your Mural environment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build boards dynamically&lt;/strong&gt; with full CRUD operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Populate murals instantly&lt;/strong&gt; with sticky notes, shapes, text, images, and connectors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicate and organize&lt;/strong&gt; existing boards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handle authentication&lt;/strong&gt; seamlessly with automatic token refresh&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The skill integrates with Mural's official API, communicating via standard REST endpoints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /workspaces                    # List all workspaces
POST /rooms/{roomId}/murals        # Create a new mural
POST /murals/{muralId}/widgets     # Add widgets (stickies, shapes, text, etc.)
PATCH /murals/{muralId}            # Update mural metadata
DELETE /murals/{muralId}           # Clean up when done
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Authentication uses Bearer tokens stored in your &lt;code&gt;.hermes/.env&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;MURAL_ACCESS_TOKEN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_token_here&lt;/span&gt;
&lt;span class="py"&gt;MURAL_REFRESH_TOKEN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_refresh_token&lt;/span&gt;
&lt;span class="py"&gt;MURAL_CLIENT_ID&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_client_id&lt;/span&gt;
&lt;span class="py"&gt;MURAL_CLIENT_SECRET&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_client_secret&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tokens refresh automatically when they expire (15-minute validity), so your agent keeps working without interruption.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using It with Hermes
&lt;/h2&gt;

&lt;p&gt;Once installed, you can instruct Hermes to perform complex board operations in natural language:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Create a retrospective mural in the Design room with columns for 'What went well', 'What didn't', and 'Action items'. Add sticky note templates for team feedback."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hermes translates this into API calls:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fetch the workspace and room IDs&lt;/li&gt;
&lt;li&gt;Create the mural&lt;/li&gt;
&lt;li&gt;Populate it with text headers (the three columns)&lt;/li&gt;
&lt;li&gt;Add sticky note widgets ready for input&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sprint retrospectives&lt;/strong&gt; – auto-generate board layouts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design workshops&lt;/strong&gt; – set up collaborative canvases with templates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Process documentation&lt;/strong&gt; – create visual workflows with connectors and shapes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team onboarding&lt;/strong&gt; – standardized collaboration boards&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;The skill is production-ready and open-source. Head to the &lt;strong&gt;hermes-skills&lt;/strong&gt; repository to integrate it:&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;&lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;github.com/RobinBeraud/hermes-skills&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instructions for setup and API documentation are in &lt;code&gt;productivity/mural/SKILL.md&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;AI agents work best when they can manipulate real tools. By giving Hermes access to Mural, you're enabling intelligent workspace automation—no more manual board creation, no context switching. Your agent becomes a genuine productivity multiplier.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;If this sounds useful, star the repo&lt;/strong&gt; and let's build more agent skills together!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions? Check out the skill documentation or open an issue on GitHub.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>automation</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Automate Mural Boards with Hermes AI: Visual Collaboration at Scale</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Tue, 23 Jun 2026 15:37:37 +0000</pubDate>
      <link>https://dev.to/robinberaud/automate-mural-boards-with-hermes-ai-visual-collaboration-at-scale-2k9o</link>
      <guid>https://dev.to/robinberaud/automate-mural-boards-with-hermes-ai-visual-collaboration-at-scale-2k9o</guid>
      <description>&lt;h2&gt;
  
  
  Transform Your Visual Collaboration Workflow
&lt;/h2&gt;

&lt;p&gt;Managing Mural boards manually is time-consuming. Whether you're facilitating design sprints, running brainstorming sessions, or organizing complex projects, creating and populating boards across multiple workspaces and rooms drains productivity hours.&lt;/p&gt;

&lt;p&gt;The new &lt;strong&gt;Mural skill for Hermes AI&lt;/strong&gt; solves this by automating board creation, management, and population—letting you focus on what matters: the ideas themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Can Now Do
&lt;/h2&gt;

&lt;p&gt;With the Hermes Mural skill, you can programmatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Create and organize&lt;/strong&gt; workspaces and rooms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate murals&lt;/strong&gt; on demand with custom titles and descriptions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Populate boards instantly&lt;/strong&gt; with:

&lt;ul&gt;
&lt;li&gt;Sticky notes (perfect for ideation automation)&lt;/li&gt;
&lt;li&gt;Shapes and text elements&lt;/li&gt;
&lt;li&gt;Images from URLs&lt;/li&gt;
&lt;li&gt;Connectors (for flowcharts and relationships)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manage content&lt;/strong&gt; by updating, duplicating, or deleting boards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;List and retrieve&lt;/strong&gt; workspace contents in seconds&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The skill connects directly to the Mural API v1 using OAuth2 authentication. It handles token refresh automatically, so you never worry about 401 errors interrupting your workflows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Workspace → Room → Mural → Widgets (Stickies, Shapes, Text, Images, Connectors)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simply provide your &lt;code&gt;MURAL_ACCESS_TOKEN&lt;/code&gt; (stored securely in &lt;code&gt;~/.hermes/.env&lt;/code&gt;), and the skill manages the rest—including automatic token refresh when needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using It with Hermes AI
&lt;/h2&gt;

&lt;p&gt;Imagine this scenario: Your PM asks Hermes to "create a design sprint board for the Q2 roadmap."&lt;/p&gt;

&lt;p&gt;Hermes now can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a new room in your workspace&lt;/li&gt;
&lt;li&gt;Generate a mural titled "Q2 Roadmap Design Sprint"&lt;/li&gt;
&lt;li&gt;Automatically populate it with sticky notes for each epic&lt;/li&gt;
&lt;li&gt;Add connector lines showing dependencies&lt;/li&gt;
&lt;li&gt;Share the link back to you—ready to collaborate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No manual board setup. No copy-paste drudgery. Just intelligent automation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install&lt;/strong&gt; the Mural skill in your Hermes setup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configure&lt;/strong&gt; your &lt;code&gt;MURAL_ACCESS_TOKEN&lt;/code&gt; in &lt;code&gt;~/.hermes/.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Hermes&lt;/strong&gt; naturally: "Create a mural for...", "List my workspaces", "Add sticky notes with..."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The skill supports all Mural widget types and handles the full workspace hierarchy—from high-level organization down to individual board elements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source &amp;amp; Community-Driven
&lt;/h2&gt;

&lt;p&gt;This skill is part of the &lt;strong&gt;hermes-skills&lt;/strong&gt; open-source project, meaning you can inspect the code, contribute improvements, or fork it for your specific needs.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;If you find this useful, please star the repo&lt;/strong&gt;: &lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;https://github.com/RobinBeraud/hermes-skills&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your support helps maintain and expand Hermes capabilities for the entire community. Happy automating! 🚀&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>automation</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Hermes Skills: Building a Comprehensive Skill Library for Your AI Agent</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Sun, 21 Jun 2026 14:22:50 +0000</pubDate>
      <link>https://dev.to/robinberaud/hermes-skills-building-a-comprehensive-skill-library-for-your-ai-agent-1367</link>
      <guid>https://dev.to/robinberaud/hermes-skills-building-a-comprehensive-skill-library-for-your-ai-agent-1367</guid>
      <description>&lt;h1&gt;
  
  
  Hermes Skills: Building a Comprehensive Skill Library for Your AI Agent
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The Challenge of AI Agent Extensibility
&lt;/h2&gt;

&lt;p&gt;Building intelligent AI agents is exciting, but here's the reality: a single model can only do so much out of the box. You need a way to extend your agent's capabilities without reinventing the wheel every time. That's where modular, reusable skills come in—and the Hermes Skills project just made it much easier to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Hermes Skills
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;hermes-skills&lt;/strong&gt; repository is an open-source collection of pre-built, production-ready skills designed specifically for the Hermes AI agent framework. Whether you need data processing, API integrations, or utility functions, Hermes Skills provides a growing library of composable abilities that your agent can leverage.&lt;/p&gt;

&lt;p&gt;A recent update to the README brings much-needed clarity with a comprehensive skills table and streamlined quick-start guide, making it easier than ever to explore what's available and get up and running.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Skills Work in Hermes
&lt;/h2&gt;

&lt;p&gt;Each skill in Hermes is self-contained and follows a consistent structure. Here's a simplified example of what a skill looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;hermes.skill&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Skill&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DataProcessingSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Skill&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Processes and transforms data&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;input_data&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Your skill logic here
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;processed_data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Skills are registered with your Hermes agent and can be discovered and invoked at runtime. This modular approach means you can mix and match exactly what your agent needs without bloating your codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with Hermes Agent
&lt;/h2&gt;

&lt;p&gt;Integrating Hermes Skills into your AI agent is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Browse the updated README&lt;/strong&gt; – Check the new skills table to see what's available&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clone or install&lt;/strong&gt; – Add the hermes-skills repo to your project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Register skills&lt;/strong&gt; – Load the skills you need into your Hermes agent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Let your agent learn&lt;/strong&gt; – The agent can now use these capabilities to handle complex tasks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The updated quick-start guide walks you through this process with clear examples and best practices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Open-source skill libraries like this democratize AI development. Instead of each team building the same integrations and utilities from scratch, we can collaborate and build on shared foundations. The improved documentation means more developers can contribute skills, report issues, and suggest improvements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join the Community
&lt;/h2&gt;

&lt;p&gt;Hermes Skills is actively maintained and growing. Whether you're looking to extend your agent's capabilities or contribute your own skills back to the community, there's room for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to supercharge your Hermes agent?&lt;/strong&gt; Head over to the repository and explore the full skills table—you might find exactly what you need.&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;Please star the repository&lt;/strong&gt; at &lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;https://github.com/RobinBeraud/hermes-skills&lt;/a&gt; to support the project and stay updated on new skills!&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>automation</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Firecrawl Skill for Hermes: Transform Any Website into Clean Markdown</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Sun, 21 Jun 2026 13:39:01 +0000</pubDate>
      <link>https://dev.to/robinberaud/firecrawl-skill-for-hermes-transform-any-website-into-clean-markdown-597n</link>
      <guid>https://dev.to/robinberaud/firecrawl-skill-for-hermes-transform-any-website-into-clean-markdown-597n</guid>
      <description>&lt;h1&gt;
  
  
  Firecrawl Skill for Hermes: Transform Any Website into Clean Markdown
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Web data is everywhere, but getting it into a clean, usable format for AI agents is a pain. Raw HTML is noisy, JavaScript-rendered pages can't be scraped with simple HTTP requests, and building reliable web extraction pipelines from scratch takes significant engineering effort.&lt;/p&gt;

&lt;p&gt;That's exactly why we built the &lt;strong&gt;Firecrawl skill for Hermes&lt;/strong&gt; — a plug-and-play integration that gives your AI agent instant access to clean web content, search results, and browser interactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Firecrawl Skill Does
&lt;/h2&gt;

&lt;p&gt;With a single skill install, your Hermes AI agent can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scrape any URL&lt;/strong&gt; and get back clean Markdown — no HTML noise&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search the web&lt;/strong&gt; and retrieve full page content from results&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crawl entire websites&lt;/strong&gt; systematically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interact with dynamic pages&lt;/strong&gt; — fill forms, click buttons, handle JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extract structured data&lt;/strong&gt; as JSON from any page&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The skill wraps Firecrawl's v2 API with a simple Python helper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.firecrawl.dev/v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FIRECRAWL_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;firecrawl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;urlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scraping a page is then one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;firecrawl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;scrape&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;formats&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;markdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]})&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;markdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real-World Examples
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Web search with full content:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;firecrawl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;best Python frameworks 2026&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;limit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Extract structured data:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;firecrawl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;scrape&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://shop.example.com/product/123&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;formats&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;extract&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;extract&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Extract product name, price, and availability&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;extract&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="c1"&gt;# → {"name": "...", "price": 29.99, "availability": "In Stock"}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Interact with dynamic pages:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;firecrawl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;interact&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/login&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;actions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fill&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;selector&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#email&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user@example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;click&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;selector&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#submit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;scrape&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;formats&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;markdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using It with Hermes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Add your API key to &lt;code&gt;~/.hermes/.env&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nv"&gt;FIRECRAWL_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_key_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Get your key at &lt;a href="https://firecrawl.dev" rel="noopener noreferrer"&gt;firecrawl.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ask your Hermes agent naturally:

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Scrape &lt;a href="https://news.ycombinator.com" rel="noopener noreferrer"&gt;https://news.ycombinator.com&lt;/a&gt; and summarize the top stories"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Search for Python best practices and give me a summary"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Extract all product prices from this e-commerce page"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hermes routes these requests to the Firecrawl skill automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;The Firecrawl skill is now live in the &lt;strong&gt;&lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;hermes-skills&lt;/a&gt;&lt;/strong&gt; repository. ⭐ Star it to follow future skill releases — we're building the toolkit for production AI agents, one skill at a time.&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Build Financial Analysis into Your Hermes AI Agent with the FMP Skill</title>
      <dc:creator>Robin Beraud-Sudreau</dc:creator>
      <pubDate>Sat, 20 Jun 2026 22:14:53 +0000</pubDate>
      <link>https://dev.to/robinberaud/build-financial-analysis-into-your-hermes-ai-agent-with-the-fmp-skill-2bj6</link>
      <guid>https://dev.to/robinberaud/build-financial-analysis-into-your-hermes-ai-agent-with-the-fmp-skill-2bj6</guid>
      <description>&lt;h1&gt;
  
  
  Build Financial Analysis into Your Hermes AI Agent with the FMP Skill
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Building AI agents that can answer real-time financial questions is tough. You need reliable data sources, API integrations, and the right abstractions to make it seamless. That's why the Hermes community just shipped something powerful: the &lt;strong&gt;Financial Modeling Prep (FMP) skill&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Whether you're building a financial chatbot, an investment research assistant, or an autonomous trading dashboard, you now have a plug-and-play skill that gives your Hermes AI agent instant access to professional-grade financial data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Can You Do?
&lt;/h2&gt;

&lt;p&gt;The FMP skill connects Hermes to real-time market data across multiple asset classes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stock quotes &amp;amp; fundamentals&lt;/strong&gt; — real-time prices, company profiles, income statements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Financial ratios&lt;/strong&gt; — P/E ratios, dividend yields, debt-to-equity metrics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stock screeners&lt;/strong&gt; — filter stocks by market cap, PE ratio, or custom criteria&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crypto &amp;amp; forex prices&lt;/strong&gt; — Bitcoin, Ethereum, EUR/USD, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market indices&lt;/strong&gt; — CAC40, S&amp;amp;P 500, Nasdaq snapshots&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;News &amp;amp; movers&lt;/strong&gt; — trending stocks and market sentiment&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The skill is built on a clean abstraction over Financial Modeling Prep's stable API (v2025+):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apikey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FMP_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;qs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;amp;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://financialmodelingprep.com/stable/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;?&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;qs&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;urlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this helper, querying data is one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Get Apple's current stock price
&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;quote&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAPL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAPL: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;changesPercentage&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using It with Hermes
&lt;/h2&gt;

&lt;p&gt;Setup is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Get an API key&lt;/strong&gt; from &lt;a href="https://financialmodelingprep.com" rel="noopener noreferrer"&gt;financialmodelingprep.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add it to your Hermes config&lt;/strong&gt; (&lt;code&gt;~/.hermes/.env&lt;/code&gt;):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nv"&gt;FMP_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_key_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ask your agent&lt;/strong&gt; — now you can ask natural questions like:

&lt;ul&gt;
&lt;li&gt;"What's the current price of Tesla?"&lt;/li&gt;
&lt;li&gt;"Show me the PE ratio for Microsoft"&lt;/li&gt;
&lt;li&gt;"Find stocks with market cap &amp;gt; $100B and PE &amp;lt; 15"&lt;/li&gt;
&lt;li&gt;"What's Bitcoin trading at right now?"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hermes will automatically route these queries to the FMP skill and deliver formatted, contextual answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Financial data is increasingly important for AI agents. This skill removes the friction of integrating FMP—you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Standardized endpoints&lt;/strong&gt; — no guessing which API version to use&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Error handling baked in&lt;/strong&gt; — reliable queries that don't break&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Community-maintained&lt;/strong&gt; — open-source means transparency and improvements&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Production-ready&lt;/strong&gt; — using stable API endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;The FMP skill is live in the &lt;strong&gt;&lt;a href="https://github.com/RobinBeraud/hermes-skills" rel="noopener noreferrer"&gt;hermes-skills&lt;/a&gt;&lt;/strong&gt; repository. If you're building financial AI agents, check it out and give the repo a ⭐ to support the project.&lt;/p&gt;

&lt;p&gt;Have ideas for other financial endpoints? PRs welcome—let's build the financial data layer for AI agents together.&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>finance</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
