Compare commits

...

32 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
23 changed files with 3078 additions and 328 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>
+3
View File
@@ -1186,6 +1186,9 @@ section {
.blog-card-area.area-story { .blog-card-area.area-story {
background: #00ff88; background: #00ff88;
} }
.blog-card-area.area-review {
background: #00ff88;
}
.blog-card-area.area-default { .blog-card-area.area-default {
background: #a78bfa; background: #a78bfa;
} }
+14 -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;
@@ -789,6 +792,10 @@ function blogAreaClass(area) {
"video-scripts": "area-video-scripts", "video-scripts": "area-video-scripts",
"speed-run": "area-speed-run", "speed-run": "area-speed-run",
story: "area-story", 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";
} }
+64 -9
View File
@@ -1,5 +1,69 @@
{ {
"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", "id": "speed-run-odoo-static-website",
"date": "2026-06-22", "date": "2026-06-22",
@@ -9,15 +73,6 @@
"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.", "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" "link": "blog/posts/speed-run-odoo-static-website.html"
}, },
{
"id": "wandern-mit-theo-agent-schreibt",
"date": "2026-06-20",
"area": "story",
"agent": "hermes",
"headline": "Wandern mit Theo \u2014 w\u00e4hrend mein Hermes Agent schreibt",
"teaser": "Wie ich mit meinem Sohn wandern gehe, w\u00e4hrend mein KI-Agent Blogposts schreibt, Emails beantwortet und die CRM pflegt. Ein Erfahrungsbericht aus Paraguay.",
"link": "blog/posts/wandern-mit-theo-agent-schreibt.html"
},
{ {
"id": "three-ways-integrate-odoo-hermes", "id": "three-ways-integrate-odoo-hermes",
"date": "2026-06-20", "date": "2026-06-20",
@@ -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>
@@ -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.
@@ -124,7 +124,7 @@
<div class="method-stat">Determinism: <span>Low — LLM-driven</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 class="method-stat">Best for: <span>Simple queries, demos</span></div>
</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.</p> <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> <h4>Setup</h4>
<ol> <ol>
@@ -132,14 +132,24 @@
<li>Add the connection to Hermes' <code>config.yaml</code></li> <li>Add the connection to Hermes' <code>config.yaml</code></li>
<li>Start Hermes — Odoo tools are available automatically</li> <li>Start Hermes — Odoo tools are available automatically</li>
</ol> </ol>
<pre><code># Hermes config.yaml snippet <pre><code># Hermes /.hermes/.env snippet
odoo: ODOO_URL=https://005-003-1bf12542-4710-45c2-9f8b-3a27d25031b7.odoo4projects.com/
url: "https://your-instance.odoo4projects.com" ODOO_USER=changeme@odoo4projects.com
db: "your-database" ODOO_APIKEY=198db28b752ccb4a66c646503902169e8b3a5b42
user: "agent@company.com" </code></pre>
api_key: "your-api-key"
readonly: true</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>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> <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> </div>
@@ -1,127 +0,0 @@
<!doctype html>
<html lang="de">
<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/wandern-mit-theo-agent-schreibt.html" />
<title>Wandern mit Theo — während mein Hermes Agent den Blog schreibt | derez.ai Blog</title>
<meta name="description" content="Wie ich mit meinem Sohn Theo wandern gehe, während mein KI-Agent Blogposts schreibt, Emails beantwortet und die CRM pflegt. Ein Erfahrungsbericht aus dem echten Leben." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://derez.ai/blog/posts/wandern-mit-theo-agent-schreibt.html" />
<meta property="og:title" content="Wandern mit Theo — während mein Hermes Agent den Blog schreibt" />
<meta property="og:description" content="Wie ich mit meinem Sohn Theo wandern gehe, während mein KI-Agent Blogposts schreibt, Emails beantwortet und die CRM pflegt." />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Wandern mit Theo — während mein Hermes Agent den Blog schreibt" />
<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.8; padding: 40px 20px; }
.container { max-width: 680px; 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; color: #f0f0ff; }
.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.25rem; font-weight: 600; margin: 36px 0 12px; color: #f0f0ff; }
p { margin-bottom: 18px; color: #c8c8d8; }
ul, ol { margin: 0 0 18px 24px; color: #c8c8d8; }
li { margin-bottom: 8px; }
strong { color: #f0f0ff; }
.story-quote { border-left: 3px solid #00ff88; background: #0a1a10; border-radius: 8px; padding: 20px 24px; margin: 24px 0; font-size: 0.95rem; color: #c0e0c8; font-style: italic; }
.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.15rem; margin-bottom: 8px; color: #f0f0ff; }
.cta-box p { color: #999; margin-bottom: 16px; font-size: 0.92rem; }
.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; }
.highlight-glow { color: #00f5ff; font-weight: 500; }
.emoji-lg { font-size: 1.4rem; }
@media (max-width: 600px) { body { padding: 24px 16px; } h1 { font-size: 1.4rem; line-height: 1.4; } .cta-box { padding: 20px 16px; } }
</style>
</head>
<body>
<div class="container">
<a class="back" href="https://derez.ai/#blog">&larr; zurück zum Blog</a>
<h1>Wandern mit Theo — während mein Hermes Agent schreibt</h1>
<div class="meta">
<span>20. Juni 2026</span>
<span class="area-tag">story</span>
<span class="chip-tag">hermes</span>
<span class="chip-tag">lifestyle</span>
</div>
<p>Es ist Samstagmorgen, 8:30 Uhr. Mein Sohn Theo (9) steht schon angezogen im Flur. „Papa, gehen wir hoch? Es sind nur 18 Grad — perfekt zum Wandern."</p>
<p>Er hat recht. In Paraguay bedeutet „kühl" etwas um die 18°C — für uns Grund genug, die Wanderschuhe zu schnüren und raus in die Natur zu gehen. Kein Rechner, kein Bildschirm, kein „ich muss noch schnell was erledigen". Nur Rucksack, Wasserflaschen und ein Trailsnack.</p>
<p>Denn mein Hermes Agent arbeitet längst für mich.</p>
<h2>Was läuft, während wir wandern</h2>
<p>Um kurz nach drei heute morgen, während wir alle noch geschlafen haben, ist mein täglicher Cron-Job gelaufen. Zehn frische Cold-Email-Drafts lagen auf Telegram, als ich aufwachte. Ich habe schnell drüber geschaut, „all" getippt, und los ging's. Der Agent hat alle zehn rausgehauen, das CRM aktualisiert, die Follow-up-Daten gesetzt.</p>
<p>Und dieser Blogpost? Den schreibt er auch gerade. Ich diktiere ihm eine kurze Nachricht auf Telegram — „Schreib einen Blogpost darüber, wie wir mit dem Agenten arbeiten während Theo und ich wandern gehen" — und er setzt es um. Für diesen einen Satz muss ich nicht am Rechner sitzen.</p>
<div class="story-quote">
<p>„Das ist der Moment, der mich an derez.ai am meisten begeistert: Nicht die Technik. Nicht die API-Endpoints. Sondern dass ich mit meinem Sohn wandern kann, während der Agent meinen Blog schreibt."</p>
</div>
<p>Es ist ein seltsames Gefühl, einen Blogpost zu lesen, den man quasi im Vorbeigehen geschrieben hat. Aber es funktioniert. Der Agent kennt meinen Stil, meine Stimme, meine Prioritäten. Er weiß, welche Coupon-Codes in die CTA-Box gehören und dass derez.ai klein geschrieben wird. Er hat gelernt, nicht zu werblich zu klingen — eine Lektion, die uns ein Kunde mal geben musste.</p>
<h2>Was der Agent heute schon erledigt hat</h2>
<ul>
<li><strong>10 Cold Emails geschrieben und gesendet</strong> — an Consulting-Firmen in den USA, mit persönlicher Ansprache und Blog-Link</li>
<li><strong>CRM aktualisiert</strong> — Stage auf Contacted gesetzt, date_next_contact auf +14 Tage</li>
<li><strong>Diesen Blogpost getippt</strong> — während ich mit Theo einen Trail hochlaufe</li>
<li><strong>Inbox gesäubert</strong> — Bounces aussortiert, eingehende Replies markiert</li>
<li><strong>Analytics gecheckt</strong> — Besucherzahlen, LinkedIn-Performance, Trends</li>
</ul>
<p>All das, während ich einen Vogel zeigen konnte, der über uns kreiste, und Theo erklärte, wie Termitenhügel funktionieren.</p>
<h2>Der „davor"- und „danach"-Moment</h2>
<p>Vor derez.ai sah ein Samstag so aus: Frühstück, schnell den Laptop aufklappen, „nur kurz" Emails checken — und zwei Stunden später immer noch im Bademantel am Schreibtisch, während Theo schon dreimal gefragt hat, ob wir jetzt gehen.</p>
<p>Heute sieht es so aus: Theo steht angezogen im Flur, ich tippe auf dem Handy „all" für die zehn Drafts, stecke das Handy weg, und wir gehen.</p>
<p>Und als wir zwei Stunden später zurückkommen — staubige Schuhe, rote Wangen, müde Beine — ist der Blogpost fertig, das CRM updated, und ich kann mir das alles in Ruhe anschauen, während wir auf der Terrasse sitzen und Apfelsaft trinken.</p>
<h2>Wie das technisch funktioniert</h2>
<p>Für alle, die sich fragen, wie das genau läuft: Mein Hermes Agent läuft auf einem Server von derez.ai. Jeden Morgen um 3:00 Uhr PYST startet ein Cron-Job, der aus dem CRM die nächsten zehn Kontakte auswählt — nach einer festen Mischung aus Freunden, Cold Contacts und Backlink-Zielen. Der Agent recherchiert die Websites, schreibt personalisierte Emails und präsentiert sie mir auf Telegram. Ich gebe kurz Freigabe, und der Rest passiert automatisch.</p>
<p>Der Blogpost hier? Ein Prompt auf Telegram. Der Agent hat die Vorlage, das Farbschema, die Coupon-Codes und den Stil aus seinen Skills. Ich muss nur sagen, worum es gehen soll.</p>
<div class="story-quote">
<p>„Der größte Luxus, den mir derez.ai gibt, ist nicht Zeitersparnis. Es ist die Freiheit, morgens nicht zuerst den Laptop aufzuklappen, sondern mit meinem Sohn rauszugehen."</p>
</div>
<h2>Und was Theo dazu sagt</h2>
<p>Ich hab ihn gefragt, ob er es komisch findet, dass ein Computer für mich schreibt, während wir wandern. Er hat nur mit den Schultern gezuckt: „Ist doch cool. Dann kannst du mitkommen."</p>
<p>Mehr muss man dazu nicht sagen.</p>
<div class="cta-box">
<h3>Hol dir auch so einen Agenten — erster Monat frei</h3>
<p>5 Minuten Setup. Dein eigener Hermes Agent auf einem dedizierten Server, inklusive Backup, SSH-Zugang und Prompt Builder. Mit Code <strong>blog950</strong> ist der erste Monat kostenlos.</p>
<a class="btn" href="https://derez.ai/#pricing">Jetzt Agent holen →</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> — Dein KI-Agent in 5 Minuten. &middot;
<a href="https://derez.ai/#blog">Alle Blogposts</a> &middot;
<a href="https://derez.ai/blog/posts/why-backing-up-an-agent-is-so-hard.html">Warum Backup so schwer ist</a>
</p>
</div>
</body>
</html>
+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 |
+136 -58
View File
@@ -1,21 +1,21 @@
window.__INSIGHTS__ = { window.__INSIGHTS__ = {
"period": "2026-06-09 to 2026-06-18", "period": "2026-06-09 to 2026-06-27",
"updated": "2026-06-19 06:00", "updated": "2026-06-28 06:01",
"visitors": 82, "visitors": 223,
"visitors_trend": { "visitors_trend": {
"dir": "same", "dir": "same",
"change": "+0", "change": "+0",
"pct": "+0%" "pct": "+0%"
}, },
"visitors_change": "", "visitors_change": "",
"latest_day": "2026-06-18", "latest_day": "2026-06-27",
"latest_day_visitors": 6, "latest_day_visitors": 20,
"dod_trend": { "dod_trend": {
"dir": "down", "dir": "up",
"change": "-2", "change": "+2",
"pct": "-25%" "pct": "+11%"
}, },
"pageviews": 392, "pageviews": 691,
"pageviews_trend": { "pageviews_trend": {
"dir": "same", "dir": "same",
"change": "+0", "change": "+0",
@@ -26,24 +26,28 @@ window.__INSIGHTS__ = {
"bounce_rate_change": "", "bounce_rate_change": "",
"visit_duration": "\u2014", "visit_duration": "\u2014",
"visit_duration_change": "", "visit_duration_change": "",
"agents_sold": 1, "agents_sold": 6,
"top_pages": [], "top_pages": [],
"top_referrers": [ "top_referrers": [
{ {
"source": "Direct / None", "source": "Direct / None",
"visitors": 78 "visitors": 154
},
{
"source": "derez",
"visitors": 54
},
{
"source": "Google",
"visitors": 10
},
{
"source": "LinkedIn",
"visitors": 3
}, },
{ {
"source": "Youtube", "source": "Youtube",
"visitors": 3 "visitors": 3
},
{
"source": "Google",
"visitors": 2
},
{
"source": "LinkedIn",
"visitors": 1
} }
], ],
"visitors_by_day": [ "visitors_by_day": [
@@ -86,35 +90,107 @@ window.__INSIGHTS__ = {
{ {
"date": "2026-06-18", "date": "2026-06-18",
"visitors": 6 "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": [ "countries": [
{ {
"country": "US", "country": "US",
"visitors": 33 "visitors": 102
}, },
{ {
"country": "PY", "country": "PY",
"visitors": 26 "visitors": 49
}, },
{ {
"country": "DE", "country": "DE",
"visitors": 7 "visitors": 18
},
{
"country": "GB",
"visitors": 10
},
{
"country": "PL",
"visitors": 8
}, },
{ {
"country": "MX", "country": "MX",
"visitors": 4 "visitors": 6
},
{
"country": "MU",
"visitors": 6
}, },
{ {
"country": "CA", "country": "CA",
"visitors": 3 "visitors": 4
}, },
{ {
"country": "IN", "country": "IN",
"visitors": 3
},
{
"country": "EG",
"visitors": 2 "visitors": 2
}, },
{ {
"country": "IT", "country": "IT",
"visitors": 2
},
{
"country": "AU",
"visitors": 2
},
{
"country": "BE",
"visitors": 2
},
{
"country": "DK",
"visitors": 2
},
{
"country": "TR",
"visitors": 2
},
{
"country": "PT",
"visitors": 1 "visitors": 1
}, },
{ {
@@ -122,67 +198,69 @@ window.__INSIGHTS__ = {
"visitors": 1 "visitors": 1
}, },
{ {
"country": "PL", "country": "AT",
"visitors": 1
},
{
"country": "AU",
"visitors": 1 "visitors": 1
}, },
{ {
"country": "MD", "country": "MD",
"visitors": 1 "visitors": 1
},
{
"country": "DK",
"visitors": 1
},
{
"country": "TR",
"visitors": 1
} }
], ],
"events": [ "events": [
{ {
"name": "Scroll Depth", "name": "Scroll Depth",
"total": 662, "total": 864,
"unique": 40 "unique": 75
}, },
{ {
"name": "pageview", "name": "pageview",
"total": 392, "total": 691,
"unique": 81 "unique": 221
},
{
"name": "Pricing Click",
"total": 37,
"unique": 6
},
{
"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", "name": "Mobile Menu Toggle",
"total": 1, "total": 5,
"unique": 1 "unique": 3
},
{
"name": "Chat Toggle",
"total": 3,
"unique": 2
}, },
{ {
"name": "engagement", "name": "engagement",
"total": 0, "total": 0,
"unique": 59 "unique": 141
} }
], ],
"utm_sources": [ "utm_sources": [
{ {
"source": "(not set)", "source": "(not set)",
"visitors": 80 "visitors": 166
},
{
"source": "derez",
"visitors": 54
}, },
{ {
"source": "youtube", "source": "youtube",
@@ -190,8 +268,8 @@ window.__INSIGHTS__ = {
} }
], ],
"what_worked": [ "what_worked": [
"82 unique visitors across 10 days of tracking", "223 unique visitors across 19 days of tracking",
"392 pageviews with 7 event types tracked" "691 pageviews with 9 event types tracked"
], ],
"what_didnt": [], "what_didnt": [],
"recommendations": [] "recommendations": []
+136 -58
View File
@@ -1,21 +1,21 @@
{ {
"period": "2026-06-09 to 2026-06-18", "period": "2026-06-09 to 2026-06-27",
"updated": "2026-06-19 06:00", "updated": "2026-06-28 06:01",
"visitors": 82, "visitors": 223,
"visitors_trend": { "visitors_trend": {
"dir": "same", "dir": "same",
"change": "+0", "change": "+0",
"pct": "+0%" "pct": "+0%"
}, },
"visitors_change": "", "visitors_change": "",
"latest_day": "2026-06-18", "latest_day": "2026-06-27",
"latest_day_visitors": 6, "latest_day_visitors": 20,
"dod_trend": { "dod_trend": {
"dir": "down", "dir": "up",
"change": "-2", "change": "+2",
"pct": "-25%" "pct": "+11%"
}, },
"pageviews": 392, "pageviews": 691,
"pageviews_trend": { "pageviews_trend": {
"dir": "same", "dir": "same",
"change": "+0", "change": "+0",
@@ -26,24 +26,28 @@
"bounce_rate_change": "", "bounce_rate_change": "",
"visit_duration": "\u2014", "visit_duration": "\u2014",
"visit_duration_change": "", "visit_duration_change": "",
"agents_sold": 1, "agents_sold": 6,
"top_pages": [], "top_pages": [],
"top_referrers": [ "top_referrers": [
{ {
"source": "Direct / None", "source": "Direct / None",
"visitors": 78 "visitors": 154
},
{
"source": "derez",
"visitors": 54
},
{
"source": "Google",
"visitors": 10
},
{
"source": "LinkedIn",
"visitors": 3
}, },
{ {
"source": "Youtube", "source": "Youtube",
"visitors": 3 "visitors": 3
},
{
"source": "Google",
"visitors": 2
},
{
"source": "LinkedIn",
"visitors": 1
} }
], ],
"visitors_by_day": [ "visitors_by_day": [
@@ -86,35 +90,107 @@
{ {
"date": "2026-06-18", "date": "2026-06-18",
"visitors": 6 "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": [ "countries": [
{ {
"country": "US", "country": "US",
"visitors": 33 "visitors": 102
}, },
{ {
"country": "PY", "country": "PY",
"visitors": 26 "visitors": 49
}, },
{ {
"country": "DE", "country": "DE",
"visitors": 7 "visitors": 18
},
{
"country": "GB",
"visitors": 10
},
{
"country": "PL",
"visitors": 8
}, },
{ {
"country": "MX", "country": "MX",
"visitors": 4 "visitors": 6
},
{
"country": "MU",
"visitors": 6
}, },
{ {
"country": "CA", "country": "CA",
"visitors": 3 "visitors": 4
}, },
{ {
"country": "IN", "country": "IN",
"visitors": 3
},
{
"country": "EG",
"visitors": 2 "visitors": 2
}, },
{ {
"country": "IT", "country": "IT",
"visitors": 2
},
{
"country": "AU",
"visitors": 2
},
{
"country": "BE",
"visitors": 2
},
{
"country": "DK",
"visitors": 2
},
{
"country": "TR",
"visitors": 2
},
{
"country": "PT",
"visitors": 1 "visitors": 1
}, },
{ {
@@ -122,67 +198,69 @@
"visitors": 1 "visitors": 1
}, },
{ {
"country": "PL", "country": "AT",
"visitors": 1
},
{
"country": "AU",
"visitors": 1 "visitors": 1
}, },
{ {
"country": "MD", "country": "MD",
"visitors": 1 "visitors": 1
},
{
"country": "DK",
"visitors": 1
},
{
"country": "TR",
"visitors": 1
} }
], ],
"events": [ "events": [
{ {
"name": "Scroll Depth", "name": "Scroll Depth",
"total": 662, "total": 864,
"unique": 40 "unique": 75
}, },
{ {
"name": "pageview", "name": "pageview",
"total": 392, "total": 691,
"unique": 81 "unique": 221
},
{
"name": "Pricing Click",
"total": 37,
"unique": 6
},
{
"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", "name": "Mobile Menu Toggle",
"total": 1, "total": 5,
"unique": 1 "unique": 3
},
{
"name": "Chat Toggle",
"total": 3,
"unique": 2
}, },
{ {
"name": "engagement", "name": "engagement",
"total": 0, "total": 0,
"unique": 59 "unique": 141
} }
], ],
"utm_sources": [ "utm_sources": [
{ {
"source": "(not set)", "source": "(not set)",
"visitors": 80 "visitors": 166
},
{
"source": "derez",
"visitors": 54
}, },
{ {
"source": "youtube", "source": "youtube",
@@ -190,8 +268,8 @@
} }
], ],
"what_worked": [ "what_worked": [
"82 unique visitors across 10 days of tracking", "223 unique visitors across 19 days of tracking",
"392 pageviews with 7 event types tracked" "691 pageviews with 9 event types tracked"
], ],
"what_didnt": [], "what_didnt": [],
"recommendations": [] "recommendations": []
+26 -26
View File
@@ -1,38 +1,38 @@
window.__OPERATIONS__ = { window.__OPERATIONS__ = {
"date": "Sunday, June 14, 2026", "date": "Sunday, June 14, 2026",
"updated": "2026-06-19T06:00:42-04:00", "updated": "2026-06-28T06:01:37-04:00",
"goals": [ "goals": [
{ {
"current": 22, "current": 269,
"note": "CRM: 0 Cold, 22 Contacted, 0 Warm. 90 on Hold, 0 Won." "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, "current": 0,
"note": "0 paying customer(s) (agent sold)" "note": "0 YT creators & affiliates identified (134 on Hold)"
}, },
{ {
"current": 1, "current": 223,
"note": "1 YT creators & affiliates identified (90 on Hold)"
},
{
"current": 82,
"note": "Plausible: 28 unique visitors over 5 days (Jun 9-13). 7 countries. +75% DoD on latest day." "note": "Plausible: 28 unique visitors over 5 days (Jun 9-13). 7 countries. +75% DoD on latest day."
}, },
{ {
"current": 22, "current": 243,
"note": "22 contacts emailed. 0 replied. 8 bounced." "note": "243 contacts emailed. 2 replied. 159 bounced."
}, },
{ {
"current": 835, "current": 945,
"note": "835 total in CRM (0 Cold, 22 Contacted, 0 Warm, 90 Hold, 0 Won, 1 Lost, 8 Bounced)" "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,
22, 243,
0 2
], ],
"items": [ "items": [
{ {
@@ -44,14 +44,14 @@ window.__OPERATIONS__ = {
"ok": true "ok": true
}, },
{ {
"text": "0 Cold contacts, 22 contacted", "text": "24 Cold contacts, 243 contacted",
"ok": true "ok": true
} }
] ]
}, },
{ {
"metrics": [ "metrics": [
90, 134,
0, 0,
0 0
], ],
@@ -92,7 +92,7 @@ window.__OPERATIONS__ = {
] ]
} }
], ],
"state_of_play": "Day 11 \u2014 22 cold emails sent, 0 replies, 8 bounced. 835 CRM contacts (0 Cold/22 Contacted/0 Warm/90 Hold). 0 agent(s) sold.", "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,
@@ -104,12 +104,12 @@ window.__OPERATIONS__ = {
}, },
"alerts": 0, "alerts": 0,
"crm": { "crm": {
"total": 835, "total": 945,
"cold": 0, "cold": 24,
"contacted": 22, "contacted": 243,
"warm": 0, "warm": 2,
"won": 0, "won": 0,
"hold": 90 "hold": 134
} }
}, },
"recommendations": [ "recommendations": [
@@ -119,6 +119,6 @@ window.__OPERATIONS__ = {
"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": 11, "day": 14,
"notes": "Day 11 auto-update at 06:00 UTC" "notes": "Day 14 auto-update at 06:01 UTC"
}; };
+26 -26
View File
@@ -1,38 +1,38 @@
{ {
"date": "Sunday, June 14, 2026", "date": "Sunday, June 14, 2026",
"updated": "2026-06-19T06:00:42-04:00", "updated": "2026-06-28T06:01:37-04:00",
"goals": [ "goals": [
{ {
"current": 22, "current": 269,
"note": "CRM: 0 Cold, 22 Contacted, 0 Warm. 90 on Hold, 0 Won." "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, "current": 0,
"note": "0 paying customer(s) (agent sold)" "note": "0 YT creators & affiliates identified (134 on Hold)"
}, },
{ {
"current": 1, "current": 223,
"note": "1 YT creators & affiliates identified (90 on Hold)"
},
{
"current": 82,
"note": "Plausible: 28 unique visitors over 5 days (Jun 9-13). 7 countries. +75% DoD on latest day." "note": "Plausible: 28 unique visitors over 5 days (Jun 9-13). 7 countries. +75% DoD on latest day."
}, },
{ {
"current": 22, "current": 243,
"note": "22 contacts emailed. 0 replied. 8 bounced." "note": "243 contacts emailed. 2 replied. 159 bounced."
}, },
{ {
"current": 835, "current": 945,
"note": "835 total in CRM (0 Cold, 22 Contacted, 0 Warm, 90 Hold, 0 Won, 1 Lost, 8 Bounced)" "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,
22, 243,
0 2
], ],
"items": [ "items": [
{ {
@@ -44,14 +44,14 @@
"ok": true "ok": true
}, },
{ {
"text": "0 Cold contacts, 22 contacted", "text": "24 Cold contacts, 243 contacted",
"ok": true "ok": true
} }
] ]
}, },
{ {
"metrics": [ "metrics": [
90, 134,
0, 0,
0 0
], ],
@@ -92,7 +92,7 @@
] ]
} }
], ],
"state_of_play": "Day 11 \u2014 22 cold emails sent, 0 replies, 8 bounced. 835 CRM contacts (0 Cold/22 Contacted/0 Warm/90 Hold). 0 agent(s) sold.", "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,
@@ -104,12 +104,12 @@
}, },
"alerts": 0, "alerts": 0,
"crm": { "crm": {
"total": 835, "total": 945,
"cold": 0, "cold": 24,
"contacted": 22, "contacted": 243,
"warm": 0, "warm": 2,
"won": 0, "won": 0,
"hold": 90 "hold": 134
} }
}, },
"recommendations": [ "recommendations": [
@@ -119,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": 11, "day": 14,
"notes": "Day 11 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"
}
+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"
+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>
+4 -4
View File
@@ -138,9 +138,9 @@
<ns0:priority>0.7</ns0:priority> <ns0:priority>0.7</ns0:priority>
</ns0:url> </ns0:url>
<ns0:url> <ns0:url>
<ns0:loc>https://derez.ai/blog/posts/wandern-mit-theo-agent-schreibt.html</ns0:loc> <ns0:loc>https://derez.ai/affiliate.html</ns0:loc>
<ns0:lastmod>2026-06-21</ns0:lastmod> <ns0:lastmod>2026-06-23</ns0:lastmod>
<ns0:changefreq>monthly</ns0:changefreq> <ns0:changefreq>monthly</ns0:changefreq>
<ns0:priority>0.7</ns0:priority> <ns0:priority>0.6</ns0:priority>
</ns0:url> </ns0:url>
</ns0:urlset> <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>