Jonny Mate — Operations Guide

SOP for managing Bayo's AI agent system. Everything your team needs to operate, maintain, and extend the setup.

1. System Overview

Architecture

Two AI agents run on a single GCP VM, sharing a Convex knowledge database. They operate independently but exchange data through the knowledge DB using text prefix conventions.

┌─────────────────────────────┐ ┌──────────────┐ ┌─────────────────────────────┐ │ JONNY MATE (main agent) │ │ CONVEX │ │ GROWTHCLAW (growth agent) │ │ @Jonnymate_bot │ │ KNOWLEDGE │ │ @JonnymateGrowthBot │ │ │ │ DB │ │ │ │ Skills: │ │ │ │ Skills: │ │ - /daily-briefing ────────store──► │ │ - /content-engine │ │ - /content-engine ────────store──► BRIEFING ◄──read─── /growth-hacker │ │ - /daily-posts ◄──read──────── CALENDAR ────store── /daily-posts │ │ - /newsletter-writer ◄──read──────── PRODUCT ────store── /newsletter-writer │ │ - /engagement-monitor ────────store──► COMPETITOR ◄──read─── /engagement-monitor │ │ - /product-update ────────store──► GROWTH ────store── /growth-hacker │ │ - /job-hunter │ │ EXPERIMENT │ │ │ │ - /dynoclux │ │ ENGAGEMENT │ │ │ │ - /dynosist │ │ METRICS │ │ │ └─────────────────────────────┘ └──────────────┘ └─────────────────────────────┘ │ │ └──────────────── OpenClaw Gateway (systemd) ──────────────────┘ GCP VM: openclaw-vm (e2-medium) Zone: us-central1-a

Infrastructure

ComponentDetails
VMopenclaw-vm — GCP Compute Engine, e2-medium, Debian 12, us-central1-a
GatewayOpenClaw gateway running as systemd service on port 18789 (loopback only)
AccessSSH via IAP only (no public IP). gcloud compute ssh openclaw-vm --zone=us-central1-a
Knowledge DBConvex (fortunate-seahorse-362.convex.cloud) — vector search for cross-agent data
SocialPostiz — LinkedIn + X post scheduling and analytics
NewsletterBeehiiv — newsletter draft creation
EmailGmail OAuth — draft creation, inbox scanning, search
CodeGitHub plugin — repo management, PRs, issues
Mediaimage-gen + video-gen plugins (Gemini + OpenAI backends, Google Drive storage)
SecretsGCP Secret Manager — all API keys and tokens

2. Product Portfolio

Six products rotate through content. Max 2 products per post, never the same product two days in a row.

ProductDescriptionAudiencePeak Seasons
ParallelScore Healthcare IT staffing and consulting platform Health IT pros, healthcare orgs, CIOs Q4 planning, Q1 hiring, HIMSS (spring)
ShemShems Educational travel crowdfunding platform Students, parents, educators, gift-givers Aug-Sep (back-to-school), May-Jun (graduation), Nov-Dec (holidays)
myir.io Year-in-review / personal analytics app Millennials/Gen Z, data enthusiasts Nov-Jan (year-end wrap), Jun-Jul (mid-year check-in)
withLoam Faith-based devotional and spiritual wellness app Faith communities, church leaders Lent (Feb-Apr), Easter, Advent (Nov-Dec), Jan (resolutions)
DynoClaw AI agent platform with plugins, skills, multi-channel support Developers, indie hackers, solopreneurs Product Hunt launches, dev conference seasons
Personal Brand Builder, health IT leader, multi-product founder Tech pros, health IT leaders, African diaspora builders Conference seasons, product launches

Cross-Promotion Pairings

PairingNatural Connection
Personal Brand + DynoClawBuilding in public, showing the tool behind the content
ShemShems + withLoamFamily/values-driven audiences, gift-giving overlap
ParallelScore + Personal BrandHealth IT thought leadership drives credibility
myir.io + Personal BrandData-driven reflection, year-end content
DynoClaw + ParallelScoreAI in healthcare narrative

