A proactive Claude Code agent doesn't wait for your next message. It makes routine decisions itself, keeps going until the job is done, wakes up on a schedule and reacts when something happens. Claude Code has a built-in piece for each of these. This guide shows how to turn them on, where each one stops, and how to give Claude Code a standing job instead of a one-off prompt. The piece the built-in features leave out is a heartbeat: waking the same session on a rhythm to take its next task. We show how to wire one up by hand, and how Crewmark does it for you.
What “proactive” means for Claude Code
By default Claude Code is reactive: you type, it works, it stops and waits. Making it proactive takes three separate things, and most guides only cover one of them.
- It acts without asking about every step: an output style and a permission mode that let it make routine decisions.
- It starts work on its own: a loop, a schedule or an event that begins a turn without you typing.
- It knows what to work on next: a goal or a queue of work, so each wake-up has something useful to do.
Step by step: make Claude Code proactive
1. Turn on the Proactive output style
This is what people usually mean by “Claude Code proactive mode”. It isn't a mode but a built-in output style: Claude starts implementing as soon as you give it a task, makes reasonable assumptions on routine decisions instead of asking, and skips planning unless you ask for a plan. It still checks with you before deleting data or touching shared or production systems, and it doesn't change your permission prompts. You can also pick it under Output style in /config.
/output-style Proactive
2. Pick a permission mode for unattended work
An agent that stops at every permission prompt isn't proactive. Auto mode runs actions with background safety checks instead of asking, and acceptEdits lets file edits through while still asking about other commands. Keep bypassPermissions, which skips every check, for isolated containers and VMs.
claude --permission-mode auto
3. Keep it going until the job is done with /goal
/goal takes a condition. After each turn a small model checks whether it's met, and if it isn't, Claude starts another turn by itself. The goal clears once it's met. Write a condition you could check yourself, like a test suite passing.
/goal all tests in test/auth pass and the lint step is clean
4. Repeat work with /loop while the session is open
/loop runs a prompt on an interval, or lets Claude choose the delay after each run when you leave the interval out. It lives in the current session: the session has to stay open, recurring loops expire after 7 days, and runs missed while it was busy aren't caught up.
/loop 30m check CI on my open PRs and fix anything that failed
5. Schedule it for when you're not at the keyboard
Desktop scheduled tasks run a fresh session on your computer on a schedule, as long as the Claude desktop app is open and the computer is awake. Cloud scheduled tasks, created with /schedule, run on Anthropic's cloud so your computer can be off; they run at most hourly and need a Pro, Max, Ultra, Team or Enterprise plan. For repositories, the official GitHub Action can run Claude Code on a cron schedule.
/schedule every weekday at 9am, triage new GitHub issues and label them
# .github/workflows/claude.yml
on:
schedule:
- cron: "0 9 * * 1-5"
6. Let events wake it up
Channels push events into a running session: a Telegram, Discord or iMessage message, a CI failure or a webhook, so Claude reacts without you opening the terminal. Hooks run your own commands at points in Claude's lifecycle, such as before a tool call or when a turn ends. Both need the session to be running. See how to set up Claude Code channels.
claude --channels plugin:telegram@claude-plugins-official
Source: Anthropic's Claude Code documentation on scheduled tasks
Add a heartbeat: wake the same session for its next task
A heartbeat is a short, regular nudge into the same Claude Code conversation, such as every 30 minutes during working hours, that says: check your work, take the next task. Unlike a scheduled task, which starts a fresh session with the same prompt each time, a heartbeat keeps one conversation going, so the agent remembers what it did last time and picks the next item off a queue. That's the difference between a job that repeats and an employee that keeps working.
Claude Code has no heartbeat setting, but headless mode can resume a session, so you can wire one up by hand.
1. By hand: cron plus claude -p --resume
Start one session, save its ID, and let cron resume it on a rhythm with a short heartbeat prompt. Keep the work queue in a file in the repo, such as TODO.md. This is our own example built from documented flags; Anthropic's docs don't describe a heartbeat setup.
# Once: start the session and keep its ID
claude -p "You own TODO.md. Each time I say heartbeat, take the next unchecked task, do it, tick it off." --output-format json | jq -r '.session_id' > ~/.heartbeat-session
# crontab -e: every 30 minutes, 9:00–17:30 on weekdays
*/30 9-17 * * 1-5 cd ~/my-app && claude -p "heartbeat" --resume "$(cat ~/.heartbeat-session)" --permission-mode auto >> ~/heartbeat.log 2>&1
2. What the do-it-yourself version doesn't cover
You manage the queue file and the cron times yourself, nothing stops it outside working hours unless you encode them in cron, a heartbeat that fires while you're using the session collides with you, and you can't see across several agents what each one is doing.
3. With Crewmark: a heartbeat built in
Crewmark's daemon sends the heartbeat into the employee's own conversation every 15, 30 or 60 minutes during its working hours, waits if the agent is busy, and the board is the queue: each heartbeat, the employee takes its next issue and reports on it. Details are below.
Which option fits
| Option | Starts work by itself | Computer has to be on | Best for |
|---|---|---|---|
| Proactive output style | No, it acts faster once you ask | Yes | Fewer questions during a task |
| /goal | Yes, the next turn, until the condition is met | Yes | Finishing one task without nudging |
| /loop | Yes, on an interval, for up to 7 days | Yes, with the session open | Watching a deploy, CI or a PR |
| Desktop scheduled tasks | Yes, on a schedule | Yes, awake with the app open | Daily jobs on local files |
| Cloud scheduled tasks | Yes, at most hourly | No | Jobs that only need a repository |
| GitHub Actions | Yes, on cron or GitHub events | No | Repository maintenance |
| Channels | Yes, when an event arrives | Yes, with the session open | Reacting to chat, CI and webhooks |
Heartbeat by hand (cron + claude -p --resume) |
Yes, on your cron rhythm, in the same session | Yes | One agent working through a TODO file |
| Crewmark heartbeat | Yes, every 15–60 min in working hours, in the same session | Yes | Agents with a backlog, goals and working hours |
What these features still leave to you
Each feature starts a turn. None of them decides what the agent should be doing this week. In practice that leaves gaps:
- A schedule repeats the same prompt. It doesn't pick up the next task from a backlog or remember what yesterday's run finished.
- There's no board where you hand Claude new work and see what it's doing, what it finished and where it's stuck.
- There are no working hours or targets: a loop runs until it expires, not until a number moves.
- With several agents, nothing coordinates them, so each one needs its own prompts and schedules.
Give Claude Code a standing job
Crewmark turns a Claude Code conversation into an AI employee with a role, a goal, working hours and a heartbeat, and gives it work through a board. It runs in your real Claude Code on the plan you already pay for.
1. Hire an employee and connect its conversation
Pick a role, such as SEO specialist or software engineer, and run the setup command Crewmark gives you in Claude Code. That conversation becomes the employee, so it keeps its memory of the work between wake-ups.
2. Set working hours and a heartbeat
A small background program on your computer, the Crewmark daemon, sends the employee's heartbeat prompt into that same conversation every 15, 30 or 60 minutes during its hours, and leaves it alone outside them. A heartbeat that arrives while the agent is busy waits until it's idle.
3. Assign issues on the board
When you assign an issue or comment on one, the news arrives in the agent's conversation as a message. If the conversation is closed, Crewmark resumes it with claude -p --resume in auto mode, so the work still gets picked up.
4. Measure it on a number
Give each employee a KPI, such as Search Console clicks a month. It plans its issues toward that number, moves them across the board, comments on progress and messages you when it needs a decision.
Use them together
The built-in features and Crewmark stack. Turn on the Proactive output style and auto mode in the employee's conversation so each heartbeat gets real work done, use /goal inside an issue that has a clear finish line, and check in from your phone with Claude Code Remote Control. For one-off jobs that run without you, see how to run Claude Code background agents and headless mode. Running Codex instead? See how to make Codex proactive.
FAQ
What is a heartbeat for Claude Code?
A regular nudge into the same Claude Code conversation, for example every 30 minutes during working hours, telling the agent to check its work and take the next task. Because it resumes one session rather than starting a new one, the agent remembers earlier work. You can wire one up with cron and claude -p --resume; Crewmark builds it in, with working hours and a board as the queue.
Does Claude Code have a proactive mode?
Not as a mode. Claude Code has a built-in Proactive output style, turned on with /output-style Proactive, which makes it act on routine decisions instead of asking. It doesn't change permission prompts; pair it with auto mode for that.
How do I run Claude Code on a schedule?
Use /loop while a session is open, Desktop scheduled tasks for jobs on your computer, /schedule for cloud scheduled tasks that run with your computer off, or the Claude Code GitHub Action with a cron trigger.
Does /loop keep running after I close Claude Code?
No. A loop belongs to its session, so it stops when the session ends, and recurring loops expire after 7 days. For something that outlives the session, use scheduled tasks or a Crewmark heartbeat.
Can Claude Code work while my computer is off?
Cloud scheduled tasks and GitHub Actions can, because they run on someone else's machines. Anything that uses your local files, including Desktop scheduled tasks, Channels and Crewmark, needs your computer on. For overnight runs, see how to run Claude Code 24/7.
Is it safe to let Claude Code run unattended?
Use auto mode rather than bypassPermissions, give it a repository where every change goes through review, and keep production credentials out of reach. Crewmark adds working hours and a board, so you can see each change it made and why.
Does Crewmark cost extra tokens?
No. Employees run inside your own Claude Code on the subscription you already have, so there's no second bill for tokens.
Crewmark is an independent product, not affiliated with or endorsed by Anthropic. Claude and Claude Code are trademarks of Anthropic.
This guide first appeared on the Crewmark blog, which keeps it up to date. Crewmark turns Claude Code and Codex agents into AI employees with a role, a goal, working hours and a heartbeat: they pick up work from a board on their own and message you when they're blocked. Try it free: the free plan includes 1 project and up to 3 AI employees.
Top comments (0)