This lesson is being recorded

Every video of this course is being uploaded to my YouTube channel. Subscribe so you do not miss it.

Bruno AshfordBruno Ashford @brunoashfordSubscribe

Module 10 · Lesson 10.4 · 10 min

Custom Commands for Your Team

Turn repeated workflows into one-word slash commands so anyone on your team runs them the same way.

Module 10
Agents That Work While You Sleep

Schedules, headless runs, hooks and one-word commands

Bruno Ashford
Bruno Ashford · Module 1001 / 12
The problem
A routine that depends on your memory is not a routine.
Bruno Ashford
Bruno Ashford · Module 1002 / 12
Lesson 10.1

Three ways to schedule

OptionRuns whereBest when
Cloud routine (/schedule)Anthropic cloudLaptop closed, sources are connectors or GitHub
Desktop scheduled taskYour computerYou use the Claude desktop app
launchd, cron, Task SchedulerYour computerFiles live locally, full control

Cloud routines are a research preview; check your plan's limits.

Bruno Ashford · Module 1003 / 12
Lesson 10.2

Headless, in one line

claude -p runs the work without the conversation.

  • Nobody is there to approve
  • Decide permissions in advance
  • dontAsk plus a short allowlist
  • Redirect output to a dated file
Bruno Ashford · Module 1004 / 12
Lesson 10.2

Safe defaults for unattended runs

  1. 1Read onlyStart with the Read tool
  2. 2dontAskAnything else is denied
  3. 3Right folderLoads your CLAUDE.md
  4. 4Never skip checksOnly in isolated containers
Bruno Ashford · Module 1005 / 12
Lesson 10.3
Instructions guide the agent. Hooks enforce the rules.
Bruno Ashford
Bruno Ashford · Module 1006 / 12
Lesson 10.3

Hooks you will actually use

EventWhen it runsUse it to
PreToolUseBefore an actionBlock risky commands
PostToolUseAfter an actionKeep an audit log
NotificationWhen Claude needs youGet a desktop alert
StopWhen Claude finishesRun a final check
Bruno Ashford · Module 1007 / 12
Lesson 10.4

One word, same result

Commands and skills are now the same thing.

  • Name becomes the slash command
  • $ARGUMENTS passes in the details
  • Manual-only for client-facing work
  • Share the .claude folder
Bruno Ashford · Module 1008 / 12
Lesson 10.5

The morning brief

  1. 1Yesterday in numbersSales, leads, cash
  2. 2RisksOverdue and at risk
  3. 3Needs youMessages only you can answer
  4. 4TodayMeetings and top three priorities
Bruno Ashford · Module 1009 / 12
Illustrative example, not research

One partner's mornings

50 to 12minutes to get oriented
6:45ambrief ready
1missed deadline caught in week one
Bruno Ashford · Module 1010 / 12
Project

Seven days in production

Trust is built with evidence, not hope.

  • One routine, scheduled
  • Hooks tested and firing
  • One log line per run
  • Improve the prompt on day seven
Bruno Ashford · Module 1011 / 12
Recap
The best automation is the work you find already done, checked and logged when you sit down.
Bruno Ashford
Bruno Ashford · Module 1012 / 12
01 / 12

Use ← → to move. The marker highlights text and the pencil draws on the slide; navigation locks while you annotate. Undo removes the last mark, Esc exits.

1Pick the workflow people keep retyping

Look for prompts that get copied from a notes app or a chat thread. Good candidates are the weekly report, a new client welcome pack, a proposal draft or the collections run from Module 9.

2Create the command as a skill

Create .claude/skills/weekly-report/SKILL.md. The name becomes the command. Set disable-model-invocation to true when you want it to run only when someone types it, never on the agent's own initiative. $ARGUMENTS is replaced by whatever the person types after the command.

Terminal
---
name: weekly-report
description: Builds the weekly owner report from the files in reports/. Use when someone asks for the weekly report.
argument-hint: [week, for example 2026-W39]
disable-model-invocation: true
---

Build the weekly report for $ARGUMENTS.

1. Read the latest exports in reports/data.
2. Fill reports/weekly-template.md. Every number cites its source file.
3. Write MISSING for anything you cannot find. Never estimate.
4. Save as reports/weekly-$ARGUMENTS.md and show me the three biggest changes.
5. Do not send or share anything.
3Or use the simpler commands folder

If you prefer, a single markdown file at .claude/commands/weekly-report.md also creates /weekly-report and still works. Skills are the recommended format because they can hold supporting files such as templates next to the instructions.

4Run it and share it

Type the command in Claude Code to test it. When it works, share the .claude folder with your team through your shared drive or repository, so everyone has the same commands. You can also run a command headless by putting it in the prompt, which is how a schedule can call it.

Terminal
claude -p '/weekly-report 2026-W39' --permission-mode dontAsk --allowedTools "Read,Edit(./reports/**)"
5Ask Claude to build the next ones

Once you have one good command, let Claude draft the rest from your prompts history. Review each before committing it.

Prompt for Claude
Look at the prompts we have used most in this project and propose three custom commands for my team. For each, give the name, a one-line description, and the full SKILL.md. Use disable-model-invocation: true for anything that creates files for clients.

Watch three people on your team ask an agent for the weekly report and you will get three different prompts and three different reports. Consistency does not come from better people. It comes from removing the need to remember the prompt.

A custom command turns a full workflow into something like /weekly-report or /chase-invoices. In Claude Code, custom commands and skills are now the same mechanism: a file in .claude/commands/ or a skill in .claude/skills/ both create a slash command. Commit it to your shared folder and everyone gets the same button.

Key points

  • Consistency comes from removing the need to remember a prompt.
  • Commands and skills are now the same mechanism.
  • disable-model-invocation keeps a command manual-only.
  • Share the .claude folder so the whole team has the same buttons.

Avoid

  • Creating dozens of commands nobody remembers; start with three.
  • Letting a client-facing command run on the agent's own initiative.
  • Hard-coding dates in the command instead of using $ARGUMENTS.
  • Changing a shared command without telling the team.
Real-world example: a dental clinic

A dental group with three receptionists had each of them writing their own prompt for recall reminders, and patients noticed the difference in tone. The practice manager created /recall-drafts, which reads the recall export, drafts messages in the clinic's voice, and never sends anything. Every receptionist now runs the same command. Training a new starter on it took ten minutes instead of a morning.

Bruno Ashford Subscribe