← Resources
Blueprint2026-04-13

The Chief of Staff Blueprint

7 text files just replaced a $75K/year executive assistant. Full end-to-end build guide for turning OpenClaw into an autonomous chief of staff — inbox, calendar, outreach, tasks, meeting notes, running on 3 cron jobs, 4 skills, and 8 markdown files. Extracted verbatim from snarktank/clawchief.

OpenClaw blueprint — v1.0

7 text files just replaced a $75K/year executive assistant.

A complete, copy-paste operating system that turns OpenClaw into an autonomous chief of staff. Inbox. Calendar. Outreach. Tasks. Meeting notes. Running on 3 cron jobs, 4 skills, and 8 markdown files — while you sleep.

Source repo github.com/snarktank/clawchief
Launch post @ryancarson on X
Setup time ~45 minutes
Replaces $6,250/month of tooling + human EA
Author of this guide Ghiles Moussaoui · Muditek
01The mental model

Most AI assistants are passive. A chief of staff wakes up.

A real chief of staff doesn't wait for prompts. They check your inbox at 8:15am. Your calendar at 8:30. Your CRM at 9. And only interrupt you when something actually needs you.

Every AI tutorial stops at "give it tools." That's where this one starts. The 8 files, 4 skills, and 3 cron jobs below define the missing operating system — who matters, what's urgent, when to act alone, when to escalate, and what to check every 15 minutes from 8am to 9pm.

Everything on this page is extracted verbatim from github.com/snarktank/clawchief — the public starter kit Ryan Carson released for his own chief-of-staff setup. The patterns below are the ones he runs in production.

The 3-layer rule Skills tell the agent how to act. Files tell the agent who to act for. Crons tell the agent when to wake up. Without all three, you have a chatbot. With all three, you have an operator.

Why separation matters

The entire value of the repo is the separation boundary between files. Each layer owns exactly one thing. Swap any one without breaking the others.

  • Prioritization lives in priority-map.md. Nowhere else.
  • Resolution policy lives in auto-resolver.md. Nowhere else.
  • Meeting-note ingestion lives in meeting-notes.md. Nowhere else.
  • Live task state lives in tasks.md. Nowhere else.
  • Archive state lives in tasks-completed.md. Nowhere else.
  • Local secrets live in TOOLS.md. Nowhere else.
  • Recurring orchestration lives in HEARTBEAT.md plus the cron jobs. Nowhere else.
02Architecture map

8 files. 4 skills. 3 crons. One operator.

Three layers. Each layer is portable. Each file does one thing.

Layer 1 — state files (policy + memory)
priority-map.md
Who matters. What programs. P0–P3 urgency ranking. Who is allowed to interrupt you.
auto-resolver.md
When to act alone, draft, escalate, or archive. The judgment layer.
HEARTBEAT.md
The 11-step sequence the agent runs every time it wakes up.
tasks.md
Live task list. Owner plus program sections. Source of truth across sessions.
tasks-completed.md
Completed tasks, auto-archived overnight. Your activity log.
meeting-notes.md
Ingestion rules. Turns meeting docs into tasks plus auto-resolved actions.
TOOLS.md
Your inbox, calendars, CRM ID, time zone, target market. The only file with secrets.
location-awareness.md
Travel-aware task filtering. Suppress home-only tasks when you're on the road.
Layer 2 — skills (workflow specs loaded by the runtime)
executive-assistant
Inbox, calendar, scheduling, meeting-note ingestion.
business-development
Outreach tracker, reply cadence, sourcing batches.
daily-task-manager
Add, complete, defer, reprioritize tasks.
daily-task-prep
Runs at 2am. Builds tomorrow's Today list.
Layer 3 — cron jobs (the heartbeat)
*/15 8-21 * * *
Executive-assistant sweep. Every 15 min, 8am–9pm. Inbox plus calendar plus meeting notes. Silent unless something needs you.
0 2 * * *
Daily task prep. Builds today's task list at 2am. Pulls calendar. Archives yesterday.
0 2 * * *
Business-development sourcing. Pulls 10 verified leads matching your target market into your CRM.
03File 01 — priority-map.md

Who is allowed to interrupt your day.

Without this file, the agent treats every email like an emergency. With it, only revenue-blocking signals from named people reach you.

The four urgency levels

P0
Interrupt now
Time-sensitive, blocking, high-stakes. Reaches you in your primary channel within 60 seconds.
P1
Same day
Important enough to surface today. Acted on by the agent or queued for you.
P2
Digest
Worth tracking but not worth interrupting. Bundled into a structured summary.
P3
Archive
Low-value noise. Never seen by you.

