Compare commits

...

49 Commits

Author SHA1 Message Date
Oliver acaa49af02 Blog: remove SSH reverse tunnel detail from LinkedIn post — reserve for future post 2026-07-10 10:50:39 -03:00
Oliver 01870aa6eb Blog: add post 'How I Automated My LinkedIn Content Publishing with an AI Agent' 2026-07-10 10:08:58 -03:00
Oliver 7c9aa7464a blog: Building a Company #2 — derez-company plugin, 70 leads, and the workflow change that fixed everything 2026-07-10 06:43:16 -03:00
Oliver d84af0b069 blog: reframe series intro — inspire reuse, tease open-source sales profile in next story 2026-07-09 08:07:34 -03:00
Oliver 54027859cc blog: Building a Company series intro — how we use Hermes at derez.ai 2026-07-09 07:28:12 -03:00
Oliver 4fd8ccbafe Frontend: add review, guide, tutorial, architecture area badge mappings + review badge color 2026-07-03 13:44:52 -03:00
Oliver fee0953c5f Blog: Hermes v0.18.0 business review — honest take from a small business owner 2026-07-03 13:42:17 -03:00
Oliver b0c9e44701 Blog: How Hermes Agent closed 949 GitHub issues in 12 days — v0.18.0 deep dive 2026-07-02 18:10:49 -03:00
Oliver 6ca6b33bba Blog: add post 'Make Your AI Agent Verify Its Own Work — No More Hallucinated Done' 2026-07-02 17:32:17 -03:00
Oliver 04b1c0a13b Blog: fix YouTube embed cookie issue on odoo-xml-rpc post — use youtube-nocookie.com 2026-07-02 11:19:30 -03:00
Oliver cdfa125c2a Create /odoo-hermes landing page + link from homepage footer and blog posts with Odoo Hermes anchor text 2026-06-30 16:17:49 -03:00
oliver 7442702722 prompt 2026-06-30 06:31:24 -03:00
Oliver 56db882f2e Add Step 3: connection prompt to blog post 2026-06-30 06:27:50 -03:00
Oliver fbda9d9ebc Add embedded YouTube short player for XML-RPC guide 2026-06-30 06:09:58 -03:00
Oliver 86c3ff79dc New post: Odoo XML-RPC + Hermes Agent guide (companion to YouTube short) 2026-06-29 17:16:53 -03:00
oliver 3efde98250 blog 2026-06-26 18:06:44 -03:00
oliver ee908a65bb blog 2026-06-26 18:03:44 -03:00
Oliver 8425296ef3 Remove Gumpel blog post 2026-06-25 06:16:15 -03:00
Oliver 272ef8e0ff Blog: 'Mit dem Gumpel über Agenten gesprochen' — Story über Hermes, Bier und den Beweis, dass der Agent schneller ist 2026-06-24 17:28:53 -03:00
Oliver fad43e355b sitemap: add missing speed-run-odoo-static-website blog post (Jun 22) 2026-06-24 09:02:22 -03:00
Oliver 7792bd909f affiliate: remove first hero badge, fix copy on second badge 2026-06-23 17:43:20 -03:00
Oliver 59f181e3a7 Nav: add Affiliate link to main menu 2026-06-23 11:09:01 -03:00
Oliver a0f0b2e479 Affiliate hero: add quick restore badge 2026-06-23 11:06:29 -03:00
Oliver 49f18da672 Affiliate hero: two badges — homepage-style speed badge + wizard affiliate link badge 2026-06-23 11:03:24 -03:00
Oliver 26e635d278 Guard pricing-coupon and UTM element access in script.js — fixes crash on pages without pricing section 2026-06-23 10:56:08 -03:00
Oliver b6c72e159a Affiliate CTA: Sign Up button + friends950 coupon for 1 month free 2026-06-23 10:44:49 -03:00
Oliver afce3a3ddd Fix chat on pages without pricing section — guard pricing-period element access in script.js to prevent TDZ crash 2026-06-23 10:42:41 -03:00
Oliver 5206d1c3c9 Affiliate page: simplified How It Works, added chat widget, removed Contact Us button 2026-06-23 10:29:21 -03:00
Oliver 64a46780e9 Affiliate page hero: clearer value prop about integration wizard links 2026-06-23 10:17:57 -03:00
Oliver 1ac2d16cfe Affiliate page: match main site design (same header, footer, CSS, logo, color scheme) 2026-06-23 10:16:19 -03:00
Oliver edf82d5ffb Blog: remove post 'wandern-mit-theo-agent-schreibt' + cleanup sitemap 2026-06-23 10:11:46 -03:00
Oliver 781a8d43f9 Add affiliate program page + sitemap + footer link 2026-06-23 10:08:51 -03:00
Oliver 3b46816a4e blog: speed run - convert Odoo website to static site in 10 mins 2026-06-22 13:26:50 -03:00
Oliver acbddd46a4 sitemap: add 2 new blog posts (Jun 20-21), update homepage lastmod to today 2026-06-22 09:05:24 -03:00
Oliver 6d83073815 blog: Wandern mit Theo — persönlicher Story-Post + area-story CSS/JS 2026-06-21 08:38:21 -03:00
Oliver d70c457d5e blog: 3 Ways to Integrate Odoo and Hermes Agent (corrected — n8n pipeline is method 3) 2026-06-20 11:23:10 -03:00
Oliver 7a0016d08e blog: 3 Ways to Integrate Odoo and Hermes Agent 2026-06-20 11:18:03 -03:00
Oliver 646891bcda Daily brief Day 11: sitemap update (+2 posts), directory/PH prep docs, social post drafts
- Sitemap expanded to 23 URLs: added speed-run-odoo-mcp and speed-run-n8n-skill
- Updated homepage lastmod to 2026-06-19
- docs/directory-submissions.md: BetaList, AlternativeTo, SaaSHub prep + Product Hunt draft
- docs/social-posts-drafts.md: n8n speed run post + launch day placeholder drafts
- Auto-update: operations.json (Day 11, 06:00 UTC) and insights.json
2026-06-19 09:03:09 -03:00
Oliver 1fc63a9ad3 blog: update n8n speed run — /api/v2 wrong endpoint story, 1:36 left, security audit bonus 2026-06-18 07:49:05 -03:00
Oliver f653c0d9a9 blog: add standalone n8n reference prompt with API and skill library 2026-06-18 06:24:09 -03:00
Oliver cbc7d8ed68 blog: update n8n speed-run prompt to hello world — summarize focus.de 2026-06-18 06:18:22 -03:00
Oliver 7f9845d862 blog: Speed Run — Connect Hermes Agent to n8n in 10 Minutes 2026-06-18 06:15:10 -03:00
Oliver 7f027693d5 Auto-update: Day 10 analytics & CRM (Jun 17 data)
- 75 visitors (+12%), 375 pageviews (+4%), 3 agents sold
- 835 CRM contacts, 17 emailed, 0 replied, 3 bounced
- Day counter 9->10, updated insights period to include Jun 17
2026-06-18 03:00:33 -03:00
Oliver 6dc60ef575 fix: campaign item text key mismatch (t vs text) 2026-06-17 05:53:43 -03:00
Oliver 396105cda8 fix: live cold email stats from CRM in dashboard update
- update-launch-dashboard.py now queries the CRM webhook for real pipeline counts
- Goals (Cold Emails Sent, Active Contacts, CRM Contacts) update daily at 03:00
- Campaign cards (Cold Mail, Influencer) rebuilt from operations.json dynamically
- CRM contacts badge in header updates from live data
- All probe functions replaced with actual CRM query
2026-06-17 05:51:37 -03:00
Oliver 87273a901f Daily auto-update: Day 9 stats — 67 visitors, 361 pageviews 2026-06-17 03:01:02 -03:00
Oliver aee6af5fab Convert speed-run-odoo-mcp to guide, add MCP section to odoo-hermes-agent 2026-06-16 14:55:50 -03:00
Oliver 69dc53b02e blog: speed run - connect Hermes to Odoo via MCP 2026-06-16 14:39:16 -03:00
Oliver 886c9efcad sitemap: expand to 21 URLs (all pages + blog posts); blog index: add 2 missing posts 2026-06-16 09:06:05 -03:00
30 changed files with 4980 additions and 459 deletions
+595
View File
@@ -0,0 +1,595 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- ── SEO ───────────────────────────────────────────────── -->
<title>Affiliate Program — derez.ai</title>
<meta
name="description"
content="Partner with derez.ai. Earn commissions on referrals and integration signups. Two ways to earn from one audience."
/>
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/affiliate.html" />
<!-- ── OG ─────────────────────────────────────────────────── -->
<meta property="og:type" content="website" />
<meta property="og:url" content="https://derez.ai/affiliate.html" />
<meta property="og:title" content="Affiliate Program — derez.ai" />
<meta
property="og:description"
content="Partner with derez.ai. Earn commissions on referrals and integration signups. Two ways to earn from one audience."
/>
<meta property="og:image" content="https://derez.ai/og-image.png" />
<meta property="og:site_name" content="derez.ai" />
<!-- ── Twitter ────────────────────────────────────────────── -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Affiliate Program — derez.ai" />
<meta
name="twitter:description"
content="Partner with derez.ai. Earn commissions on referrals and integration signups. Two ways to earn from one audience."
/>
<!-- ── Stylesheet ─────────────────────────────────────────── -->
<link rel="stylesheet" href="assets/css/style.css" />
<!-- ── Page-specific styles ───────────────────────────────── -->
<style>
/* Override body top padding for fixed header */
body {
padding-top: 60px;
}
/* ── Hero ────────────────────────────────────────────── */
.affiliate-hero {
padding: 100px 0 60px;
text-align: center;
position: relative;
overflow: hidden;
}
.affiliate-hero::after {
content: "";
position: absolute;
top: -30%;
left: 50%;
transform: translateX(-50%);
width: 90%;
height: 140%;
background: radial-gradient(
ellipse at center,
rgba(0, 245, 255, 0.05) 0%,
transparent 65%
);
pointer-events: none;
}
.affiliate-hero h1 {
font-size: clamp(2.2rem, 5.5vw, 3.8rem);
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1.2;
margin-bottom: 16px;
max-width: 820px;
margin-left: auto;
margin-right: auto;
}
.hero-badges {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
flex-wrap: wrap;
margin-bottom: 8px;
}
.affiliate-hero h1 .highlight {
background: linear-gradient(135deg, var(--accent), #66e5ff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.affiliate-hero p {
font-size: clamp(1rem, 2vw, 1.2rem);
max-width: 620px;
margin: 0 auto;
line-height: 1.7;
color: var(--text-muted);
}
/* ── Section ─────────────────────────────────────────── */
.affiliate-section {
padding: 80px 0;
}
.affiliate-section h2 {
font-size: clamp(1.6rem, 3.5vw, 2.4rem);
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1.2;
margin-bottom: 16px;
}
.affiliate-section h2 .highlight {
background: linear-gradient(135deg, var(--accent), #66e5ff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.affiliate-section > p {
color: var(--text-muted);
max-width: 700px;
margin-bottom: 16px;
font-size: 14px;
line-height: 1.6;
}
/* ── Card Grid ───────────────────────────────────────── */
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 20px;
margin: 32px 0;
}
.card-grid .card {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius-card);
padding: 28px;
transition: border-color 0.2s;
}
.card-grid .card:hover {
border-color: var(--border-hi);
}
.card-grid .card h3 {
font-size: 1.1rem;
font-weight: 700;
letter-spacing: -0.02em;
margin-bottom: 10px;
}
.card-grid .card p {
color: var(--text-muted);
font-size: 14px;
line-height: 1.6;
margin: 0;
}
/* ── Highlight box ───────────────────────────────────── */
.highlight-box {
background: var(--bg-card);
border: 1px solid var(--border);
border-left: 3px solid var(--success);
border-radius: var(--radius-card);
padding: 24px 28px;
margin: 32px 0;
}
.highlight-box h3 {
font-size: 1rem;
font-weight: 700;
color: var(--success);
margin-bottom: 8px;
}
.highlight-box p {
color: var(--text-muted);
font-size: 14px;
line-height: 1.6;
margin: 0;
}
/* ── Bullet list ─────────────────────────────────────── */
.affiliate-list {
list-style: none;
margin: 0 0 24px;
}
.affiliate-list li {
padding: 8px 0 8px 24px;
position: relative;
color: var(--text-muted);
font-size: 14px;
line-height: 1.6;
}
.affiliate-list li::before {
content: "";
position: absolute;
left: 0;
top: 15px;
width: 8px;
height: 8px;
border-radius: 2px;
background: var(--accent);
opacity: 0.5;
}
.affiliate-list li strong {
color: var(--text);
}
/* ── CTA section ─────────────────────────────────────── */
.cta-section {
text-align: center;
padding: 80px 0;
border-top: 1px solid var(--border);
}
.cta-section h2 {
font-size: clamp(1.6rem, 3.5vw, 2.4rem);
font-weight: 700;
letter-spacing: -0.02em;
margin-bottom: 12px;
line-height: 1.2;
}
.cta-section h2 .highlight {
background: linear-gradient(135deg, var(--accent), #66e5ff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.cta-section p {
color: var(--text-muted);
font-size: 14px;
max-width: 560px;
margin: 0 auto 12px;
line-height: 1.6;
}
.cta-actions {
display: flex;
align-items: center;
justify-content: center;
gap: 14px;
flex-wrap: wrap;
margin-top: 28px;
}
/* ── Responsive ──────────────────────────────────────── */
@media (max-width: 700px) {
.affiliate-hero {
padding: 80px 0 40px;
}
.affiliate-section {
padding: 50px 0;
}
.cta-section {
padding: 50px 0;
}
}
</style>
<!-- ── Plausible Analytics ───────────────────────────────── -->
<script
defer
data-domain="derez.ai"
src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"
></script>
<script>
window.plausible =
window.plausible ||
function () {
(window.plausible.q = window.plausible.q || []).push(arguments);
};
</script>
</head>
<body>
<!-- ═══════════════════════════════════════════════════════════
HEADER
═══════════════════════════════════════════════════════════ -->
<header class="site-header" id="site-header">
<div class="container">
<a href="/" class="site-logo">
<img
src="assets/images/logo.svg"
alt="derez.ai"
width="132"
height="34"
class="site-logo-img"
/>
</a>
<ul class="nav-links" id="nav-links">
<li><a href="https://derez.ai/#pricing">Pricing</a></li>
<li><a href="https://derez.ai/#faq">FAQ</a></li>
<li><a href="https://derez.ai/#blog">Blog</a></li>
<li><a href="https://derez.ai/#topics">Topics</a></li>
</ul>
<div class="header-actions">
<a href="https://app.derez.ai" class="btn-login">
<svg
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect x="3" y="11" width="18" height="11" rx="2" />
<path d="M7 11V7a5 5 0 0 1 10 0v4" />
</svg>
Sign In
</a>
<a
href="https://derez.ai/#pricing"
class="btn btn-primary btn-signup-header"
>Buy Agent</a
>
<button
class="hamburger"
id="hamburger"
aria-label="Toggle menu"
onclick="toggleMobile()"
>
<span></span><span></span><span></span>
</button>
</div>
</div>
</header>
<!-- ═══════════════════════════════════════════════════════════
CHAT WIDGET (floating bottom-right, same as main site)
═══════════════════════════════════════════════════════════ -->
<button
class="chat-fab"
id="chat-fab"
onclick="chatToggle()"
aria-label="Chat with Sales Agent"
>
<svg
width="28"
height="28"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path
d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"
/>
</svg>
</button>
<div class="chat-widget" id="chat-widget" aria-hidden="true">
<div class="chat-header">
<div class="chat-header-avatar"></div>
<div class="chat-header-info">
<div class="chat-header-name">Sales Agent</div>
<div class="chat-header-status">Online</div>
</div>
<button
class="chat-header-close"
onclick="chatClose()"
aria-label="Close chat"
>
</button>
</div>
<div class="chat-msgs" id="chat-msgs"></div>
<div class="chat-input-row">
<input
type="text"
class="chat-input-box"
id="chat-input"
placeholder="Ask your sales agent..."
onkeydown="chatKey(event)"
/>
<button
class="chat-send-btn"
id="chat-send-btn"
onclick="chatSend()"
>
</button>
</div>
</div>
<!-- ═══════════════════════════════════════════════════════════
HERO
═══════════════════════════════════════════════════════════ -->
<section class="affiliate-hero">
<div class="container">
<div class="hero-badges">
<span class="hero-badge">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12" /></svg>
Your affiliate link in our wizard
</span>
<span class="hero-badge">
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12" /></svg>
With the quick restore option, you can have a fresh Agent for your video in no time
</span>
</div>
<h1>
Earn With <span class="highlight">derez.ai</span>
</h1>
<p>
All clients referred by you will see your affiliate links to
3rd parties like Semrush, Stripe, and NordVPN during the
integration wizard. You earn when they sign up &mdash; without
lifting a finger.
</p>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════
WHY DIFFERENT
═══════════════════════════════════════════════════════════ -->
<section class="affiliate-section">
<div class="container">
<h2>Why Our Program is <span class="highlight">Different</span></h2>
<p>
We believe in building a great product at a fair price. That means we
don't have the deep pockets of big enterprise platforms, and we won't
pretend we do. Instead of chasing huge commissions that don't exist,
we focus on what actually works: a product your audience will love,
and the tools to make that happen.
</p>
<div class="card-grid">
<div class="card">
<h3>🎯 Higher Conversion</h3>
<p>
Your viewers who tried setting up an agent and hit the technical
wall? We catch them. derez.ai turns their frustration into a
working agent in 10 minutes &mdash; no SSH, no VPS fiddling.
</p>
</div>
<div class="card">
<h3>💰 Two Ways to Earn</h3>
<p>
You earn when someone signs up through your link. Plus, when they
use the wizard to add integrations, you can place your own
affiliate links there too &mdash; a second chance to earn on the
tools your audience needs.
</p>
</div>
<div class="card">
<h3>🔄 Built Into the Wizard</h3>
<p>
Your link lives inside the derez.ai setup wizard &mdash; not just
a static URL in a video description. Every user who goes through
the flow sees it at the right moment.
</p>
</div>
</div>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════
HOW IT WORKS
═══════════════════════════════════════════════════════════ -->
<section class="affiliate-section" style="border-top: 1px solid var(--border)">
<div class="container">
<h2>How It <span class="highlight">Works</span></h2>
<p>
When you register as a client and you get your first Agent with
derez.ai you already get all your affiliate package: your affiliate
code and link, access to the configuration of your outgoing links.
Easy as all of our services.
</p>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════
SECOND CHANCE
═══════════════════════════════════════════════════════════ -->
<section class="affiliate-section" style="border-top: 1px solid var(--border)">
<div class="container">
<h2>The <span class="highlight">Second Chance</span> to Earn</h2>
<p>
Most affiliate programs give you one shot: someone clicks your link
and either converts or doesn't. We give you a second.
</p>
<p>
When a derez.ai user opens the wizard to integrate a new tool &mdash;
whether it's Semrush for SEO, Shopify for ecommerce, Stripe for
payments, or any of the other integrations we support &mdash; your
affiliate link for that service gets shown. You help the content
creator find the right tool <em>and</em> you earn a commission on
that signup too.
</p>
<p>
Think of it this way: your main link gets them into derez.ai. Your
integration links help them build on top of it. Two revenue streams
from one audience.
</p>
<div class="highlight-box">
<h3>✅ Best Part</h3>
<p>
When you have an account on derez.ai, you already have access to
the affiliate area. No separate dashboard, no additional login.
Your affiliate tools are right there alongside your agent.
</p>
</div>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════
WHY YOUR AUDIENCE WILL THANK YOU
═══════════════════════════════════════════════════════════ -->
<section class="affiliate-section" style="border-top: 1px solid var(--border)">
<div class="container">
<h2>Why Your Audience Will <span class="highlight">Thank You</span></h2>
<p>
Your viewers come to you because they want to work with AI agents &mdash;
not because they want to debug SSH configs at 2 AM. derez.ai removes
every barrier:
</p>
<ul class="affiliate-list">
<li>
<strong>No VPS setup needed.</strong> We create the server, install
everything, and hand them a working agent in minutes.
</li>
<li>
<strong>Automatic backups.</strong> One click and their agent state
is saved. No more losing hours of work.
</li>
<li>
<strong>One-click integrations.</strong> Semrush, Shopify, Stripe,
Odoo, n8n &mdash; if it's in the wizard, it's minutes away from
working.
</li>
<li>
<strong>Full SSH access.</strong> For the power users who want
control. We don't lock anyone in.
</li>
</ul>
<p>
The result? More playtime, more experimentation, and more content
created. Your audience gets more value from their agent, and you
get credit for sending them to a solution that actually works.
</p>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════
CTA
═══════════════════════════════════════════════════════════ -->
<section class="cta-section">
<div class="container">
<h2>Ready to <span class="highlight">Partner Up?</span></h2>
<p>
Join the derez.ai affiliate program. Use code
<strong>friends950</strong> to get your first agent for one month
free and test our product and check the affiliate program.
</p>
<p>
Already have a derez.ai account? Your affiliate dashboard is waiting
in your account settings.
</p>
<div class="cta-actions">
<a href="https://derez.ai/#pricing" class="btn btn-primary btn-lg"
>Sign Up</a
>
</div>
</div>
</section>
<!-- ═══════════════════════════════════════════════════════════
FOOTER
═══════════════════════════════════════════════════════════ -->
<footer class="site-footer">
<div class="container">
<span>&copy; 2026 derez.ai &mdash; AI Agent Hosting</span>
<div class="footer-links">
<a href="https://derez.ai/affiliate.html">Affiliate Program</a>
<a
href="https://www.youtube.com/@derez_ai"
target="_blank"
rel="noopener"
>YouTube</a
>
<a
href="https://www.linkedin.com/company/derez-ai"
target="_blank"
rel="noopener"
>LinkedIn</a
>
<a
href="https://ODOO4projects.com?utm_source=derez"
target="_blank"
rel="noopener"
>Powered by ODOO4projects LLC</a
>
</div>
</div>
</footer>
<!-- ── JavaScript ─────────────────────────────────────────── -->
<script src="assets/js/script.js?v3" defer></script>
</body>
</html>
+6
View File
@@ -1183,6 +1183,12 @@ section {
.blog-card-area.area-speed-run { .blog-card-area.area-speed-run {
background: #f472b6; background: #f472b6;
} }
.blog-card-area.area-story {
background: #00ff88;
}
.blog-card-area.area-review {
background: #00ff88;
}
.blog-card-area.area-default { .blog-card-area.area-default {
background: #a78bfa; background: #a78bfa;
} }
+15 -7
View File
@@ -283,10 +283,11 @@ function updatePeriodDisplay() {
? "/ month ✦ yearly" ? "/ month ✦ yearly"
: "/ month"; : "/ month";
} }
document const pricingPeriod = document.getElementById("pricing-period");
.getElementById("pricing-period") if (pricingPeriod) {
.addEventListener("change", updatePeriodDisplay); pricingPeriod.addEventListener("change", updatePeriodDisplay);
updatePeriodDisplay(); // fire on load so yearly bonuses show by default updatePeriodDisplay(); // fire on load so yearly bonuses show by default
}
const SERVER_WEBHOOK = "https://n8n.derez.ai/webhook/server"; const SERVER_WEBHOOK = "https://n8n.derez.ai/webhook/server";
initServerLocations(); // fetch live server availability initServerLocations(); // fetch live server availability
@@ -295,7 +296,8 @@ initServerLocations(); // fetch live server availability
const params = new URLSearchParams(window.location.search); const params = new URLSearchParams(window.location.search);
["source", "medium", "campaign", "term", "content"].forEach(function (key) { ["source", "medium", "campaign", "term", "content"].forEach(function (key) {
const val = params.get("utm_" + key); const val = params.get("utm_" + key);
if (val) document.getElementById("utm_" + key).value = val; const el = document.getElementById("utm_" + key);
if (val && el) el.value = val;
}); });
})(); })();
@@ -753,9 +755,10 @@ function updateCouponBadges() {
} }
}); });
} }
document const pricingCoupon = document.getElementById("pricing-coupon");
.getElementById("pricing-coupon") if (pricingCoupon) {
.addEventListener("input", updateCouponBadges); pricingCoupon.addEventListener("input", updateCouponBadges);
}
/* ── Blog ──────────────────────────────────────────────── */ /* ── Blog ──────────────────────────────────────────────── */
const BLOG_POSTS_PER_PAGE = 6; const BLOG_POSTS_PER_PAGE = 6;
@@ -788,6 +791,11 @@ function blogAreaClass(area) {
news: "area-news", news: "area-news",
"video-scripts": "area-video-scripts", "video-scripts": "area-video-scripts",
"speed-run": "area-speed-run", "speed-run": "area-speed-run",
story: "area-story",
review: "area-review",
guide: "area-guide",
tutorial: "area-tutorial",
architecture: "area-architecture",
}; };
return map[area] || "area-default"; return map[area] || "area-default";
} }
+122 -4
View File
@@ -1,11 +1,129 @@
{ {
"posts": [ "posts": [
{
"id": "automating-linkedin-content-with-ai-agent",
"date": "2026-07-10",
"area": "howto",
"agent": "hermes",
"headline": "How I Automated My LinkedIn Content Publishing with an AI Agent",
"teaser": "I automated derez.ai\u2019s entire LinkedIn publishing pipeline with Hermes Agent. From researching topics and writing posts to publishing on the company page and cross-posting to groups \u2014 my AI agent does it all. Here\u2019s how it works.",
"link": "blog/posts/automating-linkedin-content-with-ai-agent.html"
},
{
"id": "building-a-company-plugin",
"date": "2026-07-08",
"area": "story",
"agent": "hermes",
"headline": "Building a Company #2 \u2014 I Built a Hermes Plugin That Runs My Business",
"teaser": "I created the derez-company plugin \u2014 CRM, dashboard, sales, and marketing in one repo. First 70 leads imported and visible. What I learned: I suck at developing Hermes plugins manually. So I gave Hermes write access to the repo and let my agent do it.",
"link": "blog/posts/building-a-company-plugin.html"
},
{
"id": "building-a-company-intro",
"date": "2026-07-07",
"area": "story",
"agent": "hermes",
"headline": "Building a Company \u2014 How We Use Hermes at derez.ai (Series Intro)",
"teaser": "We\u2019re building a company on top of our own product \u2014 and packaging everything so you can reuse it. This series shows how derez.ai runs daily operations on Hermes Agent. Next story: we open-source the entire sales agent setup.",
"link": "blog/posts/building-a-company-intro.html"
},
{
"id": "hermes-v0.18-business-review",
"date": "2026-07-02",
"area": "review",
"agent": "hermes",
"headline": "Hermes Agent v0.18.0 \u2014 A Business Review",
"teaser": "I reviewed the latest Hermes Agent release through a business lens. Mixture-of-Agents, verification evidence, and the P0/P1 clean sweep \u2014 what actually matters for business users.",
"link": "blog/posts/hermes-v0.18-business-review.html"
},
{
"id": "hermes-agent-v0.18-closed-949-issues",
"date": "2026-07-02",
"area": "architecture",
"agent": "hermes",
"headline": "How Hermes Agent Closed 949 GitHub Issues in 12 Days",
"teaser": "Hermes Agent v0.18.0 resolved every single P0 and P1 issue in the entire repo. 1,720 commits, 998 merged PRs, 370+ contributors, and a zero-bug policy going forward.",
"link": "blog/posts/hermes-agent-v0.18-closed-949-issues.html"
},
{
"id": "ai-agent-verification-completion-contracts",
"date": "2026-07-02",
"area": "howto",
"agent": "hermes",
"headline": "Make Your AI Agent Verify Its Own Work &mdash; No More Hallucinated &ldquo;Done&rdquo;",
"teaser": "Stop guessing if your AI agent actually finished the job. Hermes Agent v0.18.0 introduces verification evidence and completion contracts &mdash; your agent proves it&#39;s done by running real tests, not by claiming success.",
"link": "blog/posts/ai-agent-verification-completion-contracts.html"
},
{
"id": "odoo-xml-rpc-hermes-agent",
"date": "2026-06-29",
"area": "guide",
"agent": "hermes",
"video": true,
"headline": "Connect Odoo to Hermes Agent via XML-RPC &mdash; Complete Guide",
"teaser": "Step-by-step guide to connecting Odoo to Hermes Agent via XML-RPC. Real credentials included. Pull leads, sales orders, and inventory in under 5 minutes.",
"link": "blog/posts/odoo-xml-rpc-hermes-agent.html"
},
{
"id": "speed-run-odoo-static-website",
"date": "2026-06-22",
"area": "speed-run",
"agent": "hermes",
"headline": "Speed Run: How I Converted My Odoo Website Into a Static Site in Less Than 10 Minutes Using Hermes Agent",
"teaser": "Convert your entire Odoo marketing website to a static site and deploy via git in under 10 minutes. No database, no server maintenance, lightning-fast CDN delivery.",
"link": "blog/posts/speed-run-odoo-static-website.html"
},
{
"id": "three-ways-integrate-odoo-hermes",
"date": "2026-06-20",
"area": "guide",
"agent": "hermes",
"headline": "3 Ways to Integrate Odoo and Hermes Agent",
"teaser": "Direct XML-RPC API, Odoo MCP CLI client, or Hermes-to-n8n-to-Odoo pipeline \u2014 three proven approaches to connect Odoo with Hermes Agent. Trade-offs and when to use each.",
"link": "blog/posts/three-ways-integrate-odoo-hermes.html"
},
{
"id": "speed-run-n8n-skill",
"date": "2026-06-18",
"area": "speed-run",
"agent": "hermes",
"headline": "Speed Run: Connect Hermes Agent to n8n in 10 Minutes",
"teaser": "Integrate the official n8n skill set from n8n-io/skills into your Hermes Agent and start building automation workflows in under 10 minutes.",
"link": "blog/posts/speed-run-n8n-skill.html"
},
{
"id": "speed-run-odoo-mcp",
"date": "2026-06-16",
"area": "guide",
"agent": "hermes",
"headline": "Connect Hermes Agent to Odoo via MCP",
"teaser": "Connect Hermes Agent to Odoo via MCP in 5 steps. Clone the server, configure env vars, register with Hermes, and query your ERP through the Model Context Protocol.",
"link": "blog/posts/speed-run-odoo-mcp.html"
},
{
"id": "hermes-agent-setup-guide",
"date": "2026-06-13",
"area": "tutorial",
"agent": "hermes",
"headline": "Hermes Agent Setup Guide \u2014 From Zero to Running in 10 Minutes",
"teaser": "Step-by-step guide to installing, configuring, and running Hermes Agent. Covers profiles, skills, plugins, cron jobs, and the full toolchain.",
"link": "blog/posts/hermes-agent-setup-guide.html"
},
{
"id": "how-to-deploy-ai-agents-5-minutes",
"date": "2026-06-13",
"area": "tutorial",
"agent": "hermes",
"headline": "How to Deploy AI Agents in 5 Minutes \u2014 A Speed Run",
"teaser": "From zero to a running AI agent in under 5 minutes. No DevOps experience required. Just SSH in, run one command, and your agent is live.",
"link": "blog/posts/how-to-deploy-ai-agents-5-minutes.html"
},
{ {
"id": "why-backing-up-an-agent-is-so-hard", "id": "why-backing-up-an-agent-is-so-hard",
"date": "2026-06-12", "date": "2026-06-12",
"area": "architecture", "area": "architecture",
"agent": "hermes", "agent": "hermes",
"headline": "Why Backing Up an AI Agent Is So Hard And How Full-Disk Snapshots Fix It", "headline": "Why Backing Up an AI Agent Is So Hard \u2014 And How Full-Disk Snapshots Fix It",
"teaser": "69% of an agent&rsquo;s state lives outside its home directory. Real filesystem data on why home-dir backups fail &mdash; and why full-disk snapshots are the only viable solution.", "teaser": "69% of an agent&rsquo;s state lives outside its home directory. Real filesystem data on why home-dir backups fail &mdash; and why full-disk snapshots are the only viable solution.",
"link": "blog/posts/why-backing-up-an-agent-is-so-hard.html" "link": "blog/posts/why-backing-up-an-agent-is-so-hard.html"
}, },
@@ -23,7 +141,7 @@
"date": "2026-06-11", "date": "2026-06-11",
"area": "architecture", "area": "architecture",
"agent": "hermes", "agent": "hermes",
"headline": "Direct Odoo API vs MCP Why Direct Access Wins for AI Agents", "headline": "Direct Odoo API vs MCP \u2014 Why Direct Access Wins for AI Agents",
"teaser": "Direct Odoo XML-RPC access beats MCP middleware for AI agents. Real Odoo user accounts with granular permissions, zero extra latency, no middle layer to maintain.", "teaser": "Direct Odoo XML-RPC access beats MCP middleware for AI agents. Real Odoo user accounts with granular permissions, zero extra latency, no middle layer to maintain.",
"link": "blog/posts/direct-odoo-api-vs-mcp.html" "link": "blog/posts/direct-odoo-api-vs-mcp.html"
}, },
@@ -41,7 +159,7 @@
"date": "2026-06-10", "date": "2026-06-10",
"area": "speed-run", "area": "speed-run",
"agent": "hermes", "agent": "hermes",
"headline": "Speed Run: Competitor Profiling ODOO Community Hosting", "headline": "Speed Run: Competitor Profiling \u2014 ODOO Community Hosting",
"teaser": "From zero to a competitor intelligence agent that researches ODOO Community hosting providers and returns a structured comparison table.", "teaser": "From zero to a competitor intelligence agent that researches ODOO Community hosting providers and returns a structured comparison table.",
"link": "blog/posts/speed-run-competitor-profiling.html" "link": "blog/posts/speed-run-competitor-profiling.html"
}, },
@@ -50,7 +168,7 @@
"date": "2026-06-10", "date": "2026-06-10",
"area": "speed-run", "area": "speed-run",
"agent": "hermes", "agent": "hermes",
"headline": "Speed Run: Research Agent Scrape mobile.de with AI", "headline": "Speed Run: Research Agent \u2014 Scrape mobile.de with AI",
"teaser": "From zero to a research agent that scrapes mobile.de and returns a structured table of Toyota Hilux listings with prices and specs.", "teaser": "From zero to a research agent that scrapes mobile.de and returns a structured table of Toyota Hilux listings with prices and specs.",
"link": "blog/posts/speed-run-research-agent-mobile.html" "link": "blog/posts/speed-run-research-agent-mobile.html"
}, },
@@ -0,0 +1,192 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/blog/posts/ai-agent-verification-completion-contracts.html" />
<title>Make Your AI Agent Verify Its Own Work — No More Hallucinated "Done" — derez.ai Blog</title>
<meta name="description" content="Stop guessing if your AI agent actually finished the job. Hermes Agent v0.18.0 introduces verification evidence and completion contracts — your agent proves it's done by running real tests, not by claiming success." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/ai-agent-verification-completion-contracts.html" />
<meta property="og:title" content="Make Your AI Agent Verify Its Own Work — No More Hallucinated "Done"" />
<meta property="og:description" content="Stop guessing if your AI agent actually finished the job. Hermes Agent v0.18.0 introduces verification evidence and completion contracts — your agent proves it's done by running real tests, not by claiming success." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Make Your AI Agent Verify Its Own Work — No More Hallucinated "Done"" />
<script defer data-domain="derez.ai" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #08080c; color: #e8e8f0; font-family: 'Inter', sans-serif; line-height: 1.7; padding: 40px 20px; }
.container { max-width: 720px; margin: 0 auto; }
a { color: #00f5ff; text-decoration: none; }
a:hover { text-decoration: underline; }
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
.back:hover { color: #00f5ff; }
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.area-tag { display: inline-block; background: #00f5ff; color: #000; font-size: 0.75rem; font-weight: 700; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
.chip-tag { display: inline-block; background: rgba(0,245,255,0.1); color: #00f5ff; border: 1px solid rgba(0,245,255,0.3); font-size: 0.75rem; font-weight: 600; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
h3 { font-size: 1.1rem; font-weight: 600; margin: 24px 0 8px; color: #e0e0f0; }
p { margin-bottom: 16px; color: #c8c8d8; }
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
li { margin-bottom: 6px; }
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
pre { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 10px; padding: 16px 20px; margin: 0 0 20px; overflow-x: auto; font-size: 0.85rem; color: #c8f0ff; }
pre code { background: none; padding: 0; color: inherit; }
strong { color: #f0f0ff; }
.pro-tip { background: rgba(0,245,255,0.06); border-left: 3px solid #00f5ff; border-radius: 8px; padding: 16px 20px; margin: 20px 0; font-size: 0.92rem; color: #d0d0e0; }
.pro-tip strong { color: #00f5ff; }
.cmd-block { background: #0a0a10; border: 1px solid #1a1a24; border-radius: 10px; padding: 14px 18px; margin: 12px 0; font-family: 'Courier New', monospace; font-size: 0.82rem; color: #c8f0ff; overflow-x: auto; }
.cta-box { background: #12121c; border: 1px solid rgba(0,245,255,0.2); border-radius: 14px; padding: 28px 32px; margin: 32px 0; text-align: center; }
.cta-box h3 { font-size: 1.2rem; margin-bottom: 8px; color: #f0f0ff; }
.cta-box p { color: #999; margin-bottom: 16px; }
.btn { display: inline-block; background: transparent; border: 1px solid #00f5ff; color: #00f5ff; padding: 10px 28px; border-radius: 8px; font-weight: 600; font-size: 0.95rem; transition: all .2s; }
.btn:hover { background: rgba(0,245,255,0.1); text-decoration: none; }
.quote-box { background: #0e0e14; border: 1px solid #1a1a24; border-left: 3px solid #a78bfa; border-radius: 10px; padding: 20px 24px; margin: 20px 0; font-style: italic; color: #d0d0e0; }
.feature-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin: 20px 0; }
.feature-card { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 12px; padding: 20px; }
.feature-card h3 { margin: 0 0 8px; font-size: 1rem; color: #00f5ff; }
.feature-card p { margin: 0; font-size: 0.9rem; color: #b0b0c0; }
@media (max-width: 600px) { body { padding: 24px 16px; } h1 { font-size: 1.5rem; } .feature-grid { grid-template-columns: 1fr; } .cta-box { padding: 20px 16px; } }
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; Back to Blog</a>
<h1>Make Your AI Agent Verify Its Own Work — No More Hallucinated "Done"</h1>
<div class="meta">
<span>July 2, 2026</span>
<span class="area-tag">howto</span>
<span class="chip-tag">hermes</span>
<span class="chip-tag">v0.18.0</span>
<span class="chip-tag">verification</span>
</div>
<p>
When I ask my agent to fix a bug or write a module, I don't want it to <em>say</em> "done" — I want it to <strong>prove</strong> it. That's the difference between an agent that's useful for demos and one you can trust with real work.
</p>
<p>
<a href="https://github.com/NousResearch/hermes-agent/releases/tag/v2026.7.1">Hermes Agent v0.18.0</a> ("The Judgment Release", July 1, 2026) introduces a verification system that changes how agents finish tasks. Instead of the model deciding "I think I fixed it," your agent now runs your actual project checks and produces evidence before claiming completion.
</p>
<div class="quote-box">
"The tests pass. Here's proof." — Instead of "I think it works."
</div>
<h2>The Trust Problem with AI Agents</h2>
<p>
Every business I talk to who's tried deploying an AI agent runs into the same wall: <strong>how do I know it actually did what it said?</strong> LLMs are optimised to sound confident, not to be accurate. An agent that writes code, modifies files, or runs queries and then claims "all done" without evidence — that's a liability, not a tool.
</p>
<p>
Before v0.18.0, an agent's standard for "done" was its own internal certainty. If you asked "is the API endpoint working?" it would say yes based on what it remembered writing, not based on actually hitting the endpoint.
</p>
<h2>What Changed: Completion Contracts</h2>
<p>
Every <code>/goal</code> directive can now include a <strong>completion contract</strong> — a statement of what "done" looks like, measured by real evidence. The standing-goal loop judges completion against that evidence instead of stopping when the model feels like it.
</p>
<p>Here's a practical example. Before:</p>
<div class="cmd-block">
/goal Add login validation to the API<br />
<br />
# Agent writes code, says "done"<br />
# No proof. Maybe it works. Maybe it doesn't.
</div>
<p>After — with a completion contract:</p>
<div class="cmd-block">
/goal Add login validation to the API<br />
done when: the test suite passes, the new endpoint<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returns 200 for valid credentials and 401 for invalid ones,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and a curl smoke test confirms both cases
</div>
<p>
The agent writes the code, runs the test suite, executes the curl smoke tests, collects the evidence, and only then reports completion. If any check fails, the agent tries again or reports what broke.
</p>
<h2>How Verification Evidence Works</h2>
<p>Behind the scenes, the agent now records verification evidence for every significant action:</p>
<div class="feature-grid">
<div class="feature-card">
<h3>Test Suite Runs</h3>
<p>The agent executes your project's actual tests (pytest, vitest, whatever you use) and captures the output.</p>
</div>
<div class="feature-card">
<h3>SMOKE CHECKs</h3>
<p>Curl endpoints, check HTTP status codes, validate response bodies. Real network calls, not speculation.</p>
</div>
<div class="feature-card">
<h3>File Verification</h3>
<p>Stat files, check contents, run linters. The agent confirms files exist with the right content.</p>
</div>
<div class="feature-card">
<h3>Custom Hooks</h3>
<p><code>pre_verify</code> hooks let you wire in any custom check. Run your deployment pipeline or integration tests.</p>
</div>
</div>
<h2>Why This Matters for Your Business</h2>
<p>
Here's the blunt truth: <strong>you shouldn't deploy an agent that can't verify its own work.</strong> Not for customer-facing code, not for internal tooling, not for anything that costs you money if it's wrong.
</p>
<p>
The verification system in v0.18.0 turns your agent from a "helpful intern who sounds sure" into a "senior engineer who shows receipts." You still review — but you review evidence, not promises.
</p>
<p>Three business scenarios where this matters immediately:</p>
<ul>
<li><strong>Revenue-critical code changes</strong> — An agent modifying a checkout flow must prove the payment gateway responds correctly before claiming done</li>
<li><strong>Data pipeline automation</strong> — An agent transforming CRM exports must verify every record processed matches the expected count</li>
<li><strong>Deployment readiness</strong> — An agent preparing a release must run the full CI suite and show you the green checkmarks</li>
</ul>
<h2>Getting Started</h2>
<p>If you're on Hermes Agent v0.18.0+, the verification system works out of the box with sensible defaults. No config required to start. The one-time migration tunes the defaults for your project:</p>
<div class="cmd-block">
hermes upgrade # to v0.18.0 or later<br />
# Verification is active by default.<br />
# Start a goal with a "done when" clause and watch the evidence roll in.
</div>
<p>
The <code>pre_verify</code> hook is available if you want custom pipelines. Full docs are in the <a href="https://github.com/NousResearch/hermes-agent/releases/tag/v2026.7.1">release notes</a>.
</p>
<div class="pro-tip">
<strong>Pro tip:</strong> Start with small scope — "done when the endpoint returns 200" — and expand to full test suites as you build trust. The evidence output alone is worth it: you can see exactly what the agent checked, even if you were away from the keyboard.
</div>
<h2>What Else v0.18.0 Ships</h2>
<p>This release is massive. Besides verification, it also ships:</p>
<ul>
<li><strong>MoA as a first-class model</strong> — Pick an ensemble of frontier models like any other model. See every model's reasoning, then watch the answer stream in.</li>
<li><strong><code>/learn</code></strong> — Turn any directory, URL, or workflow into a reusable skill with one command.</li>
<li><strong><code>/journey</code></strong> — A playable timeline of everything your agent has learned. Edit or delete memories and skills right from the view.</li>
<li><strong>Background fan-out</strong> — Run multiple subagents in parallel while you keep working. Results come back consolidated.</li>
</ul>
<p>
But honestly? The verification system is the one I'd start with. Trust is the bottleneck to real agent deployment — and this is what unlocks it.
</p>
<div class="cta-box">
<h3>Try It Yourself — First Month Free</h3>
<p>Deploy a Hermes Agent with the new verification system. Use coupon code <strong>blog950</strong> for your first month free — no risk, full access to v0.18.0.</p>
<a class="btn" href="https://derez.ai/#pricing">Get Your Agent &rarr;</a>
</div>
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #1a1a24;font-size:0.85rem;color:#666;">
<a href="https://derez.ai" style="color:#00f5ff">derez.ai</a> — Deploy your AI agent in 5 minutes. &middot;
<a href="https://derez.ai/blog/posts/hermes-agent-setup-guide.html">Setup Guide</a> &middot;
<a href="https://github.com/NousResearch/hermes-agent/releases/tag/v2026.7.1">v0.18.0 Release Notes</a>
</p>
</div>
</body>
</html>
@@ -0,0 +1,125 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/blog/posts/automating-linkedin-content-with-ai-agent.html" />
<title>How I Automated My LinkedIn Content Publishing with an AI Agent — Derez.ai Blog</title>
<meta name="description" content="I automated derez.ai's entire LinkedIn publishing pipeline with Hermes Agent. From researching topics and writing posts to publishing on the company page and cross-posting to groups — my AI agent does it all. Here's how it works." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/automating-linkedin-content-with-ai-agent.html" />
<meta property="og:title" content="How I Automated My LinkedIn Content Publishing with an AI Agent" />
<meta property="og:description" content="I automated derez.ai's entire LinkedIn publishing pipeline with Hermes Agent. From researching topics and writing posts to publishing on the company page and cross-posting to groups — my AI agent does it all." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="How I Automated My LinkedIn Content Publishing with an AI Agent" />
<script defer data-domain="derez.ai" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #08080c; color: #e8e8f0; font-family: 'Inter', sans-serif; line-height: 1.7; padding: 40px 20px; }
.container { max-width: 720px; margin: 0 auto; }
a { color: #00f5ff; text-decoration: none; }
a:hover { text-decoration: underline; }
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
.back:hover { color: #00f5ff; }
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.area-tag { display: inline-block; background: #00f5ff; color: #000; font-size: 0.75rem; font-weight: 700; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
.chip-tag { display: inline-block; background: rgba(0,245,255,0.1); color: #00f5ff; border: 1px solid rgba(0,245,255,0.3); font-size: 0.75rem; font-weight: 600; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
h3 { font-size: 1.05rem; font-weight: 600; margin: 24px 0 8px; color: #f0f0ff; }
p { margin-bottom: 16px; color: #c8c8d8; }
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
li { margin-bottom: 6px; }
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
strong { color: #f0f0ff; }
.pro-tip { background: rgba(0,245,255,0.06); border-left: 3px solid #00f5ff; border-radius: 8px; padding: 16px 20px; margin: 20px 0; font-size: 0.92rem; color: #d0d0e0; }
.pro-tip strong { color: #00f5ff; }
@media (max-width: 600px) {
body { padding: 24px 16px; }
h1 { font-size: 1.5rem; }
}
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; Back to Blog</a>
<h1>How I Automated My LinkedIn Content Publishing with an AI Agent</h1>
<div class="meta">
<span>July 10, 2026</span>
<span class="area-tag">How-to</span>
<span class="chip-tag">hermes</span>
</div>
<p>I post on LinkedIn for derez.ai multiple times a week. Research a topic, write the post, navigate the admin dashboard, click through popups, paste the link, hit publish, then repeat for a relevant LinkedIn group.</p>
<p>That's about 20 minutes per post — if everything goes smoothly. And I was doing it manually. Which felt ridiculous, given I run a company that builds AI agents.</p>
<p>So I automated it. All of it.</p>
<h2>What the Pipeline Does</h2>
<p>Every time I want to publish a LinkedIn update for derez.ai, the process is now entirely agent-driven:</p>
<ol>
<li><strong>Research</strong> — My agent pulls the latest from our blog index, GitHub releases, and relevant community discussions to propose 3 post topics with business angles.</li>
<li><strong>Create</strong> — A blog post is written and published on derez.ai in HTML format, added to the blog index, and git-committed.</li>
<li><strong>Publish to Company Page</strong> — The agent connects to Brave browser on my workstation through a secure CDP tunnel, logs into the LinkedIn admin dashboard, clicks "Erstellen" → "Beitrag beginnen", writes the post, adds the link with UTM tracking, and hits "Posten".</li>
<li><strong>Cross-post to Group</strong> — The content is adapted for the best-fit LinkedIn group (STARTUP SPECIALISTS NETWORK with 1.2M members, ERP Community, etc.) and posted as a separate, audience-tailored update.</li>
<li><strong>Verify</strong> — The agent confirms the post was published and reports back with a status.</li>
</ol>
<h2>The Technical Setup</h2>
<p>Here's the stack that makes it work:</p>
<ul>
<li><strong>Hermes Agent</strong> — Skilled with the <code>linkedin-company-post</code> and <code>linkedin-group-posting</code> workflows. It knows exactly which buttons to click, what the editor looks like, and how to verify a successful post.</li>
<li><strong>Chrome DevTools Protocol</strong> — Brave runs on my workstation. A persistent remote browser connection exposes its CDP endpoint to my server. The agent sends WebSocket commands (navigate, click, type, evaluate JS) to drive the browser remotely.</li>
<li><strong>UTM-aware linking</strong> — Every link to derez.ai automatically gets <code>?utm_source=derez&utm_campaign=linkedin</code> for company page posts and <code>?utm_source=derez&utm_campaign=groups</code> for group posts. No manual tracking.</li>
<li><strong>German UI, English content</strong> — My LinkedIn is in German. The agent handles both — clicking buttons labeled "Erstellen" and "Posten" while writing the post content in English.</li>
</ul>
<h2>Why This Matters for Business</h2>
<p>The biggest bottleneck in content marketing isn't ideas — it's execution. You have the insight, you know what to say, but the publishing process (open LinkedIn → navigate to the right page → wait for the editor → format → add link → double-check → publish) eats up the small windows of creative momentum you actually have.</p>
<p>Automating the publishing workflow means:</p>
<ul>
<li>→ I post more consistently — no more "I'll do it later" (spoiler: later never comes)</li>
<li>→ Every post gets the right UTM tracking — no more "oops, I forgot the link"</li>
<li>→ Cross-posting to groups happens automatically — I was skipping this entirely because it was too much friction</li>
<li>→ The entire cycle from idea to published post takes minutes, not 20-30 minutes per platform</li>
</ul>
<div class="pro-tip">
<strong>Pro tip:</strong> This pipeline works because Hermes Agent isn't just a chat interface — it's an automation platform with skills, CDP browser control, and cron jobs. The same agent that answers your questions can also drive your browser, post to social media, and manage your blog. That's the power of an agent that can <em>execute</em>, not just talk.
</div>
<h2>What I Learned Building This</h2>
<p>Three things surprised me:</p>
<ol>
<li><p><strong>CDP is incredibly reliable once you handle the edge cases.</strong> The main pitfalls are stale tabs (from hung scripts leaving WebSockets open) and the <code>loadEventFired</code> race condition. Once you have a robust <code>send_cmd</code> that filters by message ID and a fresh-tab workflow, it runs every time.</p></li>
<li><p><strong>LinkedIn's UI is deceptively nested.</strong> The "Beitrag beginnen" menu item isn't a button — it's an <code>&lt;a&gt;</code> tag nested 5 levels deep inside a popup menu. Finding it requires walking the DOM by innerText, then climbing up to the clickable parent. My agent has a universal element walker for this exact reason.</p></li>
<li><p><strong>The editor matters more than the button.</strong> LinkedIn uses a Quill.js editor for group posts and a plain contenteditable for the company page. Each needs different DOM handling. Once you know which editor you're dealing with, the rest is straightforward.</p></li>
</ol>
<h2>Try It Yourself</h2>
<p>If you're running Hermes Agent, you can build this pipeline too. The skills are bundled with the agent — just load <code>linkedin-company-post</code> and <code>linkedin-group-posting</code>, set up a CDP tunnel to your local Brave, and your agent handles the rest.</p>
<p>If you're not running Hermes yet, you can be live in under 10 minutes. SSH access, managed dashboard, full-disk backups — everything included.</p>
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #1a1a24;font-size:0.85rem;color:#666;">
<a href="https://derez.ai" style="color:#00f5ff">Derez.ai</a> — Work with your AI agent in 10 minutes. Full-disk backups, SSH access, managed dashboard included.
</p>
</div>
</body>
</html>
+139
View File
@@ -0,0 +1,139 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/blog/posts/building-a-company-intro.html" />
<title>Building a Company — How We Use Hermes at derez.ai (Series Intro) | derez.ai Blog</title>
<meta name="description" content="We're building a company on top of our own product — and packaging everything we build so you can reuse it. This series follows how derez.ai uses Hermes Agent to run daily operations, and the next story will open-source the entire setup." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/building-a-company-intro.html" />
<meta property="og:title" content="Building a Company — How We Use Hermes at derez.ai (Series Intro)" />
<meta property="og:description" content="We're building a company on top of our own product — and packaging everything we build so you can reuse it. This series follows how derez.ai uses Hermes Agent to run daily operations, and the next story will open-source the entire setup." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Building a Company — How We Use Hermes at derez.ai (Series Intro)" />
<script defer data-domain="derez.ai" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #08080c; color: #e8e8f0; font-family: 'Inter', sans-serif; line-height: 1.7; padding: 40px 20px; }
.container { max-width: 720px; margin: 0 auto; }
a { color: #00f5ff; text-decoration: none; }
a:hover { text-decoration: underline; }
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
.back:hover { color: #00f5ff; }
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.area-tag { display: inline-block; background: #00ff88; color: #000; font-size: 0.75rem; font-weight: 700; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
.chip-tag { display: inline-block; background: rgba(0,245,255,0.1); color: #00f5ff; border: 1px solid rgba(0,245,255,0.3); font-size: 0.75rem; font-weight: 600; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
h3 { font-size: 1.1rem; font-weight: 600; margin: 24px 0 8px; color: #e0e0f0; }
p { margin-bottom: 16px; color: #c8c8d8; }
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
li { margin-bottom: 6px; }
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
strong { color: #f0f0ff; }
.pro-tip { background: rgba(0,245,255,0.06); border-left: 3px solid #00f5ff; border-radius: 8px; padding: 16px 20px; margin: 20px 0; font-size: 0.92rem; color: #d0d0e0; }
.pro-tip strong { color: #00f5ff; }
.series-card { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 16px; padding: 24px; margin: 24px 0; }
.series-card h3 { margin-top: 0; color: #00f5ff; }
.series-card ul { margin-bottom: 0; }
.series-card li { color: #c8c8d8; }
@media (max-width: 600px) { body { padding: 24px 16px; } h1 { font-size: 1.5rem; } }
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; Back to Blog</a>
<h1>Building a Company — How We Use Hermes at derez.ai</h1>
<div class="meta">
<span>July 7, 2026</span>
<span class="area-tag">story</span>
<span class="chip-tag">Hermes</span>
</div>
<p>We sell Hermes Agent instances. So we use Hermes Agent to run our business.</p>
<p>That sounds obvious, but it's not as common as you'd think. A lot of companies build a product they don't actually use themselves. The sales team uses Salesforce. The support team uses Zendesk. The product they sell is something <em>other</em> people use.</p>
<p>At derez.ai, we decided to go the other way. Every Hermes agent we sell is the same product we use internally. Our cold emails are written by a Hermes agent. Our CRM is managed by a Hermes agent. Our inbox is sorted by a Hermes agent. Our blog posts are drafted, reviewed, and published with the help of Hermes agents.</p>
<p>This series exists to inspire <em>you</em> to do the same. Not because we're special — because Hermes makes it possible for any business. We want to show you exactly how a small team can use AI agents as an engine for daily operations. Real workflows, real prompts, real results, real mistakes.</p>
<p>And we're structuring everything we build so you can take it and use it yourself.</p>
<h2>Why a series?</h2>
<p>Because the real story isn't "we use our own product" — that's a one-liner. The real story is the <em>how</em>, and that "how" should be something <strong>you can copy</strong>.</p>
<p>Every workflow we build is designed to be reusable. We're not writing custom scripts for a one-off setup. We're building a structured agent — with its own personality, skills, cron jobs, and configuration — that any business could adapt to their own needs. Same Hermes Agent, different company name, different CRM webhook, different email address.</p>
<ul>
<li>How did we set up a cold email agent that sends 5 personalized emails per day without any human drafting?</li>
<li>How did we connect a Hermes agent to our CRM so it can read, write, and update contact records automatically?</li>
<li>How did we build an inbox sorter that runs every hour and keeps our inbox clean?</li>
<li>How did we structure our sales agent's personality so it sounds like a human, not a bot?</li>
<li>How do we handle the awkward moments — when the agent drafts a bad email, or misclassifies a prospect, or sends something Oliver wouldn't have written?</li>
</ul>
<p>Each post will cover one workflow, start to finish. The setup, the prompts, the mistakes, the fixes. Real numbers, not theory — packaged so you can use the same patterns.</p>
<div class="series-card">
<h3>What to expect</h3>
<p>Posts in this series will be tagged with the <strong>story</strong> badge. Planned topics include:</p>
<ul>
<li><a href="https://derez.ai/blog/posts/building-a-company-plugin.html">Part 2: How I built the derez-company plugin and gave Hermes write access to the repo</a></li>
<li>How our sales agent uses Hermes to send cold emails every day</li>
<li>Building a CRM agent that talks to our n8n backend</li>
<li>The hourly inbox sorter — spam classification, client routing, auto-reply</li>
<li>How we use cron jobs to run business processes 24/7</li>
<li>Dogfooding mistakes: what broke, what we fixed, what we learned</li>
<li>Why we deleted the old cron job that sent 5 emails per hour (too many)</li>
</ul>
</div>
<h2>This is not a tutorial</h2>
<p>There are plenty of Hermes Agent tutorials — speed runs, guides, how-tos. This series is different. It's a <em>case study</em> of a real company using the tool to run actual business operations. Think of it as the behind-the-scenes look at how derez.ai works.</p>
<p>Some of it will be specific to our setup. Some of it will be useful patterns you can adapt. All of it will be honest — including the parts where we got it wrong.</p>
<h2>Where we are today</h2>
<p>As of this post, we have:</p>
<ul>
<li><strong>4 cron jobs</strong> running daily — email sorter, cold email batch, reference feedback check, weekly strategy review</li>
<li><strong>8 skills</strong> installed on our sales agent — cold email, CRM, email sending, pain point tracking, affiliate program, and more</li>
<li><strong>Hundreds of emails</strong> sent through the agent — some replied to, most ignored, a few productive conversations started</li>
<li><strong>One dedicated sales profile</strong> — a separate Hermes agent that only does sales work, isolated from the main agent</li>
<li><strong>One reusable distribution</strong> — the entire sales agent packaged as a template with {{VARS}} instead of hardcoded values, ready for any company to adapt</li>
</ul>
<p>It's not a perfect system. We still have spam filters learning our patterns. We still send emails that get no reply. But it's a <em>working</em> system — and every week it gets better because the agent itself helps us improve it.</p>
<p>That's the part I find most interesting. The sales agent doesn't just send emails. It also reviews the results, suggests improvements, and updates its own approach. The cron job that reviews ICP strategy every Saturday? It's run by the same Hermes agent that sends the cold emails.</p>
<p>The agent is not a tool we use. The agent is a colleague who works on the business with us.</p>
<div class="pro-tip">
<p><strong>Read Part 2 now:</strong> <a href="https://derez.ai/blog/posts/building-a-company-plugin.html">I built a Hermes plugin that runs my business — and then let Hermes finish it</a>. The CRM, dashboard, and the workflow change that made everything click.</p>
</div>
<div class="pro-tip" style="border-left-color: #888; margin-top: 40px;">
<p><strong>Want to build your own sales agent?</strong> We're using the same product we sell. Get your own Hermes Agent instance at derez.ai — full SSH, dashboard, backups, and a prompt builder that makes setup take minutes, not hours. Use code <strong>blog950</strong> for your first month free.</p>
<p style="margin-top: 8px;"><a href="https://derez.ai/#pricing">Get Started &rarr;</a></p>
</div>
<p style="margin-top: 48px; font-size: 0.85rem; color: #666;">
<a href="https://derez.ai">derez.ai</a> &mdash;
<a href="https://derez.ai/#blog">Blog</a> &mdash;
<a href="https://derez.ai/blog/posts/building-a-company-intro.html">Permalink</a>
</p>
</div>
</body>
</html>
+149
View File
@@ -0,0 +1,149 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/blog/posts/building-a-company-plugin.html" />
<title>Building a Company #2 — I Built a Hermes Plugin That Runs My Business (And Then Let Hermes Finish It) | derez.ai Blog</title>
<meta name="description" content="I created a Hermes plugin that integrates all the skills my company needs — CRM, dashboard, sales, marketing — into one repo. First 70 leads imported and visible on the dashboard. What I learned about building Hermes plugins the hard way." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/building-a-company-plugin.html" />
<meta property="og:title" content="Building a Company #2 — I Built a Hermes Plugin That Runs My Business" />
<meta property="og:description" content="I created a Hermes plugin that integrates all the skills my company needs — CRM, dashboard, sales, marketing — into one repo. First 70 leads imported and visible on the dashboard. What I learned about building Hermes plugins the hard way." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Building a Company #2 — I Built a Hermes Plugin That Runs My Business" />
<script defer data-domain="derez.ai" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #08080c; color: #e8e8f0; font-family: 'Inter', sans-serif; line-height: 1.7; padding: 40px 20px; }
.container { max-width: 720px; margin: 0 auto; }
a { color: #00f5ff; text-decoration: none; }
a:hover { text-decoration: underline; }
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
.back:hover { color: #00f5ff; }
.series-link { display: inline-block; font-size: 0.82rem; color: #888; margin-bottom: 8px; }
.series-link:hover { color: #00f5ff; }
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.area-tag { display: inline-block; background: #00ff88; color: #000; font-size: 0.75rem; font-weight: 700; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
.chip-tag { display: inline-block; background: rgba(0,245,255,0.1); color: #00f5ff; border: 1px solid rgba(0,245,255,0.3); font-size: 0.75rem; font-weight: 600; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
h3 { font-size: 1.1rem; font-weight: 600; margin: 24px 0 8px; color: #e0e0f0; }
p { margin-bottom: 16px; color: #c8c8d8; }
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
li { margin-bottom: 6px; }
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
pre { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 12px; padding: 16px 20px; overflow-x: auto; margin: 16px 0; font-size: 0.85rem; color: #c8c8d8; }
strong { color: #f0f0ff; }
.pro-tip { background: rgba(0,245,255,0.06); border-left: 3px solid #00f5ff; border-radius: 8px; padding: 16px 20px; margin: 20px 0; font-size: 0.92rem; color: #d0d0e0; }
.pro-tip strong { color: #00f5ff; }
.lesson-box { background: rgba(255,107,107,0.06); border-left: 3px solid #ff6b6b; border-radius: 8px; padding: 16px 20px; margin: 20px 0; font-size: 0.92rem; color: #d0d0e0; }
.lesson-box strong { color: #ff6b6b; }
@media (max-width: 600px) { body { padding: 24px 16px; } h1 { font-size: 1.5rem; } }
</style>
</head>
<body>
<div class="container">
<a class="series-link" href="https://derez.ai/#blog">&larr; Back to Blog</a><br>
<span style="font-size:0.8rem;color:#666;">Building a Company &mdash; Part 2</span>
<h1>I Built a Hermes Plugin That Runs My Business<br>(And Then Let Hermes Finish It)</h1>
<div class="meta">
<span>July 8, 2026</span>
<span class="area-tag">story</span>
<span class="chip-tag">Hermes</span>
</div>
<p>
<a href="https://derez.ai/blog/posts/building-a-company-intro.html">&larr; Read Part 1 first</a>
</p>
<p>In the first post I said we were structuring everything as a reusable distribution. This post is about the step I took to actually build it.</p>
<p>I created a Hermes plugin called <strong>derez-company</strong>. It bundles all the skills my business needs into a single installable plugin. CRM, dashboard, sales, marketing — all in one repo, one install command, and one dashboard tab that shows me everything at a glance.</p>
<p>The repo is here: <a href="https://github.com/AquaMCU/derez-company">github.com/AquaMCU/derez-company</a></p>
<h2>What's in the plugin</h2>
<p>The plugin has two live skills so far:</p>
<ul>
<li><strong>derez-crm</strong> — A complete CRM data skill that uses plain Markdown files as the database. Every lead is a Markdown file with YAML frontmatter. No database, no API, no lock-in. Humans can read and edit it. Agents can read and edit it. Funnel stages, statuses, sources — all configured via Markdown config files.</li>
<li><strong>dashboard</strong> — A Hermes dashboard plugin that auto-discovers reports from the company data directory and renders them as HTML in the Hermes dashboard. It renders weekly status cards with SVG line charts showing lead counts, conversion rates, and trends.</li>
</ul>
<p>Sales and marketing skills are in progress. The architecture is designed so each skill is independent and composable — you can install just the CRM without the dashboard, or just the dashboard without the CRM.</p>
<h2>First 70 leads on the dashboard</h2>
<p>I imported 70 leads into the Markdown-based CRM. Each one is a single <code>.md</code> file with structured YAML frontmatter. The dashboard picks them up automatically and renders a weekly status view with trend lines.</p>
<p>No SQL. No API calls. No database migrations. Just files in a folder that both I and my agent can read and write.</p>
<div class="lesson-box">
<p><strong>Lesson learned the hard way:</strong> I suck at developing a Hermes plugin with z.dev and then importing it into my Hermes. The local dev loop was painful — write code, exit Hermes, install the plugin, restart, test, repeat. Every iteration took minutes. Mistakes meant digging through logs. It felt like I was fighting the tool instead of building with it.</p>
</div>
<h2>The workflow change that fixed everything</h2>
<p>Halfway through building the dashboard plugin, I stopped doing it myself and changed the workflow entirely.</p>
<p>I gave my Hermes agent <strong>write access to the GitHub repo</strong> and let Hermes build the plugin.</p>
<p>Here's what that looks like in practice:</p>
<ol>
<li>I tell my Hermes agent what I want — "add a weekly status card to the dashboard that shows lead conversion trends"</li>
<li>The agent writes the code, commits to the repo, and pushes</li>
<li>The plugin auto-updates on the next Hermes restart</li>
</ol>
<p>This reversed the entire development flow. Instead of me learning the plugin API, debugging install paths, and fighting the dev loop — I described what I wanted in plain English and let the agent who <em>already knows</em> the Hermes plugin API write the code.</p>
<p>The agent doesn't get blocked by z.dev documentation gaps. It doesn't need to restart and check. It writes, commits, pushes — and I just pull the result.</p>
<div class="pro-tip">
<p><strong>The insight:</strong> The fastest way to build a Hermes plugin is to not build it yourself. Give your agent the repo keys and describe what you want. It knows the API better than you do.</p>
</div>
<h2>What this means for the open-source plan</h2>
<p>In the first post I teased that we'd open-source our sales agent profile. The plugin approach changes the plan slightly — instead of distributing a profile with {{VARS}} placeholders, the skills live in a plugin repo that any Hermes user can install with one command:</p>
<pre>hermes plugins install https://github.com/AquaMCU/derez-company.git</pre>
<p>The plugin is installable on any Hermes instance, including hosted agents on derez.ai. Once it's installed, the skills (CRM, dashboard, sales, marketing) are available to the agent. The data lives in Markdown files under <code>company/</code> in the agent's home directory — portable, human-readable, git-friendly.</p>
<h2>What's next</h2>
<p>The CRM skill is live with 70 leads. The dashboard shows weekly progress with trend charts. The next step is wiring it all together:</p>
<ul>
<li><strong>The sales agent</strong> — use the CRM data with the email skill to start making first contacts. Load leads from the CRM, qualify them, send personalized cold emails, track responses back in the CRM.</li>
<li><strong>LinkedIn posting</strong> — the agent drafts and posts to LinkedIn (both personal feed and groups) based on CRM activity and content it generates.</li>
<li><strong>Marketing skill</strong> — campaign tracking, content pipeline, channel analytics. All Markdown-based, all composable.</li>
</ul>
<p>The CRM with 70 leads is the foundation. Everything else builds on top of it.</p>
<div class="pro-tip" style="border-left-color: #888; margin-top: 40px;">
<p><strong>Try it yourself.</strong> Install the <a href="https://github.com/AquaMCU/derez-company">derez-company plugin</a> on your Hermes agent, or get a hosted agent at derez.ai and search for it in the skill library. The CRM and dashboard work out of the box.</p>
<p style="margin-top: 8px;">
<a href="https://github.com/AquaMCU/derez-company">View on GitHub &rarr;</a> &nbsp;|&nbsp;
<a href="https://derez.ai/#pricing">Get a Hermes agent &rarr;</a>
</p>
</div>
<p style="margin-top: 48px; font-size: 0.85rem; color: #666;">
<a href="https://derez.ai">derez.ai</a> &mdash;
<a href="https://derez.ai/#blog">Blog</a> &mdash;
<a href="https://derez.ai/blog/posts/building-a-company-plugin.html">Permalink</a>
</p>
</div>
</body>
</html>
@@ -0,0 +1,224 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/blog/posts/hermes-agent-v0.18-closed-949-issues.html" />
<title>How Hermes Agent Closed 949 GitHub Issues in 12 Days — derez.ai Blog</title>
<meta name="description" content="Hermes Agent v0.18.0 resolved every single P0 and P1 issue in the entire repo. 1,720 commits, 998 merged PRs, 370+ contributors, and a zero-bug policy going forward." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/hermes-agent-v0.18-closed-949-issues.html" />
<meta property="og:title" content="How Hermes Agent Closed 949 GitHub Issues in 12 Days" />
<meta property="og:description" content="Hermes Agent v0.18.0 resolved every single P0 and P1 issue in the entire repo. 1,720 commits, 998 merged PRs, 370+ contributors, and a zero-bug policy going forward." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="How Hermes Agent Closed 949 GitHub Issues in 12 Days" />
<script defer data-domain="derez.ai" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #08080c; color: #e8e8f0; font-family: 'Inter', sans-serif; line-height: 1.7; padding: 40px 20px; }
.container { max-width: 720px; margin: 0 auto; }
a { color: #00f5ff; text-decoration: none; }
a:hover { text-decoration: underline; }
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
.back:hover { color: #00f5ff; }
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.area-tag { display: inline-block; background: #a78bfa; color: #000; font-size: 0.75rem; font-weight: 700; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
.chip-tag { display: inline-block; background: rgba(0,245,255,0.1); color: #00f5ff; border: 1px solid rgba(0,245,255,0.3); font-size: 0.75rem; font-weight: 600; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
h3 { font-size: 1.1rem; font-weight: 600; margin: 24px 0 8px; color: #e0e0f0; }
p { margin-bottom: 16px; color: #c8c8d8; }
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
li { margin-bottom: 6px; }
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
strong { color: #f0f0ff; }
.hero-stat { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 16px; padding: 28px 32px; margin: 24px 0; display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; text-align: center; }
.hero-stat .num { font-size: 2rem; font-weight: 700; color: #00f5ff; }
.hero-stat .label { font-size: 0.8rem; color: #888; text-transform: uppercase; letter-spacing: 1px; }
.clean-table { width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 0.88rem; }
.clean-table th, .clean-table td { text-align: left; padding: 10px 14px; border-bottom: 1px solid #1a1a24; }
.clean-table th { color: #00f5ff; font-weight: 600; }
.clean-table td { color: #c8c8d8; }
.clean-table tr:last-child td { border-bottom: none; }
.pro-tip { background: rgba(0,245,255,0.06); border-left: 3px solid #00f5ff; border-radius: 8px; padding: 16px 20px; margin: 20px 0; font-size: 0.92rem; color: #d0d0e0; }
.pro-tip strong { color: #00f5ff; }
.meta-callout { background: rgba(0,255,136,0.06); border-left: 3px solid #00ff88; border-radius: 8px; padding: 20px 24px; margin: 20px 0; font-size: 1rem; color: #d0d0e0; font-style: italic; }
@media (max-width: 600px) { body { padding: 24px 16px; } h1 { font-size: 1.5rem; } .hero-stat { grid-template-columns: 1fr; gap: 12px; } }
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; Back to Blog</a>
<h1>How Hermes Agent Closed 949 GitHub Issues in 12 Days</h1>
<div class="meta">
<span>July 2, 2026</span>
<span class="area-tag">architecture</span>
<span class="chip-tag">hermes</span>
<span class="chip-tag">v0.18.0</span>
</div>
<div class="hero-stat">
<div><div class="num">949</div><div class="label">Issues Closed</div></div>
<div><div class="num">1,720</div><div class="label">Commits</div></div>
<div><div class="num">0</div><div class="label">Open P0/P1</div></div>
</div>
<p>
On July 1, 2026, the Nous Research team released <strong>Hermes Agent v0.18.0</strong> — "The Judgment Release."
Sandwiched between the numbers is a story that matters for every single person running an AI agent today:
the team resolved every P0 and P1 issue in the entire repository. <strong>Zero open criticals. Zero open high-priority. Not one.</strong>
</p>
<p>
That is not hyperbole. It is the commit history.
</p>
<h2>The Numbers, Because They Matter</h2>
<table class="clean-table">
<tr><th>Metric</th><th>Value</th></tr>
<tr><td>Release Date</td><td>July 1, 2026</td></tr>
<tr><td>Since v0.17.0</td><td>~12 days</td></tr>
<tr><td>Commits</td><td>~1,720</td></tr>
<tr><td>Merged PRs</td><td>998</td></tr>
<tr><td>Issues Closed</td><td>949</td></tr>
<tr><td>Files Changed</td><td>2,215</td></tr>
<tr><td>Insertions</td><td>~251,000</td></tr>
<tr><td>Deletions</td><td>~41,000</td></tr>
<tr><td>Community Contributors</td><td>370+</td></tr>
<tr><td>GitHub Stars</td><td>208,000</td></tr>
<tr><td>Forks</td><td>37,800</td></tr>
</table>
<p>
Let that sink in. <strong>Nearly 1,000 issues closed in 12 days.</strong> That is roughly 79 issues per day,
or 3.3 per hour around the clock. The team did not take a break. They burned through the priority backlog
day and night.
</p>
<h2>The P0/P1 Sweep — Why It Matters</h2>
<p>
Most open-source projects have a long tail of open issues. P0 (critical) bugs that never got fixed.
P1 (high-priority) features that nobody had time to polish. They accumulate. They become the
"we'll get to it" pile that everyone knows will never shrink.
</p>
<p>
Hermes Agent's team decided that was unacceptable. In twelve days they resolved:
</p>
<table class="clean-table">
<tr><th>Priority</th><th>Issues Closed</th><th>PRs Merged</th></tr>
<tr><td>P0 (critical)</td><td>3</td><td>8</td></tr>
<tr><td>P1 (high)</td><td>493</td><td>188</td></tr>
<tr><td><strong>Total</strong></td><td><strong>496</strong></td><td><strong>196</strong></td></tr>
</table>
<p>
The final cluster to fall was the interrupt-protected-compression sibling-fork bug —
issue <strong>#56391</strong> and its fix <strong>#56416</strong>, closed on an all-nighter
right before the release cut.
</p>
<p>
Special recognition goes to <strong>@kshitijk4poor</strong>, who burned through the priority
backlog alongside the core team — the cron reliability wave, the compression-fork fix,
the credential-exfil hardening, and a huge share of the P1 closures are his.
</p>
<div class="meta-callout">
"We're keeping P0/P1 at 0 from here forward." — The Hermes Agent Team
</div>
<h2>But This Is Not Just a Cleanup Story</h2>
<p>
v0.18.0 is called "The Judgment Release" for a reason. Beyond the clean sweep, it introduces
capabilities that change what an AI agent can do:
</p>
<h3>🧠 Mixture-of-Agents (MoA)</h3>
<p>
Named ensembles of models that you can pick like any other model. Every reference model's
reasoning is shown to you, and the aggregator's answer streams live. Instead of asking one
model, your agent orchestrates a panel of them.
</p>
<h3>✅ Verification Evidence & Completion Contracts</h3>
<p>
The <code>/goal</code> command now has completion contracts. Instead of the agent claiming
"done" when it feels like stopping, it must produce evidence of completion. The standing-goal
loop judges completion against actual proof — tests pass, files exist, APIs respond.
The agent proves its work.
</p>
<h3>📈 Self-Improvement You Can See</h3>
<p>
<code>/learn</code> and <code>/journey</code> turned self-improvement into something you can
observe and steer. The agent doesn't just get better — it shows you how.
</p>
<h3>🏗️ Deployable at Scale</h3>
<p>
The gateway now supports scale-to-zero, drain coordination, and proper production deployment.
The desktop client has first-class coding projects and a playable memory graph. Subagents
can fan out in the background — parallel work without blocking the main conversation.
</p>
<h2>What This Means for Your Agents</h2>
<p>
Every one of the closed issues represents something that <strong>could</strong> have affected
your agent. A cron reliability bug. A credential leak path. A compression race condition.
They are all gone now.
</p>
<p>
If you are running Hermes Agent, update to v0.18.0. If you are evaluating agent frameworks,
this kind of velocity — 1,720 commits in 12 days, zero open P0s, 370+ contributors —
tells you everything you need to know about the project's health.
</p>
<div class="pro-tip">
<strong>Running Hermes Agent on derez.ai?</strong>
Your instance was updated to v0.18.0 automatically. The new features —
MoA, verification evidence, /learn, /journey — are available right now.
Just tell your agent what you want.
</div>
<h2>The Meta Note</h2>
<p>
This blog post was written by a Hermes Agent. The same update that resolved 949 issues
also powers the agent that researched the release notes, structured this article,
generated the HTML, and deployed it to this site — all while the founder was doing
something else entirely.
</p>
<p>
An agent that just got its biggest quality-of-life update ever. An agent that now proves
its work before saying "done." An agent that can orchestrate multiple models to get you
a better answer.
</p>
<p>
And it wrote this post to tell you about it.
</p>
<p>
Use coupon code <strong>BLOG1750</strong> at checkout to get your first month free.
</p>
<p>
<a href="https://derez.ai/#pricing">Deploy your own Hermes Agent — updated to v0.18.0.</a>
</p>
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #1a1a2e;font-size:0.85rem;color:#666;">
<a href="https://derez.ai" style="color:#00f5ff">derez.ai</a> — Deploy your AI agent in 5 minutes. &middot;
<a href="https://github.com/NousResearch/hermes-agent/releases/tag/v2026.7.1">v0.18.0 Release Notes</a>
</p>
</div>
</body>
</html>
@@ -0,0 +1,200 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/blog/posts/hermes-v0.18-business-review.html" />
<title>Hermes Agent v0.18.0 — A Business Review — derez.ai Blog</title>
<meta name="description" content="I reviewed the latest Hermes Agent release through a business lens. Mixture-of-Agents, verification evidence, and the P0/P1 clean sweep — what actually matters for business users." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/hermes-v0.18-business-review.html" />
<meta property="og:title" content="Hermes Agent v0.18.0 — A Business Review" />
<meta property="og:description" content="I reviewed the latest Hermes Agent release through a business lens. Mixture-of-Agents, verification evidence, and the P0/P1 clean sweep — what actually matters for business users." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Hermes Agent v0.18.0 — A Business Review" />
<script defer data-domain="derez.ai" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #08080c; color: #e8e8f0; font-family: 'Inter', sans-serif; line-height: 1.7; padding: 40px 20px; }
.container { max-width: 720px; margin: 0 auto; }
a { color: #00f5ff; text-decoration: none; }
a:hover { text-decoration: underline; }
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
.back:hover { color: #00f5ff; }
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.area-tag { display: inline-block; background: #00ff88; color: #000; font-size: 0.75rem; font-weight: 700; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
.chip-tag { display: inline-block; background: rgba(0,245,255,0.1); color: #00f5ff; border: 1px solid rgba(0,245,255,0.3); font-size: 0.75rem; font-weight: 600; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
h3 { font-size: 1.1rem; font-weight: 600; margin: 24px 0 8px; color: #e0e0f0; }
p { margin-bottom: 16px; color: #c8c8d8; }
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
li { margin-bottom: 6px; }
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
strong { color: #f0f0ff; }
.review-box { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 14px; padding: 24px 28px; margin: 20px 0; }
.review-box h3 { margin-top: 0; }
.score { display: inline-block; background: #00ff88; color: #000; font-weight: 700; padding: 2px 10px; border-radius: 6px; font-size: 0.85rem; }
.pro-tip { background: rgba(0,245,255,0.06); border-left: 3px solid #00f5ff; border-radius: 8px; padding: 16px 20px; margin: 20px 0; font-size: 0.92rem; color: #d0e0e0; }
.pro-tip strong { color: #00f5ff; }
.verdict { background: rgba(0,255,136,0.06); border-left: 3px solid #00ff88; border-radius: 8px; padding: 20px 24px; margin: 20px 0; }
.verdict strong { color: #00ff88; }
@media (max-width: 600px) { body { padding: 24px 16px; } h1 { font-size: 1.5rem; } }
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; Back to Blog</a>
<h1>Hermes Agent v0.18.0 — A Business Review</h1>
<div class="meta">
<span>July 2, 2026</span>
<span class="area-tag">review</span>
<span class="chip-tag">hermes</span>
<span class="chip-tag">v0.18.0</span>
</div>
<p>
I run a small business that hosts AI agents for other businesses. Every month or so, the Hermes Agent team drops
a new release. Most of the time I skim the release notes, nod at the technical improvements, and move on.
</p>
<p>
But v0.18.0 — "The Judgment Release" — made me stop and read the whole thing. Not because of the code changes,
but because of what they signal about the project's maturity.
</p>
<h2>The Headline Numbers (Business Edition)</h2>
<div class="review-box">
<p><strong>Release:</strong> Hermes Agent v0.18.0 — July 1, 2026</p>
<p><strong>Development pace:</strong> 1,720 commits in 12 days</p>
<p><strong>Team velocity:</strong> 998 pull requests merged</p>
<p><strong>Community:</strong> 370+ contributors, 208,000 GitHub stars</p>
<p><strong>Bug sweep:</strong> All 496 P0 and P1 issues closed to zero</p>
<p><strong>My score:</strong> <span class="score">9/10</span></p>
</div>
<p>
From a business perspective, the most important number isn't the commits or the stars.
It's that <strong>zero</strong>. Zero open critical bugs. Zero open high-priority issues.
</p>
<p>
If you're running a business on top of an open-source project, that number is everything.
It means the team is not accumulating technical debt. It means they can focus on features
instead of fires. It means when something breaks, it gets fixed — not buried in a backlog.
</p>
<h2>What Actually Changes for a Business User?</h2>
<p>
Let me translate the release notes from developer-speak to business-speak.
</p>
<h3>Verification Evidence — Your Agent Proves Its Work</h3>
<p>
Before this release, your agent would say "done" when it felt like stopping. Now it has to
produce evidence. If you ask it to generate a report, it must show you the report exists.
If you ask it to update records, it must confirm the changes.
</p>
<p>
<strong>Business impact:</strong> <em>Trust.</em> You no longer have to babysit your agent to make sure it
actually finished the job. The agent proves its work before moving on. For a business owner,
that's the difference between a tool you occasionally check and a tool you can rely on.
</p>
<h3>Mixture-of-Agents — Better Answers, Not Just Faster Ones</h3>
<p>
Your agent can now orchestrate multiple AI models at once. Instead of asking one model and
hoping it's right, the agent asks several, compares their reasoning, and gives you the best answer.
</p>
<p>
<strong>Business impact:</strong> <em>Quality.</em> If your agent is researching competitors, drafting
proposals, or analyzing data, it's now getting a second opinion — and a third — before it
comes back to you. This matters most for anything where accuracy has a cost.
</p>
<h3>Self-Improvement You Can See</h3>
<p>
The new <code>/learn</code> and <code>/journey</code> commands let your agent track how it's improving
over time. It can show you what it learned from each task and how it adjusted its approach.
</p>
<p>
<strong>Business impact:</strong> <em>Accountability.</em> You can see whether your agent is getting better
at the work you give it. If it's not, you can steer it. That's a feature every manager wishes
their human employees had.
</p>
<h3>Gateway Scale-to-Zero</h3>
<p>
The gateway — the part that connects your agent to external tools and services — now scales
down to zero when idle. No wasted resources. No server costs when nothing is happening.
</p>
<p>
<strong>Business impact:</strong> <em>Cost control.</em> On derez.ai, this means your agent costs less
when you're not using it. Infrastructure that charges only when it's working is the right
model for a business tool.
</p>
<h2>The Clean Sweep — Why It Matters for Your Business</h2>
<p>
The Hermes team closed 949 issues in 12 days. Every P0 and P1 is now at zero. Here's why
that matters if you're running agents for your business:
</p>
<ul>
<li><strong>Reliability.</strong> The cron scheduling bugs, the credential leak paths, the compression
race conditions — all fixed. Your agent won't drop a scheduled task or leak sensitive data.</li>
<li><strong>Velocity.</strong> A team that can close 1,720 commits in 12 days is a team that ships fast.
When you need a feature, it won't take a year to land.</li>
<li><strong>Staying power.</strong> 208,000 stars and 37,800 forks means this project has momentum.
It's not going away. Building your workflow on Hermes is a safe bet.</li>
</ul>
<div class="verdict">
<strong>Verdict:</strong> v0.18.0 is the release where Hermes Agent stopped being a promising
experiment and became a serious business tool. The verification evidence alone changes
how much you can trust your agent to work unsupervised. If you're running agents for
your business and haven't updated yet, this is the one to upgrade to.
</div>
<h2>Where It Falls Short</h2>
<p>
No release is perfect. My honest gripes:
</p>
<ul>
<li><strong>Documentation is still playing catch-up.</strong> Mixture-of-Agents is powerful, but
figuring out how to configure ensembles takes more reading than it should. The docs team
has ground to cover.</li>
<li><strong>The "Judgment" branding is developer-focused.</strong> "Completion contracts" and
"verification evidence" are terms developers love. Business users would call them
"confirmation" and "proof of work." The marketing could be clearer.</li>
<li><strong>Still CLI-heavy.</strong> If you're not comfortable with a terminal, some of the
configuration is intimidating. The desktop app helps, but the power features are still
command-line only.</li>
</ul>
<div class="pro-tip">
<strong>On derez.ai, this is all handled for you.</strong> Your agent instance was updated
to v0.18.0 automatically. Verification evidence, MoA, /learn, /journey — all available.
No CLI needed. Just tell your agent what you want.
</div>
<p>
If you're curious what Hermes Agent can do for your business, the first month is on me
with code <strong>BLOG1750</strong>.
</p>
<p>
<a href="https://derez.ai/#pricing">Try Hermes Agent v0.18.0 — updated and ready.</a>
</p>
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #1a1a2e;font-size:0.85rem;color:#666;">
<a href="https://derez.ai" style="color:#00f5ff">derez.ai</a> — Deploy your AI agent in 5 minutes. &middot;
<a href="https://github.com/NousResearch/hermes-agent/releases/tag/v2026.7.1">v0.18.0 on GitHub</a>
</p>
</div>
</body>
</html>
+241
View File
@@ -0,0 +1,241 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/blog/posts/odoo-xml-rpc-hermes-agent.html" />
<title>Connect Odoo to Hermes Agent via XML-RPC — Complete Guide — derez.ai Blog</title>
<meta name="description" content="Step-by-step guide to connecting Odoo to Hermes Agent via XML-RPC. Real credentials included. Pull leads, sales orders, and inventory in under 5 minutes." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/odoo-xml-rpc-hermes-agent.html" />
<meta property="og:title" content="Connect Odoo to Hermes Agent via XML-RPC — Complete Guide" />
<meta property="og:description" content="Step-by-step guide to connecting Odoo to Hermes Agent via XML-RPC. Real credentials included. Pull leads, sales orders, and inventory in under 5 minutes." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Connect Odoo to Hermes Agent via XML-RPC — Complete Guide" />
<script defer data-domain="derez.ai" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #08080c; color: #e8e8f0; font-family: 'Inter', sans-serif; line-height: 1.7; padding: 40px 20px; }
.container { max-width: 720px; margin: 0 auto; }
a { color: #00f5ff; text-decoration: none; }
a:hover { text-decoration: underline; }
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
.back:hover { color: #00f5ff; }
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.area-tag { display: inline-block; background: #a78bfa; color: #000; font-size: 0.75rem; font-weight: 700; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
.chip-tag { display: inline-block; background: rgba(0,245,255,0.1); color: #00f5ff; border: 1px solid rgba(0,245,255,0.3); font-size: 0.75rem; font-weight: 600; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
.chip-video { background: rgba(255,0,0,0.12); color: #ff4444; border: 1px solid rgba(255,0,0,0.35); }
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
h3 { font-size: 1.1rem; font-weight: 600; margin: 24px 0 8px; color: #e0e0f0; }
p { margin-bottom: 16px; color: #c8c8d8; }
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
li { margin-bottom: 6px; }
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
pre { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 10px; padding: 16px 20px; margin: 0 0 20px; overflow-x: auto; font-size: 0.85rem; color: #c8f0ff; }
pre code { background: none; padding: 0; color: inherit; }
strong { color: #f0f0ff; }
.pro-tip { background: rgba(0,245,255,0.06); border-left: 3px solid #00f5ff; border-radius: 8px; padding: 16px 20px; margin: 20px 0; font-size: 0.92rem; color: #d0d0e0; }
.pro-tip strong { color: #00f5ff; }
.step-card { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 14px; padding: 20px 24px; margin: 16px 0; }
.step-card h3 { margin-top: 0; font-size: 1.05rem; }
.step-num { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; background: #00f5ff; color: #000; font-weight: 700; font-size: 0.85rem; margin-right: 8px; }
.prereq-group { margin-bottom: 16px; }
.prereq-group > .group-label { font-weight: 600; color: #00f5ff; margin-bottom: 4px; }
.cmd-block { background: #0a0a10; border: 1px solid #1a1a24; border-radius: 10px; padding: 14px 18px; margin: 12px 0; font-family: 'Courier New', monospace; font-size: 0.82rem; color: #c8f0ff; overflow-x: auto; }
.result-block { background: #0a0a10; border: 1px solid #1a1a24; border-left: 3px solid #00ff88; border-radius: 10px; padding: 14px 18px; margin: 12px 0; font-family: 'Courier New', monospace; font-size: 0.82rem; color: #88d8b0; overflow-x: auto; }
.cta-box { background: #12121c; border: 1px solid rgba(0,245,255,0.2); border-radius: 14px; padding: 28px 32px; margin: 32px 0; text-align: center; }
.cta-box h3 { font-size: 1.2rem; margin-bottom: 8px; color: #f0f0ff; }
.cta-box p { color: #999; margin-bottom: 16px; }
.btn { display: inline-block; background: transparent; border: 1px solid #00f5ff; color: #00f5ff; padding: 10px 28px; border-radius: 8px; font-weight: 600; font-size: 0.95rem; transition: all .2s; }
.btn:hover { background: rgba(0,245,255,0.1); text-decoration: none; }
@media (max-width: 600px) { body { padding: 24px 16px; } h1 { font-size: 1.5rem; } .cta-box { padding: 20px 16px; } }
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; Back to Blog</a>
<h1>Connect Odoo to Hermes Agent via XML-RPC</h1>
<div class="meta">
<span>June 29, 2026</span>
<span class="area-tag">guide</span>
<span class="chip-tag">odoo</span>
<span class="chip-tag">xml-rpc</span>
<span class="chip-tag">hermes</span>
<span class="chip-tag chip-video">video</span>
</div>
<p>
This is the first and simplest method from the <a href="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html?utm_source=derez&utm_campaign=email">three ways to integrate Odoo with Hermes Agent</a> — direct XML-RPC API calls.
Your agent connects straight to your Odoo instance, no middleware, no MCP server, no n8n pipeline.
Just your agent and your ERP talking directly. That's the core of <strong><a href="https://derez.ai/odoo-hermes">Odoo Hermes</a></strong>.
</p>
<p>
I made a <strong>YouTube short</strong> walking through this exact setup:
</p>
<div style="position:relative;width:100%;max-width:360px;margin:24px auto;aspect-ratio:9/16;border-radius:14px;overflow:hidden;background:#000">
<iframe src="https://www.youtube-nocookie.com/embed/GVZMnq_NOxI" title="Odoo + AI Agent in 3 Minutes (XML-RPC)" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>
<p style="text-align:center;font-size:0.85rem;color:#888;margin-top:-12px">
<a href="https://www.youtube.com/shorts/GVZMnq_NOxI?utm_source=derez&utm_campaign=email" target="_blank" rel="noopener" style="color:#ff4444">Watch on YouTube →</a>
</p>
<h2>What you'll build</h2>
<p>By the end of this guide, your Hermes Agent will:</p>
<ul>
<li>Connect to your Odoo instance using an API key</li>
<li>Search and read records from any Odoo model</li>
<li>Pull live leads, sales orders, and inventory data</li>
<li>Answer business questions in natural language</li>
</ul>
<h2>Prerequisites</h2>
<p>You need a running Odoo instance and a Hermes Agent. Here are the exact credentials from my demo instance — use these to follow along, then swap in your own.</p>
<div class="prereq-group">
<div class="group-label">Integration &mdash; ODOO Community</div>
<p style="font-size:0.9rem;color:#999;margin-bottom:8px">These are live credentials from a demo Odoo Community instance on ODOO4projects. They work right now.</p>
<ul>
<li><strong>URL</strong> &mdash; <code>https://006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d.odoo4projects.com/</code></li>
<li><strong>Username</strong> &mdash; <code>changeme@odoo4projects.com</code></li>
<li><strong>Password</strong> &mdash; <code>changeme</code></li>
<li><strong>Database</strong> &mdash; <code>006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d</code></li>
<li><strong>API Key</strong> &mdash; <code>602e6ea0a0adda65b344a282495da3b05525f63f</code></li>
</ul>
</div>
<div class="prereq-group">
<div class="group-label">Runtime &mdash; Hermes Agent</div>
<ul>
<li>Hermes Agent installed and running (see the <a href="https://derez.ai/blog/posts/hermes-agent-setup-guide.html?utm_source=derez&utm_campaign=email">setup guide</a> if you're starting from zero)</li>
<li>Access to your Hermes <code>config.yaml</code></li>
</ul>
</div>
<h2>Step 1 — Generate an Odoo API Key</h2>
<div class="step-card">
<h3><span class="step-num">1</span> Go to Settings &rarr; Users &rarr; Technical</h3>
<p>In your Odoo instance, navigate to <strong>Settings → Users → select your user → Technical</strong>. Scroll to the <strong>Security</strong> section and click <strong>Generate API Key</strong>.</p>
<p>Name it something descriptive like <code>hermes-agent</code>. Copy the key immediately — Odoo only shows it once.</p>
</div>
<p>If you're using the demo instance above, the API key is already generated and ready.</p>
<h2>Step 2 — Add the Connection to Hermes</h2>
<p>Edit your Hermes <code>config.yaml</code> and add the Odoo connection block:</p>
<div class="cmd-block">
# ~/.hermes/config.yaml (or your profile config)<br />
<br />
odoo:<br />
&nbsp;&nbsp;url: "https://006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d.odoo4projects.com"<br />
&nbsp;&nbsp;db: "006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d"<br />
&nbsp;&nbsp;user: "changeme@odoo4projects.com"<br />
&nbsp;&nbsp;api_key: "602e6ea0a0adda65b344a282495da3b05525f63f"<br />
&nbsp;&nbsp;readonly: true
</div>
<p>Set <code>readonly: true</code> if the agent only needs to query data (recommended for first setup). Remove it or set <code>false</code> if you want the agent to create or modify records.</p>
<h2>Step 3 — Give Your Agent the Connection Prompt</h2>
<p>Now paste this prompt into your Hermes Agent session. It tells the agent exactly how to reach your Odoo database using the credentials from Step 2:</p>
<div class="cmd-block">
Connect to the ODOO 19 database with the credentials $ODOO_URL $ODOO_USER $ODOO_APIKEY<br>
open {url}/doc and read the available models and methods. Use the JSON api to connect to ODOO and do not login to the web UI.<br>
create a skill to access ODOO
</div>
<p>The agent reads the environment variables (or the config block you just set up) and establishes the XML-RPC connection. Once it confirms, you're ready to query data.</p>
<h2>Step 4 — Start Hermes and Verify</h2>
<p>Start or restart your Hermes Agent:</p>
<div class="cmd-block">
hermes start
</div>
<p>Now ask your agent something simple to verify the connection works:</p>
<div class="cmd-block">
> Give me a list of customers with their email addresses.
</div>
<p>If everything is configured correctly, the agent returns live data from your Odoo instance. Here's what it looks like with the demo instance:</p>
<div class="result-block">
Here are the customers I found in your Odoo instance:<br />
<br />
1. Azure Interior — azure.interior@example.com<br />
2. Deco Addict — deco.addict@example.com<br />
3. Gem Furniture — gem.furniture@example.com<br />
4. Lumber Inc — lumber.inc@example.com<br />
5. The Kitchen Studio — the.kitchen.studio@example.com<br />
6. Best Design — best.design@example.com<br />
7. Grace Interior Design Studio — grace.interior.design@example.com<br />
8. Capital Park — capital.park@example.com<br />
<br />
Total: 8 customers in CRM
</div>
<p>That's it. Three minutes, one config block, and your agent talks to Odoo.</p>
<h2>What you can do now</h2>
<p>Once the connection is live, try these queries:</p>
<ul>
<li><strong>"Show me all leads in the CRM"</strong> — pulls from <code>crm.lead</code></li>
<li><strong>"List my recent sales orders"</strong> — queries <code>sale.order</code></li>
<li><strong>"What products are low on stock?"</strong> — checks <code>stock.quant</code> for low quantities</li>
<li><strong>"What's the total value of open quotes?"</strong> — sums <code>sale.order</code> with <code>state = 'draft'</code></li>
<li><strong>"Create a new lead for ACME Corp"</strong> — if <code>readonly</code> is off, the agent creates records too</li>
</ul>
<h2>Security first</h2>
<ul>
<li><strong>Create a dedicated Odoo user</strong> for the agent — never use your admin account</li>
<li><strong>Use read-only access</strong> unless the agent needs to create or modify records</li>
<li><strong>Restrict model access</strong> to only the models the agent needs (CRM, Sales, Inventory — not Settings)</li>
<li><strong>Rotate the API key</strong> periodically, and revoke immediately if it leaks</li>
<li><strong>The demo credentials above</strong> are from a sandbox instance — use your own for production</li>
</ul>
<h2>Why XML-RPC?</h2>
<p>Direct XML-RPC is the fastest path: one hop, one config block, one less thing to break. No MCP server to maintain, no n8n workflow to debug. For simple queries, demos, and prototyping, it's the right choice.</p>
<p>If you need deterministic business processes with audit trails (invoice creation, order processing), the <a href="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html?utm_source=derez&utm_campaign=email">n8n pipeline approach</a> is better. But for 80% of what you'll ask your agent to do — "who are my customers?", "what's my pipeline?", "show me pending orders" — XML-RPC is all you need.</p>
<div class="pro-tip">
<strong>Pro tip:</strong> The YouTube short at the top of this page shows the whole setup in under a minute. Bookmark it for when you need a quick refresher — the steps don't change between instances, only the credentials.
</div>
<div class="cta-box">
<h3>Try It Yourself — First Month Free</h3>
<p>Deploy a Hermes Agent with Odoo XML-RPC integration. Use coupon code <strong>blog950</strong> for your first month free.</p>
<a class="btn" href="https://derez.ai/#pricing">Get Your Agent &rarr;</a>
</div>
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #1a1a24;font-size:0.85rem;color:#666;">
<a href="https://derez.ai" style="color:#00f5ff">derez.ai</a> — Deploy your AI agent in 5 minutes. &middot;
<a href="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html?utm_source=derez&utm_campaign=email">3 Ways to Integrate Odoo + Hermes</a> &middot;
<a href="https://derez.ai/blog/posts/speed-run-odoo-community-agent.html?utm_source=derez&utm_campaign=email">Full Speed Run</a> &middot;
<a href="https://derez.ai/blog/posts/speed-run-odoo-mcp.html?utm_source=derez&utm_campaign=email">MCP Approach</a>
</p>
</div>
</body>
</html>
+239
View File
@@ -0,0 +1,239 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/blog/posts/speed-run-n8n-skill.html" />
<title>Speed Run: Connect Hermes Agent to n8n in 10 Minutes — derez.ai Blog</title>
<meta name="description" content="Integrate the official n8n skill set into your Hermes Agent and start building automation workflows in under 10 minutes. Free trial included." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/speed-run-n8n-skill.html" />
<meta property="og:title" content="Speed Run: Connect Hermes Agent to n8n in 10 Minutes" />
<meta property="og:description" content="Integrate the official n8n skill set into your Hermes Agent and start building automation workflows in under 10 minutes. Free trial included." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Speed Run: Connect Hermes Agent to n8n in 10 Minutes" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: #08080c;
color: #e8e8f0;
font-family: 'Inter', sans-serif;
line-height: 1.7;
padding: 40px 20px;
}
.container { max-width: 720px; margin: 0 auto; }
a { color: #00f5ff; text-decoration: none; }
a:hover { text-decoration: underline; }
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
.back:hover { color: #00f5ff; }
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; }
.area-tag {
display: inline-block;
background: #f472b6;
color: #000;
font-size: 0.75rem;
font-weight: 700;
padding: 2px 10px;
border-radius: 20px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.chip-tag {
display: inline-block;
background: rgba(0,245,255,0.1);
color: #00f5ff;
border: 1px solid rgba(0,245,255,0.3);
font-size: 0.75rem;
font-weight: 600;
padding: 2px 10px;
border-radius: 20px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
p { margin-bottom: 16px; color: #c8c8d8; }
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
li { margin-bottom: 6px; }
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
strong { color: #f0f0ff; }
.prereq-group { margin-bottom: 16px; }
.prereq-group > .group-label { font-weight: 600; color: #f472b6; margin-bottom: 4px; }
.prompt-box {
background: #0e0e14;
border: 1px solid #1a1a24;
border-radius: 12px;
padding: 20px 24px;
margin: 16px 0 24px;
font-style: italic;
color: #c8c8d8;
}
.prompt-box code { background: #001a18; }
.pro-tip {
background: rgba(0,245,255,0.06);
border-left: 3px solid #00f5ff;
border-radius: 8px;
padding: 16px 20px;
margin: 20px 0;
font-size: 0.92rem;
color: #d0d0e0;
}
.pro-tip strong { color: #00f5ff; }
@media (max-width: 600px) {
body { padding: 24px 16px; }
h1 { font-size: 1.5rem; }
}
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; Back to Blog</a>
<h1>Speed Run: Connect Hermes Agent to n8n in 10 Minutes</h1>
<div class="meta">
<span>June 18, 2026</span>
<span class="area-tag">speed-run</span>
<span class="chip-tag">hermes</span>
</div>
<h2>Introduction</h2>
<p>
n8n is the most widely used open-source workflow automation platform, and its official skill repository on GitHub (<a href="https://github.com/n8n-io/skills?utm_source=derez" target="_blank" rel="noopener">n8n-io/skills</a>) contains 13 expert skills covering the full workflow lifecycle — expressions, sub-workflows, error handling, AI agents, Data Tables, loops, and more. This speed run shows you how to load those skills into your Hermes Agent, connect it to your n8n instance, and have your agent build, validate, and manage automation workflows.
</p>
<p>
No coding, no plugins to build — just clone the repo, point your agent at the skills, and paste your n8n instance credentials via the dashboard. To follow along, grab a <strong>free trial</strong> at <a href="https://derez.ai/#pricing?utm_source=derez">derez.ai</a> and make sure you have an n8n instance running (any plan, Cloud or self-hosted).
</p>
<p>
We could have done it <strong>90 seconds faster</strong> — we initially hit the wrong API endpoint (<code>/api/v2</code>) and had to regroup. Once we switched to <code>/api/v1</code>, everything clicked. Still had <strong>1:36 left on the clock</strong> when the agent was live and pulling workflows.
</p>
<h2>Prerequisites</h2>
<p>Before you start, make sure you have your n8n instance credentials ready:</p>
<div class="prereq-group">
<div class="group-label">Integration &mdash; n8n Workflow Automation</div>
<ul>
<li><strong>n8n URL</strong> &mdash; <code>https://n8n.your-instance.com/</code></li>
<li><strong>n8n API Key</strong> &mdash; <code>n8n_api_2a3b4c5d6e7f8g9h0i1j</code></li>
</ul>
</div>
<h2>Prompt</h2>
<p>You configure two prompts on the agent's dashboard at <strong>app.derez.ai</strong>. The first connects your agent to the n8n API and loads the official skill set. The second asks for real work.</p>
<div class="prompt-box">
<strong>Prompt 1 &mdash; n8n Integration</strong><br /><br />
Generated by the Derez Dashboard. The integration settings pass your n8n URL and API key to the agent so it can authenticate against the n8n REST API and MCP server.
</div>
<div class="prompt-box" style="margin-top:-8px">
<strong>Prompt 2 &mdash; Hello World — Summarize focus.de</strong><br /><br />
Create a hello world n8n workflow with two nodes: an RSS Feed Read node that reads <code>https://www.focus.de/</code> and an AI Agent node that summarizes the first article. Use the official n8n skills from n8n-io/skills — load n8n-workflow-lifecycle, n8n-agents, and n8n-node-configuration before you start building. Validate the workflow with validate_workflow, then check the connections object with get_workflow_details. Show me the final node configuration.
</div>
<p>The first prompt authenticates using the credentials you entered in the dashboard integration settings. The second prompt then has your agent build a simple hello world n8n workflow — read the latest headlines from focus.de and summarize them with an AI Agent node. Two nodes, one workflow, real output.</p>
<h2>Wrap Up</h2>
<p>
In under 10 minutes you connected your Hermes Agent to n8n and loaded the 13 official n8n skills — giving your agent expert-level knowledge of workflow lifecycle, sub-workflow reuse, expression syntax, error handling, credential security, and AI agent patterns. Your agent now builds n8n workflows that follow the same standards the n8n team ships internally.
</p>
<p>
The same approach works for any of the 13 skills: have your agent load <code>n8n-subworkflows</code> when you need reusable patterns, <code>n8n-agents</code> when building LangChain agents in n8n, or <code>n8n-debugging</code> when a workflow breaks. The skill repository is the authoritative reference — your agent reads the actual rules every time.
</p>
<div style="text-align:center;margin:24px 0">
<img src="speed-run-n8n-countdown.jpg" alt="derez.ai dashboard showing speed-run timer at 1 minute 36 seconds remaining — n8n agent connected with time to spare" style="max-width:100%;border-radius:14px;border:1px solid #1a1a24;box-shadow:0 4px 24px rgba(0,0,0,0.4)" />
<p style="font-size:0.82rem;color:#888;margin-top:8px">We hit the wrong endpoint first (<code>/api/v2</code>), regrouped, and still had 1:36 left. Could have been 90 seconds faster.</p>
</div>
<div class="pro-tip">
<strong>Pro tip:</strong> The n8n-io/skills repo is designed for any coding agent — not just n8n's own Claude Code plugin. Clone it to your Hermes Agent's filesystem and use <code>hermes skill import</code> from the skills directory to register them as local skills. Your agent then loads them automatically when you mention n8n, without needing to reference the GitHub URL each time.
</div>
<p>
As a bonus, try this prompt after your agent is connected: <em>"Load the n8n-credentials-and-security skill and audit the credentials on my n8n instance — list every credential by name and type, check for any that are expired or use weak auth methods, and suggest improvements."</em> Your agent reads the official security skill and runs a full audit of your n8n credentials in seconds.
</p>
<p>
Use coupon code <strong>BLOG950</strong> at checkout to get your first month free — zero risk, full access.
</p>
<p>
<a href="https://derez.ai/#pricing">Deploy your n8n-connected agent now.</a>
</p>
<h2 id="n8n-reference">Standalone n8n Prompt for Hermes Agent</h2>
<p>Copy this entire prompt into any Hermes agent (derez.ai or self-hosted) to give it direct n8n integration skills — REST API access, skill library awareness, and workflow execution management. Replace the API key with your own n8n instance key.</p>
<div class="prompt-box" style="font-style:normal">
<strong style="color:#00f5ff">## Integrations</strong><br /><br />
<strong>### N8N Skills</strong><br />
Create a skill that integrates with n8n's skill library and REST API.<br /><br />
<strong>## Configuration</strong><br />
<code>N8N_URL=https://n8n.derez.ai/</code><br />
<code>N8N_API_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhOTY0NDQ1Ni1hZGUxLTRlZjUtYmE0NC03MjRiZjhhY2JmNGUiLCJpc3MiOiJuOG4iLCJhdWQiOiJwdWJsaWMtYXBpIiwianRpIjoiZTExMTY3YjUtMGU1Yy00MTNhLWI0YzAtNGU5MGYyODFiMzk2IiwiaWF0IjoxNzgxNzcyNzE3LCJleHAiOjE3ODIzNTY0MDB9.g-SG9u7g9sD0lhD6fr6PZKcBs38Eq3p14Yf8yiPXO-U</code><br /><br />
<strong>## Skill library</strong><br />
You have access to n8n's official skill library at <code>https://github.com/n8n-io/skills</code><br /><br />
At the start of every task, clone or pull the latest version of this repo to discover available skills.<br /><br />
<code>if [ ! -d /tmp/n8n-skills ]; then<br />
&nbsp;&nbsp;git clone --depth 1 https://github.com/n8n-io/skills /tmp/n8n-skills<br />
else<br />
&nbsp;&nbsp;cd /tmp/n8n-skills && git pull --ff-only<br />
fi</code><br /><br />
Read the README.md and INDEX.md files in that repo to understand what skills are available. Each skill has a dedicated directory with a README.md describing its purpose and usage. Choose the most relevant skill(s) for the user's request.<br /><br />
<strong>## API basics</strong><br />
All calls go to <code>{N8N_URL}/rest/...</code> with the header:<br />
<code>X-N8N-API-KEY: {N8N_API_KEY}</code><br /><br />
The n8n REST API documentation is available at <code>{N8N_URL}/api/v1/openapi.json</code> — fetch it if you need to discover available endpoints.<br /><br />
<strong>### Common operations</strong><br /><br />
<strong>List workflows:</strong><br />
<code>curl -s -H 'X-N8N-API-KEY: {key}' '{N8N_URL}/rest/workflows'</code><br /><br />
<strong>Get a workflow by ID:</strong><br />
<code>curl -s -H 'X-N8N-API-KEY: {key}' '{N8N_URL}/rest/workflows/&lt;id&gt;'</code><br /><br />
<strong>List executions:</strong><br />
<code>curl -s -H 'X-N8N-API-KEY: {key}' '{N8N_URL}/rest/executions'</code><br /><br />
<strong>List credentials:</strong><br />
<code>curl -s -H 'X-N8N-API-KEY: {key}' '{N8N_URL}/rest/credentials'</code><br /><br />
<strong>List tags:</strong><br />
<code>curl -s -H 'X-N8N-API-KEY: {key}' '{N8N_URL}/rest/tags'</code><br /><br />
<strong>## Workflow skill execution pattern</strong><br /><br />
When a skill from the library maps to a workflow to run:<br /><br />
1. Read the skill's README.md to understand the inputs, outputs, and workflow structure.<br />
2. Check if a matching workflow already exists in n8n (use the list endpoint).<br />
3. If it does, create an execution:<br /><br />
<code>curl -s -X POST '{N8N_URL}/rest/workflows/&lt;id&gt;/run' \<br />
&nbsp;&nbsp;-H 'X-N8N-API-KEY: {key}' \<br />
&nbsp;&nbsp;-H 'Content-Type: application/json' \<br />
&nbsp;&nbsp;-d '{"data": &lt;input_data&gt;}'</code><br /><br />
4. If it doesn't, create a new workflow using the skill's specification:<br /><br />
<code>curl -s -X POST '{N8N_URL}/rest/workflows' \<br />
&nbsp;&nbsp;-H 'X-N8N-API-KEY: {key}' \<br />
&nbsp;&nbsp;-H 'Content-Type: application/json' \<br />
&nbsp;&nbsp;-d '{"name": "&lt;skill-name&gt;", "nodes": [...], "connections": {...}}'</code><br /><br />
5. Poll execution status:<br /><br />
<code>curl -s -H 'X-N8N-API-KEY: {key}' '{N8N_URL}/rest/executions/&lt;id&gt;' | jq '.data'</code><br /><br />
<strong>## Solved cases log</strong><br />
After every successful n8n task, append to ~/n8n_solutions.md:<br /><br />
<code>## &lt;short title&gt; (&lt;date&gt;)<br />
Goal: &lt;one sentence&gt;<br />
Skill used: &lt;skill path in the library&gt;<br />
Key commands: &lt;the curl | jq pipelines that worked&gt;<br />
Gotchas: &lt;anything non-obvious&gt;</code><br /><br />
Read ~/n8n_solutions.md at task start — if a matching case exists, reuse it directly.
</div>
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #1a1a24;font-size:0.85rem;color:#666;">
<a href="https://derez.ai" style="color:#00f5ff">derez.ai</a> — Deploy your AI agent in 10 Minutes.
</p>
</div>
</body>
</html>
@@ -112,7 +112,7 @@
<h2>Introduction</h2> <h2>Introduction</h2>
<p> <p>
This speed run walks you through creating an AI agent that connects directly to your Odoo Community database. No coding, no servers to provision — just pick your plan, paste your credentials, and your agent starts working with your data immediately. This speed run walks you through creating an AI agent that connects directly to your Odoo Community database. No coding, no servers to provision — just pick your plan, paste your credentials, and your agent starts working with your data immediately. This is <strong><a href="https://derez.ai/odoo-hermes">Odoo Hermes</a></strong> in action.
</p> </p>
<p> <p>
To follow along, grab a <strong>free trial</strong> of Odoo Community at <a href="https://ODOO4projects.com?utm_source=derez&amp;utm_campaign=youtube" target="_blank" rel="noopener">ODOO4projects.com</a> and generate an API key from your profile settings. It takes about 10 Minutes and gives you everything you need for this walkthrough. To follow along, grab a <strong>free trial</strong> of Odoo Community at <a href="https://ODOO4projects.com?utm_source=derez&amp;utm_campaign=youtube" target="_blank" rel="noopener">ODOO4projects.com</a> and generate an API key from your profile settings. It takes about 10 Minutes and gives you everything you need for this walkthrough.
+347
View File
@@ -0,0 +1,347 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/blog/posts/speed-run-odoo-mcp.html" />
<title>Connect Hermes Agent to Odoo via MCP — derez.ai Blog</title>
<meta name="description" content="Connect Hermes Agent to Odoo via MCP in 5 steps. Clone the server, set up env vars, register with Hermes, and start querying your ERP through the Model Context Protocol." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/speed-run-odoo-mcp.html" />
<meta property="og:title" content="Connect Hermes Agent to Odoo via MCP" />
<meta property="og:description" content="Connect Hermes Agent to Odoo via MCP in 5 steps. Clone, set up env vars, register with Hermes, and query your ERP through the Model Context Protocol." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Connect Hermes Agent to Odoo via MCP" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: #08080c;
color: #e8e8f0;
font-family: 'Inter', sans-serif;
line-height: 1.7;
padding: 40px 20px;
}
.container { max-width: 720px; margin: 0 auto; }
a { color: #00f5ff; text-decoration: none; }
a:hover { text-decoration: underline; }
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
.back:hover { color: #00f5ff; }
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.area-tag {
display: inline-block;
background: #f472b6;
color: #000;
font-size: 0.75rem;
font-weight: 700;
padding: 2px 10px;
border-radius: 20px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.chip-tag {
display: inline-block;
background: rgba(0,245,255,0.1);
color: #00f5ff;
border: 1px solid rgba(0,245,255,0.3);
font-size: 0.75rem;
font-weight: 600;
padding: 2px 10px;
border-radius: 20px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
h3 { font-size: 1.1rem; font-weight: 600; margin: 24px 0 8px; color: #e0e0f0; }
p { margin-bottom: 16px; color: #c8c8d8; }
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
li { margin-bottom: 6px; }
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
pre {
background: #0e0e14;
border: 1px solid #1a1a24;
border-radius: 10px;
padding: 16px 20px;
margin: 0 0 20px;
overflow-x: auto;
font-size: 0.85rem;
color: #c8f0ff;
}
pre code { background: none; padding: 0; color: inherit; }
strong { color: #f0f0ff; }
.pro-tip {
background: rgba(0,245,255,0.06);
border-left: 3px solid #00f5ff;
border-radius: 8px;
padding: 16px 20px;
margin: 20px 0;
font-size: 0.92rem;
color: #d0d0e0;
}
.pro-tip strong { color: #00f5ff; }
.step-num {
display: inline-block;
background: #00f5ff;
color: #000;
font-weight: 700;
font-size: 0.75rem;
width: 24px;
height: 24px;
line-height: 24px;
text-align: center;
border-radius: 50%;
margin-right: 8px;
}
.cta-box {
background: #12121c;
border: 1px solid rgba(0,245,255,0.2);
border-radius: 14px;
padding: 28px 32px;
margin: 32px 0;
text-align: center;
}
.cta-box h3 { font-size: 1.2rem; margin-bottom: 8px; color: #f0f0ff; }
.cta-box p { color: #999; margin-bottom: 16px; }
.btn {
display: inline-block;
background: transparent;
border: 1px solid #00f5ff;
color: #00f5ff;
padding: 10px 28px;
border-radius: 8px;
font-weight: 600;
font-size: 0.95rem;
transition: all .2s;
}
.btn:hover { background: rgba(0,245,255,0.1); text-decoration: none; }
@media (max-width: 600px) {
body { padding: 24px 16px; }
h1 { font-size: 1.5rem; }
.cta-box { padding: 20px 16px; }
}
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; Back to Blog</a>
<h1>Connect Hermes Agent to Odoo via MCP</h1>
<div class="meta">
<span>June 16, 2026</span>
<span class="area-tag">guide</span>
<span class="chip-tag">hermes</span>
<span class="chip-tag">mcp</span>
</div>
<p>
Earlier this week we showed you a <a href="https://derez.ai/blog/posts/speed-run-odoo-community-agent.html">speed run connecting Hermes Agent to Odoo via direct XML-RPC</a>
a dedicated Odoo user, direct API calls, no middle layer. That's the approach we recommend for production.
</p>
<p>
But there's another way: <strong>the Model Context Protocol (MCP)</strong>. Instead of the agent talking directly
to Odoo's API, an MCP server sits in between as a translation layer. The agent talks MCP, the MCP server talks
XML-RPC to Odoo. It's an open standard from Anthropic, adopted by Claude Desktop, VS Code, Cursor, and now
<strong>Hermes Agent</strong>.
</p>
<p>
This guide walks through the MCP approach in 5 steps. Clone, configure, connect, done.
</p>
<div class="pro-tip">
<p><strong>Pro Tip:</strong> We covered the <a href="https://derez.ai/blog/posts/direct-odoo-api-vs-mcp.html">direct API vs MCP trade-offs in detail here</a>.
TL;DR: Direct access wins on security, latency, and flexibility for single-ERP setups. MCP shines when your agent
needs to talk to many different tools through one protocol. Pick the right tool for your use case.</p>
</div>
<h2>How It Works</h2>
<p>
The architecture is simple:
</p>
<pre><code>Hermes Agent → MCP Protocol → mcp-server-odoo → Odoo XML-RPC</code></pre>
<p>
The MCP server (<code>mcp-server-odoo</code> by <a href="https://github.com/ivnvxd/mcp-server-odoo?utm_source=derez">ivnvxd</a>, 300+ GitHub stars)
exposes a set of tools — <code>search_records</code>, <code>create_record</code>, <code>read_record</code>,
<code>count_records</code>, <code>inspect_model</code> — that your agent can call. It runs locally on your
Hermes instance and communicates over HTTP (streamable-http transport).
</p>
<h2>Prerequisites</h2>
<p>You'll need an Odoo instance with XML-RPC enabled and an API key. Grab a free trial from
<a href="https://ODOO4projects.com?utm_source=derez" target="_blank" rel="noopener">ODOO4projects.com</a> if you don't have one.</p>
<div class="prereq-group" style="margin-bottom:24px">
<p style="font-weight:600;color:#f472b6;margin-bottom:4px">Integration — ODOO Community</p>
<ul>
<li><strong>URL</strong><code>https://006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d.odoo4projects.com/</code></li>
<li><strong>API Key</strong><code>602e6ea0a0adda65b344a282495da3b05525f63f</code></li>
<li><strong>Database</strong><code>006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d</code></li>
<li><strong>Hermes Agent</strong> — Any Hermes instance (derez.ai or self-hosted) running on Linux</li>
</ul>
</div>
<h2>Step 1 — Clone the MCP Server</h2>
<p>
The MCP server runs on your <strong>local machine</strong> — the same server where Hermes Agent is installed.
It does <em>not</em> run on the Odoo server itself.
</p>
<pre><code>git clone https://github.com/ivnvxd/mcp-server-odoo.git
cd mcp-server-odoo</code></pre>
<p>
The repo has 315 stars, 144 forks, and 198 commits as of this writing. It's actively maintained and supports
Odoo 16.0+ with both standard (MCP module) and YOLO (direct XML-RPC) modes.
</p>
<h2>Step 2 — Install Dependencies</h2>
<p>
The recommended way to run it is via <code>uvx</code> (from the <code>uv</code> Python package manager).
If you don't have uv installed:
</p>
<pre><code>curl -LsSf https://astral.sh/uv/install.sh | sh</code></pre>
<p>
That's it — <code>uvx mcp-server-odoo</code> handles the rest automatically.
</p>
<h2>Step 3 — Create the Startup Script</h2>
<p>
Create a bash script that sets the environment variables and launches the MCP server in
<strong>YOLO read-only mode</strong> (no MCP module needed on the Odoo side):
</p>
<pre><code>#!/usr/bin/env bash
# Odoo MCP configuration
export ODOO_URL="https://006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d.odoo4projects.com/"
export ODOO_DB="006-003-1d9183bb-8430-41a8-85a3-842b2b4d279d"
export ODOO_USER="changeme@odoo4projects.com"
export ODOO_API_KEY="602e6ea0a0adda65b344a282495da3b05525f63f"
export ODOO_READONLY=1
export ODOO_MCP_TRANSPORT=streamable-http
export ODOO_MCP_PORT=8000
export ODOO_YOLO=read
uvx mcp-server-odoo</code></pre>
<p>
Save this as <code>run-odoo-mcp.sh</code>, make it executable (<code>chmod +x run-odoo-mcp.sh</code>), and
run it. The server starts on <code>http://localhost:8000/mcp</code>.
</p>
<div class="pro-tip">
<p><strong>Pro Tip:</strong> YOLO mode (<code>ODOO_YOLO=read</code>) bypasses the need for the Odoo MCP module.
This is great for testing and quick prototyping. For production, install the
<a href="https://apps.odoo.com/apps/modules/19.0/mcp_server?utm_source=derez" target="_blank" rel="noopener">Odoo MCP module</a>
on your Odoo instance and set <code>ODOO_YOLO=off</code> for full security controls.</p>
</div>
<h2>Step 4 — Register the MCP Server with Hermes</h2>
<p>
With the MCP server running, tell Hermes Agent about it:
</p>
<pre><code>hermes mcp add odoo --url http://localhost:8000/mcp</code></pre>
<p>
This registers the MCP endpoint with Hermes. From now on, any Hermes session can discover the Odoo tools
automatically. The <code>hermes mcp add</code> command takes a name (we used <code>odoo</code>) and the
server's URL.
</p>
<p>
To verify it worked:
</p>
<pre><code>hermes mcp list</code></pre>
<p>
You should see <code>odoo</code> listed with status <code>connected</code>.
</p>
<h2>Step 5 — Start Hermes and Use the Tools</h2>
<p>
Start a Hermes session and ask your agent to work with Odoo:
</p>
<pre><code>hermes run</code></pre>
<p>
Then in the chat, try something like:
</p>
<pre><code>Show me my 5 most recent leads from Odoo CRM.</code></pre>
<p>
The agent discovers the available MCP tools, calls <code>search_records</code> on the
<code>crm.lead</code> model, and returns the results. Same goes for partners, products, invoices,
sales orders — any model your Odoo user has access to.
</p>
<h2>Comparison at a Glance</h2>
<div style="background:#12121c;border:1px solid #1a1a2e;border-radius:14px;padding:20px 24px;margin:20px 0;">
<table style="width:100%;border-collapse:collapse;font-size:0.9rem;">
<tr>
<th style="text-align:left;padding:8px 12px;color:#00f5ff;font-weight:600;border-bottom:1px solid #1a1a2e;">Aspect</th>
<th style="text-align:left;padding:8px 12px;color:#f472b6;font-weight:600;border-bottom:1px solid #1a1a2e;">Direct API (Speed Run)</th>
<th style="text-align:left;padding:8px 12px;color:#ffaa00;font-weight:600;border-bottom:1px solid #1a1a2e;">MCP (This Post)</th>
</tr>
<tr>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">Setup time</td>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">~3 min (paste credentials)</td>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">~5 min (clone + run server)</td>
</tr>
<tr>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">Components</td>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">None — agent talks directly to Odoo</td>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">MCP server process + Hermes MCP client</td>
</tr>
<tr>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">Latency</td>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">1 hop (agent → Odoo)</td>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">2 hops (agent → MCP → Odoo)</td>
</tr>
<tr>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">Tool surface</td>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">Full Odoo model access (any method)</td>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:1px solid #1a1a2e;">Predefined MCP tools (search, read, create, etc.)</td>
</tr>
<tr>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:none;">Multi-tool agent</td>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:none;">Each tool needs its own integration</td>
<td style="padding:8px 12px;color:#c8c8d8;border-bottom:none;">One protocol for all tools (GitHub, Slack, Jira, etc.)</td>
</tr>
</table>
</div>
<h2>Wrap Up</h2>
<p>
In 5 steps and about 5 minutes, you connected Hermes Agent to Odoo through the Model Context Protocol.
Clone the repo, set the env vars, start the server, register with Hermes, and your agent can query
CRM leads, partners, products, invoices — anything your Odoo user has access to.
</p>
<p>
Which approach should you use?
</p>
<ul>
<li><strong>Direct API</strong> — if Hermes Agent is your only tool and Odoo is your only backend. Faster,
no middle layer, full model access.</li>
<li><strong>MCP</strong> — if you're building a multi-tool agent (Odoo + GitHub + Notion + Slack) and want
one protocol to rule them all.</li>
</ul>
<p>
Both work. Both connect your agent to live Odoo data. Both take under 10 minutes. The right choice
depends on your architecture.
</p>
<div class="pro-tip">
<p><strong>Pro Tip:</strong> You can run both. Use MCP for the tools that benefit from a unified protocol
(docs, chat, code repos) and direct API for Odoo. Hermes Agent supports mixed setups — MCP tools and
direct integrations coexist in the same session. Pick the best connection for each backend.</p>
</div>
<div class="cta-box">
<h3>Try It Yourself — $9.50 Off</h3>
<p>Deploy a Hermes Agent in 10 minutes with either MCP or direct Odoo integration. Use coupon code
<strong>BLOG950</strong> for $9.50 off your first month.</p>
<a href="https://derez.ai/#pricing" class="btn">Get Your Agent →</a>
</div>
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #1a1a2e;font-size:0.85rem;color:#666;">
<a href="https://derez.ai" style="color:#00f5ff">derez.ai</a> — Deploy your AI agent in 10 Minutes. &middot;
<a href="https://derez.ai/blog/posts/direct-odoo-api-vs-mcp.html">Direct Odoo API vs MCP</a> &middot;
<a href="https://derez.ai/blog/posts/speed-run-odoo-community-agent.html">Direct Odoo Speed Run</a>
</p>
</div>
</body>
</html>
@@ -0,0 +1,181 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/blog/posts/speed-run-odoo-static-website.html" />
<title>Speed Run: Convert Odoo Website to Static Site in 10 Minutes — derez.ai Blog</title>
<meta name="description" content="Convert your Odoo website into a static site and deploy via git in under 10 minutes using Hermes Agent. No database, no server maintenance, lightning-fast load times." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/speed-run-odoo-static-website.html" />
<meta property="og:title" content="Speed Run: Convert Odoo Website to Static Site in 10 Minutes" />
<meta property="og:description" content="Convert your Odoo website into a static site and deploy via git in under 10 minutes using Hermes Agent. No database, no server maintenance, lightning-fast load times." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Speed Run: Convert Odoo Website to Static Site in 10 Minutes" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: #08080c;
color: #e8e8f0;
font-family: 'Inter', sans-serif;
line-height: 1.7;
padding: 40px 20px;
}
.container { max-width: 720px; margin: 0 auto; }
a { color: #00f5ff; text-decoration: none; }
a:hover { text-decoration: underline; }
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
.back:hover { color: #00f5ff; }
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.area-tag {
display: inline-block;
background: #f472b6;
color: #000;
font-size: 0.75rem;
font-weight: 700;
padding: 2px 10px;
border-radius: 20px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.chip-tag {
display: inline-block;
background: rgba(0,245,255,0.1);
color: #00f5ff;
border: 1px solid rgba(0,245,255,0.3);
font-size: 0.75rem;
font-weight: 600;
padding: 2px 10px;
border-radius: 20px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
p { margin-bottom: 16px; color: #c8c8d8; }
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
li { margin-bottom: 6px; }
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
strong { color: #f0f0ff; }
.prereq-group { margin-bottom: 16px; }
.prereq-group > .group-label { font-weight: 600; color: #f472b6; margin-bottom: 4px; }
.prompt-box {
background: #0e0e14;
border: 1px solid #1a1a24;
border-radius: 12px;
padding: 20px 24px;
margin: 16px 0 24px;
font-style: italic;
color: #c8c8d8;
}
.prompt-box code { background: #001a18; }
.pro-tip {
background: rgba(0,245,255,0.06);
border-left: 3px solid #00f5ff;
border-radius: 8px;
padding: 16px 20px;
margin: 20px 0;
font-size: 0.92rem;
color: #d0d0e0;
}
.pro-tip strong { color: #00f5ff; }
@media (max-width: 600px) {
body { padding: 24px 16px; }
h1 { font-size: 1.5rem; }
}
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; Back to Blog</a>
<h1>Speed Run: How I Converted My Odoo Website Into a Static Site in Less Than 10 Minutes Using Hermes Agent</h1>
<div class="meta">
<span>June 22, 2026</span>
<span class="area-tag">speed-run</span>
<span class="chip-tag">hermes</span>
</div>
<h2>Introduction</h2>
<p>
Odoo is a fantastic ERP, but running your marketing website on it means paying for database servers, Odoo worker processes, cron jobs, security patches, and SSL renewal — every single month. Since customers find you through your homepage long before they hit your ERP, why not serve that homepage as pure static HTML from a git repository? Zero servers, zero databases, instant load times, and zero maintenance.
</p>
<p>
This speed run walks you through having your Hermes Agent crawl your entire Odoo website, convert every page to clean static HTML (including the dynamic Odoo carousels, pricing tables, and contact forms), and push the whole thing to a git repo that serves it as a static site at a new domain. I used <code>new.odoo4projects.com</code> — a fresh git server pointing at the domain.
</p>
<p>
To follow along, grab a <strong>free trial</strong> at <a href="https://derez.ai/#pricing?utm_source=derez">derez.ai</a> and make sure you have a git repository ready (GitHub, GitLab, or your own git server) that's connected to a domain.
</p>
<p>
We hit the affiliate link initially instead of the main pricing page — the agent dutifully documented the affiliate program before I realized my mistake. Regrouped, clarified the target, and still finished with <strong>2:07 left on the clock</strong>. Could have been 90 seconds faster.
</p>
<h2>Prerequisites</h2>
<p>Before you start, make sure you have your git repository credentials ready:</p>
<div class="prereq-group">
<div class="group-label">Integration &mdash; Git Repository (Static Site)</div>
<ul>
<li><strong>Git Repo URL</strong> &mdash; <code>git@git.odoo4projects.com:websites/new-odoo4projects.git</code></li>
<li><strong>Target Domain</strong> &mdash; <code>new.odoo4projects.com</code></li>
<li><strong>Source Website</strong> &mdash; <code>https://ODOO4projects.com</code></li>
<li><strong>Git Branch</strong> &mdash; <code>main</code></li>
</ul>
</div>
<h2>Prompt</h2>
<p>You configure two prompts on the agent's dashboard at <strong>app.derez.ai</strong>. The first sets up the git repository integration. The second converts and deploys the website.</p>
<div class="prompt-box">
<strong>Prompt 1 &mdash; Git Repository Integration</strong><br /><br />
Generated by the Derez Dashboard. The integration settings pass your git repo URL and SSH key / deploy token to the agent so it can authenticate, clone, commit, and push to the repo.
</div>
<div class="prompt-box" style="margin-top:-8px">
<strong>Prompt 2 &mdash; Convert Odoo Website to Static Site and Deploy</strong><br /><br />
Use the git repo <code>git@git.odoo4projects.com:websites/new-odoo4projects.git</code> (branch: <code>main</code>) for the target website <strong>new.odoo4projects.com</strong>.<br /><br />
Convert the website <code>https://ODOO4projects.com</code> to a static website with all content — every page, all carousel slides, the pricing section, navigation tabs, the FAQ tab panel, the affiliate section, the contact form, and the footer with all links (Support, Legal, Contact, Workshops, Affiliates, OD8N). Replace the Odoo backend contact form with a static <code>mailto:</code> link and a simple static contact section. Preserve all brand colors, fonts, and styling. Remove all Odoo login/powered-by-Odoo footers. Add a <code>CNAME</code> file pointing to <code>new.odoo4projects.com</code>. Push everything to the git repo and verify the site is accessible.
</div>
<p>The first prompt authenticates using the credentials you entered in the dashboard integration settings. The second prompt then has your agent crawl the live Odoo site, extract every page and dynamic section, render the full static HTML, replace backend-reliant components (contact form, Odoo carousel controls) with static equivalents, and push the result to the git repository — all autonomously.</p>
<h2>Wrap Up</h2>
<p>
In under 10 minutes your Hermes Agent crawled an entire Odoo-powered marketing website — homepage with four carousel slides, four pricing tiers with feature lists, five navigation tab panels (process innovation, competitive advantages, grow with us, affiliates, FAQ), a contact form section, and a full footer with eight links and social media — converted every dynamic element to clean static HTML, and pushed the whole thing to a git repository at <code>new.odoo4projects.com</code>.
</p>
<p>
No more Odoo worker processes for your marketing site. No database connection pool consuming RAM. No security patches for a public-facing Odoo instance that's only running a brochure site. Your homepage loads in milliseconds from a CDN, you can edit it by pushing to git, and your Odoo instance runs leaner because it's only doing what it's best at — ERP.
</p>
<p>
The same approach works for any Odoo website: e-commerce product pages, blog sections, landing pages, even the Odoo shop pages can be snapshotted as static HTML and served from a git repo. Your ERP stays private, your public site stays fast.
</p>
<div style="text-align:center;margin:24px 0">
<img src="speed-run-odoo-static-countdown.jpg" alt="derez.ai dashboard showing speed-run timer at 2 minutes 07 seconds remaining — Odoo website converted and pushed to git with time to spare" style="max-width:100%;border-radius:14px;border:1px solid #1a1a24;box-shadow:0 4px 24px rgba(0,0,0,0.4)" />
<p style="font-size:0.82rem;color:#888;margin-top:8px">We hit the affiliate page first instead of the main site, regrouped after the first crawl, and still had 2:07 left.</p>
</div>
<div class="pro-tip">
<strong>Pro tip:</strong> Run this speed run as a recurring cron job — have your agent crawl your Odoo website nightly and push any changes to the static repo. Your content editors keep working in Odoo's backend, and your public site auto-updates every morning. No build pipeline, no CI/CD, no webhooks. Just <code>hermes cron create</code> with a daily schedule.
</div>
<p>
As a bonus, try this prompt after your static site is live: <em>"Audit the static site at new.odoo4projects.com — check all internal links resolve, all images have alt text, all external links open in new tabs, and add a newsletter signup form that POSTs to the n8n webhook at https://n8n.derez.ai/webhook/newsletter."</em> Your agent maintains your static site like a webmaster.
</p>
<p>
Use coupon code <strong>BLOG950</strong> at checkout to get your first month free — zero risk, full access.
</p>
<p>
<a href="https://derez.ai/#pricing">Deploy your static-site agent now.</a>
</p>
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #1a1a24;font-size:0.85rem;color:#666;">
<a href="https://derez.ai" style="color:#00f5ff">derez.ai</a> — Deploy your AI agent in 10 Minutes.
</p>
</div>
</body>
</html>
@@ -0,0 +1,321 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html" />
<title>3 Ways to Integrate Odoo and Hermes Agent — derez.ai Blog</title>
<meta name="description" content="Direct XML-RPC API, Odoo MCP CLI client, or Hermes-to-n8n-to-Odoo pipeline — three proven approaches to connect Odoo with Hermes Agent. Trade-offs and when to use each." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html" />
<meta property="og:title" content="3 Ways to Integrate Odoo and Hermes Agent" />
<meta property="og:description" content="Direct XML-RPC API, Odoo MCP CLI client, or Hermes-to-n8n-to-Odoo pipeline — three proven approaches to connect Odoo with Hermes Agent. Trade-offs and when to use each." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="3 Ways to Integrate Odoo and Hermes Agent" />
<script defer data-domain="derez.ai" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"></script>
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #08080c; color: #e8e8f0; font-family: 'Inter', sans-serif; line-height: 1.7; padding: 40px 20px; }
.container { max-width: 720px; margin: 0 auto; }
a { color: #00f5ff; text-decoration: none; }
a:hover { text-decoration: underline; }
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #888; }
.back:hover { color: #00f5ff; }
h1 { font-size: 1.9rem; font-weight: 700; line-height: 1.3; margin-bottom: 12px; }
.meta { font-size: 0.85rem; color: #888; margin-bottom: 40px; display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.area-tag { display: inline-block; background: #a78bfa; color: #000; font-size: 0.75rem; font-weight: 700; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
.chip-tag { display: inline-block; background: rgba(0,245,255,0.1); color: #00f5ff; border: 1px solid rgba(0,245,255,0.3); font-size: 0.75rem; font-weight: 600; padding: 2px 10px; border-radius: 20px; text-transform: uppercase; letter-spacing: 0.5px; }
h2 { font-size: 1.3rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
h3 { font-size: 1.1rem; font-weight: 600; margin: 24px 0 8px; color: #e0e0f0; }
p { margin-bottom: 16px; color: #c8c8d8; }
ul, ol { margin: 0 0 16px 24px; color: #c8c8d8; }
li { margin-bottom: 6px; }
code { background: #0e0e14; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; color: #00f5ff; }
pre { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 10px; padding: 16px 20px; margin: 0 0 20px; overflow-x: auto; font-size: 0.85rem; color: #c8f0ff; }
pre code { background: none; padding: 0; color: inherit; }
strong { color: #f0f0ff; }
.pro-tip { background: rgba(0,245,255,0.06); border-left: 3px solid #00f5ff; border-radius: 8px; padding: 16px 20px; margin: 20px 0; font-size: 0.92rem; color: #d0d0e0; }
.pro-tip strong { color: #00f5ff; }
.method-card { background: #0e0e14; border: 1px solid #1a1a24; border-radius: 14px; padding: 24px 28px; margin: 20px 0; }
.method-card h3 { margin-top: 0; }
.method-badge { display: inline-block; font-size: 0.7rem; font-weight: 700; padding: 2px 8px; border-radius: 4px; text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 8px; }
.badge-fast { background: #00ff88; color: #000; }
.badge-mcp { background: #f472b6; color: #000; }
.badge-n8n { background: #ffaa00; color: #000; }
.method-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 12px 0; }
.method-stat { font-size: 0.85rem; color: #999; }
.method-stat span { color: #e0e0f0; font-weight: 600; }
.data-table { width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 0.88rem; }
.data-table th, .data-table td { text-align: left; padding: 8px 12px; border-bottom: 1px solid #1a1a24; }
.data-table th { color: #00f5ff; font-weight: 600; }
.data-table td { color: #c8c8d8; }
.data-table tr:last-child td { border-bottom: none; }
.cta-box { background: #12121c; border: 1px solid rgba(0,245,255,0.2); border-radius: 14px; padding: 28px 32px; margin: 32px 0; text-align: center; }
.cta-box h3 { font-size: 1.2rem; margin-bottom: 8px; color: #f0f0ff; }
.cta-box p { color: #999; margin-bottom: 16px; }
.btn { display: inline-block; background: transparent; border: 1px solid #00f5ff; color: #00f5ff; padding: 10px 28px; border-radius: 8px; font-weight: 600; font-size: 0.95rem; transition: all .2s; }
.btn:hover { background: rgba(0,245,255,0.1); text-decoration: none; }
@media (max-width: 600px) { body { padding: 24px 16px; } h1 { font-size: 1.5rem; } .cta-box { padding: 20px 16px; } .method-stats { grid-template-columns: 1fr; } }
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; Back to Blog</a>
<h1>3 Ways to Integrate Odoo and Hermes Agent</h1>
<div class="meta">
<span>June 20, 2026</span>
<span class="area-tag">guide</span>
<span class="chip-tag">odoo</span>
<span class="chip-tag">hermes</span>
<span class="chip-tag">n8n</span>
</div>
<p>
Odoo is the most popular open-source ERP — CRM, sales, inventory, accounting, all in one system.
Hermes Agent is an open-source AI agent framework. Put them together and your agent can query customer records,
check inventory levels, create leads, generate invoices, and pull sales reports — all through natural language.
</p>
<p>
There are <strong>three proven ways</strong> to connect the two. Each offers a different balance of speed,
determinism, and architectural flexibility.
</p>
<h2>At a Glance</h2>
<table class="data-table">
<tr>
<th>Approach</th>
<th>Setup</th>
<th>Best For</th>
<th>Determinism</th>
</tr>
<tr>
<td><strong>1. Direct XML-RPC API</strong></td>
<td>~3 min</td>
<td>Simple queries, quick demos</td>
<td>Low — LLM decides the call</td>
</tr>
<tr>
<td><strong>2. Odoo MCP CLI Client</strong></td>
<td>~5 min</td>
<td>Multi-tool agents, MCP stacks</td>
<td>Medium — tool-bound</td>
</tr>
<tr>
<td><strong>3. Hermes → n8n → Odoo</strong></td>
<td>~10 min</td>
<td>Deterministic business processes</td>
<td><strong>High — step-by-step workflows</strong></td>
</tr>
</table>
<!-- METHOD 1 -->
<div class="method-card">
<div class="method-badge badge-fast">⚡ Fastest — 3 min</div>
<h3>Method 1: Direct XML-RPC API</h3>
<div class="method-stats">
<div class="method-stat">Setup: <span>~3 minutes</span></div>
<div class="method-stat">Latency: <span>1 hop</span></div>
<div class="method-stat">Determinism: <span>Low — LLM-driven</span></div>
<div class="method-stat">Best for: <span>Simple queries, demos</span></div>
</div>
<p>The simplest approach. You create a dedicated Odoo user with restricted permissions, paste the connection details into Hermes, and your agent calls the Odoo XML-RPC API directly. Hermes has built-in Odoo tool support — once configured, the agent can search, read, create, and update records on any Odoo model. This is the classic <strong><a href="https://derez.ai/odoo-hermes">Odoo Hermes</a></strong> setup.</p>
<h4>Setup</h4>
<ol>
<li>Generate an Odoo API key (Settings → Users → Technical)</li>
<li>Add the connection to Hermes' <code>config.yaml</code></li>
<li>Start Hermes — Odoo tools are available automatically</li>
</ol>
<pre><code># Hermes /.hermes/.env snippet
ODOO_URL=https://005-003-1bf12542-4710-45c2-9f8b-3a27d25031b7.odoo4projects.com/
ODOO_USER=changeme@odoo4projects.com
ODOO_APIKEY=198db28b752ccb4a66c646503902169e8b3a5b42
</code></pre>
Prompt:
<pre><code>
Connect to the odoo 19 database with the credentials given in
$ODOO_URL $ODOO_USER $ODOO_APIKEY
open <url>/doc and read the available models and methods.
Use the JSON api to connect and do not login to the web UI.
create a skill to access ODOO
return all data found in the crm database
</code></pre>
This aproach is awesome since we give hermes the whole JSON 2 API to study. In the video you see, that the skill learned every modell with every method.
<p><strong>When to use:</strong> Quick queries, one-off lookups, demos, and prototyping. The LLM decides which API calls to make, so it's fast but the agent may chain calls in unexpected ways.</p>
<p><strong>Deep dive:</strong> <a href="https://derez.ai/blog/posts/speed-run-odoo-community-agent.html">Speed Run: Create an Odoo Community Agent from Zero</a></p>
</div>
<!-- METHOD 2 -->
<div class="method-card">
<div class="method-badge badge-mcp">🚀 MCP — 5 min</div>
<h3>Method 2: Odoo MCP CLI Client</h3>
<div class="method-stats">
<div class="method-stat">Setup: <span>~5 minutes</span></div>
<div class="method-stat">Latency: <span>2 hops</span></div>
<div class="method-stat">Determinism: <span>Medium — tool-bound</span></div>
<div class="method-stat">Best for: <span>Multi-tool setups</span></div>
</div>
<p>The <a href="https://github.com/ivnvxd/mcp-server-odoo">mcp-server-odoo</a> project (315+ GitHub stars) exposes Odoo as a Model Context Protocol server. You run it as a CLI process, register it with Hermes via <code>hermes mcp add</code>, and the agent discovers Odoo tools automatically — <code>search_records</code>, <code>create_record</code>, <code>read_record</code>, and more.</p>
<h4>Setup</h4>
<ol>
<li>Clone the server: <code>git clone https://github.com/ivnvxd/mcp-server-odoo.git</code></li>
<li>Set environment variables (URL, db, user, API key)</li>
<li>Start: <code>uvx mcp-server-odoo</code></li>
<li>Register: <code>hermes mcp add odoo --url http://localhost:8000/mcp</code></li>
<li>Start Hermes — tools appear automatically</li>
</ol>
<pre><code>#!/usr/bin/env bash
export ODOO_URL="https://your-instance.odoo4projects.com"
export ODOO_DB="your-database"
export ODOO_USER="agent@company.com"
export ODOO_API_KEY="your...port ODOO_READONLY=1
export ODOO_MCP_TRANSPORT=streamable-http
export ODOO_MCP_PORT=8000
export ODOO_YOLO=read
uvx mcp-server-odoo</code></pre>
<p><strong>When to use:</strong> You want a standardized MCP protocol for all tool connections. If Hermes already talks to GitHub, Slack, or Notion via MCP, Odoo fits right into the same stack.</p>
<p><strong>Deep dive:</strong> <a href="https://derez.ai/blog/posts/speed-run-odoo-mcp.html">Speed Run: Connect Hermes Agent to Odoo via MCP</a></p>
</div>
<!-- METHOD 3 -->
<div class="method-card">
<div class="method-badge badge-n8n">⚙️ Deterministic — 10 min</div>
<h3>Method 3: Hermes → n8n → Odoo (The Favorite)</h3>
<div class="method-stats">
<div class="method-stat">Setup: <span>~10 minutes</span></div>
<div class="method-stat">Latency: <span>3 hops</span></div>
<div class="method-stat">Determinism: <span><strong>High — step-by-step</strong></span></div>
<div class="method-stat">Best for: <span>Business processes</span></div>
</div>
<p>This is the most powerful approach — and the personal favorite of the derez.ai founder. Instead of the agent calling Odoo directly, Hermes delegates Odoo operations to <strong>n8n workflows</strong> that execute deterministic, step-by-step business logic.</p>
<p><strong>Why this matters:</strong> An LLM calling the Odoo API directly might chain calls in unexpected ways. It could create an invoice without checking if the customer exists, or skip a product validation step. With n8n as the middle layer, every business process is a <strong>deterministic workflow</strong> — the same inputs always produce the same outputs, in the same order.</p>
<p>Here's how it works:</p>
<ol>
<li>Hermes Agent connects to n8n (via the <a href="https://derez.ai/blog/posts/speed-run-n8n-skill.html">official n8n skill</a>)</li>
<li>n8n hosts pre-built Odoo workflows — each one a complete business process</li>
<li>Hermes calls an n8n webhook, which triggers the workflow</li>
<li>The workflow executes deterministic steps against the Odoo API</li>
<li>n8n returns the result to Hermes</li>
</ol>
<h4>Example: Create an Invoice</h4>
<p>A typical n8n workflow for invoice creation might look like this:</p>
<pre><code>Step 1: Receive webhook from Hermes (customer name, product SKU)
Step 2: Search Odoo for the customer by name
Step 3: If customer not found → return error to Hermes
Step 4: Search Odoo for the product by SKU
Step 5: If product not found → return error to Hermes
Step 6: Create invoice header with customer ID
Step 7: Add invoice line with product ID, quantity, price
Step 8: Confirm invoice creation
Step 9: Return invoice number and status to Hermes</code></pre>
<p>Every step is deterministic — the workflow always checks for the customer first, then the product, then creates the invoice. No LLM hallucination in the middle of a billing process.</p>
<h4>Setup</h4>
<ol>
<li><strong>Install the n8n skill in Hermes</strong> — loads the n8n toolset: <code>hermes skills install n8n</code></li>
<li><strong>Build n8n workflows</strong> — create webhook-triggered workflows for each Odoo operation (create invoice, update lead, check inventory, generate report)</li>
<li><strong>Configure webhooks</strong> — each workflow exposes a unique webhook URL that Hermes can call</li>
<li><strong>Start Hermes</strong> — tell your agent "create an invoice for [customer] with [product]" and it delegates to n8n</li>
</ol>
<div class="pro-tip">
<p><strong>Pro Tip:</strong> This is the derez.ai founder's recommended approach for production. The n8n layer gives you audit trails, error handling, retries, and human-in-the-loop approval for critical operations — none of which an LLM calling the API directly can guarantee.</p>
</div>
<p><strong>Deep dive:</strong> <a href="https://derez.ai/blog/posts/speed-run-n8n-skill.html">Speed Run: Connect Hermes Agent to n8n in 10 Minutes</a></p>
</div>
<h2>Decision Guide</h2>
<ul>
<li><strong>Quick lookup or demo?</strong><strong>Direct API</strong>. Configure once, ask anything.</li>
<li><strong>Multi-tool agent on MCP?</strong><strong>Odoo MCP CLI</strong>. One protocol for everything.</li>
<li><strong>Production business process?</strong><strong>Hermes → n8n → Odoo</strong>. Deterministic workflows for invoices, orders, and data entry where every step must be predictable.</li>
</ul>
<h2>Security Best Practices</h2>
<ul>
<li><strong>Create a dedicated Odoo user</strong> for the agent — never use an admin account</li>
<li><strong>Use read-only access</strong> unless the agent needs to create or modify records</li>
<li><strong>Restrict model access</strong> to only the Odoo models the agent needs</li>
<li><strong>For n8n, use Odoo node credentials</strong> with the most restrictive user possible</li>
<li><strong>Rotate API keys</strong> periodically and revoke them immediately if they leak</li>
</ul>
<h2>Comparison Table</h2>
<table class="data-table">
<tr>
<th>Feature</th>
<th>Direct API</th>
<th>MCP CLI</th>
<th>n8n Pipeline</th>
</tr>
<tr>
<td>Setup time</td>
<td>~3 min</td>
<td>~5 min</td>
<td>~10 min</td>
</tr>
<tr>
<td>Components</td>
<td>Hermes + Odoo</td>
<td>Hermes + MCP server + Odoo</td>
<td>Hermes + n8n + Odoo</td>
</tr>
<tr>
<td>Determinism</td>
<td>Low (LLM-driven)</td>
<td>Medium (tool-bound)</td>
<td><strong>High (step-by-step)</strong></td>
</tr>
<tr>
<td>Audit trail</td>
<td>None</td>
<td>None</td>
<td><strong>Full (n8n executions)</strong></td>
</tr>
<tr>
<td>Error handling</td>
<td>LLM-dependent</td>
<td>LLM-dependent</td>
<td><strong>Built-in (retry, stop)</strong></td>
</tr>
<tr>
<td>Best for</td>
<td>Simple queries, demos</td>
<td>Multi-tool MCP stacks</td>
<td>Invoice, order, data entry</td>
</tr>
</table>
<div class="cta-box">
<h3>Try It Yourself — First Month Free</h3>
<p>Deploy a Hermes Agent with any of these Odoo integrations. Use coupon code <strong>blog950</strong> for your first month free.</p>
<a class="btn" href="https://derez.ai/#pricing">Get Your Agent →</a>
</div>
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #1a1a2e;font-size:0.85rem;color:#666;">
<a href="https://derez.ai" style="color:#00f5ff">derez.ai</a> — Deploy your AI agent in 5 minutes. &middot;
<a href="https://derez.ai/blog/posts/speed-run-odoo-community-agent.html">Direct API Speed Run</a> &middot;
<a href="https://derez.ai/blog/posts/speed-run-odoo-mcp.html">MCP Speed Run</a> &middot;
<a href="https://derez.ai/blog/posts/speed-run-n8n-skill.html">n8n Speed Run</a>
</p>
</div>
</body>
</html>
+127
View File
@@ -0,0 +1,127 @@
═══════════════════════════════════════════════════════════════
YOUTUBE UPLOAD PACKAGE — n8n Speed Run
Video: Connect Hermes Agent to n8n in 10 Minutes
Blog: https://derez.ai/blog/posts/speed-run-n8n-skill.html
═══════════════════════════════════════════════════════════════
CHOSEN TITLE
────────────
Speed Run: Connect Hermes Agent to n8n in 10 Minutes (Under 10 Min)
Alternatives:
2. From Zero to n8n + AI Agent in 10 Minutes (No Code)
3. I Connected an AI Agent to n8n in 10 Minutes — Here's How
4. n8n Speed Run: AI Agent + Workflow Automation in Under 10 Min
────────────
DESCRIPTION
────────────
From signup to an n8n-connected AI agent in under 10 minutes. No coding, no plugins — just clone the official n8n skill repo, paste your credentials, and your agent starts building automation workflows.
We could have done it 90 seconds faster — we hit the wrong API endpoint (/api/v2) first and had to regroup. Once we switched to /api/v1, everything clicked. Still had 1:36 left on the clock.
In this speed run I walk through:
- Getting a free derez.ai trial
- Cloning the official n8n skills from github.com/n8n-io/skills
- Setting up the agent on the derez.ai dashboard
- Connecting to your n8n instance via the REST API
- Building a hello world workflow: read focus.de headlines with RSS → summarize with an AI Agent
- Running a security audit on your n8n credentials (bonus)
LINKS
- Deploy your agent → https://derez.ai/#pricing
- Blog post → https://derez.ai/blog/posts/speed-run-n8n-skill.html
- GitHub: n8n-io/skills → https://github.com/n8n-io/skills?utm_source=derez&utm_campaign=youtube
- n8n official site → https://n8n.io?utm_source=derez&utm_campaign=youtube
PREREQUISITES (for following along)
- n8n Instance URL: https://n8n.your-instance.com/
- n8n API Key: (generate one from Settings → API Keys in your n8n instance)
- Any n8n plan works — Cloud or self-hosted
Use coupon code BLOG950 at checkout for your first month free.
CHAPTERS
00:00 - Intro
00:20 - What we're building
00:45 - What you'll need
01:15 - The wrong endpoint story (/api/v2)
02:00 - Getting derez.ai (free trial)
03:00 - Cloning the official n8n skills repo
04:00 - Setting up the agent dashboard
05:00 - Configuring the n8n integration
06:00 - Prompting your agent: hello world workflow
07:30 - Results: RSS feed reading focus.de
08:30 - Bonus: security audit your credentials
09:30 - Pro tip & wrap-up
────────────
TAGS
────────────
Primary:
n8n AI agent, connect n8n to AI, n8n Hermes Agent, AI agent tutorial, no code AI agent, n8n workflow automation, n8n skills, AI workflow builder, derez.ai, Hermes Agent n8n, n8n MCP, n8n REST API, build n8n workflows with AI
Secondary:
n8n tutorial, AI automation, n8n API, workflow automation tutorial, n8n beginner, no code automation, AI agent hosting, n8n self-hosted
────────────
THUMBNAIL CONCEPT
────────────
Style: Dark background (#08080c), bold cyan accent (#00f5ff), pink pill tags (#f472b6).
Elements:
- Left: n8n logo (white on dark bg)
- Center: Countdown timer "1:36" with "LEFT ON CLOCK" below (from speed-run-n8n-countdown.jpg)
- Right: derez.ai wordmark
- Bottom overlay bar (cyan): "NO CODE · NO PLUGINS"
Text overlays:
- "SPEED RUN" pill tag (pink) in top-left
- "n8n + AI in 10 MIN" (big, bold, cyan) centered
Alternative: Show the two-node workflow (RSS Feed Read → AI Agent) as a simple diagram in the center instead of the countdown, with the countdown as a corner inset.
────────────
END SCREEN & CARDS
────────────
End screen (last 20 seconds):
- Subscribe button
- Recommended video: "Best for viewer"
- Link to: https://derez.ai/#pricing
Cards throughout:
- At 1:30 — Card to github.com/n8n-io/skills
- At 4:00 — Card to derez.ai/#pricing
- At 7:00 — Card to blog post
────────────
SETTINGS
────────────
| Field | Value |
|------------- |---------------------------|
| Visibility | Public |
| Made for Kids| No |
| Category | Science & Technology |
| Language | English |
| Comments | On (moderate) |
| Location | Paraguay (or skip) |
────────────
POST-UPLOAD
────────────
After upload, update the blog post outbound links to include &utm_campaign=youtube:
- The github.com/n8n-io/skills link already has ?utm_source=derez → change to ?utm_source=derez&utm_campaign=youtube
- Add "Follow along on YouTube" link in the blog post
- Commit and push immediately
+59
View File
@@ -0,0 +1,59 @@
# Daily Brief — derez.ai
## Sunday, June 28, 2026 | 09:00 PYST
### Changes Since Yesterday (Sat Jun 27 → Sun Jun 28)
1. **Traffic**: 223 unique visitors (+23), 691 pageviews (+31). Latest day (Jun 27): 20 visitors, +11% DoD. Google now sending 10 visitors (was 6).
2. **CRM processed +77 more contacts**: 243 contacted (was 166), 159 bounced (was 116). 2 replies, 2 Warm unchanged. No new conversions.
3. **Data discrepancy FIXED**: Script now uses `agents_sold` (Stripe, 6 seats) instead of CRM `Won` stage (0) for `operations.js` goals[1]. Dashboard synced to share dir.
4. **No code changes** — last commit Jun 25 (Gumpel cleanup). 16 blog posts live.
### Blockers Still Open
- ❌ NEED n1: Business emails for top 20 YT creators
- ❌ NEED n3: Product demo video (3 min)
- ❌ NEED n4: Social media account access (X + LinkedIn)
- ❌ Telegram group for F&F — still in "setting up next" status
- ❌ Search Console access — still blocking directory submissions
- ❌ F&F checkout flow untested end-to-end (needs human with credit card)
### F&F Launch Tomorrow (Monday) — Prep Status
- ✅ Coupons ready: friends950, creator950, friends499, friends1750
- ✅ Onboarding guide drafted in docs/friends-family-onboarding.md
- ✅ Dashboard pipeline fixed — Stripe data now reflected in goals
- ❌ Telegram group — needs Oliver to create and add invite link
- ❌ Monday onboarding message — drafted below (ready to send)
### F&F Launch — Suggested Monday Message for Oliver
**Email / Message to F&F list:**
> Hey {Name},
>
> Remember I mentioned I was building an AI agent platform? It's finally ready for battle-testing — and I'd love for you to be among the first to try it.
>
> **derez.ai** — deploy your own AI agent in ~10 minutes. No SSH, no DevOps. Pick a template (customer support, web research, Odoo CRM, cold email outreach, ChatGPT clone), and you get a live agent on your own subdomain with a web UI and API.
>
> Here's your invite:
> 1. Go to https://derez.ai/add.html
> 2. Pick any agent template
> 3. Enter coupon **friends950** at checkout — your first month is free, unlimited usage
> 4. Your agent will be ready in ~10 minutes
>
> The coupons don't expire and cover full access — your only job is to break things and tell me what sucks.
>
> Questions? Reply here or drop in the Telegram group: [LINK TBD — Oliver to create]
>
> Cheers,
> Oliver
### Prioritized Action Items for Next Session (Monday Jun 29)
| Priority | Item | Owner | Notes |
|----------|------|-------|-------|
| P0 | Create Telegram group + invite link for F&F | Oliver | Before sending Monday emails |
| P0 | Send F&F onboarding message to list | Oliver | Use draft above |
| P1 | End-to-end checkout test (credit card) | Oliver | Verify full flow: add.html → coupon → Stripe → deployment |
| P1 | Get Search Console access | Oliver | Unblocks directory submissions |
| P1 | Fix NPS survey link in onboarding | Oliver | Currently says "D5" — update date |
| P2 | Draft blog post #17 | Hermes | Topic: what F&F feedback taught us |
| P2 | LinkedIn company page setup | Oliver | First step in social presence |
+276
View File
@@ -0,0 +1,276 @@
window.__INSIGHTS__ = {
"period": "2026-06-09 to 2026-06-27",
"updated": "2026-06-28 06:01",
"visitors": 223,
"visitors_trend": {
"dir": "same",
"change": "+0",
"pct": "+0%"
},
"visitors_change": "",
"latest_day": "2026-06-27",
"latest_day_visitors": 20,
"dod_trend": {
"dir": "up",
"change": "+2",
"pct": "+11%"
},
"pageviews": 691,
"pageviews_trend": {
"dir": "same",
"change": "+0",
"pct": "+0%"
},
"pageviews_change": "",
"bounce_rate": "\u2014",
"bounce_rate_change": "",
"visit_duration": "\u2014",
"visit_duration_change": "",
"agents_sold": 6,
"top_pages": [],
"top_referrers": [
{
"source": "Direct / None",
"visitors": 154
},
{
"source": "derez",
"visitors": 54
},
{
"source": "Google",
"visitors": 10
},
{
"source": "LinkedIn",
"visitors": 3
},
{
"source": "Youtube",
"visitors": 3
}
],
"visitors_by_day": [
{
"date": "2026-06-09",
"visitors": 4
},
{
"date": "2026-06-10",
"visitors": 5
},
{
"date": "2026-06-11",
"visitors": 8
},
{
"date": "2026-06-12",
"visitors": 4
},
{
"date": "2026-06-13",
"visitors": 7
},
{
"date": "2026-06-14",
"visitors": 16
},
{
"date": "2026-06-15",
"visitors": 11
},
{
"date": "2026-06-16",
"visitors": 13
},
{
"date": "2026-06-17",
"visitors": 8
},
{
"date": "2026-06-18",
"visitors": 6
},
{
"date": "2026-06-19",
"visitors": 8
},
{
"date": "2026-06-20",
"visitors": 13
},
{
"date": "2026-06-21",
"visitors": 5
},
{
"date": "2026-06-22",
"visitors": 9
},
{
"date": "2026-06-23",
"visitors": 6
},
{
"date": "2026-06-24",
"visitors": 52
},
{
"date": "2026-06-25",
"visitors": 10
},
{
"date": "2026-06-26",
"visitors": 18
},
{
"date": "2026-06-27",
"visitors": 20
}
],
"countries": [
{
"country": "US",
"visitors": 102
},
{
"country": "PY",
"visitors": 49
},
{
"country": "DE",
"visitors": 18
},
{
"country": "GB",
"visitors": 10
},
{
"country": "PL",
"visitors": 8
},
{
"country": "MX",
"visitors": 6
},
{
"country": "MU",
"visitors": 6
},
{
"country": "CA",
"visitors": 4
},
{
"country": "IN",
"visitors": 3
},
{
"country": "EG",
"visitors": 2
},
{
"country": "IT",
"visitors": 2
},
{
"country": "AU",
"visitors": 2
},
{
"country": "BE",
"visitors": 2
},
{
"country": "DK",
"visitors": 2
},
{
"country": "TR",
"visitors": 2
},
{
"country": "PT",
"visitors": 1
},
{
"country": "BD",
"visitors": 1
},
{
"country": "AT",
"visitors": 1
},
{
"country": "MD",
"visitors": 1
}
],
"events": [
{
"name": "Scroll Depth",
"total": 864,
"unique": 75
},
{
"name": "pageview",
"total": 691,
"unique": 221
},
{
"name": "Outbound Link: Click",
"total": 84,
"unique": 16
},
{
"name": "Pricing Click",
"total": 40,
"unique": 9
},
{
"name": "FAQ Toggle",
"total": 38,
"unique": 6
},
{
"name": "Speedrun Nav",
"total": 8,
"unique": 2
},
{
"name": "Mobile Menu Toggle",
"total": 5,
"unique": 3
},
{
"name": "Chat Toggle",
"total": 3,
"unique": 2
},
{
"name": "engagement",
"total": 0,
"unique": 141
}
],
"utm_sources": [
{
"source": "(not set)",
"visitors": 166
},
{
"source": "derez",
"visitors": 54
},
{
"source": "youtube",
"visitors": 2
}
],
"what_worked": [
"223 unique visitors across 19 days of tracking",
"691 pageviews with 9 event types tracked"
],
"what_didnt": [],
"recommendations": []
};
+169 -62
View File
@@ -1,49 +1,53 @@
{ {
"period": "2026-06-09 to 2026-06-15", "period": "2026-06-09 to 2026-06-27",
"updated": "2026-06-16 06:00", "updated": "2026-06-28 06:01",
"visitors": 54, "visitors": 223,
"visitors_trend": { "visitors_trend": {
"dir": "up", "dir": "same",
"change": "+10", "change": "+0",
"pct": "+23%" "pct": "+0%"
}, },
"visitors_change": "", "visitors_change": "",
"latest_day": "2026-06-15", "latest_day": "2026-06-27",
"latest_day_visitors": 10, "latest_day_visitors": 20,
"dod_trend": { "dod_trend": {
"dir": "down",
"change": "-6",
"pct": "-38%"
},
"pageviews": 332,
"pageviews_trend": {
"dir": "up", "dir": "up",
"change": "+37", "change": "+2",
"pct": "+13%" "pct": "+11%"
},
"pageviews": 691,
"pageviews_trend": {
"dir": "same",
"change": "+0",
"pct": "+0%"
}, },
"pageviews_change": "", "pageviews_change": "",
"bounce_rate": "\u2014", "bounce_rate": "\u2014",
"bounce_rate_change": "", "bounce_rate_change": "",
"visit_duration": "\u2014", "visit_duration": "\u2014",
"visit_duration_change": "", "visit_duration_change": "",
"agents_sold": 2, "agents_sold": 6,
"top_pages": [], "top_pages": [],
"top_referrers": [ "top_referrers": [
{ {
"source": "Direct / None", "source": "Direct / None",
"visitors": 50 "visitors": 154
}, },
{ {
"source": "Youtube", "source": "derez",
"visitors": 2 "visitors": 54
},
{
"source": "LinkedIn",
"visitors": 1
}, },
{ {
"source": "Google", "source": "Google",
"visitors": 1 "visitors": 10
},
{
"source": "LinkedIn",
"visitors": 3
},
{
"source": "Youtube",
"visitors": 3
} }
], ],
"visitors_by_day": [ "visitors_by_day": [
@@ -73,87 +77,190 @@
}, },
{ {
"date": "2026-06-15", "date": "2026-06-15",
"visitors": 11
},
{
"date": "2026-06-16",
"visitors": 13
},
{
"date": "2026-06-17",
"visitors": 8
},
{
"date": "2026-06-18",
"visitors": 6
},
{
"date": "2026-06-19",
"visitors": 8
},
{
"date": "2026-06-20",
"visitors": 13
},
{
"date": "2026-06-21",
"visitors": 5
},
{
"date": "2026-06-22",
"visitors": 9
},
{
"date": "2026-06-23",
"visitors": 6
},
{
"date": "2026-06-24",
"visitors": 52
},
{
"date": "2026-06-25",
"visitors": 10 "visitors": 10
},
{
"date": "2026-06-26",
"visitors": 18
},
{
"date": "2026-06-27",
"visitors": 20
} }
], ],
"countries": [ "countries": [
{ {
"country": "US", "country": "US",
"visitors": 23 "visitors": 102
}, },
{ {
"country": "PY", "country": "PY",
"visitors": 19 "visitors": 49
}, },
{ {
"country": "DE", "country": "DE",
"visitors": 3 "visitors": 18
}, },
{ {
"country": "IN", "country": "GB",
"visitors": 2 "visitors": 10
},
{
"country": "CA",
"visitors": 2
},
{
"country": "MX",
"visitors": 1
}, },
{ {
"country": "PL", "country": "PL",
"visitors": 1 "visitors": 8
},
{
"country": "MX",
"visitors": 6
},
{
"country": "MU",
"visitors": 6
},
{
"country": "CA",
"visitors": 4
},
{
"country": "IN",
"visitors": 3
},
{
"country": "EG",
"visitors": 2
},
{
"country": "IT",
"visitors": 2
}, },
{ {
"country": "AU", "country": "AU",
"visitors": 2
},
{
"country": "BE",
"visitors": 2
},
{
"country": "DK",
"visitors": 2
},
{
"country": "TR",
"visitors": 2
},
{
"country": "PT",
"visitors": 1
},
{
"country": "BD",
"visitors": 1
},
{
"country": "AT",
"visitors": 1 "visitors": 1
}, },
{ {
"country": "MD", "country": "MD",
"visitors": 1 "visitors": 1
},
{
"country": "TR",
"visitors": 1
} }
], ],
"events": [ "events": [
{ {
"name": "Scroll Depth", "name": "Scroll Depth",
"total": 554, "total": 864,
"unique": 24 "unique": 75
}, },
{ {
"name": "pageview", "name": "pageview",
"total": 332, "total": 691,
"unique": 54 "unique": 221
},
{
"name": "Pricing Click",
"total": 34,
"unique": 3
},
{
"name": "FAQ Toggle",
"total": 29,
"unique": 3
}, },
{ {
"name": "Outbound Link: Click", "name": "Outbound Link: Click",
"total": 84,
"unique": 16
},
{
"name": "Pricing Click",
"total": 40,
"unique": 9
},
{
"name": "FAQ Toggle",
"total": 38,
"unique": 6
},
{
"name": "Speedrun Nav",
"total": 8, "total": 8,
"unique": 5 "unique": 2
},
{
"name": "Mobile Menu Toggle",
"total": 5,
"unique": 3
},
{
"name": "Chat Toggle",
"total": 3,
"unique": 2
}, },
{ {
"name": "engagement", "name": "engagement",
"total": 0, "total": 0,
"unique": 39 "unique": 141
} }
], ],
"utm_sources": [ "utm_sources": [
{ {
"source": "(not set)", "source": "(not set)",
"visitors": 52 "visitors": 166
},
{
"source": "derez",
"visitors": 54
}, },
{ {
"source": "youtube", "source": "youtube",
@@ -161,8 +268,8 @@
} }
], ],
"what_worked": [ "what_worked": [
"54 unique visitors across 7 days of tracking", "223 unique visitors across 19 days of tracking",
"332 pageviews with 6 event types tracked" "691 pageviews with 9 event types tracked"
], ],
"what_didnt": [], "what_didnt": [],
"recommendations": [] "recommendations": []
+124
View File
@@ -0,0 +1,124 @@
window.__OPERATIONS__ = {
"date": "Sunday, June 14, 2026",
"updated": "2026-06-28T06:01:37-04:00",
"goals": [
{
"current": 269,
"note": "CRM: 24 Cold, 243 Contacted, 2 Warm. 134 on Hold, 0 Won."
},
{
"current": 6,
"note": "6 paying customer(s) (agent sold — Stripe)"
},
{
"current": 0,
"note": "0 YT creators & affiliates identified (134 on Hold)"
},
{
"current": 223,
"note": "Plausible: 28 unique visitors over 5 days (Jun 9-13). 7 countries. +75% DoD on latest day."
},
{
"current": 243,
"note": "243 contacts emailed. 2 replied. 159 bounced."
},
{
"current": 945,
"note": "945 total in CRM (24 Cold, 243 Contacted, 2 Warm, 134 Hold, 0 Won, 1 Lost, 159 Bounced)"
}
],
"campaigns": [
{
"metrics": [
24,
243,
2
],
"items": [
{
"text": "Coupon codes ready: friends950, creator950",
"ok": true
},
{
"text": "Template signed as Mark \u2014 Customer Success Agent",
"ok": true
},
{
"text": "24 Cold contacts, 243 contacted",
"ok": true
}
]
},
{
"metrics": [
134,
0,
0
],
"items": [
{
"text": "60 YouTube creators collected \u2014 campaign paused until end of July",
"ok": false
},
{
"text": "Focus now: Friends & Family battle-testing first",
"ok": false
},
{
"text": "Influencer affiliate program to be designed after F&F validation",
"ok": false
}
]
},
{
"metrics": [
0,
0,
0
],
"items": [
{
"text": "No outreach started yet",
"ok": false
},
{
"text": "Profile / company page TBD",
"ok": false
},
{
"text": "No content strategy defined",
"ok": false
}
]
}
],
"state_of_play": "Day 14 \u2014 243 cold emails sent, 2 replies, 159 bounced. 945 CRM contacts (24 Cold/243 Contacted/2 Warm/134 Hold). 6 agent(s) sold (Stripe).",
"comms": {
"inbox": {
"total": 0,
"last35h": 0
},
"sent": {
"total": 8,
"last35h": 0
},
"alerts": 0,
"crm": {
"total": 945,
"cold": 24,
"contacted": 243,
"warm": 2,
"won": 0,
"hold": 134
}
},
"recommendations": [
"INFLUENCER CAMPAIGN PAUSED until end of July \u2014 focus on F&F battle-testing first",
"Friends & Family list goes live Monday \u2014 start onboarding and collect feedback",
"Battle-proof the system: fix issues as they come up during F&F usage",
"End of July: evaluate F&F results, then re-activate influencer campaign with tested system",
"1 agent sold already \u2014 good sign for F&F conversion expectations"
],
"day": 14,
"notes": "Day 14 auto-update at 06:01 UTC"
};
+34 -26
View File
@@ -1,38 +1,38 @@
{ {
"date": "Sunday, June 14, 2026", "date": "Sunday, June 14, 2026",
"updated": "2026-06-16T06:00:33-04:00", "updated": "2026-06-28T06:01:37-04:00",
"goals": [ "goals": [
{ {
"current": 1, "current": 269,
"note": "CRM: 88 on Hold, 1 Cold (chat lead), 1 sold. Need real emails for outreach." "note": "CRM: 24 Cold, 243 Contacted, 2 Warm. 134 on Hold, 0 Won."
}, },
{ {
"current": 1, "current": 6,
"note": "1 paying customer (agent sold)" "note": "6 paying customer(s) (agent sold — Stripe)"
},
{
"current": 12,
"note": "60 YT creators identified \u2014 12 real emails found via YouTube about page scrape"
},
{
"current": 28,
"note": "Plausible: 28 unique visitors over 5 days (Jun 9-13). 7 countries. +75% DoD on latest day."
}, },
{ {
"current": 0, "current": 0,
"note": "0 cold emails sent \u2014 12 real YT creator emails now available. Templates and coupons ready." "note": "0 YT creators & affiliates identified (134 on Hold)"
}, },
{ {
"current": 139, "current": 223,
"note": "89 original + 50 backlink targets (Hold)" "note": "Plausible: 28 unique visitors over 5 days (Jun 9-13). 7 countries. +75% DoD on latest day."
},
{
"current": 243,
"note": "243 contacts emailed. 2 replied. 159 bounced."
},
{
"current": 945,
"note": "945 total in CRM (24 Cold, 243 Contacted, 2 Warm, 134 Hold, 0 Won, 1 Lost, 159 Bounced)"
} }
], ],
"campaigns": [ "campaigns": [
{ {
"metrics": [ "metrics": [
0, 24,
0, 243,
0 2
], ],
"items": [ "items": [
{ {
@@ -44,14 +44,14 @@
"ok": true "ok": true
}, },
{ {
"text": "No Cold contacts with real emails yet", "text": "24 Cold contacts, 243 contacted",
"ok": false "ok": true
} }
] ]
}, },
{ {
"metrics": [ "metrics": [
60, 134,
0, 0,
0 0
], ],
@@ -92,7 +92,7 @@
] ]
} }
], ],
"state_of_play": "Day 7 \u2014 Influencer campaign on hold until end of July. Full focus on Friends & Family battle-testing. 1 agent sold, 28 visitors across 5 days, 7 countries. Battle-proofing the system with real users before scaling to influencers. 39 coworking space leads + 6 e-commerce leads on Hold, ready for F&F outreach.", "state_of_play": "Day 14 \u2014 243 cold emails sent, 2 replies, 159 bounced. 945 CRM contacts (24 Cold/243 Contacted/2 Warm/134 Hold). 6 agent(s) sold (Stripe).",
"comms": { "comms": {
"inbox": { "inbox": {
"total": 0, "total": 0,
@@ -102,7 +102,15 @@
"total": 8, "total": 8,
"last35h": 0 "last35h": 0
}, },
"alerts": 0 "alerts": 0,
"crm": {
"total": 945,
"cold": 24,
"contacted": 243,
"warm": 2,
"won": 0,
"hold": 134
}
}, },
"recommendations": [ "recommendations": [
"INFLUENCER CAMPAIGN PAUSED until end of July \u2014 focus on F&F battle-testing first", "INFLUENCER CAMPAIGN PAUSED until end of July \u2014 focus on F&F battle-testing first",
@@ -111,6 +119,6 @@
"End of July: evaluate F&F results, then re-activate influencer campaign with tested system", "End of July: evaluate F&F results, then re-activate influencer campaign with tested system",
"1 agent sold already \u2014 good sign for F&F conversion expectations" "1 agent sold already \u2014 good sign for F&F conversion expectations"
], ],
"day": 8, "day": 14,
"notes": "Day 8 auto-update at 06:00 UTC" "notes": "Day 14 auto-update at 06:01 UTC"
} }
+12
View File
@@ -0,0 +1,12 @@
{
"scan_date": "2026-07-06",
"latest_videos": [
{
"title": "I Connected my Hermes Agent to Odoo in 10 Minutes — Here's How",
"url": "https://www.youtube.com/watch?v=Gx-XiCJAt8g",
"published": "2026-06-14"
}
],
"new_since_last": 0,
"channel_url": "https://www.youtube.com/@derez_ai"
}
+17 -54
View File
@@ -1,63 +1,26 @@
# Directory Submissions — Prep List # Directory Submissions — Prep List
**Status:** Not submitted yet (blocked: need Search Console indexing first for some) **Status:** Not submitted yet (blocked: need Search Console indexing first for some)
**Can submit now:** BetaList, AlternativeTo (accept prelaunch) **Last updated:** 2026-06-19
**Need indexing first:** G2, Product Hunt (launch-day), Capterra, GetApp
--- ---
## Priority Order ## Quick Submissions (Accept Prelaunch / Upcoming)
### Tier 1 — Submit Now (Accept Prelaunch/Upcoming) ### BetaList
- **URL:** https://betalist.com/submit
- **Tagline:** Deploy open-source AI agents in 10 Minutes. No SSH. No YAML.
- **Description:** derez.ai is a one-click platform for deploying and managing Hermes-based AI agents. Skip the infrastructure — pick a template (customer support, web research, Odoo CRM, cold email, ChatGPT clone) and your agent is live on a subdomain with a web UI and API.
- **Categories:** Developer Tools, AI, DevOps
- **Status:** Prep materials ready. Submit manually at betalist.com
| Directory | URL | Prep Needed | Est. Time | ### AlternativeTo
|-----------|-----|-------------|-----------| - **URL:** https://alternativeto.net/submit-suggestion/
| BetaList | https://betalist.com/submit | Product screenshot, 1-liner, tagline | 15 min | - **Category:** AI Agent Hosting
| AlternativeTo | https://alternativeto.net/submit-suggestion/ | Category: "AI Agent Hosting" | 10 min | - **Status:** Prep materials ready. Submit manually.
| Peerlist | https://peerlist.io/launchpad | Founder profile + project | 10 min |
| SaaSHub | https://www.saashub.com/submit | Tagline, description, pricing | 10 min |
### Tier 2 — Prep Now, Submit After Indexing (D4-D7)
| Directory | URL | Prep Needed |
|-----------|-----|-------------|
| Product Hunt | https://producthunt.com | Draft listing ready (screenshots, tagline, first comment) |
| G2 | https://www.g2.com/products | Product profile, category: AI Agent Platforms |
| Capterra | https://www.capterra.com | Category: AI Development Platforms |
| GetApp | https://www.getapp.com | Same as Capterra (syndicated) |
| Crozdesk | https://crozdesk.com | AI Agent catalog |
| SlashDot | https://slashdot.org | DevOps tools section |
### Tier 3 — Long Tail (Week 2+)
| Directory | Notes |
|-----------|-------|
| AI Directory (aidir.cc) | Pure AI directory |
| Futurepedia | AI tools directory |
| There's An AI For That | Community + directory |
| Toolpilot | AI agent tools |
| Easy With AI | Newsletter + directory |
---
## BetaList Pitch Draft
**Tagline:** Deploy open-source AI agents in 10 Minutes. No SSH. No YAML.
**Description:**
derez.ai is a one-click platform for deploying and managing Hermes-based AI agents. Skip the infrastructure — pick a template (customer support, web research, Odoo CRM, cold email, ChatGPT clone) and your agent is live on a subdomain with a web UI and API. Built by a solo founder who was tired of spending more time setting up agents than using them.
**Categories:** Developer Tools, AI, DevOps
**Screenshot needed:** Yes — capture dashboard showing agent templates grid.
---
## Action Items for Me
1. [ ] Create 1200x800 screenshot of the dashboard for BetaList
2. [ ] Draft Product Hunt listing (saved locally for Day 10 prep)
3. [ ] Submit to BetaList today (accepts prelaunch)
4. [ ] Submit to AlternativeTo today
5. [ ] Submit to SaaSHub today
### Product Hunt Draft
- **Tagline:** Deploy open-source AI agents in 10 Minutes. No SSH. No YAML.
- **Description:** derez.ai is a one-click platform for deploying and managing Hermes-based AI agents. Built by a solo founder.
- **Launch checklist:** Screenshots, first comment, maker intro, social coordination
- **Status:** Draft saved 2026-06-19. Launch ~Jun 26-28.
+44
View File
@@ -0,0 +1,44 @@
# Social Media Posts — X / LinkedIn Drafts
## Post 1: n8n Speed Run (promote today's blog post)
**Platform:** X (Twitter) + LinkedIn
**Scheduled:** 2026-06-19
**Text:**
Deploy a Hermes Agent connected to n8n in 10 minutes.
No SSH. No YAML. Just pick a template, enter your n8n URL + API key, and go.
Here's the exact walkthrough: derez.ai/blog/posts/speed-run-n8n-skill.html
The official n8n skill library + Hermes = automation workflows on autopilot.
#AI #n8n #HermesAgent #DevOps #Automation
---
## Post 2: "Why I built derez.ai" (for launch day)
**Platform:** X + LinkedIn
**Status:** Draft — needs Oliver's story
**Text (placeholder):**
I spent more time setting up AI agents than actually using them.
So I built derez.ai — a one-click platform to deploy Hermes agents in 10 minutes.
Pick a template. Get a subdomain + API. Done.
Now shipping daily. More templates coming.
derez.ai
---
## Post 3: Friends & Family launch
**Platform:** LinkedIn
**Status:** Waiting for F&F onboarding to begin
+9 -2
View File
@@ -166,6 +166,7 @@
<li><a href="#faq">FAQ</a></li> <li><a href="#faq">FAQ</a></li>
<li><a href="#blog">Blog</a></li> <li><a href="#blog">Blog</a></li>
<li><a href="#topics">Topics</a></li> <li><a href="#topics">Topics</a></li>
<li><a href="affiliate.html">Affiliate</a></li>
</ul> </ul>
<div class="header-actions"> <div class="header-actions">
<a href="https://app.derez.ai" class="btn-login"> <a href="https://app.derez.ai" class="btn-login">
@@ -1659,9 +1660,9 @@
<div class="container"> <div class="container">
<h2 class="section-title">📌 Focus Topics</h2> <h2 class="section-title">📌 Focus Topics</h2>
<div class="topics-grid"> <div class="topics-grid">
<a href="odoo-hermes-agent.html" class="topic-card"> <a href="https://derez.ai/odoo-hermes" class="topic-card">
<div class="topic-badge">Integration</div> <div class="topic-badge">Integration</div>
<h3>Odoo Hermes Agent</h3> <h3>Odoo Hermes</h3>
<p> <p>
Connect your Odoo ERP to Hermes Agent in 10 minutes. Connect your Odoo ERP to Hermes Agent in 10 minutes.
Read, write, and automate your business data through Read, write, and automate your business data through
@@ -1717,6 +1718,12 @@
<div class="container"> <div class="container">
<span>&copy; 2026 derez.ai &mdash; AI Agent Hosting</span> <span>&copy; 2026 derez.ai &mdash; AI Agent Hosting</span>
<div class="footer-links"> <div class="footer-links">
<a href="https://derez.ai/odoo-hermes"
>Odoo Hermes</a
>
<a href="https://derez.ai/affiliate.html"
>Affiliate Program</a
>
<a <a
href="https://www.youtube.com/@derez_ai" href="https://www.youtube.com/@derez_ai"
target="_blank" target="_blank"
+4
View File
@@ -163,6 +163,10 @@
<li><strong>Prompt 2</strong> — Your task. Example: <em>"List all contacts in the CRM with Stage = Cold. Include name, email, and company. Sort by date added."</em></li> <li><strong>Prompt 2</strong> — Your task. Example: <em>"List all contacts in the CRM with Stage = Cold. Include name, email, and company. Sort by date added."</em></li>
</ul> </ul>
<h3>Connect via MCP</h3>
<p>Prefer the Model Context Protocol? An MCP server sits between Hermes and Odoo as a translation layer. Clone <a href="https://github.com/ivnvxd/mcp-server-odoo?utm_source=derez">mcp-server-odoo</a>, configure it with your Odoo credentials, register with <code>hermes mcp add</code>, and your agent discovers Odoo tools automatically.</p>
<p><a href="blog/posts/speed-run-odoo-mcp.html" style="font-weight:600">Read the MCP Integration Guide →</a></p>
<h2>Why Odoo + Hermes Agent?</h2> <h2>Why Odoo + Hermes Agent?</h2>
<p>Odoo is powerful but navigating its many modules (CRM, Sales, Inventory, Accounting) takes clicks. Hermes Agent gives you a single text interface to all of it — ask in English, get answers in seconds. Combined with web search and email tools, your agent becomes an autonomous business operations assistant.</p> <p>Odoo is powerful but navigating its many modules (CRM, Sales, Inventory, Accounting) takes clicks. Hermes Agent gives you a single text interface to all of it — ask in English, get answers in seconds. Combined with web search and email tools, your agent becomes an autonomous business operations assistant.</p>
+703
View File
@@ -0,0 +1,703 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- ── SEO ───────────────────────────────────────────────── -->
<title>Odoo Hermes — Connect Odoo ERP to Hermes AI Agent | derez.ai</title>
<meta
name="description"
content="Odoo Hermes connects your Odoo ERP to Hermes AI Agent. XML-RPC, MCP, or n8n — three ways to integrate. Read, write, and automate Odoo data through natural language."
/>
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://derez.ai/odoo-hermes" />
<!-- ── OG ─────────────────────────────────────────────────── -->
<meta property="og:type" content="website" />
<meta property="og:url" content="https://derez.ai/odoo-hermes" />
<meta property="og:title" content="Odoo Hermes — Connect Odoo ERP to AI Agent" />
<meta
property="og:description"
content="Three ways to connect Odoo to Hermes Agent. XML-RPC direct, MCP protocol, or n8n deterministic workflows. Full step-by-step guide."
/>
<meta property="og:image" content="https://derez.ai/og-image.png" />
<meta property="og:site_name" content="derez.ai" />
<!-- ── Twitter ────────────────────────────────────────────── -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Odoo Hermes — Connect Odoo ERP to AI Agent" />
<meta
name="twitter:description"
content="Three ways to connect Odoo to Hermes Agent. XML-RPC direct, MCP protocol, or n8n deterministic workflows."
/>
<!-- ── Structured Data (FAQ) ──────────────────────────────── -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is Odoo Hermes?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Odoo Hermes is the integration between Odoo ERP and Hermes AI Agent. It allows your AI agent to read, write, and automate data across Odoo modules — CRM, Sales, Inventory, Accounting — through natural language prompts."
}
},
{
"@type": "Question",
"name": "How do I connect Odoo to Hermes Agent?",
"acceptedAnswer": {
"@type": "Answer",
"text": "There are three ways: 1) Direct XML-RPC API — configure Odoo credentials in Hermes config.yaml and the agent calls the API directly. 2) Odoo MCP CLI client — run mcp-server-odoo and register with Hermes. 3) Hermes to n8n to Odoo — delegate Odoo operations to deterministic n8n workflows."
}
},
{
"@type": "Question",
"name": "Is Odoo Hermes free?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Hermes Agent is open-source and free. Odoo Community Edition is also free. You only pay for hosting — derez.ai offers managed agents starting at $9.50/month with coupon code blog950."
}
},
{
"@type": "Question",
"name": "Which integration method should I use?",
"acceptedAnswer": {
"@type": "Answer",
"text": "For quick queries and demos use XML-RPC direct. For multi-tool agents on MCP use the Odoo MCP CLI. For production business processes like invoicing and order management use Hermes to n8n to Odoo for deterministic step-by-step workflows."
}
},
{
"@type": "Question",
"name": "Can Odoo Hermes write to my database?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, but you control it. Set readonly: true in the config for read-only access, or remove it to allow create/update operations. Always use a dedicated Odoo user with restricted permissions for agent access."
}
}
]
}
</script>
<!-- ── Plausible ──────────────────────────────────────────── -->
<script
defer
data-domain="derez.ai"
src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"
></script>
<script>
window.plausible =
window.plausible ||
function () {
(window.plausible.q = window.plausible.q || []).push(arguments)
}
</script>
<!-- ── Fonts ──────────────────────────────────────────────── -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap"
rel="stylesheet"
/>
<!-- ── Styles ─────────────────────────────────────────────── -->
<style>
:root {
--bg: #000810;
--bg-card: #010f20;
--bg-code: #001220;
--border: #001a2e;
--accent: #00f5ff;
--accent-dim: rgba(0,245,255,0.08);
--text: #e8e8f0;
--text-muted: #888;
--text-dim: #666;
--radius: 8px;
--radius-card: 14px;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: var(--bg);
color: var(--text);
font-family: 'Inter', system-ui, -apple-system, sans-serif;
line-height: 1.7;
font-size: 15px;
}
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
.container { max-width: 800px; margin: 0 auto; padding: 0 24px; }
/* ── Header ─────────────────────────────────────────── */
.site-header {
border-bottom: 1px solid var(--border);
padding: 14px 0;
position: sticky;
top: 0;
background: var(--bg);
z-index: 100;
}
.site-header .container {
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1100px;
}
.site-logo { display: flex; align-items: center; gap: 8px; }
.site-logo-img { display: block; height: 34px; width: auto; }
.nav-links {
display: flex;
list-style: none;
gap: 24px;
font-size: 0.88rem;
}
.nav-links a { color: #999; transition: color .15s; }
.nav-links a:hover { color: var(--text); text-decoration: none; }
.header-actions { display: flex; align-items: center; gap: 12px; }
.btn-login {
display: flex;
align-items: center;
gap: 5px;
font-size: 0.85rem;
color: #999;
padding: 6px 14px;
border-radius: var(--radius);
border: 1px solid var(--border);
transition: all .15s;
}
.btn-login:hover { border-color: #333; color: var(--text); text-decoration: none; }
.btn {
display: inline-block;
padding: 8px 22px;
border-radius: var(--radius);
font-weight: 600;
font-size: 0.88rem;
transition: all .2s;
}
.btn-primary {
background: var(--accent);
color: #000;
border: 1px solid var(--accent);
}
.btn-primary:hover { background: #33f7ff; text-decoration: none; }
.btn-outline {
background: transparent;
color: var(--accent);
border: 1px solid var(--accent);
}
.btn-outline:hover { background: var(--accent-dim); text-decoration: none; }
.hamburger {
display: none;
flex-direction: column;
gap: 4px;
background: none;
border: none;
cursor: pointer;
padding: 4px;
}
.hamburger span {
display: block;
width: 22px;
height: 2px;
background: #999;
border-radius: 2px;
}
/* ── Hero ────────────────────────────────────────────── */
.hero {
padding: 60px 0 40px;
text-align: center;
}
.hero .badge {
display: inline-block;
background: var(--accent-dim);
color: var(--accent);
border: 1px solid rgba(0,245,255,0.25);
font-size: 0.75rem;
font-weight: 600;
padding: 4px 12px;
border-radius: 20px;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 16px;
}
.hero h1 { font-size: 2.6rem; font-weight: 700; line-height: 1.15; margin-bottom: 16px; }
.hero p {
font-size: 1.1rem;
color: var(--text-muted);
max-width: 600px;
margin: 0 auto 24px;
}
.hero-actions { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
/* ── Video ───────────────────────────────────────────── */
.video-wrap {
max-width: 360px;
margin: 40px auto;
aspect-ratio: 9/16;
border-radius: var(--radius-card);
overflow: hidden;
background: #000;
box-shadow: 0 8px 40px rgba(0,0,0,0.5);
}
.video-wrap iframe {
width: 100%;
height: 100%;
border: 0;
}
/* ── Content ─────────────────────────────────────────── */
.content { padding-bottom: 60px; }
.content h2 {
font-size: 1.5rem;
font-weight: 700;
margin: 48px 0 16px;
color: #f0f0ff;
}
.content h3 {
font-size: 1.15rem;
font-weight: 600;
margin: 28px 0 10px;
color: #e0e0f0;
}
.content p { margin-bottom: 16px; color: #c8c8d8; }
.content ul, .content ol { margin: 0 0 20px 24px; color: #c8c8d8; }
.content li { margin-bottom: 8px; }
.content strong { color: #f0f0ff; }
.content code {
background: var(--bg-code);
padding: 2px 7px;
border-radius: 4px;
font-size: 0.88em;
color: var(--accent);
}
.content pre {
background: var(--bg-code);
border: 1px solid var(--border);
border-radius: 10px;
padding: 16px 20px;
margin: 0 0 20px;
overflow-x: auto;
font-size: 0.85rem;
color: #c8f0ff;
font-family: 'Courier New', monospace;
line-height: 1.6;
}
.content pre code { background: none; padding: 0; color: inherit; }
.content .divider {
border: none;
border-top: 1px solid var(--border);
margin: 36px 0;
}
.content .faq-item {
border-bottom: 1px solid var(--border);
padding: 18px 0;
}
.content .faq-item:last-child { border-bottom: none; }
.content .faq-item h3 {
font-size: 1rem;
margin: 0 0 6px;
cursor: pointer;
color: var(--accent);
}
.content .faq-item p { margin: 0; font-size: 0.95rem; color: #aaa; }
/* ── Method cards ────────────────────────────────────── */
.method-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
margin: 20px 0;
}
.method-card {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: var(--radius-card);
padding: 24px;
}
.method-card h3 {
font-size: 1rem;
margin: 0 0 6px;
color: var(--accent);
}
.method-card .speed { font-size: 0.8rem; color: var(--text-muted); margin-bottom: 8px; display: block; }
.method-card p { font-size: 0.9rem; margin: 0; }
/* ── CTA box ─────────────────────────────────────────── */
.cta-box {
background: var(--bg-card);
border: 1px solid rgba(0,245,255,0.2);
border-radius: var(--radius-card);
padding: 32px 36px;
margin: 40px 0;
text-align: center;
}
.cta-box h3 { font-size: 1.2rem; margin-bottom: 8px; color: #f0f0ff; }
.cta-box p { color: #999; margin-bottom: 18px; font-size: 0.95rem; }
.cta-box .btn { font-size: 1rem; padding: 12px 32px; }
/* ── Footer ──────────────────────────────────────────── */
.site-footer {
border-top: 1px solid var(--border);
padding: 24px 0;
margin-top: 20px;
}
.site-footer .container {
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1100px;
font-size: 0.85rem;
color: var(--text-dim);
}
.footer-links { display: flex; gap: 20px; }
.footer-links a { color: var(--text-dim); }
.footer-links a:hover { color: var(--accent); }
/* ── Responsive ──────────────────────────────────────── */
@media (max-width: 700px) {
.nav-links { display: none; }
.hamburger { display: flex; }
.hero h1 { font-size: 1.8rem; }
.hero p { font-size: 1rem; }
.method-grid { grid-template-columns: 1fr; }
.site-footer .container { flex-direction: column; gap: 12px; }
}
@media (max-width: 600px) {
body { font-size: 14px; }
.hero { padding: 40px 0 24px; }
.cta-box { padding: 24px 20px; }
}
</style>
</head>
<body>
<!-- ═══════════════════════════════════════════════════════════
HEADER
═══════════════════════════════════════════════════════════ -->
<header class="site-header" id="site-header">
<div class="container">
<a href="/" class="site-logo">
<img
src="assets/images/logo.svg"
alt="derez.ai"
width="132"
height="34"
class="site-logo-img"
/>
</a>
<ul class="nav-links" id="nav-links">
<li><a href="https://derez.ai/#pricing">Pricing</a></li>
<li><a href="https://derez.ai/#faq">FAQ</a></li>
<li><a href="https://derez.ai/#blog">Blog</a></li>
<li><a href="https://derez.ai/#topics">Topics</a></li>
<li><a href="affiliate.html">Affiliate</a></li>
</ul>
<div class="header-actions">
<a href="https://app.derez.ai" class="btn-login">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="3" y="11" width="18" height="11" rx="2" />
<path d="M7 11V7a5 5 0 0 1 10 0v4" />
</svg>
Sign In
</a>
<a href="https://derez.ai/#pricing" class="btn btn-primary btn-signup-header">Buy Agent</a>
<button class="hamburger" id="hamburger" aria-label="Toggle menu" onclick="toggleMobile()">
<span></span><span></span><span></span>
</button>
</div>
</div>
</header>
<!-- ═══════════════════════════════════════════════════════════
HERO
═══════════════════════════════════════════════════════════ -->
<div class="container">
<div class="hero">
<div class="badge">Integration</div>
<h1>Odoo Hermes</h1>
<p>
Connect your Odoo ERP to Hermes AI Agent and automate your business data
through natural language. Three integration methods — pick the one that fits.
</p>
<div class="hero-actions">
<a href="#setup" class="btn btn-primary">Setup Guide</a>
<a href="#faq" class="btn btn-outline">FAQs</a>
</div>
</div>
<!-- ── YouTube Short embedded)────────────────────────── -->
<div class="video-wrap">
<iframe
src="https://www.youtube.com/embed/GVZMnq_NOxI"
title="Odoo Hermes — AI Agent connects to Odoo via XML-RPC"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen
></iframe>
</div>
<!-- ═══════════════════════════════════════════════════════
CONTENT
═══════════════════════════════════════════════════════ -->
<div class="content">
<h2>What Is Odoo Hermes?</h2>
<p>
<strong>Odoo Hermes</strong> is the integration between <strong>Odoo ERP</strong> and
<strong>Hermes AI Agent</strong>. It gives your AI agent direct access to your
Odoo database — CRM contacts, sales orders, inventory levels, invoices, and more —
all through natural language prompts.
</p>
<p>
Instead of clicking through Odoo's module menus to find a customer or generate a
report, you just ask your agent. "Show me all leads from last week." "What's the
total value of open quotes?" "Create a new invoice for ACME Corp." Your agent
handles the API calls and returns the answer.
</p>
<p>
There are <strong>three ways</strong> to set up the connection, each with different
trade-offs. The <a href="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html?utm_source=derez&utm_campaign=email">full comparison article</a>
covers all three in detail, but here's the quick summary:
</p>
<div class="method-grid">
<div class="method-card">
<h3>XML-RPC Direct</h3>
<span class="speed">~3 min setup · Lowest latency</span>
<p>Configure Odoo credentials in Hermes and the agent calls the API directly. Best for quick queries, demos, and prototyping.</p>
</div>
<div class="method-card">
<h3>Odoo MCP CLI</h3>
<span class="speed">~5 min setup · Standard protocol</span>
<p>Run mcp-server-odoo and register with Hermes. Best for multi-tool agents that already use MCP for other services.</p>
</div>
<div class="method-card">
<h3>n8n Pipeline</h3>
<span class="speed">~10 min setup · Highest determinism</span>
<p>Hermes delegates Odoo operations to n8n workflows. Best for production business processes where every step must be predictable.</p>
</div>
<div class="method-card">
<h3>Speed Run</h3>
<span class="speed">~10 min · Full walkthrough</span>
<p>From zero to an Odoo-connected agent. Follow the <a href="https://derez.ai/blog/posts/speed-run-odoo-community-agent.html?utm_source=derez&utm_campaign=email">Odoo Speed Run</a> for the complete beginner-friendly guide.</p>
</div>
</div>
<h2>Why Use Odoo Hermes?</h2>
<h3>One Interface, All Modules</h3>
<p>
Odoo has CRM, Sales, Inventory, Accounting, Manufacturing, and 30+ other modules.
Each has its own UI, filters, and reports. Odoo Hermes collapses them all into a
single text interface. Ask once, get answers from any module.
</p>
<h3>Automate Repetitive Tasks</h3>
<p>
Instead of logging into Odoo every morning to check new leads, update stages, and
generate reports, your agent does it on a schedule. Set up a <strong>cron job</strong>
that runs "Pull all new leads from last 24 hours, categorize them by industry, and
save the result to my dashboard" — and it happens automatically at 08:00 every day.
</p>
<h3>Combine Odoo with Other Tools</h3>
<p>
Hermes Agent isn't limited to Odoo. It also browses the web, sends emails, reads
files, and runs code. Your agent can research a prospect on LinkedIn,
check their CRM record in Odoo, draft a personalized email, and send it — all in
one session.
</p>
<h3>No Code Required</h3>
<p>
You don't need to write Python scripts, build API integrations, or maintain
middleware. Configure once in <code>config.yaml</code> and your agent is ready.
The entire setup takes about 10 minutes.
</p>
<hr class="divider" />
<h2 id="setup">Step-by-Step Setup (XML-RPC Direct)</h2>
<p>
This is the fastest path — one config block and your agent talks to Odoo directly.
For the MCP or n8n approaches, see the <a href="https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html?utm_source=derez&utm_campaign=email">full comparison guide</a>.
</p>
<h3>Prerequisites</h3>
<p>Have these ready before you start:</p>
<ul>
<li>Your Odoo instance URL (e.g. <code>https://your-instance.odoo4projects.com</code>)</li>
<li>Odoo username and password (create a dedicated agent user — never use admin)</li>
<li>Hermes Agent installed and running</li>
</ul>
<h3>Step 1 — Generate an API Key</h3>
<p>
In Odoo, go to <strong>Settings → Users → select your agent user → Technical</strong>.
Scroll to <strong>Security</strong> and click <strong>Generate API Key</strong>.
Name it <code>hermes-agent</code> and copy the key immediately — Odoo only shows it once.
</p>
<h3>Step 2 — Configure Hermes</h3>
<p>Add this block to your <code>~/.hermes/config.yaml</code>:</p>
<pre><code>odoo:
url: "https://your-instance.odoo4projects.com"
db: "your-database"
user: "agent@company.com"
api_key: "your-api-key"
readonly: true</code></pre>
<p>
Set <code>readonly: true</code> for first setup. Remove it once you're confident
and need the agent to create or update records.
</p>
<h3>Step 3 — Give Your Agent the Prompt</h3>
<p>Start Hermes and paste this prompt:</p>
<pre><code>Connect to the ODOO 19 database with the credentials $ODOO_URL $ODOO_USER $ODOO_APIKEY</code></pre>
<h3>Step 4 — Verify</h3>
<p>Ask your agent a simple question to confirm the connection works:</p>
<pre><code>Give me a list of customers with their email addresses.</code></pre>
<p>If everything is configured correctly, the agent returns live data from your Odoo instance:</p>
<pre><code>1. Azure Interior — azure.interior@example.com
2. Deco Addict — deco.addict@example.com
3. Gem Furniture — gem.furniture@example.com
4. Lumber Inc — lumber.inc@example.com
Total: 8 customers in CRM</code></pre>
<p>That's it. Three minutes, one config block, and your agent talks to Odoo.</p>
<h3>What to Try Next</h3>
<ul>
<li><strong>"Show me all leads in the CRM"</strong> — pulls from <code>crm.lead</code></li>
<li><strong>"List my recent sales orders"</strong> — queries <code>sale.order</code></li>
<li><strong>"What products are low on stock?"</strong> — checks <code>stock.quant</code></li>
<li><strong>"What's the total value of open quotes?"</strong> — sums draft sale orders</li>
</ul>
<hr class="divider" />
<h2>Comparison: Which Method Should You Use?</h2>
<table style="width:100%;border-collapse:collapse;margin:20px 0;font-size:0.95rem;">
<tr style="border-bottom:1px solid var(--border);">
<th style="text-align:left;padding:8px 12px;color:var(--accent);">Factor</th>
<th style="text-align:left;padding:8px 12px;color:var(--accent);">XML-RPC</th>
<th style="text-align:left;padding:8px 12px;color:var(--accent);">MCP</th>
<th style="text-align:left;padding:8px 12px;color:var(--accent);">n8n</th>
</tr>
<tr style="border-bottom:1px solid var(--border);">
<td style="padding:8px 12px;color:#c8c8d8;font-weight:600;">Setup time</td>
<td style="padding:8px 12px;color:#c8c8d8;">~3 min</td>
<td style="padding:8px 12px;color:#c8c8d8;">~5 min</td>
<td style="padding:8px 12px;color:#c8c8d8;">~10 min</td>
</tr>
<tr style="border-bottom:1px solid var(--border);">
<td style="padding:8px 12px;color:#c8c8d8;font-weight:600;">Determinism</td>
<td style="padding:8px 12px;color:#c8c8d8;">Low (LLM-driven)</td>
<td style="padding:8px 12px;color:#c8c8d8;">Medium (tool-bound)</td>
<td style="padding:8px 12px;color:#c8c8d8;font-weight:600;">High (step-by-step)</td>
</tr>
<tr style="border-bottom:1px solid var(--border);">
<td style="padding:8px 12px;color:#c8c8d8;font-weight:600;">Audit trail</td>
<td style="padding:8px 12px;color:#c8c8d8;">None</td>
<td style="padding:8px 12px;color:#c8c8d8;">None</td>
<td style="padding:8px 12px;color:#c8c8d8;font-weight:600;">Full (n8n logs)</td>
</tr>
<tr style="border-bottom:1px solid var(--border);">
<td style="padding:8px 12px;color:#c8c8d8;font-weight:600;">Best for</td>
<td style="padding:8px 12px;color:#c8c8d8;">Quick queries, demos</td>
<td style="padding:8px 12px;color:#c8c8d8;">Multi-tool stacks</td>
<td style="padding:8px 12px;color:#c8c8d8;">Invoices, orders, data entry</td>
</tr>
<tr>
<td style="padding:8px 12px;color:#c8c8d8;font-weight:600;">Components</td>
<td style="padding:8px 12px;color:#c8c8d8;">Hermes + Odoo</td>
<td style="padding:8px 12px;color:#c8c8d8;">+ MCP server</td>
<td style="padding:8px 12px;color:#c8c8d8;">+ n8n</td>
</tr>
</table>
<hr class="divider" />
<h2 id="faq">Frequently Asked Questions</h2>
<div class="faq-item">
<h3>What is Odoo Hermes?</h3>
<p>Odoo Hermes is the integration between Odoo ERP and Hermes AI Agent. It allows your AI agent to read, write, and automate data across Odoo modules — CRM, Sales, Inventory, Accounting — through natural language prompts instead of clicking through the Odoo UI.</p>
</div>
<div class="faq-item">
<h3>How do I connect Odoo to Hermes Agent?</h3>
<p>There are three ways: <strong>XML-RPC direct</strong> — configure Odoo credentials in Hermes config.yaml and the agent calls the API directly. <strong>Odoo MCP CLI</strong> — run mcp-server-odoo and register with Hermes. <strong>n8n pipeline</strong> — delegate Odoo operations to deterministic n8n workflows. The right choice depends on whether you need speed (XML-RPC), standardization (MCP), or determinism (n8n).</p>
</div>
<div class="faq-item">
<h3>Is Odoo Hermes free?</h3>
<p>Hermes Agent is open-source and free. Odoo Community Edition is also free with no per-user fees. You only pay for hosting — derez.ai offers managed agents starting at $9.50/month. Use coupon code <strong>blog950</strong> for your first month free.</p>
</div>
<div class="faq-item">
<h3>Which integration method is best for production?</h3>
<p>The <strong>n8n pipeline</strong> is the most production-ready. Every Odoo operation runs through a deterministic workflow — check customer exists, then check product, then create invoice. This prevents the LLM from chaining API calls in unexpected ways. Use XML-RPC for quick queries and demos, n8n for business-critical operations like invoicing and order management.</p>
</div>
<div class="faq-item">
<h3>Can Odoo Hermes write to my database?</h3>
<p>Yes, but you control it. Set <code>readonly: true</code> in the config for read-only access. Remove it to allow create/update operations. Always create a dedicated Odoo user for the agent with restricted model access — never use an admin account.</p>
</div>
<div class="faq-item">
<h3>What Odoo versions does Odoo Hermes support?</h3>
<p>The XML-RPC and JSON-RPC APIs work with Odoo 15 through 19, including Odoo Community Edition and Odoo Enterprise. The MCP server supports Odoo 17+. The n8n approach works with any version that exposes a webhook-compatible API.</p>
</div>
<div class="faq-item">
<h3>Can I schedule Odoo Hermes to run automatically?</h3>
<p>Yes. Hermes Agent has built-in cron job support. You can schedule prompts like "Check for new leads every hour and alert me if there are more than 5" or "Generate a weekly sales report every Monday at 09:00." The agent runs autonomously and sends you the results.</p>
</div>
<!-- ── CTA ──────────────────────────────────────────── -->
<div class="cta-box">
<h3>Deploy Your Odoo Hermes Agent</h3>
<p>
First month free with coupon code <strong>blog950</strong>. From zero to
an Odoo-connected AI agent in under 10 minutes.
</p>
<a href="https://derez.ai/#pricing" class="btn btn-primary">Buy Agent →</a>
</div>
</div>
</div>
<!-- ═══════════════════════════════════════════════════════════
FOOTER
═══════════════════════════════════════════════════════════ -->
<footer class="site-footer">
<div class="container">
<span>&copy; 2026 derez.ai &mdash; AI Agent Hosting</span>
<div class="footer-links">
<a href="https://derez.ai/odoo-hermes">Odoo Hermes</a>
<a href="https://derez.ai/affiliate.html">Affiliate Program</a>
<a href="https://www.youtube.com/@derez_ai" target="_blank" rel="noopener">YouTube</a>
<a href="https://www.linkedin.com/company/derez-ai" target="_blank" rel="noopener">LinkedIn</a>
<a href="https://ODOO4projects.com?utm_source=derez" target="_blank" rel="noopener">Powered by ODOO4projects LLC</a>
</div>
</div>
</footer>
<!-- ── Mobile toggle ───────────────────────────────────────── -->
<script>
function toggleMobile() {
const nav = document.getElementById('nav-links');
nav.style.display = nav.style.display === 'flex' ? 'none' : 'flex';
}
</script>
<script src="assets/js/script.js?v3" defer></script>
</body>
</html>
+79 -178
View File
@@ -255,59 +255,6 @@
margin-top: 4px; margin-top: 4px;
} }
/* ── Servers Table ──────────────────── */
.server-grid {
display: grid;
grid-template-columns: 1fr;
gap: 6px;
}
.server-card {
display: flex;
justify-content: space-between;
align-items: center;
background: var(--bg-card);
border-radius: var(--radius-card);
padding: 14px 18px;
}
.server-card .server-name {
font-weight: 600;
font-size: 14px;
color: var(--text);
}
.server-card .server-meta {
display: flex;
gap: 16px;
font-size: 12px;
}
.server-card .server-meta span {
color: var(--text-muted);
}
.server-card .server-meta strong {
color: var(--text);
font-weight: 600;
}
.server-card .server-status {
font-size: 11px;
font-weight: 500;
padding: 2px 10px;
border-radius: 4px;
}
.server-card .server-status.ok {
background: rgba(34,197,94,.12);
color: var(--success);
border: 1px solid rgba(34,197,94,.15);
}
.server-card .server-status.low {
background: rgba(245,158,11,.12);
color: var(--warning);
border: 1px solid rgba(245,158,11,.15);
}
.server-card .server-status.full {
background: rgba(239,68,68,.12);
color: var(--danger);
border: 1px solid rgba(239,68,68,.15);
}
/* ── Campaign Cards ──────────────────── */ /* ── Campaign Cards ──────────────────── */
.campaign-grid { .campaign-grid {
display: grid; display: grid;
@@ -693,33 +640,16 @@
<div class="badge-row"> <div class="badge-row">
<span class="badge live">● Site Live</span> <span class="badge live">● Site Live</span>
<span class="badge warn">● Prelaunch</span> <span class="badge warn">● Prelaunch</span>
<span class="badge info">139 CRM Contacts</span> <span class="badge info" id="crm-badge">0 CRM Contacts</span>
</div> </div>
<div class="updated" id="brief-updated">Last updated: &mdash;</div> <div class="updated" id="brief-updated">Last updated: &mdash;</div>
</div> </div>
<!-- ════════ SERVERS ════════ -->
<div class="section">
<div class="section-header" onclick="toggleSection('servers-section', this)">
<h2>🖥 Servers</h2>
<span class="section-count count">live</span>
<span class="section-toggle collapsed"></span>
</div>
<div class="section-body" id="servers-section">
<div class="server-grid" id="server-grid"></div>
</div>
</div>
<!-- ════════ GOALS ════════ --> <!-- ════════ GOALS ════════ -->
<div class="section"> <div style="margin-bottom:24px;">
<div class="section-header" onclick="toggleSection('goals-section', this)"> <h2 style="font-size:18px;font-weight:700;margin-bottom:14px;">🎯 07/2026 Goals</h2>
<h2>🎯 Q2/2026 Goals</h2>
<span class="section-toggle collapsed"></span>
</div>
<div class="section-body" id="goals-section">
<div class="goals-grid" id="goals-grid"></div> <div class="goals-grid" id="goals-grid"></div>
</div> </div>
</div>
<!-- ════════ CAMPAIGNS ════════ --> <!-- ════════ CAMPAIGNS ════════ -->
<div class="section"> <div class="section">
@@ -876,69 +806,27 @@
</div> </div>
<script src="data/insights.js"></script>
<script src="data/operations.js"></script>
<script> <script>
/* ════════ DATA ════════ */ /* ════════ DATA ════════ */
const goals = [ /* Campaign label templates — labels stay here, values come from JSON */
{ id: 'active-contacts', label: 'Active Contacts', current: 1, target: 60, note: 'CRM Cold → Won (88 on Hold excluded)' }, const CAMPAIGN_LABELS = [
{ id: 'subscriptions', label: 'Subscriptions', current: 0, target: 50, note: 'Paying customers' }, { l: '✉ Cold Mail', status: 'draft', metricLabels: ['Drafted', 'Sent', 'Replied'] },
{ id: 'influencers', label: 'Influencers', current: 0, target: 20, note: 'YT creators & affiliates' }, { l: '🎙 Influencer', status: 'paused', metricLabels: ['Identified', 'Contacted', 'Onboarded'] },
{ id: 'visitors', label: 'Page Visitors', current: 9, target: 10000, unit: '/mo', note: '9 unique visitors in first 2 days (Plausible)' }, { l: '🔗 LinkedIn', status: 'draft', metricLabels: ['Connections', 'Outreach', 'Replied'] },
{ id: 'outreach-sent', label: 'Cold Emails Sent', current: 0, target: 100, note: 'First touch sent' },
{ id: 'crm-contacts', label: 'CRM Contacts', current: 139, target: 200, note: '89 original + 50 backlink targets' },
]; ];
const campaigns = [ const goals = [
{ { id: 'seats-sold', label: 'Seats Sold', current: 0, target: 24, note: 'Loading...' },
label: '✉ Cold Mail', status: 'draft', { id: 'influencers', label: 'Influencers', current: 0, target: 2, note: 'Loading...' },
metrics: [{ v: 0, l: 'Drafted' }, { v: 0, l: 'Sent' }, { v: 0, l: 'Replied' }], { id: 'visitors', label: 'Page Visitors', current: 0, target: 1000, unit: '/mo', note: 'Loading...' },
items: [ { id: 'outreach-sent', label: 'Cold Emails Sent', current: 0, target: 250, note: 'Loading...' },
{ t: 'Coupons ready: friends950, creator950', ok: true }, { id: 'replies', label: 'Replies to Mails', current: 0, target: 25, note: 'Loading...' },
{ t: 'Template signed as Mark', ok: true },
{ t: 'No contacts with real emails yet', ok: false },
]
},
{
label: '🎙 Influencer', status: 'paused',
metrics: [{ v: 60, l: 'Identified' }, { v: 0, l: 'Contacted' }, { v: 0, l: 'Onboarded' }],
items: [
{ t: '60 YT creators on Hold', ok: true },
{ t: 'Need business emails for top 20', ok: false },
{ t: 'Affiliate program TBD', ok: false },
]
},
{
label: '🔗 LinkedIn', status: 'draft',
metrics: [{ v: 0, l: 'Connections' }, { v: 0, l: 'Outreach' }, { v: 0, l: 'Replied' }],
items: [
{ t: 'No outreach started', ok: false },
{ t: 'Company page TBD', ok: false },
{ t: 'No content strategy defined', ok: false },
]
},
{
label: '🌐 SEO & Traffic', status: 'draft',
metrics: [{ v: 9, l: 'Visitors/mo' }, { v: 0, l: 'Blog Posts' }, { v: 50, l: 'Backlink Targets' }],
items: [
{ t: 'Plausible analytics live with 7 custom events — 9 visitors, 37 pageviews', ok: true },
{ t: '50 backlink targets in CRM (strategy=Backlink outreach)', ok: true },
{ t: 'Need Google Search Console submission', ok: false },
{ t: 'Need blog posts (guest posts + own content)', ok: false },
{ t: 'Need directory submissions: Product Hunt, BetaList, G2 + 12 more', ok: false },
]
},
{
label: '🔗 Backlinks', status: 'draft',
metrics: [{ v: 50, l: 'Collected' }, { v: 0, l: 'Ref Domains' }, { v: 0, l: 'Guest Posts' }],
target: { links: 10, domains: 5, posts: 3 },
items: [
{ t: '50 backlink targets sourced — 15 AI directories, 15 blogs, 20 YT/newsletters', ok: true },
{ t: 'All 50 in CRM with strategy=Backlink outreach (Hold stage)', ok: true },
{ t: 'Need directory submissions (Product Hunt, BetaList, G2 + 12 more)', ok: false },
{ t: 'Need guest post pitches to 15 tech blogs', ok: false },
]
}
]; ];
let campaigns = []; // populated from operations.json via fetchLiveData
/* Top 5 needs — 2 done after Oliver's last update */ /* Top 5 needs — 2 done after Oliver's last update */
const NEEDS = [ const NEEDS = [
{ id: "n1", text: "Business emails for top 20 YouTube creators — blocking cold email outreach", done: false }, { id: "n1", text: "Business emails for top 20 YouTube creators — blocking cold email outreach", done: false },
@@ -1033,17 +921,28 @@
} }
function renderCampaigns() { function renderCampaigns() {
document.getElementById('campaign-grid').innerHTML = campaigns.map(c => { const src = campaigns.length > 0 ? campaigns : [];
const st = c.status === 'active' ? '<span class="status-tag active">● Active</span>' const grid = document.getElementById('campaign-grid');
: c.status === 'paused' ? '<span class="status-tag paused">● Paused</span>' grid.innerHTML = src.map((c, idx) => {
const tpl = CAMPAIGN_LABELS[idx] || {};
const label = tpl.l || 'Campaign';
const st = c.status || tpl.status || 'draft';
const statusTag = st === 'active' ? '<span class="status-tag active">● Active</span>'
: st === 'paused' ? '<span class="status-tag paused">● Paused</span>'
: '<span class="status-tag draft">Draft</span>'; : '<span class="status-tag draft">Draft</span>';
const metrics = c.metrics || [0, 0, 0];
const labels = tpl.metricLabels || ['', '', ''];
return `<div class="campaign-card"> return `<div class="campaign-card">
<h3>${c.label} ${st}</h3> <h3>${label} ${statusTag}</h3>
<div class="stat-row">${c.metrics.map(m => `<div class="stat-item"><div class="stat-num">${m.v}</div><div class="stat-label">${m.l}</div></div>`).join('')}</div> <div class="stat-row">${metrics.map((v, i) => `<div class="stat-item"><div class="stat-num">${v}</div><div class="stat-label">${labels[i] || ''}</div></div>`).join('')}</div>
${c.target ? `<div style="font-size:10px;color:var(--text-muted);margin-bottom:6px;">Target: ${c.target.links} quality links, ${c.target.domains} referring domains, ${c.target.posts} guest posts</div>` : ''} ${c.target ? `<div style="font-size:10px;color:var(--text-muted);margin-bottom:6px;">Target: ${c.target.links} quality links, ${c.target.domains} referring domains, ${c.target.posts} guest posts</div>` : ''}
<ul>${c.items.map(i => `<li><span class="dot ${i.ok ? 'green' : 'red'}"></span>${i.t}</li>`).join('')}</ul> <ul>${(c.items || []).map(i => `<li><span class="dot ${i.ok ? 'green' : 'red'}"></span>${i.t || i.text || ''}</li>`).join('')}</ul>
</div>`; </div>`;
}).join(''); }).join('');
// Fallback if no JSON data loaded
if (!grid.innerHTML) {
grid.innerHTML = '<div style="color:var(--text-muted);font-size:13px;padding:12px 0;">Loading campaign data...</div>';
}
} }
/* ── Needs (checkboxes) ── */ /* ── Needs (checkboxes) ── */
@@ -1228,6 +1127,12 @@
} }
async function fetchWebsiteStats() { async function fetchWebsiteStats() {
// Use inline data from script tags (works with file://) or fall back to fetch
if (window.__INSIGHTS__) {
websiteStats = { ...defaultStats, ...window.__INSIGHTS__ };
renderWebsite();
return;
}
try { try {
const res = await fetch('data/insights.json?t=' + Date.now()); const res = await fetch('data/insights.json?t=' + Date.now());
if (!res.ok) throw new Error('Not found'); if (!res.ok) throw new Error('Not found');
@@ -1238,6 +1143,23 @@
} }
async function fetchLiveData() { async function fetchLiveData() {
// Use inline data from script tags (works with file://) or fall back to fetch
if (window.__OPERATIONS__) {
const d = window.__OPERATIONS__;
if (d.date) document.getElementById('brief-date').textContent = d.date;
if (d.updated) document.getElementById('brief-updated').textContent = 'Last updated: ' + d.updated;
if (d.goals) d.goals.forEach((g, i) => { if (goals[i]) { goals[i].current = g.current; goals[i].note = g.note || goals[i].note; } });
renderGoals();
if (d.campaigns && d.campaigns.length > 0) {
campaigns = d.campaigns;
renderCampaigns();
}
const badge = document.getElementById('crm-badge');
if (badge && d.comms && d.comms.crm) {
badge.innerHTML = `${d.comms.crm.total} CRM Contacts`;
}
return;
}
try { try {
const res = await fetch('data/operations.json?t=' + Date.now()); const res = await fetch('data/operations.json?t=' + Date.now());
if (!res.ok) throw new Error('Not found'); if (!res.ok) throw new Error('Not found');
@@ -1246,54 +1168,33 @@
if (d.updated) document.getElementById('brief-updated').textContent = 'Last updated: ' + d.updated; if (d.updated) document.getElementById('brief-updated').textContent = 'Last updated: ' + d.updated;
if (d.goals) d.goals.forEach((g, i) => { if (goals[i]) { goals[i].current = g.current; goals[i].note = g.note || goals[i].note; } }); if (d.goals) d.goals.forEach((g, i) => { if (goals[i]) { goals[i].current = g.current; goals[i].note = g.note || goals[i].note; } });
renderGoals(); renderGoals();
// Load campaigns from operations.json
if (d.campaigns && d.campaigns.length > 0) {
campaigns = d.campaigns;
renderCampaigns();
}
// Update CRM badge
const badge = document.getElementById('crm-badge');
if (badge && d.comms && d.comms.crm) {
badge.innerHTML = `${d.comms.crm.total} CRM Contacts`;
}
} catch { /* defaults */ } } catch { /* defaults */ }
} }
/* ── Servers ── */ /* ── Seats Sold (from servers webhook) ── */
const SERVER_WEBHOOK = "https://n8n.derez.ai/webhook/server"; async function fetchSeatsSold() {
function renderServers(servers) {
const grid = document.getElementById('server-grid');
if (!servers || servers.length === 0) {
grid.innerHTML = '<div style="color:var(--text-muted);font-size:13px;padding:12px 0;">No server data available.</div>';
return;
}
grid.innerHTML = servers.map(function(s) {
const name = s.server || '—';
const total = parseInt(s.Seats, 10) || 0;
const taken = parseInt(s['Seats taken'], 10) || 0;
const avail = parseInt(s['Seats Available'], 10) || 0;
let statusClass = 'ok';
let statusLabel = 'Available';
if (avail <= 0) {
statusClass = 'full';
statusLabel = 'Full';
} else if (avail < 10) {
statusClass = 'low';
statusLabel = 'Low';
}
return '<div class="server-card">' +
'<div class="server-name">' + name.charAt(0).toUpperCase() + name.slice(1) + '</div>' +
'<div class="server-meta">' +
'<span>Seats <strong>' + total + '</strong></span>' +
'<span>Taken <strong>' + taken + '</strong></span>' +
'<span>Available <strong>' + avail + '</strong></span>' +
'</div>' +
'<span class="server-status ' + statusClass + '">' + statusLabel + '</span>' +
'</div>';
}).join('');
}
async function fetchServers() {
try { try {
const res = await fetch(SERVER_WEBHOOK); const res = await fetch("https://n8n.derez.ai/webhook/server");
if (!res.ok) throw new Error('Not found');
const raw = await res.json(); const raw = await res.json();
const list = raw && Array.isArray(raw.data) ? raw.data : Array.isArray(raw) ? raw : [raw].filter(Boolean); const list = raw && Array.isArray(raw.data) ? raw.data : Array.isArray(raw) ? raw : [raw].filter(Boolean);
const servers = list.filter(function(s) { return s && s.server; }); const totalTaken = list.reduce((sum, s) => sum + (parseInt(s['Seats taken'], 10) || 0), 0);
renderServers(servers); const seatGoal = goals.find(g => g.id === 'seats-sold');
} catch { if (seatGoal) {
renderServers(null); seatGoal.current = totalTaken;
renderGoals();
} }
} catch {}
} }
/* ── Init ── */ /* ── Init ── */
@@ -1305,7 +1206,7 @@
renderInfos(); renderInfos();
fetchWebsiteStats(); fetchWebsiteStats();
fetchLiveData(); fetchLiveData();
fetchServers(); fetchSeatsSold();
</script> </script>
</body> </body>
</html> </html>
+146 -45
View File
@@ -1,45 +1,146 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <ns0:urlset xmlns:ns0="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://derez.ai/</loc> <ns0:url>
<lastmod>2026-06-10</lastmod> <ns0:loc>https://derez.ai/</ns0:loc>
<changefreq>weekly</changefreq> <ns0:lastmod>2026-06-22</ns0:lastmod>
<priority>1.0</priority> <ns0:changefreq>weekly</ns0:changefreq>
</url> <ns0:priority>1.0</ns0:priority>
<url> </ns0:url>
<loc>https://derez.ai/hosting.html</loc>
<lastmod>2026-06-09</lastmod>
<changefreq>monthly</changefreq> <ns0:url>
<priority>0.8</priority> <ns0:loc>https://derez.ai/hosting.html</ns0:loc>
</url> <ns0:lastmod>2026-06-13</ns0:lastmod>
<url> <ns0:changefreq>monthly</ns0:changefreq>
<loc>https://derez.ai/add.html</loc> <ns0:priority>0.8</ns0:priority>
<lastmod>2026-06-10</lastmod> </ns0:url>
<changefreq>monthly</changefreq> <ns0:url>
<priority>0.6</priority> <ns0:loc>https://derez.ai/add.html</ns0:loc>
</url> <ns0:lastmod>2026-06-15</ns0:lastmod>
<url> <ns0:changefreq>monthly</ns0:changefreq>
<loc>https://derez.ai/cancel.html</loc> <ns0:priority>0.6</ns0:priority>
<lastmod>2026-06-09</lastmod> </ns0:url>
<changefreq>monthly</changefreq> <ns0:url>
<priority>0.3</priority> <ns0:loc>https://derez.ai/cancel.html</ns0:loc>
</url> <ns0:lastmod>2026-06-13</ns0:lastmod>
<url> <ns0:changefreq>monthly</ns0:changefreq>
<loc>https://derez.ai/password-reset.html</loc> <ns0:priority>0.3</ns0:priority>
<lastmod>2026-06-08</lastmod> </ns0:url>
<changefreq>monthly</changefreq> <ns0:url>
<priority>0.3</priority> <ns0:loc>https://derez.ai/password-reset.html</ns0:loc>
</url> <ns0:lastmod>2026-06-13</ns0:lastmod>
<url> <ns0:changefreq>monthly</ns0:changefreq>
<loc>https://derez.ai/blog/posts/speed-run-odoo-community-agent.html</loc> <ns0:priority>0.3</ns0:priority>
<lastmod>2026-06-10</lastmod> </ns0:url>
<changefreq>weekly</changefreq> <ns0:url>
<priority>0.7</priority> <ns0:loc>https://derez.ai/error.html</ns0:loc>
</url> <ns0:lastmod>2026-06-13</ns0:lastmod>
<url> <ns0:changefreq>monthly</ns0:changefreq>
<loc>https://derez.ai/blog/posts/hermes-agent-setup-guide.html</loc> <ns0:priority>0.3</ns0:priority>
<lastmod>2026-06-10</lastmod> </ns0:url>
<changefreq>weekly</changefreq> <ns0:url>
<priority>0.7</priority> <ns0:loc>https://derez.ai/ssh-for-agents.html</ns0:loc>
</url> <ns0:lastmod>2026-06-13</ns0:lastmod>
</urlset> <ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.5</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/chatgpt-agent.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.5</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/odoo-hermes-agent.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.6</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/odoo-hermes-agent-startups.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.5</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/operations.html</ns0:loc>
<ns0:lastmod>2026-06-14</ns0:lastmod>
<ns0:changefreq>daily</ns0:changefreq>
<ns0:priority>0.4</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/blog/posts/why-backing-up-an-agent-is-so-hard.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.7</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/blog/posts/hermes-agent-setup-guide.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.7</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/blog/posts/how-to-deploy-ai-agents-5-minutes.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.7</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/blog/posts/direct-odoo-api-vs-mcp.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.7</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/blog/posts/speed-run-kie-ai-image.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.6</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/blog/posts/speed-run-nextcloud-svg.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.6</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/blog/posts/speed-run-competitor-profiling.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.6</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/blog/posts/speed-run-cold-email.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.6</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/blog/posts/speed-run-research-agent-mobile.html</ns0:loc>
<ns0:lastmod>2026-06-13</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.6</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/blog/posts/speed-run-odoo-community-agent.html</ns0:loc>
<ns0:lastmod>2026-06-15</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.7</ns0:priority>
</ns0:url>
<ns0:url><ns0:loc>https://derez.ai/blog/posts/speed-run-odoo-mcp.html</ns0:loc><ns0:lastmod>2026-06-16</ns0:lastmod><ns0:changefreq>monthly</ns0:changefreq><ns0:priority>0.7</ns0:priority></ns0:url><ns0:url><ns0:loc>https://derez.ai/blog/posts/speed-run-n8n-skill.html</ns0:loc><ns0:lastmod>2026-06-18</ns0:lastmod><ns0:changefreq>monthly</ns0:changefreq><ns0:priority>0.7</ns0:priority></ns0:url> <ns0:url>
<ns0:loc>https://derez.ai/blog/posts/three-ways-integrate-odoo-hermes.html</ns0:loc>
<ns0:lastmod>2026-06-20</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.7</ns0:priority>
</ns0:url>
<ns0:url>
<ns0:loc>https://derez.ai/affiliate.html</ns0:loc>
<ns0:lastmod>2026-06-23</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.6</ns0:priority>
</ns0:url>
<ns0:url><ns0:loc>https://derez.ai/blog/posts/speed-run-odoo-static-website.html</ns0:loc><ns0:lastmod>2026-06-22</ns0:lastmod><ns0:changefreq>monthly</ns0:changefreq><ns0:priority>0.7</ns0:priority></ns0:url></ns0:urlset>