3. Daily & Weekly Workflows

Automated Schedule (Cron)

These run automatically. The growth agent's crons are offset by 1 hour to avoid conflicts.

WhenAgentSkillWhat Happens
Mon 1:00 AM UTC Main /content-engine Generates the week's content calendar
Mon 1:00 AM UTC Growth /content-engine Growth agent's own content calendar
Daily 1:00 PM UTC Main /daily-briefing Morning news briefing (Tech, Health IT, Africa, Fintech)
Daily 1:00 PM UTC Main /daily-posts Drafts today's LinkedIn/X posts from calendar
Daily 2:00 PM UTC Growth /daily-posts Growth agent's daily posts
Tue 2:00 PM UTC Main /newsletter-writer Drafts weekly Beehiiv newsletter
Tue 3:00 PM UTC Growth /newsletter-writer Growth agent's newsletter draft
Fri 6:00 PM UTC Main /engagement-monitor Weekly social media analytics report
Fri 7:00 PM UTC Growth /engagement-monitor Growth agent's engagement analysis

On-Demand Skills Manual

These are triggered by sending the command to the appropriate Telegram bot.

Content Lifecycle

Monday: /content-engine ──► Generates weekly calendar ──► Stores CONTENT CALENDAR │ Daily: /daily-briefing ──► News briefing ──► Stores DAILY BRIEFING │ Daily: /daily-posts ──► Reads calendar + product updates ──► Creates Postiz drafts │ Tuesday: /newsletter-writer ──► Reads briefings + calendar + growth signals ──► Creates Beehiiv draft │ Friday: /engagement-monitor ──► Analyzes week's performance ──► Stores ENGAGEMENT INSIGHTS │ ▼ Feeds back into next Monday's /content-engine

4. Skills Reference

📰 /daily-briefing Auto Daily

Curated morning news briefing covering Tech, Healthcare & Health IT, Africa Business & Tech, and Fintech & Investment.

How it works
Runs 4 web searches for stories from the last 24 hours. Picks top 3 stories per topic. Outputs a formatted briefing with headlines, summaries, and sources.
Stores to Knowledge DB
DAILY BRIEFING [date]: ... — 150-word condensed extract with the top story from each section
Consumed by
/newsletter-writer, /growth-hacker audit mode
🗓 /content-engine Auto Monday

Generates a 7-day content calendar (Mon–Sun) with platform assignments for LinkedIn, X, and newsletter topics.

How it works
Runs 8 trend searches, pulls past engagement insights and growth metrics/product updates, generates a daily plan with platform, topic, format, key points, and hook idea.
Distribution rules
LinkedIn 3-4/week (Tue-Thu preferred), X 4-5/week, at least 1 both-platform day, weekends lighter. Max 1-2 products/day, rotate across the portfolio.
Stores to Knowledge DB
Content Calendar — Week of [date] with tags content-calendar
Consumed by
/daily-posts, /newsletter-writer, /growth-hacker
/daily-posts Auto Daily

Drafts LinkedIn and/or X posts for today based on the content calendar. Creates Postiz drafts for review.

Modes
Calendar-driven (default) — reads today's calendar entry. Ad-hoc/daily-posts [topic] to skip the calendar.
Enrichment
If today's entry references a product, searches for PRODUCT UPDATE and COMPETITOR INTEL to incorporate real details.
LinkedIn format
300-700 words, narrative/first-person, hook → story → takeaway → CTA, hashtags at end.
X format
Single: under 280 chars, punchy. Thread: 4-7 tweets numbered 1/, 2/, etc.
Approval flow
Presents drafts → user says approve both, approve linkedin, approve x, or edit [feedback] → creates Postiz draft.
📧 /newsletter-writer Auto Tuesday

Drafts a weekly newsletter synthesizing the week's content, engagement, briefings, and growth findings into a Beehiiv draft.

