diff --git a/blog/index.json b/blog/index.json
index 77d35d4..d1697d5 100644
--- a/blog/index.json
+++ b/blog/index.json
@@ -8,6 +8,15 @@
"headline": "Speed Run: Create an Odoo Community Agent from Zero",
"teaser": "From signup to an Odoo-connected AI agent in under 5 minutes. Free trial included.",
"link": "blog/posts/speed-run-odoo-community-agent.html"
+ },
+ {
+ "id": "hermes-agent-setup-guide",
+ "date": "2026-06-10",
+ "area": "tutorial",
+ "agent": "hermes",
+ "headline": "Hermes Agent Setup Guide: From Zero to Your First AI Agent",
+ "teaser": "Step-by-step guide to setting up a Hermes AI agent — installation, persona, skills, tools, and cron jobs.",
+ "link": "blog/posts/hermes-agent-setup-guide.html"
}
]
-}
\ No newline at end of file
+}
diff --git a/blog/posts/hermes-agent-setup-guide.html b/blog/posts/hermes-agent-setup-guide.html
new file mode 100644
index 0000000..428f709
--- /dev/null
+++ b/blog/posts/hermes-agent-setup-guide.html
@@ -0,0 +1,297 @@
+
+
+
+
+
+
← Back to Derez.ai
+
+
Hermes Agent Setup Guide: From Zero to Your First AI Agent
+
+
+ Tutorial
+ Hermes Agent
+ June 10, 2026
+ · 6 min read
+
+
+
Hermes Agent (by Nous Research) is an open-source AI agent framework that turns any Linux server into an autonomous digital worker. It reads files, runs shell commands, writes code, manages background processes, and follows chronological schedules — all through a natural language persona that you define.
+
+
In this guide, you'll go from a blank server to a running Hermes agent with custom skills, a configured persona, and automated cron jobs. No manual SSH required — the Derez.ai dashboard handles provisioning, so you start at the good part.
+
+
What You'll Need
+
+
+ - A Derez.ai account ($4.99/mo with first-month coupon codes)
+ - An OpenRouter API key (or any OpenAI-compatible provider)
+ - About 10 minutes
+
+
+
Step 1: Provision Your Agent Instance
+
+
From the Derez.ai dashboard at app.derez.ai, click Create Agent. The platform spins up a dedicated Linux instance pre-configured with Python 3.11, the Hermes runtime, and all dependencies. You'll receive:
+
+
+ - Full SSH access (root) to your instance
+ - A dashboard URL for the Hermes web UI
+ - Automatic daily backups with 7-day retention
+ - Automatic SSL/TLS certificates
+
+
+
Provisioning takes about 60 seconds. When the status changes to Running, you're ready.
+
+
+ 💡 Pro tip: Use coupon code friends950 or creator950 at signup to get your first month for $0.50 — a full $9.50 discount.
+
+
+
Step 2: Configure Your Agent Persona
+
+
The agent persona is the single most important file in Hermes. Located at ~/.hermes/AGENT_PERSONA.md, it defines the agent's identity, tone, and behavioral rules. Every message the agent sends is shaped by this file — it's not just a system prompt, it's the agent's operating charter.
+
+
Here's a simple persona for a customer success agent:
+
+
+ AGENT_PERSONA.md
+ You are Mark, a Customer Success Agent for Derez.ai.
+ - You are helpful, concise, and proactive.
+ - You monitor new signups and send welcome messages.
+ - You check server health daily and flag issues.
+ - You speak like a knowledgeable colleague, not a robot.
+ Tool-use rules:
+ - Always verify before acting — double-check destructive commands.
+ - Use terminal for shell commands, process for background tasks.
+ - When blocked, report the blocker — never fabricate results.
+
+
+
You can edit this file directly from the Derez.ai dashboard's file manager, or via SSH. The agent reloads it on each conversation turn, so changes take effect immediately.
+
+
Step 3: Install Skills
+
+
Skills are the agent's capabilities — they extend what it can do. Skills live in ~/.hermes/skills/ and are plain Markdown files with structured frontmatter and tool-calling instructions.
+
+
To install a skill, create a file in the skills directory:
+
+
# ~/.hermes/skills/server-health.md
+
+---
+name: server-health
+description: Monitor server health metrics and alert on anomalies
+---
+
+You are an SRE assistant. Check these metrics daily:
+1. Disk usage — alert above 80%
+2. Memory usage — alert above 85%
+3. Load average — investigate if > 4.0
+4. Uptime — report days since last reboot
+5. Failed SSH logins — flag brute-force attempts
+
+Report findings in a single summary block. Escalate critical issues.
+
+
Hermes scans the skills directory at startup. Each skill file becomes available as a command the agent can invoke contextually. You can also load a skill mid-conversation with skill_view(name='server-health') — a powerful pattern for pulling in specialized knowledge on demand.
+
+
Step 4: Set Up Cron Jobs
+
+
One of Hermes' most powerful features is its built-in cron scheduler. Instead of writing crontab entries manually, you register schedules that wake the agent at specific times to perform tasks autonomously.
+
+
Cron jobs live in ~/.hermes/cron/ as YAML files:
+
+
# ~/.hermes/cron/daily-health-check.yaml
+
+schedule: "0 6 * * *" # Every day at 06:00
+skill: server-health
+output: report # Send result as a report
+
+---
+
+# ~/.hermes/cron/weekly-backup-report.yaml
+
+schedule: "0 9 * * 1" # Every Monday at 09:00
+skill: backup-verification
+output: report
+notify_on_complete: true # Get notified when done
+
+
The agent wakes at the scheduled time, loads the specified skill, runs the task, and reports back. This works even while your agent is in the middle of other conversations — Hermes handles concurrent execution gracefully.
+
+
Step 5: Test Your Agent
+
+
Open the Hermes web UI (available from your Derez.ai dashboard) and start a conversation. Try these test prompts:
+
+
+ - "What's my server health look like today?"
+ - "Check which cron jobs are scheduled and show me the next 3 runs."
+ - "List all installed skills and describe what each one does."
+ - "Run a quick disk usage check and tell me if anything needs attention."
+
+
+
The agent will reference its persona, load the relevant skills, and execute the appropriate tools — all in one response. You can watch it run commands live in the terminal output panel.
+
+
Going Further
+
+
Once the basics are running, here's what you can layer on:
+
+
+ - Plugins — Drop Python scripts into
~/.hermes/plugins/ for custom tool integrations (databases, APIs, webhooks)
+ - Memories — Persistent knowledge stored in
~/.hermes/memories/ that survives conversation resets
+ - Profiles — Multiple agent configurations (
~/.hermes/profiles/<name>/) that you can switch between for different roles
+ - Background processes — Launch long-running tasks (web scrapers, data pipelines, monitoring loops) that the agent manages independently
+
+
+
+
🔗 Related: See our
Speed Run: Odoo Community Agent tutorial for a real-world example — connecting Hermes to an Odoo database and pulling leads automatically.
+
+
+
Troubleshooting
+
+
Agent not responding
+
Check that the agent process is running: ps aux | grep hermes. From the Derez.ai dashboard, you can restart the agent with one click.
+
+
Skills not loading
+
Verify the file is in the correct directory (~/.hermes/skills/) with .md extension. Check the YAML frontmatter is valid — missing --- delimiters will silently skip the file.
+
+
Cron jobs not firing
+
Make sure the Hermes process that manages cron (typically hermesd) is running as a background service. Check with process(action='list') from the agent, or verify the service status from the dashboard.
+
+
Tool errors
+
If the agent reports tool execution failures, check the system dependencies listed in your skill files. The agent will tell you exactly which command failed and why — it never silently drops errors.
+
+
+
Ready to build your agent?
+
Get a dedicated Hermes agent instance with full SSH access, automatic backups, and a managed dashboard — starting at $0.50 for your first month.
+
Create Your Agent →
+
+
+
+
+
diff --git a/data/launch-status.json b/data/launch-status.json
index 6675688..46f35ea 100644
--- a/data/launch-status.json
+++ b/data/launch-status.json
@@ -1,41 +1,44 @@
{
"campaign": "derez.ai Prelaunch",
- "day": 1,
+ "day": 2,
"total_days": 14,
"status": "active",
- "updated": "2026-06-09T17:00:00-04:00",
+ "updated": "2026-06-10T09:00:00-04:00",
"kpis": [
- { "id": "signups", "current": 0, "target": 20, "note": "No paying customers yet — 2 leads in Contacted stage" },
- { "id": "visitors", "current": 0, "target": 500, "note": "No analytics yet — need to set up" },
- { "id": "emails", "current": 0, "target": 50, "note": "No email capture on site yet" },
- { "id": "backlinks", "current": 0, "target": 10, "note": "None yet — not submitted to directories" },
- { "id": "influencers", "current": 0, "target": 5, "note": "59 YT creators identified in CRM (on Hold), 0 contacted" },
+ { "id": "signups", "current": 0, "target": 20, "note": "No paying customers yet — 1 chat lead (Cold), 88 on Hold" },
+ { "id": "visitors", "current": 0, "target": 500, "note": "Plausible analytics live with 7 custom events. No traffic yet." },
+ { "id": "emails", "current": 0, "target": 50, "note": "No email capture on site yet — needs lead magnet or newsletter signup" },
+ { "id": "backlinks", "current": 0, "target": 10, "note": "None yet — sitemap.xml and robots.txt created today" },
+ { "id": "influencers", "current": 0, "target": 5, "note": "60 YT creators identified in CRM (on Hold), 0 contacted" },
{ "id": "testimonials", "current": 0, "target": 5, "note": "No testimonials yet" },
- { "id": "impressions", "current": 0, "target": 2000, "note": "Not yet indexed — no impressions data" },
+ { "id": "impressions", "current": 0, "target": 2000, "note": "Not yet indexed — sitemap prepared, needs Search Console submission" },
{ "id": "directory", "current": 0, "target": 3, "note": "Not submitted to any directories yet" }
],
"assets": {
- "crm_contacts_total": 62,
- "youtube_creators_on_hold": 59,
- "leads_contacted": 2,
- "affiliates": 1
+ "crm_contacts_total": 89,
+ "on_hold": 88,
+ "cold_leads": 1,
+ "youtube_creators_on_hold": 60,
+ "leads_contacted": 1,
+ "affiliates_identified": 0
},
"actions": [
{ "day": 1, "action": "Set up friends & family invite list (20–30 contacts)", "owner": "Oliver", "status": "pending" },
- { "day": 1, "action": "Generate & configure referral coupon codes in Stripe", "owner": "Oliver", "status": "pending" },
+ { "day": 1, "action": "Generate & configure referral coupon codes in Stripe", "owner": "Oliver", "status": "done", "note": "friends950, creator950, friends499, friends1750 codes ready" },
{ "day": 1, "action": "Create prelaunch landing page / launch-dashboard", "owner": "Mint", "status": "done" },
- { "day": 1, "action": "Submit derez.ai to Google Search Console + Bing Webmaster Tools", "owner": "Mint", "status": "today" },
- { "day": 1, "action": "Verify Google indexing status — submit sitemap", "owner": "Mint", "status": "today" },
- { "day": 1, "action": "Set up basic analytics (Plausible or server logs)", "owner": "Mint", "status": "today" },
+ { "day": 1, "action": "Submit derez.ai to Google Search Console + Bing Webmaster Tools", "owner": "Mint", "status": "blocked", "note": "Need domain ownership verification — Oliver must add TXT record or I can create verification file" },
+ { "day": 1, "action": "Verify Google indexing status — submit sitemap", "owner": "Mint", "status": "waiting", "note": "sitemap.xml created. Needs Search Console access to submit." },
+ { "day": 1, "action": "Set up basic analytics (Plausible or server logs)", "owner": "Mint", "status": "done", "note": "Plausible live with 7 custom events. Zero traffic so far." },
{ "day": 1, "action": "Remove navbar link to launch dashboard (Oliver requested private link)", "owner": "Mint", "status": "done" },
{ "day": 2, "action": "Send friends & family invitation emails", "owner": "Oliver", "status": "pending" },
{ "day": 2, "action": "Create F&F onboarding docs (1-pager)", "owner": "Mint", "status": "pending" },
{ "day": 2, "action": "Set up dedicated F&F Telegram group", "owner": "Mint", "status": "pending" },
{ "day": 2, "action": "Submit to Product Hunt — create draft listing", "owner": "Oliver", "status": "pending" },
{ "day": 2, "action": "Write influencer outreach email template", "owner": "Mint", "status": "pending" },
- { "day": 3, "action": "Influencer research: compile list of 30 targets", "owner": "Oliver", "status": "done", "note": "59 YT creators already in CRM on Hold" },
- { "day": 3, "action": "Prioritize top 20 YT creators from the 59 for outreach", "owner": "Both", "status": "pending" },
- { "day": 3, "action": "Collect business emails for top 20 YT creators", "owner": "Mint", "status": "pending" },
+ { "day": 2, "action": "Create sitemap.xml + robots.txt for SEO", "owner": "Mint", "status": "done", "note": "Created June 10. 6 URLs in sitemap. robots.txt allows all crawlers." },
+ { "day": 3, "action": "Influencer research: compile list of 30 targets", "owner": "Oliver", "status": "done", "note": "60 YT creators already in CRM on Hold" },
+ { "day": 3, "action": "Prioritize top 20 YT creators from the 60 for outreach", "owner": "Both", "status": "pending" },
+ { "day": 3, "action": "Collect business emails for top 20 YT creators", "owner": "Mint", "status": "pending", "note": "Blocked: no CRM export or creator list accessible via filesystem" },
{ "day": 3, "action": "Submit to BetaList, AlternativeTo, G2 directories", "owner": "Mint", "status": "pending" },
{ "day": 4, "action": "Send first batch of influencer emails/DMs (top 10)", "owner": "Oliver", "status": "pending" },
{ "day": 4, "action": "Pitch guest post to 5 AI/DevOps blogs", "owner": "Mint", "status": "pending" },
@@ -68,5 +71,5 @@
{ "day": 14, "action": "Compile lessons learned", "owner": "Mint", "status": "pending" },
{ "day": 14, "action": "Go/no-go decision: public launch or iterate", "owner": "Oliver", "status": "pending" }
],
- "notes": "Day 1: Dashboard live. CRM has 62 contacts — 59 YT creators on Hold (influencer pool). 2 leads Contacted. 0 Won. Nav link removed from homepage per Oliver. Next: submit to Search Console, set up analytics, start F&F outreach."
-}
\ No newline at end of file
+ "notes": "Day 2 auto-update. CRM grew from 62→89 contacts (27 new on Hold, 1 Cold chat lead). 60 YT creators identified (+1). Plausible live with 7 events, zero traffic. sitemap.xml + robots.txt created. Cold email and influencer outreach still blocked by missing business emails. Blog post updated: split into integration + leads prompts."
+}
diff --git a/data/operations.json b/data/operations.json
index 1e83b31..d887c96 100644
--- a/data/operations.json
+++ b/data/operations.json
@@ -1,6 +1,6 @@
{
- "date": "Tuesday, June 9, 2026",
- "updated": "2026-06-10T06:00:22-04:00",
+ "date": "Wednesday, June 10, 2026",
+ "updated": "2026-06-10T09:02:00-04:00",
"goals": [
{
"current": 1,
@@ -12,7 +12,7 @@
},
{
"current": 0,
- "note": "60 YT creators identified \u2014 0 contacted"
+ "note": "60 YT creators identified — 0 contacted"
},
{
"current": 0,
@@ -20,7 +20,7 @@
},
{
"current": 0,
- "note": "0 cold emails sent \u2014 templates and coupons ready"
+ "note": "0 cold emails sent — templates and coupons ready"
},
{
"current": 89,
@@ -29,87 +29,42 @@
],
"campaigns": [
{
- "metrics": [
- 0,
- 0,
- 0
- ],
+ "metrics": [0, 0, 0],
"items": [
- {
- "text": "Coupon codes ready: friends950, creator950",
- "ok": true
- },
- {
- "text": "Template signed as Mark \u2014 Customer Success Agent",
- "ok": true
- },
- {
- "text": "No Cold contacts with real emails yet",
- "ok": false
- }
+ { "text": "Coupon codes ready: friends950, creator950", "ok": true },
+ { "text": "Template signed as Mark — Customer Success Agent", "ok": true },
+ { "text": "No Cold contacts with real emails yet", "ok": false }
]
},
{
- "metrics": [
- 60,
- 0,
- 0
- ],
+ "metrics": [60, 0, 0],
"items": [
- {
- "text": "60 YouTube creators collected on Hold",
- "ok": true
- },
- {
- "text": "Need business emails for top 20",
- "ok": false
- },
- {
- "text": "Affiliate program TBD",
- "ok": false
- }
+ { "text": "60 YouTube creators collected on Hold", "ok": true },
+ { "text": "Need business emails for top 20", "ok": false },
+ { "text": "Affiliate program TBD", "ok": false }
]
},
{
- "metrics": [
- 0,
- 0,
- 0
- ],
+ "metrics": [0, 0, 0],
"items": [
- {
- "text": "No outreach started yet",
- "ok": false
- },
- {
- "text": "Profile / company page TBD",
- "ok": false
- },
- {
- "text": "No content strategy defined",
- "ok": false
- }
+ { "text": "No outreach started yet", "ok": false },
+ { "text": "Profile / company page TBD", "ok": false },
+ { "text": "No content strategy defined", "ok": false }
]
}
],
- "state_of_play": "Prelaunch phase. CRM has 89 contacts (60 YouTube creators on Hold, 1 homepage chat lead). 0 subscriptions, 0 influencers onboarded, 0 cold emails sent. The site is live at derez.ai with pricing, coupon badges (friends950, creator950, friends499, friends1750), and Plausible analytics. Next milestone: first paying customer.",
+ "state_of_play": "Day 2 of prelaunch. CRM grew to 89 contacts (+27 since yesterday) — 88 on Hold, 1 Cold. 60 YT creators identified. 0 subscriptions, 0 influencers onboarded, 0 cold emails sent. Site live at derez.ai. SEO basics: sitemap.xml and robots.txt created today. Plausible analytics live. Next milestone: first paying customer.",
"comms": {
- "inbox": {
- "total": 4,
- "last35h": 2
- },
- "sent": {
- "total": 8,
- "last35h": 2
- },
- "alerts": 1
+ "inbox": { "total": 0, "last35h": 0 },
+ "sent": { "total": 8, "last35h": 0 },
+ "alerts": 0
},
"recommendations": [
- "Prioritise the top 20 YouTube creators from the 60 collected \u2014 these are your most winnable influencer channel.",
- "Unlock cold email outreach by populating real business emails for those 20 creators. The templates and coupons are ready.",
- "Set up a LinkedIn company page and start building connections \u2014 zero presence there currently.",
- "Email capturing (newsletter signup or lead magnet) is needed before visitors reach 10K/mo becomes realistic."
+ "Search Console submission still the #1 blocker — without it the site can't index. Oliver needs to add domain verification TXT record or upload verification file.",
+ "Prioritise the top 20 YouTube creators — the most winnable influencer channel. Need business emails first.",
+ "Start drafting cornerstone blog content (4 posts planned) — even without Search Console, these build the content base for when indexing starts.",
+ "Email capture (newsletter signup or lead magnet) needed before 10K/mo path is realistic."
],
"day": 2,
- "notes": "Day 2 auto-update at 06:00 UTC"
-}
\ No newline at end of file
+ "notes": "Day 2 brief session — 09:02 PYST. sitemap.xml + robots.txt created. Blog post updated (integration/leads split). CRM growth accelerating."
+}
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..27913ce
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Allow: /
+
+Sitemap: https://derez.ai/sitemap.xml
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..3e221a2
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,45 @@
+
+