The four action modes

  • Interrupt now. Surface directly in your primary channel as a short, clear alert.
  • Handle and summarize. The agent acts, then sends a one-line update if useful.
  • Queue for digest. Hold for the next structured summary or heartbeat if still relevant.
  • Ignore. No user-facing message needed.

How to use this file

When a new signal arrives from Slack, email, calendar, tasks, meeting notes, docs, or notes:

  1. Map it to zero or more people.
  2. Map it to zero or more programs.
  3. Assign an urgency level.
  4. Choose the action mode.

If a signal maps to no important people and no important programs, it should usually be ignored or batched and archived.

priority-map.md — person block template
# Copy this block for every person who can interrupt your day ### Person Name - Why they matter: - why this person should override the noise filter - Watch for: - direct asks - approvals needed - decisions only this person can make - anything that affects their calendar, travel, or revenue priorities - Escalate to P0 when: - there is a hard deadline within 24 hours - a prospect, partner, or investor item is blocked on them - Default action: - handle and summarize, or interrupt if required

Add one block per person. Family. Co-founders. Lead investors. Top customers. Lawyers. Anyone who outranks the noise filter gets a row. Everyone else gets archived by default.

priority-map.md — program block template
### First 10 paying customers - Why it matters: - this is the immediate top company priority - Q2 target ladder: - 2026-04-30: 10 total customers - 2026-05-31: 20 total customers - 2026-06-30: 30 total customers - Watch for: - anything that can create customers, learn from prospects, or unblock acquisition - Examples: - partner introductions - prospect replies - customer objections - pilots, pricing reactions, conversion bottlenecks - Escalate to P0 when: - a near-term revenue opportunity is blocked on the principal - Default action: - handle and summarize, or interrupt if principal action is required today - Ignore / downgrade: - vague marketing ideas with no clear next step

One block per active program. Revenue. Hiring. Fundraising. Each paid ad channel. Each strategic partnership. The agent uses these blocks to decide whether a signal is worth your attention.

Default routing rules

These deterministic routes tell the agent which skill owns which class of signal:

  • General inbox, scheduling, travel, calendar integrity, operational coordination → executive-assistant.
  • Partner, referral, prospect pipeline, outreach tracker, lead verification, prospecting batches → business-development.
  • Direct task CRUD, reprioritization, completion, current-task review → daily-task-manager.
  • Morning due-date retuning and daily actionability prep → daily-task-prep.
  • Meeting notes enter through executive-assistant, then route into business-development too if the note changes outreach or partner state.

Things that should usually be ignored

  • Casual chatter with no action.
  • Repeated notifications that add no new information.
  • Documents or messages with no connection to a priority person or program.
  • Speculative ideas without owner, deadline, or next step.
  • Low-stakes activity already captured in the task list.
04File 02 — auto-resolver.md

When to act alone vs. ask first.

The hardest problem with AI assistants: they either ask permission for everything or act on things they shouldn't. This file makes that decision deterministic.

After classifying a signal, the agent prefers to resolve the obvious next step instead of merely summarizing it. That means: do low-risk operational work in the same turn when authority is clear. Update the source of truth as part of doing the work. Interrupt the principal only when judgment, approval, ambiguity, or sensitivity requires it.

01Auto-resolve now

Low-risk, operationally clear, reversible or easy to audit. The agent does the work and updates the source of truth in the same turn.

02Draft and ask the principal

The next step is visible, but the principal should approve the wording or decision first. Legal, policy, investor, pricing, press, emotional.

03Escalate without acting

Too much ambiguity, risk, or missing authority to safely draft or send. One-line summary with the blocker and the recommendation.

04No action or archive

Noise, duplicative, already handled, or not worth surfacing. Marked read and gone.

The five-condition safe-auto-resolve checklist

The agent only acts alone when all five are true. If any condition fails, it falls back to draft-and-ask.

  • The signal is clearly understood.
  • The correct source of truth is known.
  • The action is operational rather than strategic.
  • Authority is already clear.
  • A mistake would be low-cost and recoverable.

Safe auto-resolve lane

  • Update tasks.md.
  • Turn meeting-note action items into tasks.
  • Add reminders or follow-up tasks.
  • Update a tracker after a reply or booking.
  • Send low-risk scheduling messages when authority is clear.
  • Create, update, or cancel calendar events.
  • Send a short factual follow-up on a known thread.
  • Archive email after it's truly handled.