Data sources
Content calendar, engagement insights, DAILY BRIEFING summaries, GROWTH EXPERIMENT RESULT, COMPETITOR INTEL, Postiz analytics (7d).
Structure
Subject line → Opening hook (2-3 sentences) → Main read (400-600 words) → Quick hits (3-4 bullets) → What I'm building (2-3 sentences, references actual PRODUCT UPDATE entries) → CTA
Approval flow
Shows 3 subject line options (direct, curiosity, bold). User says publish [1/2/3] or edit [feedback]. Creates Beehiiv draft on publish.
Target length
600-900 words, readable in 3-4 minutes.
📊 /engagement-monitor Auto Friday

Analyzes LinkedIn and X engagement from the past week, identifies patterns, and stores insights for future content planning.

How it works
Pulls Postiz analytics (7d) and recent posts. Identifies top 3 and bottom 3 performers per platform. Extracts patterns (topic, format, timing, hook style).
Stores to Knowledge DB
Engagement Insights — Week of [date] with tags engagement-insights
Consumed by
/content-engine (weights topics), /newsletter-writer, /growth-hacker
🚀 /product-update On-demand

Log product milestones, launches, and significant updates to the knowledge DB. Consumed by content and growth skills.

How it works
Asks which product + update type (Launch, Milestone, Pivot, Insight). Stores a concise entry under 200 words.
Stores to Knowledge DB
PRODUCT UPDATE [product] [date]: ... with tags product-update, [product]
Consumed by
/content-engine (timely content angles), /daily-posts (real details), /newsletter-writer ("What I'm building"), /growth-hacker (audit)
Shortcut
If you include product + update inline (e.g., /product-update DynoClaw launched plugin marketplace), it skips the questions.
📈 /growth-hacker On-demand

Multi-product growth strategy with 6 modes. Runs on the growth bot (@JonnymateGrowthBot).

Mode 1: Audit
Pulls engagement data, content calendar, product updates, and web research. Presents channel health table, key metrics, opportunities, risks.
Mode 2: Experiment
Proposes a testable growth experiment with hypothesis, method, success metric, effort/impact. Stores results: GROWTH EXPERIMENT RESULT [product] [date]: ...
Mode 3: Cross-Promote
Drafts content connecting 2 products naturally. LinkedIn post + X thread + newsletter mention.
Mode 4: Competitor Scan
Researches competitors for a product. Stores findings: COMPETITOR INTEL [product] [date]: ...
Mode 5: Funnel Analysis
Identifies drop-off points in a product funnel with industry benchmarks and recommended experiments.
Mode 6: Log Metrics
Records current growth metrics. Stores: GROWTH METRICS [product] [date]: ...
🎯 /job-hunter On-demand

Job search, company research, and outreach drafting. All outputs are draft-only.

Mode 1: Find Roles
Web search for matching positions with fit scoring (Strong/Good/Stretch).
Mode 2: Crawl a Careers Site
Give it a URL and it scrapes for relevant listings.
Mode 3: Research a Company
Deep dive: what they do, recent news, leadership, tech stack, culture, where Bayo fits.
Mode 4: Draft Outreach
LinkedIn connection request (300 chars), short email (~150 words), warm intro request (~100 words).
Mode 5: Read a PDF
Extract and analyze a resume or job description.
🛡 /dynoclux On-demand

Privacy enforcement: inbox scanning, unsubscribes, CAN-SPAM/CCPA compliance tracking, and formal notice drafting.

8 Modes
Scan inbox → Noise report → Unsubscribe (with confirmation) → Track request (legal deadlines) → Check violations → Draft notice → Evidence log → List requests
Key detail
Unsubscribes always require confirmation. Legal notices are draft-only, never sent automatically. CAN-SPAM = 10 business days. CCPA = 45 calendar days.
📧 /dynosist On-demand

Gmail draft assistant: compose drafts, attach files, search emails, manage drafts.

