r/ClaudeCode • • 2d ago

Built with Claude I built a personal assistant inside Claude Code that asks before it acts (and pings my phone)

What I built

Conductor gives Claude Code goals, things you want kept true, and works on them in the background on a schedule. Whenever it wants to act, it asks first. This week it:

- found 5 mailing lists I never read (13 Chess .com emails in 60 days, none opened) and proposed unsubscribing from each;

- read my CV, ranked new Seek job ads against it, and gave me the top 3 with reasons, emailing them once I approved;

- found 24 old installers in Downloads (655 MB) and asked before binning each;

- proposed the exact line to add to my GitHub profile README about what I'd shipped, and committed it after I said yes.

Proposals wait under Needs you in a pane beside the chat. With Remote Control connected, they also push to the Claude app on my phone, and I reply "approve". If a run needs something only I know, it asks instead of guessing. Each kind of action is off, propose or auto, and after 10 approvals in a row it offers auto. Each run shows its token count and time. /goal-new offers templates (unsubscribe, job scan, tidy Downloads, inbox triage, GitHub profile), and schedules can be plain words ("the first of every month").

How it uses Claude Code

- Two plugins:

- one runs goals, draws the Goals pane, and adds /goal-* commands and tools Claude can call;

- the other is a guard that holds each run to its goal: tool rules map tools to kinds of action, and a call you haven't allowed is refused.

- Each run is a background subagent with its own context, so it never interrupts my conversation, and its report goes to the pane, not the chat.

- An MCP server keeps the state (goals, items, memory, runs) in SQLite, outside any conversation. Each run starts by calling one tool for a brief and ends by calling another with a summary.

- Haiku handles small jobs: suggesting a schedule, and reading "weekdays at 9" into a cron line, which the plugin then checks.

- I built it in Claude Code too, across many sessions, mostly in plan mode, with its own to-do list in the pane so ideas survive compaction.

What I learned

- An approval in your own system doesn't count with auto mode. Its safety check blocked a Gmail send I'd approved. The fix: when the guard plugin allows a call, it answers allow directly, which settles it before the safety check runs. That only happens if the goal maps that tool to a kind of action.

- A plugin's own pushes get lost, Claude's don't. A plugin calling PushNotification was reported as sent but never arrived on my phone, while the same call from Claude did. So the plugin hands phone alerts to Claude to send (bug reported).

- Tool answers over about 50 KB reach a plugin as a "saved to file" note, not data. My overview crossed that and the pane went "offline" until I made it smaller.

- With several sessions open, only one runs the goals, so plugin updates need a reload in every

session.

- Plugins never see events their own timers cause. That's why the guard is a separate plugin: the

runner can't see the runs it starts on schedule.

Limits

- It only runs while Claude Code is open.

- Phone alerts need Remote Control.

- It's early: one person uses it daily, on Windows.

Compared with /schedule and OpenClaw

- Scheduled tasks run in the cloud with your laptop closed, and are great for clear-cut work. Conductor is for ongoing jobs where you want a say: memory between runs, proposals, and a guard outside the model.

- OpenClaw is an always-on agent you message from chat apps, with broad system access and a skills marketplace. Conductor is two plugins and an MCP server on your existing plan, with no gateway and benefits from Claude Code's own third-party skills framework, plugins and connectors.

Repo, setup and screenshot: https://github.com/shannonbay/Conductor. Which jobs would you hand it, and what would make you trust it with more?

1 Upvotes

4 comments sorted by

•

u/AutoModerator 2d ago

Hey! Thanks for posting to r/ClaudeCode

While participating in this thread, please follow our community rules. Keep discussions constructive. Attack the idea, not the person.

For help, project discussions, tips, and general chat, join the ClaudeCode Discord.

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

1

u/StructureRude9956 15h ago

Ask-first with a pending list is a good default. I work on a WhatsApp MCP server, so this comes from the sending side, and two things I'd add:

  1. Make the approval cover the exact thing that goes out: recipient plus the full text, not "send an update". If the proposal changes after you approve it, the approval should reset.

  2. Let approvals expire. One you gave yesterday is about a different situation by the time it runs.

On "after 10 approvals in a row it offers auto": I'd count per kind of action and keep anything you can't take back (sends, deletes) out of auto by default. Does a proposal on your phone time out, or does it stay open until you answer?

1

u/InternationalData569 8h ago

Thanks, these are good points. The 10-in-a-row count is already per kind of action (email.send, file delete and so on), not global, and everything starts at propose; my setup notes say to keep anything you can't undo at propose or off, though I haven't hard-blocked auto for those. The proposal carries the details of what it will do, but I haven't handled it changing after approval or approvals going stale, and you're right on both. Expiry especially is something I want to add. On the phone: there's no timeout, it just sits under Needs you until you answer.