Draft-first lane

  • Legal or policy answers.
  • Investor, board, or fundraising messaging.
  • Pricing-sensitive replies.
  • Press, podcast, or speaking responses.
  • Emotionally sensitive personal or family communication.
  • Messages where wording matters more than logistics.

Escalate-without-acting lane

  • Authority is unclear.
  • The signal is contradictory or incomplete.
  • There is reputational, legal, or financial risk without enough context.
  • The action would expose private context the principal would not want disclosed.
  • There is no reliable source of truth to ground the response.
Source-of-truth rule Do not auto-resolve from memory alone. Always ground the action in the relevant live source of truth before acting. Tasks → tasks.md. Outreach → CRM. Scheduling → live calendar. Priority → priority-map.md.

Good auto-resolve output examples

  • "Booked it. Invite sent."
  • "Updated the tracker and replied with the next step."
  • "Turned the meeting-note follow-ups into tasks and handled the ones I could resolve."
  • "Rescheduled for Tuesday at 2pm; nothing else needed from you."
05File 03 — HEARTBEAT.md

The 11-step sequence the agent runs every 15 minutes.

This is the file that turns a passive chatbot into a proactive operator. Every cron firing, every wake-up, every check-in runs this exact sequence top to bottom.

  1. Read the priority map.clawchief/priority-map.md
  2. Read the auto-resolver policy.clawchief/auto-resolver.md
  3. Read the meeting-notes policy and ledger.clawchief/meeting-notes.md plus workspace/memory/meeting-notes-state.json
  4. Read the live task file.clawchief/tasks.md
  5. Run the executive-assistant workflow for meeting-notes ingestion plus inbox, calendar, and scheduling triage.
  6. If the signal is really about outreach tracker state, lead status, prospect pipeline, or partner follow-up — use the business-development workflow instead.
  7. Auto-resolve low-risk operational items when the next step is obvious and authority is clear.
  8. If meeting notes create principal tasks, add them to clawchief/tasks.md.
  9. If the principal needs to know or act, send one short, direct update.
  10. If there is no EA or biz-dev issue, use the remaining heartbeat value for at most one priority nudge anchored in a live program or open task.
  11. If there is nothing useful to say, reply HEARTBEAT_OK.

The 8 governing rules

  • Be proactive, but do not create noise.
  • Keep this file as an orchestrator, not a duplicate workflow spec.
  • Let the skills own their detailed procedures.
  • Let priority-map.md own people and program priority.
  • Let auto-resolver.md own auto-resolution policy.
  • Let meeting-notes.md own meeting-notes ingestion policy.
  • Let tasks.md own the live task state.
  • Do not send repeated or near-identical nudges unless there is materially new information, a changed recommendation, or a concrete trigger.
06File 04 + 05 — tasks.md + tasks-completed.md

The live task file and its overnight archive.

The agent reads tasks.md at the start of every heartbeat. Updates it in the same turn it changes anything. Treats it as the single source of truth across sessions, devices, and crons.

tasks.md — required structure
# Current Tasks Last updated: YYYY-MM-DD HH:MM TZ Canonical file: use this file as the source of truth across sessions ## Today ### Principal #### Revenue / customer growth - [ ] Highest-priority principal task #### Executive assistant - [ ] Principal decision or review task ### Assistant #### Executive assistant - [ ] Follow up on scheduling — due YYYY-MM-DD #### Business development - [ ] Process partner replies — due YYYY-MM-DD ## Every weekday - Ship one concrete growth action - Clear priority inboxes ## Backlog with due date - Assistant follow-up — due YYYY-MM-DD - Important task — due YYYY-MM-DD ## Recurring reminders - [ ] Reminder — due YYYY-MM-DD HH:MM TZ — recurs weekly every 1 ## Backlog - Task with no immediate date ## To research - Topic, tool, or workflow to investigate later ## Weekly / Monthly / Quarterly - Cadence review task ## Rules - Update this file when task state changes. - Heartbeats read from this file, not from memory. - Prior-day completions move to tasks-completed.md during daily prep.

The 9 task-file rules (non-negotiable)

  1. Read tasks.md before answering any question about current tasks or composing a check-in.
  2. Treat it as the source of truth across all sessions.
  3. When task state changes, update it in the same turn whenever practical.
  4. When the assistant gets a task with a due date, add an assistant-owned task using the canonical due-date format.
  5. When a task depends on an outside reply or future check-in, add a separate follow-up task with its own due date.
  6. Scan for overdue and due-today assistant tasks before deciding what needs attention.
  7. Keep long-term preferences in memory files, live state in tasks.md, and completed history in tasks-completed.md.
  8. If a task change materially affects heartbeat behavior, ensure the heartbeat still points at tasks.md.
  9. Use YYYY-MM-DD for all-day due dates and YYYY-MM-DD HH:MM TZ for timed due dates.
tasks-completed.md — archive structure
# Completed Tasks Last updated: YYYY-MM-DD HH:MM TZ Archive file: completed tasks moved out of clawchief/tasks.md ## YYYY-MM-DD ### Principal - [x] Completed task — completed YYYY-MM-DD HH:MM TZ ### Assistant - [x] Completed task — completed YYYY-MM-DD HH:MM TZ
07File 06 — meeting-notes.md

Turn every call into tasks automatically.

Most meeting notes die in a Google Doc nobody reopens. This file makes the agent treat notes as a live signal source — it reads them, extracts action items, and creates tasks before you even leave the meeting.

What the agent extracts from every note

  • Explicit action items.
  • Implied follow-ups.
  • Deadlines and commitments.
  • Promises the principal made.
  • Introductions to send.
  • Materials, links, or docs to share.
  • Scheduling next steps.
  • Outreach or partnership next steps.
  • GTM or content tasks.
  • Legal or policy questions that need review.
  • Anything that should become a task, reminder, draft, or auto-resolve action.

The 7-step processing workflow

  1. Search the configured source (Google Docs, AI notetaker output, shared folder) for recently shared or updated notes.
  2. Compare candidate docs against workspace/memory/meeting-notes-state.json.
  3. For each unprocessed note: read the note text, identify principal action items, assistant action items, follow-ups waiting on others, decisions and commitments, and auto-resolvable items.
  4. Classify each extracted item through the priority map.
  5. Run the auto-resolver policy.
  6. Update tasks.md and any other live source of truth in the same turn.
  7. Record the note as processed with timestamp and a short summary of what was extracted.

What counts as successful ingestion

A note is not handled just because it was read. It is only handled when:

  • Tasks are added or updated in tasks.md.
  • Follow-ups are created with their own due dates.
  • Tracker, calendar, or inbox state is updated when appropriate.
  • Auto-resolved actions are completed when safe.
  • The processed-doc ledger is updated to prevent reprocessing.
meeting-notes-state.json — ledger format
{ "version": 1, "notes": [ { "docId": "1ABC...", "title": "Call with Linda — 2026-04-12", "processedAt": "2026-04-12T19:04:00-04:00", "meetingDate": "2026-04-12", "status": "processed", "summary": "3 principal tasks added, 2 follow-ups, 1 tracker update" } ], "updatedAt": "2026-04-12T19:04:00-04:00" }

The ledger prevents the agent from reprocessing the same doc on the next heartbeat. Every processed record keeps a timestamp and a short summary.

08The 4 skills

Files are policy. Skills are procedure.

Each skill reads the relevant files, then runs a deterministic workflow. Skills live in ~/.openclaw/skills/ and are auto-loaded by the runtime.

Skill 01
executive-assistant
Inbox triage, scheduling, calendar integrity, meeting-note ingestion.

The skill reads priority-map.md, auto-resolver.md, meeting-notes.md, tasks.md, and TOOLS.md at the start of every run.

Operating standard

  • Be decisive, brief, and useful.
  • Clear low-risk operational work instead of escalating everything.
  • Check all relevant calendars, not just the default write calendar.
  • Treat out-of-office, travel, offsite, and similar blocks as real conflicts.
  • Use gog gmail send --reply-to-message-id=... instead of a fresh send with Re: in the subject.
  • Preserve real To and CC recipients before replying and add --reply-all when the thread recipients should stay copied.
  • When the work creates a future dependency, add a follow-up task in tasks.md before ending the turn.
  • Never imply the assistant personally met, spoke with, or saw someone.

Handle without asking — when authority is clear

  • Meeting scheduling, rescheduling, cancellations.
  • Invite creation, update, or cancellation.
  • Short acknowledgments for scheduling or ops.
  • Confirming receipt with next-step mention.
  • Routine admin or vendor notices.
  • Newsletters and non-actionable notifications.
  • Straightforward factual replies from thread context.
  • Direct business follow-up that needs a brief factual answer.

Ask first — when the thread is

  • Legal, regulatory, or conflict-heavy.
  • Financial, pricing, investor, fundraising, or contract.
  • Press, podcast, speaking, or public-facing.
  • Emotionally sensitive or reputationally risky.
  • Strategically important and likely to change priorities.
  • Unclear enough that a wrong reply would create confusion.

