Cindy Zhu.
Free guides
Productivity & thinking Claude

Automate your morning with Claude

Hey, it's Cindy ๐ŸŒฑ You commented MORNING, so this is my actual setup: one Claude session that runs on a schedule before I wake up, does four jobs, and hands me a brief.
btw the waitlist for AI System Club is now open! If you're keen on using AI to automate your content, video editing, job search, business or build AI agents, feel free to sign up (only if you want to hehe). Ps. the waitlist gets first dibs:)
the shape of it

Four jobs, one scheduled session

The mistake is thinking of this as four automations. It is one session that wakes up, reads your world, and writes one page. Four jobs, in this order, because each one feeds the next.

1. Read my day Today's calendar, my priorities file, and everything that landed in the inbox overnight. Nothing is written yet, this pass is pure reading.
2. Draft the boring replies The routine email gets written in my voice and left in drafts. Sensitive or money-related email gets skipped on purpose, with a reason.
3. Flag what moved One line on anything unusual in the numbers I track, against the last two weeks. If nothing moved, it says so and stops.
4. Rank the day Five items maximum, hardest and highest leverage first, each with a one-line reason it sits where it does. Everything else goes on a "not today" line.
๐ŸŒฑ Why the order matters: a ranked to-do list written before the calendar and inbox are read is fiction. Job 4 is only useful because jobs 1 to 3 already happened in the same session, so the ranking knows about the 9am you forgot and the client who emailed at 11pm.

pick your scheduler

Three ways to run it on a schedule

