No Python. No Node. Three skill files, one Lobster workflow, and my consultancy now runs on autopilot.
What I Built
A fully autonomous freelance operations agent I call Claw-Ops that handles the three biggest time drains in running a dev consultancy:
- Morning dev briefing — PR triage from GitHub, action items pulled from Slack, delivered to Telegram at 8AM
- Client status drafting — every Friday, reads merged PRs + closed Linear tickets, writes the weekly update email, sends me the draft to approve with one tap
- Inbox zero on follow-ups — detects unanswered client emails older than 48 hours, drafts a polite follow-up, asks me on Telegram whether to send it
Before this: ~9 hours a week on context-switching, manual status writing, and email chasing.
After: I review a Telegram message in the morning and say yes or no.
The Stack
- OpenClaw (gateway running on a Mac Mini, always on)
- Claude via Anthropic API (the brain)
- Telegram (my interface — DMs and one-tap approvals)
- Three custom skills + one Lobster workflow (no external services beyond what I already used)
Zero new subscriptions. Zero new dashboards. Everything surfaces in the app I already have open: Telegram.
Skill 1: pr-morning-digest
# pr-morning-digest
When triggered (or on schedule), check all GitHub repos accessible via the gh CLI.
Find pull requests that match ANY of these:
- Open more than 24 hours with no review activity
- CI checks failing
- Labeled "urgent" or "blocking"
For each match, output:
- Repo name
- PR title and number
- Current status (awaiting review / CI failing / etc.)
- Direct link
Format as a clean priority list, most urgent first.
Send the result to Telegram.
If nothing matches, send: "All clear — no PRs need attention."
Tools: shell (gh CLI)
Skill 2: slack-action-extractor
# slack-action-extractor
When triggered, read the last 100 messages from the #engineering Slack channel
using the Slack CLI or API.
Identify messages that:
- Mention my name or @handle
- Contain task language ("can you", "please", "need you to", "by EOD", "by Friday")
- Are from the last 24 hours
For each identified message:
- Extract the action item in one sentence
- Note who asked and when
- Note any deadline mentioned (or flag as "no deadline specified")
Append results to ~/tasks.md under today's date heading.
If new items were found, send a Telegram summary.
If nothing new, do nothing.
Tools: shell (Slack CLI), file write
Skill 3: client-status-drafter
# client-status-drafter
Every Friday at 4PM, do the following:
1. Run `gh pr list --state merged --limit 20` to get this week's merged PRs
2. Read closed Linear tickets from the past 7 days via the Linear CLI
3. From memory, recall the client name and their current project context
4. Draft a plain-English weekly status email:
- 2-3 sentences on what shipped
- 1 sentence on what's in progress
- 1 sentence on anything that needs client input or decision
- Professional but warm tone — no bullet points, just prose
5. Save draft to ~/drafts/status-{YYYY-MM-DD}.md
6. Send me the draft on Telegram with two options:
- Reply "send" to send it via Gmail immediately
- Reply "edit [your changes]" to revise before sending
Tools: shell (gh, linear, gmail CLI), file write, memory read
The Lobster Workflow That Chains Everything
name: claw-ops-daily
schedule: "0 8 * * 1-5"
steps:
- id: prs
skill: pr-morning-digest
output: pr_summary
- id: slack
skill: slack-action-extractor
output: action_items
- id: brief
action: telegram_send
message: |
Good morning. Here's your briefing:
**PRs needing attention:**
{{pr_summary}}
**New action items from Slack:**
{{action_items}}
- id: status_draft
skill: client-status-drafter
condition: "day_of_week == friday"
input:
context: "{{pr_summary}} {{action_items}}"
The Setup (Reproducible in Under an Hour)
Step 1: Install OpenClaw
curl -fsSL https://openclaw.ai/install.sh | bash
openclaw config set anthropic_api_key=YOUR_KEY
Step 2: Create the skill files
mkdir -p ~/.openclaw/skills
nano ~/.openclaw/skills/pr-morning-digest.md
nano ~/.openclaw/skills/slack-action-extractor.md
nano ~/.openclaw/skills/client-status-drafter.md
Step 3: Create the Lobster workflow
nano ~/.openclaw/workflows/claw-ops-daily.yaml
Step 4: Connect Telegram
openclaw connect telegram
# Follow the QR code flow — takes 90 seconds
Step 5: Start the gateway and test
openclaw start
# Message your Telegram bot: "Run claw-ops-daily now"
Total time from zero to running: 47 minutes.
What Actually Happens in Production
Monday 8:02 AM — Telegram:
Good morning. Here's your briefing:
PRs needing attention:
• [URGENT] backend/api — PR #312 "Fix auth token refresh" — CI failing, open 31hrs
• frontend/dashboard — PR #308 "New onboarding flow" — awaiting review, open 26hrs
New action items from Slack:
• Sarah asked you to look at the deployment config by EOD today
• No deadline: Jordan mentioned the staging DB needs a migration check
Friday 4:03 PM — Telegram:
Draft ready: ~/drafts/status-2026-04-25.md
Preview:
"This week we shipped the auth token refresh fix and the new onboarding
flow, both now live in production. We're currently working through the
staging database migration — expect that wrapped by Tuesday. One thing
we'd love your input on: the API rate limit thresholds for the premium
tier. Happy to jump on a quick call Monday if useful."
Reply "send" to send via Gmail or "edit [changes]" to revise.
I reply "send." Done.
The Result
| Task | Before | After |
|---|---|---|
| Morning PR triage | 25 min manual GitHub scanning | 45 sec reading Telegram |
| Slack action item harvesting | ~40 min/day of tab switching | Automated, instant summary |
| Weekly client status | 90 min writing + context gathering | 30 sec reviewing + one-tap send |
| Email follow-up chasing | 45 min/week | Zero — agent handles it |
| Total | ~9 hrs/week | ~20 min/week |
Honest Notes
What worked immediately: The PR digest and Telegram integration were flawless out of the box.
What needed iteration: The client status email tone took two rounds of refinement in agents.md. Adding "Write like a human who has a strong working relationship with this client. Warm, direct, no corporate filler." to the agent personality fixed it completely.
Security note: I run with --sandbox disabled because I need full shell access for the gh and linear CLIs. This is a deliberate choice with understood risk. Start sandboxed, then selectively enable only the tools each skill genuinely needs.
Fork It
All three skill files and the Lobster workflow are in this GitHub Repository:
https://github.com/FarooqShabbir/claw-ops
The entire point of the skills format is that you're not copying code — you're copying intent. Edit the instructions to match your stack, and the agent adapts automatically.
Submitted for the OpenClaw Writing Challenge on DEV — OpenClaw in Action prompt.
Top comments (0)