The bounded sweep workflow

  1. Review due tasks first. Read tasks.md. Check for overdue or due-today assistant tasks before starting inbox or calendar work.
  2. Search the inbox by message, not thread. Start narrow (newer_than:3d, unread or important) and expand only if needed.
  3. Inspect full thread context before classifying. Place each message into one of: schedule-now, reply-and-clear, clear-without-reply, waiting-on-external, follow-up-due-now, principal-decision-needed.
  4. Handle scheduling directly. Use the booking link first. Inspect all relevant calendars before acting. Send a short acknowledgment instead of acting silently.
Canonical EA queries via gog
# Unread / important inbox, last 3 days gog gmail messages search -a {{ASSISTANT_EMAIL}} \ 'in:inbox newer_than:3d (is:unread OR is:important)' \ --max=10 --json --results-only # All recent inbox, last 7 days gog gmail messages search -a {{ASSISTANT_EMAIL}} \ 'in:inbox newer_than:7d' --max=15 --json --results-only # Sweep sent mail for unanswered threads gog gmail messages search -a {{ASSISTANT_EMAIL}} \ 'in:sent newer_than:14d' --max=25 --json --results-only # All calendars in scope gog calendar calendars -a {{ASSISTANT_EMAIL}} --json --results-only # Next 2 days of events across all calendars gog calendar events --all -a {{ASSISTANT_EMAIL}} \ --days=2 --max=50 --json --results-only # Create an event with Meet link gog calendar create {{PRIMARY_WORK_EMAIL}} -a {{ASSISTANT_EMAIL}} \ --summary='Intro call' --from='RFC3339' --to='RFC3339' \ --attendees='a@example.com,b@example.com' \ --description='CONTEXT' --with-meet --send-updates all
templates.md — 6 canonical replies
## Offer times Hi NAME, Here are a few times that work for {{OWNER_NAME}}: - OPTION 1 - OPTION 2 - OPTION 3 If one of those works, reply with your preference and I'll send the invite. If not, send a couple of windows that do work for you. — {{ASSISTANT_NAME}} ## Acknowledge and schedule now Thanks, NAME — I'll go ahead and schedule it for OPTION and send the calendar invite now. ## Short follow-up Hi NAME, Following up on the note below in case it got buried. If you'd like to move this forward, just reply here and I'll take care of the next step. — {{ASSISTANT_NAME}} ## Holding reply Thanks — got it. I'm checking this and will get back to you shortly. ## Cancellation Hi NAME, We need to cancel this meeting. I've canceled the calendar invite. — {{ASSISTANT_NAME}} ## Principal update You have a message from NAME about TOPIC. My take: RECOMMENDATION. Deadline / urgency: TIMEFRAME.
Skill 02
business-development
Outreach replies, tracker updates, follow-up cadence, sourcing batches.

The outreach sheet or CRM is the live source of truth. Local prospect files are never treated as current state.

Core rules

  • The outreach sheet, tracker, or CRM is the live source of truth.
  • Do not silently broaden default prospecting beyond the configured target market or geography without explicit direction.
  • Verify a working website and a real public email before adding a new lead.
  • Ignore placeholder or junk addresses from site code.
  • Sweep sent mail so unanswered outreach does not disappear.
  • If the work touches lead status or tracker state, this skill owns it — even when scheduling is part of the job.

When to update the tracker

  • When the initial outreach email is sent.
  • When any meaningful reply comes back.
  • When a meeting is asked for.
  • When a meeting is booked, confirmed, rescheduled, or cancelled.
  • When a decline or not-a-fit outcome is recorded.
  • When a follow-up or next-step detail worth preserving is learned.

Rule: update the tracker before marking the thread handled. Not after.

Default follow-up cadence

  • First follow-up. Around 2 days after the last unanswered outbound.
  • Second follow-up. Around 5 days after the previous follow-up.
  • Third follow-up. Around 7 days after the previous follow-up.
  • After the third. Stop the automatic sequence. Surface the lead only if it still matters.
  • Reset the clock after each new outbound follow-up. Record each follow-up in the tracker notes.

Default outbound workflow

  1. Verify the lead is not already in the tracker.
  2. Verify the lead matches the configured target market and geography.
  3. Verify a working website unless explicitly waived.
  4. Inspect the website for a real public email before leaving email blank.
  5. Send the initial outreach email using the template from resources/partners.md.
  6. Update the tracker immediately after each action.
  7. Sweep sent mail for unanswered outreach and follow up on cadence.
