Skip to content

Instantly share code, notes, and snippets.

@mberman84
Created February 11, 2026 19:38
Show Gist options
  • Select an option

  • Save mberman84/065631c62d6d8f30ecb14748c00fc6d9 to your computer and use it in GitHub Desktop.

Select an option

Save mberman84/065631c62d6d8f30ecb14748c00fc6d9 to your computer and use it in GitHub Desktop.
OpenClaw Prompts
# OpenClaw Implementation Prompts
Each prompt below is a self-contained brief you can hand to an AI coding assistant (or use as a project spec) to build that use case from scratch. Adapt the specific services to whatever you already use — the patterns are what matter.
---
## 1) Personal CRM Intelligence
```
Build me a personal CRM system that automatically tracks everyone I interact with, with smart filtering so it only adds real people — not newsletters, bots, or cold outreach.
Data sources:
- Connect to my email (Gmail API or IMAP) and scan the last 60 days of messages.
- Connect to my calendar (Google Calendar API) and scan the last 60 days of events.
- Run this ingestion on a daily cron schedule.
Contact extraction from email:
- Extract sender/recipient email addresses and names from messages.
- Estimate the number of exchanges (back-and-forth threads, not just raw message count): Math.min(Math.floor(totalMessages / 2), threadCount).
- Collect sample subject lines and message snippets for classification.
Contact extraction from calendar:
- Only include meetings with 1-10 attendees (skip large all-hands).
- Only include meetings at least 15 minutes long (skip quick check-ins that are really just reminders).
- Extract attendee names, emails, and the meeting title.
Filtering — this is critical. Most contacts from email are noise. Use a two-stage filter:
Stage 1 — Hard filters (always reject):
- My own email addresses and domains.
- Emails from family or personal contacts I've explicitly excluded (configurable list).
- Contacts already in the CRM or previously rejected.
- Generic role-based inboxes: info@, team@, partnerships@, collabs@, noreply@.
- Marketing/transactional domains matching patterns like: noreply@, tx., cx., mail., email. prefixes.
Stage 2 — AI classification (use a fast, cheap LLM like Gemini Flash or Haiku):
Send the candidate's name, email, exchange count, and sample subject lines/snippets to an LLM with these rules:
- REJECT clearly automated or notification-only senders.
- REJECT if all sample subjects look like newsletters, digests, or automated reports ("weekly roundup", "monthly update", "AI news").
- REJECT cold outreach with low engagement — if exchanges are low relative to total emails, it's one-way pitching.
- REJECT if snippets show repetitive promotional content (product launches, feature announcements, affiliate reports).
- APPROVE only if it looks like a real person with genuine two-way interaction or a meaningful business relationship.
- Higher confidence for real back-and-forth conversations with varied, substantive topics.
Contact scoring (used for ranking, not filtering):
- Base score: 50
- +5 per email exchange (max +20)
- +3 per meeting (max +15)
- +15 if their title matches preferred titles (CEO, Founder, VP, Head of, Engineer, Partner, etc.)
- +10 if they appeared in small meetings (≤3 attendees)
- +10 if last interaction was within 7 days, +5 if within 30 days
- +25 bonus if the person appears in both email AND calendar (stronger signal)
- +10 if they have a recognizable role, +5 if they have a company
For each approved contact, store:
- Name, email(s), company, role/context
- Interaction timeline with dates
- Last-touch timestamp (auto-updated)
- Contact score
- Tags or categories
Learning system:
- Maintain a learning.json config with:
- skip_domains: domains to always reject (populated over time from rejections)
- prefer_titles: titles that boost contact scores
- skip_keywords: subject-line keywords that indicate spam
- min_exchanges: minimum exchange threshold (default 1)
- max_days_between: max days since last interaction (default 60)
- max_attendees: meeting size cap (default 10)
- min_duration_minutes: meeting length minimum (default 15)
- When I reject a contact, learn from it — add their domain to skip_domains if appropriate.
Deduplication:
- When a new contact is found, check by email, then by name+company combination.
- Merge records rather than creating duplicates.
Semantic retrieval:
- Generate embeddings for each contact record.
- Let me ask natural-language questions like:
- "Who did I meet from [company] last month?"
- "When did I last talk to [name]?"
- "Show contacts I haven't spoken to in 30+ days."
Storage: SQLite with WAL mode and foreign keys enabled.
Notifications: After each ingestion run, send a summary of new contacts, merges, rejections, and any issues.
```
---
## 2) Knowledge Base (RAG) — Save Anything, Recall It Later
```
Build me a personal knowledge base with RAG (retrieval-augmented generation).
Ingestion — I send a URL or file and the system saves it. It should handle:
- Web articles
- YouTube videos (transcripts)
- Tweets/X posts
- PDFs
- Plain text or notes
Source type detection: Determine the type from the URL pattern or file extension. Classify as: article, video, pdf, text, tweet, or other.
Content extraction with fallback chain — this is important because no single extractor works for every site:
1. For Twitter/X URLs:
a. Try FxTwitter API (api.fxtwitter.com) — free, no auth needed
b. Fall back to X API direct lookup
c. Fall back to web scraping
2. For YouTube URLs:
a. Pull transcript via YouTube transcript API or yt-dlp
3. For all other URLs (articles, blogs, etc.):
a. Try a clean text extractor (like Mozilla Readability or similar)
b. Fall back to Firecrawl or Apify for sites that block simple extraction
c. Fall back to a headless browser (Playwright/Puppeteer) for JavaScript-heavy pages
d. Last resort: raw HTTP fetch + HTML tag stripping
- Retry once on transient errors (ECONNRESET, ETIMEDOUT, DNS failures) with a 2-second delay.
Content quality validation — reject bad extractions:
- Minimum 20 characters of content.
- For articles/non-tweets: at least 15% of non-empty lines must be longer than 80 characters (to detect prose vs. navigation menus).
- Total content must be at least 500 characters for non-tweet types.
- Detect error pages by looking for 2+ signals: "access denied", "captcha", "please enable javascript", "cloudflare", "404", "sign in", "blocked", "rate limit".
- Maximum content length: 200,000 characters (truncate beyond this).
Deduplication — two layers:
1. URL-based: Normalize URLs before comparing — strip tracking params (utm_source, utm_medium, utm_campaign, fbclid, igshid, ref, s, t), remove www., normalize twitter.com to x.com, remove trailing slashes and fragments.
2. Content-hash: SHA-256 hash of the cleaned content. Store as a UNIQUE column — reject if the same hash already exists.
Chunking:
- Chunk size: 800 characters per chunk.
- Overlap: 200 characters between chunks.
- Minimum chunk size: 100 characters (append tiny remainders to the last chunk).
- Split on sentence boundaries (regex: /(?<=[.!?])\s+/).
Embedding generation:
- Use Google gemini-embedding-001 (768 dimensions, free) or OpenAI text-embedding-3-small (1536 dimensions) as fallback.
- Max input: 8000 characters per chunk.
- Process in batches of 10 chunks with 200ms delay between batches.
- Retry failed embeddings 3 times with exponential backoff (1s, 2s, 4s).
- Cache embeddings with an LRU cache (1000 entries).
Storage — SQLite with two tables:
- sources: id, url, title, source_type, summary, raw_content, content_hash (UNIQUE), tags (JSON array), created_at, updated_at
- chunks: id, source_id (FK), chunk_index, content, embedding (BLOB), embedding_dim, embedding_provider, embedding_model, created_at
- Index on chunks(source_id), sources(source_type), sources(content_hash).
- Enable WAL mode and foreign keys with CASCADE deletes.
Concurrency protection: Use a lock file to prevent simultaneous ingestion runs. Check if lock is stale (PID dead or file older than 15 minutes).
Retrieval — When I ask a question:
1. Embed my query using the same embedding provider.
2. Cosine similarity search over all stored chunks. Return top 10.
3. Deduplicate results: keep only the best chunk per source.
4. Sanitize content in results (max 2500 characters per excerpt).
5. Pass top chunks to an LLM: "Answer using only the provided context. Cite which sources you drew from."
6. Return the answer with source references.
```
---
## 3) Content Idea Pipeline (Research → Dedupe → Project Management)
```
Build a content idea pipeline that researches topics, prevents duplicate ideas, and creates production-ready tasks.
Trigger: I describe a topic idea in chat.
Step 1 — Research:
- Search X/Twitter for recent discourse on the topic (use the tiered approach from Use Case #4 if built).
- Search my knowledge base (Use Case #2) for related saved content.
- Optionally run a web search.
Step 2 — Semantic dedupe (this is the critical gate):
- Maintain a database of all past content ideas with these fields:
- id (format: YYYY-MM-DD-NNN)
- date, type (short/long-form), title, slug (URL-friendly, UNIQUE)
- summary (the pitch text)
- tags (comma-separated)
- status: pitched, accepted, rejected, produced, duplicate
- response (my feedback)
- embedding (BLOB — generated via Gemini or OpenAI)
- created_at
- When a new idea comes in, run a hybrid similarity search:
- Semantic similarity (70% weight): Cosine similarity between the new idea's embedding and all stored embeddings.
- Keyword matching (30% weight): Match against title (30%), summary (20%), and tags (20%).
- Combined score: (semantic × 0.7) + (keyword × 0.3)
- Hard gate: If any existing idea scores above 40% combined similarity, REJECT the new idea. Show me what it matched and the similarity score. No exceptions — this prevents re-pitching old concepts.
Step 3 — Brief assembly (only if it passes dedupe):
- Keep it short — a few sentences on the angle and why it's video-worthy.
- Do NOT generate titles, thumbnails, hooks, or scripts unless I explicitly ask.
- Include links to relevant tweets or KB sources from the research step.
Step 4 — Create task:
- Create a task in my project management tool (Asana, Linear, Notion, or Todoist) with the brief as the description.
Step 5 — Store the idea:
- Add the new idea + its embedding to the pitch database so future ideas are compared against it.
- Set initial status to "pitched".
Step 6 — Notify me with the brief and a link to the created task.
```
---
## 4) Social Media Research System (Cost-Optimized)
```
Build a social media research tool that answers "What are people saying about [topic]?" using X/Twitter, while minimizing API costs.
Query decomposition:
- Take my question and break it into 2-4 focused search queries covering different angles.
Tiered retrieval — always try the cheapest option first:
- Tier 1 (free): FxTwitter API (api.fxtwitter.com) — works for individual tweet lookups, no auth needed.
- Tier 2 (low-cost, ~$0.15/1K tweets): A paid Twitter data provider like TwitterAPI.io or SocialData. Supports search, profiles, user tweets, and thread context.
- Tier 3 (expensive, ~$0.005/tweet): Official X API v2 (api.x.com/2). Last resort only. Rate limit to 350ms between requests to stay under 450 req/15min.
How the tiers cascade by operation:
- Single tweet lookup: Tier 1 → Tier 2 → Tier 3
- Search: Tier 2 → Tier 3
- Profile lookup: Tier 2 → Tier 3
- Thread expansion: Tier 2 → Tier 3
Filtering:
- Filter by timeframe (default: last 7 days, configurable).
- Rank by engagement (likes + retweets + replies).
- Remove retweets and duplicate content.
- Suppress low-quality or spam results.
Thread expansion: For high-engagement tweets that are part of a thread, pull the full thread.
Caching: Cache results with a 1-hour TTL so repeated queries don't burn API credits.
Usage logging: Log every API call to a separate log file per tier, with timestamps and estimated costs.
Output — synthesize into a briefing:
- Key narratives: 3-5 dominant takes
- Notable posts: 5-10 most relevant tweets with links
- Sentiment summary: positive, negative, or mixed
- Contrarian takes: interesting minority opinions
```
---
## 5) YouTube Analytics + Competitor Tracking
```
Build a YouTube analytics system that tracks my channel daily and monitors competitors.
My channel — collect these metrics daily via YouTube Data API and YouTube Analytics API:
- views (total and per-video)
- estimatedMinutesWatched (watch time)
- averageViewDuration
- subscribersGained
- impressions and CTR (if available via Analytics API)
Store each day's metrics in a SQLite table:
- daily_stats: video_id, date, views, watch_time_minutes, avg_view_duration, impressions, ctr, subscribers_gained
- videos: id, title, published_at, thumbnail_url, duration_seconds
Derived metrics:
- 7-day moving average for daily views
- Subscriber-to-view conversion rate
- Views-per-video trend
Competitor tracking:
- Accept a configurable list of competitor channel IDs/usernames.
- Daily, pull each competitor's recent uploads (title, publish date, views) and subscriber count via YouTube Data API.
- Track upload cadence and momentum.
Chart generation — produce PNG charts using matplotlib (dark theme):
1. "trend" chart: Daily view trend for a specific video (line chart with fill area)
2. "top" chart: Top N videos by views (horizontal bar chart, color-coded by short vs long-form)
3. "daily" chart: Channel-wide daily views with 7-day moving average overlay
- Format numbers with commas, dates as readable labels, include grid and legends.
- Save charts to a designated output folder.
Schedule: Daily cron job collecting all data. Optional daily summary sent to chat.
```
---
## 6) Nightly Business Briefing (Multi-Perspective AI Council)
```
Build a nightly business analysis system that collects signals from across my tools and produces prioritized recommendations using a multi-persona AI review council.
Signal collection — pull data from whatever systems you use. Normalize each signal into:
{ source, signal_name, value, confidence (0-100), direction (up/down/flat), category }
Example sources: YouTube metrics, CRM health, project management backlog, social growth, email themes, meeting action items, sales pipeline, operations/cron reliability.
Compact to the top 200 signals by confidence score, with up to 4 sample events per source.
Three-phase AI review council (all phases use a frontier model like Claude Opus or GPT-4):
Phase 1 — Draft (LeadAnalyst):
- Score business outlook on weekly and monthly horizons (0-100), plus a blended average.
- Generate 5-10 recommendations, each with: title, description (2-3 plain sentences), evidence references, estimated impact (0-100), estimated effort (0-100), confidence (0-100).
- Constraints: use only provided data, no made-up facts, plain human language, don't recommend publishing content immediately.
Phase 2 — Parallel review (4 personas, run simultaneously via Promise.all):
1. GrowthStrategist: Scalable growth, asymmetric upside. Demands concrete evidence.
2. RevenueGuardian: Near-term revenue and cash flow. Challenges anything that doesn't protect income.
3. SkepticalOperator: Execution reality, data quality risks. Challenges weak assumptions.
4. TeamDynamicsArchitect: Team health, collaboration quality, sustainable pace.
Each reviewer:
- Critiques every recommendation: support, revise, or reject (with score adjustments)
- Can propose new recommendations the draft missed
- Returns: reviewer_name, key_findings[], votes[] (with adjusted scores), new_recommendations[]
Phase 3 — Consensus (CouncilModerator):
- Receives draft + all 4 reviews.
- Reconciles disagreements.
- Produces final recommendation set with consensus notes.
Fallback: If consensus fails, use draft recommendations. If a reviewer fails, substitute a stub review with the error message.
Ranking — score each recommendation:
priority = (impact × w1) + (confidence × w2) + ((100 - effort) × w3)
Default weights: w1=0.4, w2=0.35, w3=0.25. Store weights in a policy table and update via feedback over time.
Filter: Remove any "publish now" recommendations (hard constraint).
Output: Deliver ranked recommendations to my preferred channel. Store full council trace (draft, all reviews, consensus, models used) in a database for auditing and backtesting.
Schedule: Run nightly via cron.
```
---
## 7) CRM/Business Tool Natural Language Access
```
Build a natural-language interface to my CRM (HubSpot, Salesforce, or whatever I use).
Supported objects and operations:
- Contacts: search, create, update, list, get by ID
- Companies: search, create, update, list
- Deals: search, create, update, list, query by pipeline stage
- Owners: list
- Associations: link contacts to companies, deals to contacts, deals to companies
(For HubSpot, common association type IDs: 1=Contact→Company, 3=Deal→Contact, 5=Deal→Company)
- Properties/schema: inspect available fields for any object
Intent classification — parse my message into:
1. Lookup: "Find the contact for [name]" → search contacts
2. Create: "Add a new contact: [name], [email], [company]" → create contact
3. Update: "Update [contact]'s title to [new title]" → update contact
4. List: "Show all deals in negotiation stage" → filter deals
5. Associate: "Link [contact] to [company]" → create association
Validation: If I'm missing required fields, ask me before proceeding.
Response format: Return clean, readable summaries — not raw JSON. For deal queries, include: deal name, amount, stage, close date, last modified.
Authentication: API key or OAuth stored in environment variables.
```
---
## 8) AI Content Humanization
```
Build a text rewriting tool that removes AI-generated artifacts and makes content sound like a real person wrote it.
Input: I paste draft text (social posts, blog paragraphs, emails, video scripts).
Step 1 — Detection. Scan for common AI tells:
- Overuse of: "delve", "landscape", "leverage", "it's important to note", "in conclusion", "game-changing", "revolutionary", "transformative"
- Tone inflation: dramatic language when the subject doesn't warrant it
- Generic phrasing that could apply to any topic
- Repetitive sentence structures (every sentence starting the same way)
- Excessive hedging: "It's worth noting that perhaps..."
- Lists that feel generated (too clean, too parallel, no personality)
- Identical paragraph lengths and rhythms
Step 2 — Rewrite:
- Replace vague qualifiers with specific, concrete language
- Vary sentence length (mix short punchy sentences with longer ones)
- Use contractions, sentence fragments, and informal word choices where natural
- Remove filler while keeping the core message
- Add the kind of imperfections real writing has — not errors, but human cadence
Step 3 — Channel tuning (optional, based on destination):
- Twitter/X: Punchy, under 280 chars, direct, no filler
- LinkedIn: Professional but conversational, authoritative without being stiff
- Blog: Longer form, personal anecdotes and opinions welcome
- Email: Brief, clear, action-oriented, warm but efficient
Output: Return the revised text. Optionally highlight what changed and why.
```
---
## 9) Image Generation + Iterative Editing
```
Build an image generation workflow where I describe what I need in chat and iterate until it's right.
Core flow:
1. I describe an image: subject, style, composition, mood, colors, any text to include.
2. Generate 1-3 variants using an image generation API (DALL-E 3, Midjourney API, Stable Diffusion, or Flux).
3. I review and either:
a. Accept → save as final asset
b. Request changes → I describe adjustments ("darker background", "remove text", "more minimal") and it generates new variants incorporating my feedback
4. Loop continues until I'm satisfied.
Image editing:
- I can send an existing image and ask for edits: swap background, adjust composition, combine multiple images.
- Use inpainting or img2img when available.
Context tracking: Remember what we've been working on across multiple messages in the same session so I don't have to re-describe the whole concept each iteration.
Output: Save final assets to a designated folder. Deliver as downloadable files in chat.
```
---
## 10) Task Management from Meetings + Chat
```
Build a system that extracts action items from meetings and conversations, gets my approval, then creates tasks in my task manager.
Input sources:
- Meeting transcripts from Fathom, Otter.ai, Fireflies, or any transcript provider
- Notes I paste into chat
- Direct commands: "Add a task to follow up with [person] by Friday"
Extraction — use an LLM (Gemini Flash or similar fast model) to parse transcripts and extract:
- description: what needs to be done (max 150 characters, clear and actionable)
- assignee: who is responsible (name as it appears in the transcript)
- is_owner: boolean — is this MY action item or someone else's?
- todoist_title: clean task title (max 120 chars) — only generate this for items where is_owner is true
- Do NOT extract vague items like "think about X" — only concrete actions with a clear next step.
CRM cross-reference (if you have Use Case #1 built):
- Match mentioned people against CRM contacts to enrich with company/role context.
Approval flow — this is important, don't auto-create tasks:
1. Show me the extracted task list with each item numbered.
2. Let me choose: "all", "none", or specific items by number (e.g. "1, 3, 5").
3. Let me edit any task before confirming (change title, priority, due date).
4. Only after I approve, create the tasks via the Todoist/Asana/Linear API.
5. If any task creation fails, keep it in a pending state for retry.
Direct task creation:
- When I say "remind me to [thing] by [date]", skip extraction and create directly after confirming.
Output: Send confirmation with links to created tasks. Persist approval state so I can check what's pending.
Default project: Configure a default project/list for tasks (e.g. "Work" or my company name).
```
---
## 11) AI Usage and Cost Tracking
```
Build a logging and reporting system that tracks every AI API call and provides cost visibility.
Logging — wrap every LLM/AI API call with a logger that records this structure (one JSON object per line in a JSONL file):
{
"timestamp": "ISO8601",
"model": "model-name",
"tokens": { "input": number, "output": number, "total": number },
"taskType": "string (e.g. crm-ingestion, x-research, image-gen, business-analysis)",
"description": "string (brief note on what this call was for)",
"costEstimate": number,
"source": "tracker-name"
}
Cost calculation — use a pricing lookup table (per 1M tokens, input/output):
- Anthropic: Opus ($15/$75), Sonnet ($3/$15), Haiku ($0.80/$4)
- OpenAI: GPT-4 ($30/$60), GPT-4 Turbo ($10/$30), GPT-3.5 Turbo ($0.50/$1.50), o1 ($15/$60)
- Google: Gemini Pro ($10/$30), Gemini Flash ($0.30/$1.20), Gemini 1.5 Pro ($1.25/$5)
- xAI: Grok ($2/$10)
- Default for unknown models: $1/$3
- Formula: (inputTokens / 1M) × inputPrice + (outputTokens / 1M) × outputPrice
- Keep this table in a config file so it's easy to update when pricing changes.
Storage: Append-only JSONL file. Optionally mirror to SQLite for faster querying.
Reporting — generate on demand with filters (--days N, --model X, --task-type Y):
1. Overall summary: total calls, total tokens (input/output/total), total cost
2. By model: calls, tokens, cost — sorted by cost descending
3. By task type: calls, tokens, cost — sorted by cost descending
4. By day: last 10 days showing calls, tokens, and cost per day
5. Trend: daily or weekly spending over the last 30/90 days
Routing suggestions:
- Flag any task type where a frontier model (Opus, GPT-4) is being used but the task is simple (short inputs, formatting-only, data extraction) — suggest downgrading to a cheaper model.
- Flag workflows that account for >25% of total spend as optimization candidates.
- Suggest caching strategies for repeated queries (especially research workflows).
Output: Markdown report or simple web dashboard. Optionally send weekly cost summary to my chat.
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment