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.
Infrastructure
| Component | Details |
|---|---|
| VM | openclaw-vm — GCP Compute Engine, e2-medium, Debian 12, us-central1-a |
| Gateway | OpenClaw gateway running as systemd service on port 18789 (loopback only) |
| Access | SSH via IAP only (no public IP). gcloud compute ssh openclaw-vm --zone=us-central1-a |
| Knowledge DB | Convex (fortunate-seahorse-362.convex.cloud) — vector search for cross-agent data |
| Social | Postiz — LinkedIn + X post scheduling and analytics |
| Newsletter | Beehiiv — newsletter draft creation |
| Gmail OAuth — draft creation, inbox scanning, search | |
| Code | GitHub plugin — repo management, PRs, issues |
| Media | image-gen + video-gen plugins (Gemini + OpenAI backends, Google Drive storage) |
| Secrets | GCP 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.
| Product | Description | Audience | Peak 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
| Pairing | Natural Connection |
|---|---|
| Personal Brand + DynoClaw | Building in public, showing the tool behind the content |
| ShemShems + withLoam | Family/values-driven audiences, gift-giving overlap |
| ParallelScore + Personal Brand | Health IT thought leadership drives credibility |
| myir.io + Personal Brand | Data-driven reflection, year-end content |
| DynoClaw + ParallelScore | AI 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.
| When | Agent | Skill | What 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.
/product-update— Log a product milestone (main bot)/growth-hacker— Growth strategy, experiments, competitor scans (growth bot)/job-hunter— Job search, company research, outreach drafts (main bot)/dynoclux— Privacy enforcement, inbox scanning, unsubscribes (main bot)/dynosist— Email draft composition with attachments (main bot)
Content Lifecycle
4. Skills Reference
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-hackeraudit mode
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 tagscontent-calendar- Consumed by
/daily-posts,/newsletter-writer,/growth-hacker
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 UPDATEandCOMPETITOR INTELto 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, oredit [feedback]→ creates Postiz draft.
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 BRIEFINGsummaries,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 UPDATEentries) → CTA - Approval flow
- Shows 3 subject line options (direct, curiosity, bold). User says
publish [1/2/3]oredit [feedback]. Creates Beehiiv draft on publish. - Target length
- 600-900 words, readable in 3-4 minutes.
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 tagsengagement-insights- Consumed by
/content-engine(weights topics),/newsletter-writer,/growth-hacker
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 tagsproduct-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.
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 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.
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.
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
| Prefix | Stored By | Consumed 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
6. Brand Voice
Core Tone
- Smart friend — like a knowledgeable friend sharing insights over coffee
- Builder perspective — speak from the lens of someone actively building
- Direct — get to the point, no filler, no throat-clearing
Platform Adjustments
| Platform | Tone | Format | Avoid |
|---|---|---|---|
| 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
- "Here's what I learned..."
- "I've been thinking about..."
- "The thing nobody talks about is..."
- "After building X, I realized..."
- Specific numbers and examples
- Honest admissions of what didn't work
Avoid
- "In today's fast-paced world..."
- "Leveraging synergies"
- "Game-changer", "disruptive", "revolutionary"
- Excessive exclamation marks
- Generic motivational quotes
Product Mentions
- Max 2 products per post — rotate daily across the portfolio
- Show, don't sell — mention products in context of lessons learned
- Never hard-sell — the audience follows for insights, not ads
- Never same product two days in a row
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
| Problem | Diagnosis | Fix |
|---|---|---|
| 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
| Path | Purpose |
|---|---|
/root/.openclaw/openclaw.json | Main 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.env | Environment 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.