partners.md — initial outreach template
## Subject the founder asked me to reach out ## Body Hi {first-name}, I'm the assistant to {{OWNER_NAME}}, the founder of {{BUSINESS_NAME}}. I was researching professionals in {{TARGET_MARKET}} in {{TARGET_GEOGRAPHY}}, came across your work, and passed your information along. {{OWNER_NAME}} asked me to reach out to see if you might be open to a brief introductory conversation. {{BUSINESS_NAME}} helps people navigate a difficult process with clearer guidance and practical support. In some cases, our customers also want help from an experienced human professional, and we may be able to refer people your way when there's a fit. If you'd be open to a 20–30 minute video call or coffee, I'd be happy to help set it up. No sales pitch — {{OWNER_NAME}} would simply love to connect, learn more about your work, and see whether there could be a mutual fit. All the best, {{ASSISTANT_NAME}} Assistant to {{OWNER_NAME}} {{BUSINESS_NAME}} {{BUSINESS_URL}}

This is the exact template shipped in the repo. The subject line intentionally breaks the professional-cold-email pattern — it reads like a forwarded intro, not a campaign.

Skill 03
daily-task-manager
Add, complete, defer, reprioritize tasks. Owns the live task file.

Triggered by any task CRUD request. Reads tasks.md first. Updates in the same turn. When a task creates a future dependency, adds a follow-up task immediately so nothing falls through inbox memory. Never relies on memory between sessions.

Skill 04
daily-task-prep
Builds today's task list before you wake up.

Triggered by the 02:00 cron. Preserves manually-added open tasks. On weekdays, seeds from Every weekday. Promotes due-today backlog items. Adds principal-owned meetings. Archives yesterday's completed tasks. Stays silent unless something needs human attention.

The 10-step preparation workflow

  1. Read tasks.md.
  2. Read priority-map.md.
  3. Read tasks-completed.md if it exists.
  4. Determine whether today is a weekday.
  5. Archive tasks completed yesterday from tasks.md into tasks-completed.md.
  6. Build the candidate ## Today list from current open tasks plus weekday recurrences plus due-today backlog plus recurring reminders plus today's principal meetings.
  7. Remove duplicates by normalized task text, keeping the most specific wording already present.
  8. Assign each task to its owner section plus program or person grouping header.
  9. Reorder open tasks in priority-first order within each owner section.
  10. Write back only the minimal necessary edits. Do not wipe ## Today just to rebuild it.
09The 3 cron jobs

Without crons, it's a chatbot. With them, it's an operator.

Three required jobs plus two optional ones. Each runs in its own session target. Each has a deliberately short prompt — the skill does the heavy lifting.

*/15 8-21 * * *
Executive-assistant sweep

Every 15 minutes, 8am to 9pm. Fires a heartbeat. Inbox scan plus calendar check plus meeting-note ingestion. Stays silent unless something needs you. Session target: main. Around 52 sweeps per day.

0 2 * * *
Daily task prep

Runs at 02:00 in your timezone. Promotes due-today items into Today, adds calendar meetings, archives yesterday's completions. Your task list is ready before your alarm goes off. Session target: isolated. Silent delivery.

0 2 * * *
Daily business-development sourcing

Runs at 02:00. Pulls 10 verified leads matching your geography and segment, drops them into your CRM with verified email and website. Announces completion to your primary update channel.

0 3 * * * — optional, disabled by default
Nightly OpenClaw backup

Performs the nightly backup to the configured Git remote using a deterministic allowlisted git flow. Never adds secrets, runtime state, logs, media, or ignored files. Keep disabled until the remote repo and allowlist are correct.

0 2 * * * — optional, disabled by default
Optional OpenClaw self-update

Checks whether an OpenClaw update is available and installs it via the gateway update tool. Silent unless a meaningful problem needs human attention. Enable only if you explicitly want automatic updates.