Claude has three separate scheduling features and they are genuinely different. Pick by one question: does your brief need to read files on your own laptop?

  • โ˜๏ธ Cowork scheduled tasks are the easiest path and the one I would start with. You click Scheduled in the left sidebar, then New task, and either describe it to Claude or fill the form in yourself: name, prompt, approval mode, frequency (hourly, daily, weekly, weekdays or manual), and an optional model and folder. These run remotely, so they fire on their cadence even when your computer is asleep. They are on all paid plans, Pro upwards, and they use the connectors, skills and plugins you already have (Anthropic's help page).
  • ๐Ÿ’ป Claude Code Desktop local tasks are the pick when the brief has to read files on your machine. In the Desktop app, click Routines in the sidebar, then New routine, and choose Local. You get direct access to your files and a minimum interval of one minute, but the app has to be open and the computer awake, otherwise the run is skipped and caught up later (Desktop scheduled tasks docs).
  • ๐ŸŒ Cloud routines run on Anthropic's infrastructure with your laptop closed, created at claude.ai/code/routines or with /schedule daily brief at 6am in the Claude Code CLI. Two honest catches: a routine is built around one or more GitHub repositories that get cloned on every run, and it runs with no approval prompts at all. Pro, Max, Team and Enterprise, minimum interval one hour (Routines docs).
๐Ÿ’ก My recommendation for a morning brief: Cowork scheduled tasks. Your calendar, inbox and notes all live behind connectors rather than on your hard drive, so the local-files advantage of the Desktop route buys you nothing, and you keep an approval mode instead of the fully autonomous cloud-routine behaviour.

the plumbing

Set it up in six steps

  1. ๐Ÿ”Œ Connect the calendar first, on its own. Go to Customize, then Connectors, and add the Google Workspace connector. Then ask Claude "what is on my calendar today?" in a normal chat and check the answer is right before you add anything else. One connector at a time, read-only test after each one (connectors guide).
  2. ๐Ÿ“ฅ Add the inbox, then lock down what it can do. Same connector covers Gmail. Now the important part: in Customize, then Connectors, open the connector and look at its tool permissions. Each one can be set to Always allow, Needs approval or Blocked. Set anything that sends to Blocked and leave reading and drafting on. This is a setting, not a promise in a prompt, which is why it holds (Google Workspace connectors).
  3. ๐Ÿ“ Write a priorities file worth reading. Your brief is only as good as the context it ranks against. A calendar tells Claude what is booked, not what matters. Use the second prompt below to build one, and keep it somewhere the scheduled task can reach: a Notion page, a Google Doc, or a plain file in your working folder.
  4. โฐ Create the scheduled task. Click Scheduled in the sidebar, then New task, then Set up manually. Name it "morning brief", set the frequency to daily, and pick a time about thirty minutes before you actually get up so the run has finished when you open your phone.
  5. ๐Ÿ“‹ Paste the master prompt as the instructions. The full text is below. Write it out completely rather than trimming it: a scheduled run has no memory of your chats and nobody is sitting there to answer a clarifying question, so anything you leave implied gets guessed.
  6. โ–ถ๏ธ Hit run now and watch the first one. Do not wait until tomorrow morning to find out it pulled the wrong calendar. Run it while you are looking, read the output, approve or block whatever it asks for, and fix the prompt on the spot.

copy this

The master prompt

This is the whole thing. Replace the bracketed parts with your own sources and paste it in as the task's instructions.

โ˜€๏ธ the morning brief task
You are my morning assistant. Each time this task runs, produce one short morning brief and change nothing in the outside world without my approval.

Work through these four jobs in order. If a source is empty or a connector is down, say so plainly in the brief instead of guessing or filling the gap.

1. READ MY DAY. Pull today's events from my Google Calendar, read my priorities file at [Notion page, Google Doc or file path], and scan every email that arrived since this task last ran. Note anything that needs preparation before it starts, any double booking, and the longest unbroken free block I have today.

2. DRAFT, NEVER SEND. Sort the new email into needs-a-reply, FYI and ignore. For everything in needs-a-reply that is routine (a scheduling reply, an acknowledgement, a short answer I have given before), write the reply in my voice and save it as a draft. Leave anything sensitive, financial, or to do with a negotiation undrafted, and tell me in one line which ones you skipped and why.

3. FLAG WHAT MOVED. Check [the numbers I track: analytics, sales dashboard, posts, pipeline] and tell me only what is unusual compared with the last fourteen days, up or down, with the actual figure next to it. If nothing is unusual, write "nothing moved" and stop. Do not pad this section to look busy.

4. RANK MY DAY. Write my to-do list in the order I should actually do it, hardest and highest leverage first, capped at five items, each with a one-line reason it sits where it does. Anything real that cannot fit today goes on a single "not today" line so I stop carrying it around.

Then write the brief itself: eight short lines maximum, plain sentences, no preamble, and no summary of the work you just did. Put the ranked list last and finish with the single question "what do you want to move?".

Hard rules that never change. You draft and I approve. Never send an email, message, post, payment or calendar invite. Never delete anything. Only use the tools I have connected. This task runs with nobody watching, so when you are unsure, write the uncertainty into the brief rather than acting on it.

Job 1 leans on your priorities file, and most people do not have one worth reading. Build it with this, in a normal chat, before you schedule anything:

๐Ÿ“ build my priorities file
I want a priorities file that a scheduled assistant can read cold every morning and rank my day against. Interview me first rather than writing it straight away.

Ask me what I am actually trying to achieve this quarter, what my three current projects are, which parts of my work genuinely only I can do, and what I keep pushing to tomorrow. Ask a couple of questions at a time so it feels like a conversation, and push back when an answer of mine is vague.

Then write the file with four sections: my goal this quarter in one sentence, my projects ranked with a one-line definition of done for each, the work only I can do, and a "not doing" list of things I have consciously dropped. Keep the whole thing under forty lines so I will actually maintain it. Finish by telling me which single line in that file will do the most work when an assistant reads it with no other context, and rewrite that line to be more specific.

from my latest Jarvis reel

The updated build manual

I rebuilt my own Jarvis for the latest reel and the prompt got a lot better, so here it is in full. Three pieces: a short file that tells Claude who you are, the build manual you paste once, and the connector step that most people skip. Do these three and the rest of this guide gets easier, because Claude is reading your real calendar, inbox and notes instead of guessing.


make it yours

Tell Claude who you are

This single file is the difference between your Jarvis and a generic bot. It's why yours knows a slipped deadline on project two matters more than a full inbox. In your project folder, ask Claude Code to create a CLAUDE.md, then make it specific. Make a priorities note while you're here, even five ranked bullets, because the brief ranks your day from it and can't invent one.

๐Ÿ“ your CLAUDE.md, fill in the brackets
# Who I am
I'm [name], I [what you do]. I care most about [your #1 goal right now].

# What I'm working on this month
- [project 1], [project 2], [project 3]

# My priorities, ranked
1. [top priority]  2. [next]  3. [next]

# My tone
[e.g. warm, direct, no corporate filler]

# Hard rules
- Always draft, never send. Never take irreversible actions without asking.
- Only use the apps I've connected.

layer two, the backend

Paste the build manual

Don't read this one, just copy the whole block. It's the architecture behind my Jarvis, and it saves itself as a skill you can trigger by phrase.

๐Ÿ“‹ the build manual, paste into Claude Code
You are my personal assistant, my own Jarvis. First, read my CLAUDE.md so you know who I am, my projects, my priorities and my tone. From now on, act as a proactive chief of staff for me, not a generic chatbot.

Keep this skill fully self-contained: list every source to pull and exactly how to format the brief, because when it runs on a schedule it has no memory of our chats.

Build me a "morning brief" routine, and save it as a reusable skill I can trigger by phrase (like "run my morning brief", "brief me", or "what's on my plate"). When I trigger it, do this:

1. CALENDAR: read today's events from my Google Calendar. Flag anything that needs prep, and any conflicts or gaps.
2. INBOX: scan my Gmail from the last 24 hours. Group it into needs-a-reply / FYI / ignore. For the needs-a-reply group, draft short replies in my tone and leave them in Drafts. Never send.
3. PRIORITIES + TASKS: read my priorities and task list (from my Notion or my priorities note), and pick the 3 things that actually matter most today, ranked, with a one-line why for each.
4. ONE THING TO KNOW: surface a single important signal, a deadline, a number that moved, a follow-up I'm forgetting.

Then write it as 6 to 8 short spoken lines, in my voice, warm and direct, no filler. END with the single most important question: "What should I handle first?"

Write the brief in [your language]. Save it to brief.txt and to a Notion page. Then rewrite jarvis_data.js so the dashboard shows today's real numbers and a one-line activity log per source you read, and mark each connector online or offline based on whether the call actually succeeded. Then read the brief out loud through my Fish Audio voice.

If a source is empty or a connector is down, say so plainly in the brief and mark it offline on the dashboard. Never fill a gap with a plausible guess.

Rules, always: you draft, I approve. Never send email, post, delete, or take any irreversible action on your own. Only pull from the apps I've connected.

So you're not pasting blind, this is the shape of what comes back:

๐Ÿ“… Calendar Today's events, what needs prep, and where the gaps and clashes are.
๐Ÿ“ฅ Inbox Last 24 hours sorted into needs-a-reply, FYI and ignore, with drafts waiting.
๐ŸŽฏ Priorities The three things that actually matter today, ranked, each with a one-line why.
๐Ÿ’ก One thing to know A single signal you would otherwise have missed.

The skill saves itself to ~/.claude/skills/<name>/SKILL.md. Ask Claude Code for more the same way, and it reaches for them automatically when a request matches:

๐ŸŒ… "run my morning brief" The full routine above.
โœ๏ธ "draft my replies" Triages the inbox and drafts responses in your tone.
๐Ÿ’ฌ "answer customer queries" Reads your FAQs, drafts support replies, escalates anything not covered.
๐Ÿ“Š "how are my numbers" Pulls your revenue or content stats into a quick read.

this is the part people skip

Authorise your connectors

A connector is an authorised link between the brain and a service you already use. It's the difference between Claude talking about your calendar and Claude reading it. Nobody can do this step for you. The prompt above is portable; your authorisations are yours, and until you grant them your beautiful dashboard is a screensaver.

  1. ๐ŸŒ Authorise on the web, once Go to claude.ai/customize/connectors. In the sidebar that's Customize, then Connectors. Connect one, approve it on that service's own consent screen.
  2. ๐Ÿ” The terminal inherits it You do not set connectors up twice. If you signed into Claude Code with your claude.ai account, connectors you added on the web are automatically available in the terminal. Run /mcp to see them. Ones you've never used hide behind a "Show unused connectors" row.
  3. โœ… Test one read before you trust it Ask for one read-only fact, then check it against the source with your own eyes. "How many rows in my tasks database are marked done?", then open the database and count. If it matches, move to the next connector.
  4. โž• Then add the next one One connector, one verified read, then the next. Slower, and the only route to ever reading the 8am brief without silently re-checking it.
โš ๏ธ Do not try to add Gmail or Calendar from the terminal. Some Anthropic-hosted connectors, Gmail, Google Calendar and Microsoft 365 among them, don't support local OAuth from Claude Code, because the upstream identity provider only accepts the redirect URL claude.ai registered. claude mcp add will fail with "is Anthropic-hosted and doesn't support local OAuth". Connect those on the web and let the CLI inherit them. claude mcp add --transport http NAME https://the-mcp-url/mcp then claude mcp login NAME is for third-party servers that publish their own MCP URL.
๐Ÿ•ต๏ธ If a connector you definitely added is missing, check your auth first. Connectors are only fetched when your active login is a claude.ai subscription. They are silently not loaded when ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN or apiKeyHelper is active, when a third-party provider like Bedrock is in play, or when CLAUDE_CODE_OAUTH_TOKEN holds a long-lived token. Run /status to see which auth is actually live. An ANTHROPIC_API_KEY left in your shell profile from an old experiment will hide every connector you own, with no error.

What each one can and cannot do. Worth knowing before you design a routine around it:

๐Ÿ“… Google Calendar Reads events and shared calendars, creates and updates them, finds mutual availability. It cannot see calendars your own Google account can't see, and it has no memory between runs, it re-queries every time.
๐Ÿ“ฅ Gmail Searches and reads with natural language, drafts, and sends, replies and forwards. It cannot read attachment contents, only metadata. If your workflow needs the PDF someone sent you, this is not the tool.
๐Ÿ“ Notion Searches the workspace, fetches pages, queries databases, creates and updates pages. It cannot see anything you haven't shared with the integration, and it rate-limits per workspace.
๐Ÿ” All of them Claude inherits your permissions and can only see and do what you already can. A "the page isn't there" answer is nearly always a sharing problem, not a model problem.
๐Ÿšจ The Gmail connector can send. Read that twice. Drafts-only is a discipline you impose, not a wall the tool provides. Approval prompts are the documented default, but a scheduled cloud routine has no approval prompt at all. So the drafts-only rule has to be written into the skill, written into the routine prompt, and the send capability left out of anything unattended. You'll also find older Anthropic doc pages claiming Claude "cannot send or modify emails". Those are stale, the live tool surface exposes send, reply and forward, and assuming the read-only version is a genuinely unsafe thing to build on.
๐Ÿ”ง The failure that will cost you an evening. A connector says "needs auth". You reconnect it on the web, watch the green tick, come back to the terminal, and it still says needs auth. The connection is fine. Claude Code is reading a stale local cache at ~/.claude/mcp-needs-auth-cache.json, keyed by connector display name, and a successful web re-login doesn't always clear the entry. Back the file up, remove that connector's key (or delete the file, it rebuilds), then fully quit and reopen Claude Code, Cmd+Q rather than closing the window. This is internal client state, not a documented API, so re-check the filename if it moves. The durable lesson is the symptom: when the web says connected and the client says needs auth, suspect a stale cache before you suspect your account.

the part most people miss

You stay the approval step

An automation that can send on your behalf is a reputation risk that runs while you are asleep. An automation that can only draft is an assistant. The difference is not a sentence in your prompt, it is two settings and one habit.

  1. ๐Ÿšซ Block the sending tools at the connector. Tool permissions live under Customize, then Connectors, and every tool can be set to Always allow, Needs approval or Blocked. A blocked tool cannot be talked into running, which is the whole point.
  2. โœ… Choose the approval mode when you create the task. Cowork scheduled tasks let you set the approval mode on the task itself, so the sensitive ones stop and wait for you instead of proceeding.
  3. ๐Ÿ‘€ Read the first week of runs properly. Open each run, read the transcript, and check what it touched. A green status only means the session started and finished without an infrastructure error, it does not mean the task did the right thing.
  4. ๐Ÿง  Keep the irreversible things out entirely. Payments, deletions, calendar invites to other people, anything public. If a job is only safe when you are watching, it does not belong in a task that runs at 6am.
โš ๏ธ The cloud-routine trade-off, stated plainly. Cloud routines run as full autonomous sessions with no permission-mode picker and no approval prompts during a run, and every connector you leave attached is usable, including its write tools. If you go that route, attach only the connectors the brief actually needs and set the dangerous tools to blocked first. The reason I use Cowork scheduled tasks for this is that I keep an approval mode.

week two

Tune it once, then leave it alone

Your first version will be too long and will rank one thing wrong. That is normal and it is a five-minute fix, not a rebuild. Run it for a week, keep the briefs, then hand them all back to Claude at once.

๐Ÿง  the weekly tune-up
Below is a week of morning briefs produced by my scheduled task. Review them the way an editor reviews a writer's first week on the job, not the way an assistant reviews its own work.

Tell me three things, with specific quoted lines as evidence. Which sections did I clearly act on. Which sections did I ignore every single day. And where was the brief wrong, padded, or repeating something I already knew from my calendar.

Then rewrite the task instructions: cut whatever I ignored, sharpen whatever I acted on, and fix whatever caused the wrong entries. Give me the result as one complete block I can paste straight over the old instructions, not as a list of suggested edits. Here are the briefs:
๐ŸŒฑ The sections people cut first are usually the news roundup and the motivational opener. The section people never cut is the ranked list with reasons. Let the week decide it rather than guessing now.

good to know

The honest limits

A local Desktop task only fires while the app is open and the computer is awake, and a run missed overnight is caught up once when you wake the machine, which means a 6am brief can land at 9pm if the laptop stayed shut. Cloud routines have a minimum interval of one hour and a daily cap on runs per account, and they clone a GitHub repository on every run, so they suit developers more than they suit a plain morning brief. Cowork scheduled tasks need a paid plan, Pro or above, and are in beta on web and mobile. Whichever you pick, the brief inherits whatever your connectors can see, so a calendar you never accepted invites in and a priorities file you never update will produce a confident brief about the wrong day.

go further

If you want it read out loud

The setup on this page hands you a written brief. If you want the version that speaks it to you and shows a live dashboard, that is a bigger build and it has its own walkthrough: build a Jarvis that briefs you every morning. Get the four jobs working in text first. The voice is the fun part, and it is worth nothing on top of a brief you would not read anyway.


Proof

Schedule recurring tasks in Claude Cowork, including plans and remote running
Schedule recurring tasks in Claude Code Desktop, including the local versus cloud comparison
Automate work with routines, including plans, the one-hour minimum and autonomous runs
Use connectors to extend Claude's capabilities, including per-tool permissions
Use Google Workspace connectors (Gmail, Calendar, Drive)

the waitlist is now open

AI System Club is launching soon

Build AI systems with me through recorded lessons you can follow at your own pace. Join the waitlist for first access and the founding price.

btw this list gets first dibs
the moment doors open :)