5 Modes
Compose draft → Email a file (finds recent uploads) → List drafts → Find files → Search emails (supports Gmail query operators)
Key detail
Never sends directly. Always creates Gmail drafts for manual review and send. Shows preview before creating.

5. Knowledge DB & Cross-Agent Data

Both agents share a Convex vector database. Since there's no tag filtering on search, every knowledge_store call uses a distinctive text prefix so vector similarity naturally groups the right content.

Prefix Convention

PrefixStored ByConsumed By
DAILY BRIEFING [date]: /daily-briefing /newsletter-writer, /growth-hacker audit
PRODUCT UPDATE [product] [date]: /product-update /growth-hacker audit, /content-engine, /daily-posts
COMPETITOR INTEL [product] [date]: /growth-hacker scan /newsletter-writer, /daily-posts
GROWTH EXPERIMENT RESULT [product] [date]: /growth-hacker experiment /newsletter-writer, /content-engine
GROWTH METRICS [product] [date]: /growth-hacker log metrics /content-engine, /growth-hacker audit
Engagement Insights — Week of [date] /engagement-monitor /content-engine, /newsletter-writer, /growth-hacker
Content Calendar — Week of [date] /content-engine /daily-posts, /newsletter-writer, /growth-hacker

Data Flow

JONNY MATE KNOWLEDGE DB GROWTHCLAW ----------- ------------ ---------- /daily-briefing ──store──► DAILY BRIEFING ◄──read── /growth-hacker (audit) /product-update ──store──► PRODUCT UPDATE ◄──read── /growth-hacker (audit) /content-engine /engagement-mon ──store──► ENGAGEMENT INSIGHTS ◄──read── /growth-hacker (audit) /content-engine ──store──► CONTENT CALENDAR ◄──read── /daily-posts /newsletter-writer /newsletter-writer ◄──read── COMPETITOR INTEL ◄──store── /growth-hacker (scan) /daily-posts ◄──read── GROWTH EXPERIMENT ◄──store── /growth-hacker (experiment) /content-engine ◄──read── GROWTH METRICS ◄──store── /growth-hacker (metrics)

6. Brand Voice

Core Tone

Platform Adjustments

PlatformToneFormatAvoid
LinkedIn Narrative, reflective, professional but human 300-700 words, story-driven, hook in first 2 lines Corporate jargon, "excited to announce", humble-bragging
X Punchy, opinionated, conversational <280 chars or 4-7 tweet threads Thread-bait without substance, engagement farming
Newsletter Personal letter, most intimate channel 600-900 words, 1 deep dive + quick hits + building update Listicles without narrative, news regurgitation

Language Patterns

Use

Avoid

Product Mentions

7. Troubleshooting

Quick Checks

# SSH into the VM
gcloud compute ssh openclaw-vm --zone=us-central1-a --project=jonny-mate

# Check gateway status
sudo systemctl status openclaw

# View today's logs (last 50 lines)
sudo tail -50 /tmp/openclaw/openclaw-$(date +%F).log

# Check if both bots are online
sudo journalctl -u openclaw --since "5 min ago" | grep "starting provider"

# List agents
sudo openclaw agents list

# List registered skills
sudo openclaw skills list

# List cron jobs
sudo openclaw cron list

Common Issues

ProblemDiagnosisFix
Bot not responding on Telegram Check systemctl status openclaw sudo systemctl restart openclaw
Skills not appearing Check openclaw skills list for "ready" count Verify SKILL.md files exist in /root/.openclaw/skills/
API key errors in logs Look for "No API key found" in logs Check /etc/openclaw.env has the right keys; restart gateway
Cron job not firing Check openclaw cron list Re-add: sudo openclaw cron add --name 'X' --cron 'SCHEDULE' --message '/skill'
Growth bot issues only Check growth agent specifically Verify /root/.openclaw/agents/growth/agent/ has SOUL.md and skills/
Knowledge DB not storing Check CONVEX_URL in /etc/openclaw.env Verify Convex deployment is running at the configured URL
Postiz draft creation fails Check Postiz URL and API key Verify in /root/.openclaw/openclaw.json under plugins.entries.postiz