cron/jobs.template.json — full config
{ "version": 1, "note": "Template only. Create fresh jobs in the target environment.", "jobs": [ { "name": "Executive assistant sweep", "enabled": true, "schedule": { "kind": "cron", "expr": "*/15 8-21 * * *", "tz": "{{TIMEZONE}}" }, "sessionTarget": "main", "wakeMode": "now", "payload": { "kind": "systemEvent", "text": "Executive assistant sweep. Use the executive-assistant skill. Handle internally; only message principal if there is new actionable information." } }, { "name": "Daily task prep", "enabled": true, "schedule": { "kind": "cron", "expr": "0 2 * * *", "tz": "{{TIMEZONE}}" }, "sessionTarget": "isolated", "wakeMode": "now", "payload": { "kind": "agentTurn", "message": "Use the daily-task-prep skill.", "timeoutSeconds": 900 }, "delivery": { "mode": "none" } }, { "name": "Daily business-development sourcing", "enabled": true, "schedule": { "kind": "cron", "expr": "0 2 * * *", "tz": "{{TIMEZONE}}" }, "sessionTarget": "isolated", "payload": { "kind": "agentTurn", "message": "Use the business-development skill. Run the default daily prospecting batch.", "timeoutSeconds": 1800 }, "delivery": { "mode": "announce", "channel": "{{PRIMARY_UPDATE_CHANNEL}}", "to": "{{PRIMARY_UPDATE_TARGET}}" } } ] }

Channel adaptation

The repo is explicitly designed to run on whatever messaging surface you prefer. Keep workflows generic; only the delivery route changes.

Slack / Telegram / Signal / Discord / Google Chat

Use {{PRIMARY_UPDATE_CHANNEL}} and {{PRIMARY_UPDATE_TARGET}} in cron delivery blocks. Don't hardcode Slack unless you're explicitly Slack-only. Use one primary route — founder DM, private ops channel, or dedicated assistant thread. Don't spray updates across multiple surfaces.

10Install guide

Clone to first heartbeat in about 45 minutes.

Assumes OpenClaw is installed locally. GOG — the Google Workspace CLI — is a hard prerequisite. Set it up first.

Prerequisite — install GOG

  1. Install GOG.brew install steipete/tap/gogcli
  2. Create a Google OAuth desktop-client in Google Cloud Console.Enable: Gmail, Calendar, Sheets, Drive, Docs, People
  3. Configure the OAuth consent screen and add the operating account as a test user.
  4. Download the OAuth client credentials JSON.
  5. Load credentials.gog auth credentials /path/to/client_secret.json
  6. Add the operating account.gog auth add <email> --services gmail,calendar,drive,contacts,docs,sheets
  7. Verify the account.gog auth list
  8. Verify that Gmail message search, Calendar, and Sheets metadata all work.

The 13 install values to gather

Collect these before editing files. Every template placeholder maps to one of these.

{{OWNER_NAME}} · {{ASSISTANT_NAME}} · {{ASSISTANT_EMAIL}} · {{PRIMARY_WORK_EMAIL}} · {{PERSONAL_EMAIL}} · {{BUSINESS_NAME}} · {{BUSINESS_URL}} · {{TIMEZONE}} · {{PRIMARY_UPDATE_CHANNEL}} · {{PRIMARY_UPDATE_TARGET}} · {{GOOGLE_SHEET_ID}} · {{TARGET_MARKET}} · {{TARGET_GEOGRAPHY}}

