From 16cab1231e5efb1a6863116dc3d8d81579ac9212 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 10 Jun 2026 09:03:18 -0300 Subject: [PATCH] Daily brief June 10: sitemap, robots.txt, cornerstone blog post, KPI sync MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Created sitemap.xml (7 URLs) + robots.txt (allow all, sitemap reference) - Created cornerstone blog post: 'Hermes Agent Setup Guide' (tutorial) - Registered new blog post in blog/index.json - Updated launch-status.json to Day 2 with current CRM data (89 contacts) - Synced operations.json metadata for Day 2 brief session - CRM grew from 62→89 contacts (+27), YT creators 59→60 (+1) --- blog/index.json | 11 +- blog/posts/hermes-agent-setup-guide.html | 297 +++++++++++++++++++++++ data/launch-status.json | 45 ++-- data/operations.json | 97 ++------ robots.txt | 4 + sitemap.xml | 45 ++++ 6 files changed, 406 insertions(+), 93 deletions(-) create mode 100644 blog/posts/hermes-agent-setup-guide.html create mode 100644 robots.txt create mode 100644 sitemap.xml 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 @@ + + + + + + + + Hermes Agent Setup Guide: From Zero to Your First AI Agent — Derez.ai Blog + + + + + + + + + + + + + + +
+ + ← 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

+ + + +

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:

+ + + +

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:

+ + + +

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:

+ + + +
+ 🔗 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 @@ + + + + https://derez.ai/ + 2026-06-10 + weekly + 1.0 + + + https://derez.ai/hosting.html + 2026-06-09 + monthly + 0.8 + + + https://derez.ai/add.html + 2026-06-10 + monthly + 0.6 + + + https://derez.ai/cancel.html + 2026-06-09 + monthly + 0.3 + + + https://derez.ai/password-reset.html + 2026-06-08 + monthly + 0.3 + + + https://derez.ai/blog/posts/speed-run-odoo-community-agent.html + 2026-06-10 + weekly + 0.7 + + + https://derez.ai/blog/posts/hermes-agent-setup-guide.html + 2026-06-10 + weekly + 0.7 + +