8. Deployment & Maintenance

Deploy Updated Skills

# From the repo root on your local machine:

# 1. Bundle skills
tar -czf /tmp/skills.tar.gz -C skills \
  daily-briefing/SKILL.md \
  content-engine/SKILL.md \
  daily-posts/SKILL.md \
  newsletter-writer/SKILL.md \
  engagement-monitor/SKILL.md \
  dynoclux/SKILL.md \
  dynosist/SKILL.md \
  job-hunter/SKILL.md \
  growth-hacker/SKILL.md \
  product-update/SKILL.md

# 2. Copy to VM
gcloud compute scp /tmp/skills.tar.gz \
  openclaw-vm:/tmp/skills.tar.gz \
  --zone=us-central1-a --project=jonny-mate

# 3. Extract on VM
gcloud compute ssh openclaw-vm --zone=us-central1-a --project=jonny-mate \
  -- "sudo tar -xzf /tmp/skills.tar.gz -C /root/.openclaw/skills/ && rm /tmp/skills.tar.gz"

# 4. Restart gateway
gcloud compute ssh openclaw-vm --zone=us-central1-a --project=jonny-mate \
  -- "sudo systemctl restart openclaw"

Deploy Shared Files (PRODUCTS.md, BRAND-VOICE.md)

# Copy to both workspaces
gcloud compute scp agents/shared/PRODUCTS.md agents/shared/BRAND-VOICE.md \
  openclaw-vm:/tmp/ --zone=us-central1-a --project=jonny-mate

gcloud compute ssh openclaw-vm --zone=us-central1-a --project=jonny-mate \
  -- "sudo cp /tmp/PRODUCTS.md /tmp/BRAND-VOICE.md /root/.openclaw/workspace/ && \
      sudo cp /tmp/PRODUCTS.md /tmp/BRAND-VOICE.md /root/.openclaw/workspace-growth/"

Upgrade OpenClaw Version

# SSH into VM
gcloud compute ssh openclaw-vm --zone=us-central1-a --project=jonny-mate

# Install new version
sudo npm install -g openclaw@NEW_VERSION

# Verify
openclaw --version

# Restart
sudo systemctl restart openclaw

Manage Secrets

# List all secrets
gcloud secrets list --project=jonny-mate

# View a secret
gcloud secrets versions access latest --secret=SECRET_NAME --project=jonny-mate

# Update a secret
echo -n "NEW_VALUE" | gcloud secrets versions add SECRET_NAME \
  --data-file=- --project=jonny-mate

Key File Paths on VM

PathPurpose
/root/.openclaw/openclaw.jsonMain config (plugins, channels, models)
/root/.openclaw/skills/Global skills directory (all SKILL.md files)
/root/.openclaw/workspace/Main agent workspace (SOUL.md, AGENTS.md, etc.)
/root/.openclaw/workspace-growth/Growth agent workspace
/root/.openclaw/agents/main/agent/Main agent config
/root/.openclaw/agents/growth/agent/Growth agent config + SOUL.md + skills/
/root/.openclaw/extensions/Plugin installations (convex, postiz, beehiiv, etc.)
/etc/openclaw.envEnvironment file with all API keys
/tmp/openclaw/Log files (openclaw-YYYY-MM-DD.log)

Full Redeploy from Scratch

# From the dynoclaw repo root:
GCP_PROJECT=jonny-mate bash infra/gcp/deploy-openclaw.sh    # Main VM + plugins + skills
GCP_PROJECT=jonny-mate bash infra/gcp/setup-growth-agent.sh # Add growth agent

Important Guardrails

All content outputs are draft-only — nothing is published automatically.
Gmail actions create drafts only — never send directly.
GitHub actions create PRs — never merge automatically.
No secrets in code. All keys live in GCP Secret Manager.