The 7-step install flow

  1. Clone the repo. Pull snarktank/clawchief into your OpenClaw workspace as a starter. Use it as a template, not a final config.
  2. Install the 4 skills. Copy skills/executive-assistant, business-development, daily-task-manager, daily-task-prep into ~/.openclaw/skills/.
  3. Install the workspace files. Copy clawchief/, workspace/HEARTBEAT.md, workspace/TOOLS.md, and workspace/memory/meeting-notes-state.json into ~/.openclaw/workspace/.
  4. Replace all placeholders. Grep for {{ across the whole workspace. Replace each token with the real value from your 13-item list.
  5. Customize priority-map + TOOLS. Strip the example people and programs. Add your real ones. Be specific about who escalates to P0. Be ruthless about what gets ignored.
  6. Customize the BD outreach template. Edit skills/business-development/resources/partners.md. Change the subject and body to match your offer.
  7. Create the 3 cron jobs. Copy cron/jobs.template.json into your runtime. Replace {{TIMEZONE}}, {{PRIMARY_UPDATE_CHANNEL}}, {{PRIMARY_UPDATE_TARGET}}. Enable the EA sweep first. Enable the two 2am crons after a week of tuning.
Common mistake Most people enable all 3 crons before customizing the priority map. You'll get 52 useless sweeps per day. Customize priority-map.md and TOOLS.md first, then enable the EA sweep, then the daily crons after a week of tuning.

Private files not shipped by the repo

The public starter kit intentionally does not ship these. Author your own if your setup depends on them:

AGENTS.md · SOUL.md · USER.md · IDENTITY.md · MEMORY.md · memory/

11Install checklist

The install is good only if every item below passes.

This is the verbatim install-validation checklist from the repo. Walk it after the 7-step install.

GOG

  • gog auth list shows the correct operating account.
  • Gmail message search works.
  • Calendar list and read works.
  • Sheets metadata read works.
  • Google Docs read works if meeting-notes ingestion is enabled.

Skills

  • executive-assistant installed.
  • business-development installed.
  • daily-task-manager installed.
  • daily-task-prep installed.

Workspace files

  • priority-map.md installed.
  • auto-resolver.md installed.
  • meeting-notes.md installed.
  • tasks.md installed.
  • tasks-completed.md installed.
  • HEARTBEAT.md installed.
  • TOOLS.md installed.
  • meeting-notes-state.json installed.
  • All placeholders replaced.

Behavior verification

  • Heartbeat reads source-of-truth files, not duplicated logic.
  • Proactive updates route to the intended channel and target.
  • Inbox sweeps use message-level Gmail search.
  • Scheduling checks all relevant calendars before booking.
  • Task system uses tasks.md as live source of truth.
  • Prior-day completions archive to tasks-completed.md.
  • Meeting notes are treated as a live signal source if enabled.
  • BD work treats the outreach sheet as the live source of truth.
  • Daily task prep promotes due-today items into ## Today.

Cron jobs

  • Executive-assistant sweep exists.
  • Daily task prep exists.
  • Daily business-development sourcing exists.
  • Optional nightly backup configured only if desired.
  • Optional self-update enabled only if desired.
12Operating lessons

The 13 lessons baked into this repo.

These are the lessons the author learned from running this setup in production — documented in the repo's README and REVIEW-NOTES. Every one is a tested pattern, not a hypothesis.

  • Keep a separate source-of-truth layer instead of burying everything in heartbeat text.
  • Use Gmail message search, not thread-only search — unanswered outbound disappears from thread view.
  • Check all relevant calendars before offering or booking time, including family and shared conflict calendars.
  • Keep one canonical live task file and a separate completed-task archive.
  • Separate task management (live CRUD) from daily task prep (morning restructure).
  • Treat the outreach tracker as a live source of truth, not a reporting artifact. Update it in the same turn you act.
  • Treat meeting notes as an operational signal source, not passive documents.
  • Use a priority map to decide what matters — separate people, programs, and urgency.
  • Use an auto-resolver policy to decide whether to act, draft, escalate, or ignore.
  • Keep proactive update transport configurable instead of hardcoding one surface.
  • Keep cron prompts DRY and let skills hold the workflow logic.
  • Keep optional backup and self-update as explicit choices, not assumptions.
  • When a task depends on an outside reply, add a follow-up task before ending the turn — don't rely on inbox memory.
13What it replaces

The math — what this actually substitutes for.

Comparing apples to apples. The named tools and roles a fractional founder typically pays for to get the same coverage.

What it replaces
Typical cost
This stack
Junior executive assistant (US, full-time)
$65–85K / yr
$0
SDR or BDR with CRM hygiene
$50–70K / yr
$0
Calendly Premium + Motion + Reclaim
~$60 / mo
$0
Apollo / Clay / Lemlist baseline plans
~$300 / mo
Optional
Meeting-note ingestion + CRM routing
~$200 / mo
$0
OpenClaw subscription (you already pay)
flat monthly
incl.

This is not AI replaces humans. This is: the boring 80% of an EA's day is now files and crons. The strategic 20% — judgment, taste, relationships — is still yours.

EndCredits and links

Where this came from.

None of this is original work by me. The blueprint above is a faithful distillation of two specific public artifacts. Credit lives with the authors.

Ryan Carson released snarktank/clawchief as the public starter kit for his own chief-of-staff setup. Every template, command, and rule on this page is copied verbatim from that repo. His launch post is the original public context for the design decisions.

The evolution of the setup was influenced by Pedro Franceschi's OpenClaw setup, which he explained during his Core Memory podcast segment with Ashlee Vance. In particular, his setup helped inspire the priority map, the auto-resolver layer, and the ingestion-pipeline mindset that turns passive context into active operational state.

This page was compiled by Ghiles Moussaoui at Muditek — AI RevOps for B2B SaaS. If you want this exact architecture wired into your real business with your real priorities, customers, and offers, that's what I do.

B2B Agents Newsletter

One deployable system. Every week.

Last edition: an outbound system that books 153 calls for $1,200/month. The one before: an AI agent that writes proposals in 12 minutes. You get the full build. 5,300+ operators already do.