Build /start_my_day and never miss a task again.
In Part 1, I showed you a glimpse of what's possible: typing /start_my_day and getting a complete briefing of your Jira tickets, Confluence updates, and pending tasks in 30 seconds.
Now let's build it.
This post is entirely practical. By the end, you'll have a working custom command that pulls information from multiple sources and presents it exactly how you want. No programming experience required - just follow the steps and copy the code.
What Are Custom Commands?
Custom commands are shortcuts you create. Instead of typing a long request every time, you save it as a command and run it with a single slash.
Without custom command:
> Please check my Jira board for tickets assigned to me,
> then check Confluence for recent team updates,
> then look at my OneDrive for recently modified files,
> and finally remind me of yesterday's pending todos.
> Format everything in a clean summary.
With custom command:
> /start_my_day
Same result. One-tenth the effort.
Custom commands live in a special folder: .claude/commands/. Each command is a simple Markdown file. The filename becomes the command name.
.claude/
└── commands/
├── start_my_day.md → /start_my_day
├── weekly_report.md → /weekly_report
└── check_compliance.md → /check_compliance
That's it. No configuration files. No build process. Just Markdown.
Your First Command: Hello World
Let's start simple before we build something complex.
Step 1: Create the Folder Structure
Open your terminal and run:
mkdir -p ~/.claude/commands
This creates the commands folder in your home directory. The ~ means your home folder (like /Users/yourname/ on Mac or C:\Users\yourname\ on Windows).
Step 2: Create a Simple Command
Create a file called hello.md:
touch ~/.claude/commands/hello.md
Open it in any text editor and add:
# Hello Command
Greet me enthusiastically and tell me today's date.
Also give me a random motivational quote.
Step 3: Test It
Open Claude Code and type:
> /hello
Claude will greet you, tell you the date, and share a quote.
Congratulations - you just created your first custom command.
Building /start_my_day
Now let's build something useful. The /start_my_day command will:
- Fetch your Jira tickets
- Get Confluence team updates
- Check OneDrive for recent files
- Remind you of yesterday's pending items
We'll build it step by step, starting simple and adding features.
Version 1: Basic Structure
Create the file:
touch ~/.claude/commands/start_my_day.md
Add this content:
# Start My Day Command
Give me a morning briefing with the following sections:
## 1. Today's Focus
- What day is it?
- Any important dates I should know about?
## 2. Quick Wins
- Suggest 3 small tasks I could complete in under 15 minutes
## 3. Motivation
- One sentence to energize my day
Format the output cleanly with headers and bullet points.
Test it with /start_my_day. You'll get a basic briefing.
But this doesn't connect to your actual tools yet. Let's add that.
Version 2: Adding Jira Integration
To connect to Jira, you need:
- Your Jira domain (e.g.,
yourcompany.atlassian.net) - Your email address
- An API token (get one from https://id.atlassian.com/manage-profile/security/api-tokens)
Update your command file:
# Start My Day Command
## Configuration
- Jira Domain: yourcompany.atlassian.net
- Jira Email: [email protected]
- Jira API Token: your-jira-api-token-here
## Instructions
### Step 1: Fetch Jira Tickets
Use the Jira REST API to get my assigned tickets:
```bash
curl -s -u "${JIRA_EMAIL}:${JIRA_TOKEN}" \
"https://${JIRA_DOMAIN}/rest/api/3/search?jql=assignee=currentUser()+ORDER+BY+duedate+ASC&maxResults=10" \
| jq '.issues[] | {key: .key, summary: .fields.summary, status: .fields.status.name, due: .fields.duedate}'
```
### Step 2: Format Output
Present my tickets in this format:
📋 JIRA TICKETS
- [KEY] Title [Status] - Due: date
Sort by due date, highlight overdue items.
### Step 3: Today's Focus
Based on the tickets, suggest which 2-3 I should focus on today.
Important: Never commit API tokens to git. We'll cover secure token storage in a moment.
Version 3: Adding Confluence
Add this section to your command:
### Step 3: Check Confluence Updates
Use the Confluence REST API to get recent updates from my team space:
```bash
curl -s -u "${CONFLUENCE_EMAIL}:${CONFLUENCE_TOKEN}" \
"https://${CONFLUENCE_DOMAIN}/wiki/rest/api/content?spaceKey=TEAM&orderby=modified&limit=5" \
| jq '.results[] | {title: .title, modified: .version.when, by: .version.by.displayName}'
```
Present as:
📝 CONFLUENCE UPDATES
- [Title] - Updated by [Name], [time ago]
Only show updates from the last 7 days.
Version 4: Adding OneDrive/SharePoint
For Microsoft services, you'll use the Microsoft Graph API:
### Step 4: Check OneDrive Recent Files
Use Microsoft Graph API to get recently modified files:
```bash
curl -s -H "Authorization: Bearer ${MS_GRAPH_TOKEN}" \
"https://graph.microsoft.com/v1.0/me/drive/recent?top=5" \
| jq '.value[] | {name: .name, modified: .lastModifiedDateTime, by: .lastModifiedBy.user.displayName}'
```
Present as:
📁 ONEDRIVE CHANGES
- [Filename] - Modified by [Name], [time ago]
Only show files from shared folders.
Note: Getting a Microsoft Graph token requires OAuth setup. For a simpler approach, you can use the microsoft-graph MCP server - covered in Part 5 of this series.
Version 5: Yesterday's Pending Tasks
This one is simple - Claude Code has built-in memory:
### Step 5: Yesterday's Pending Items
Check my todo list or notes from yesterday for any incomplete items.
Look for:
- Items marked as "pending" or "in progress"
- Tasks I mentioned but didn't complete
- Follow-ups I promised to do
Present as:
✅ YESTERDAY'S PENDING
- [Task description]
- [Task description]
If nothing pending, say "All caught up!"
The Complete /start_my_day Command
Here's the full command file. Copy this and customize with your details:
# Start My Day - Daily Briefing Command
## About
This command gives me a complete morning briefing by checking my work tools and providing a prioritized task list.
## Configuration
Replace these placeholders with your actual values:
- JIRA_DOMAIN: yourcompany.atlassian.net
- JIRA_EMAIL: [email protected]
- CONFLUENCE_DOMAIN: yourcompany.atlassian.net
- TEAM_SPACE_KEY: TEAM
## Briefing Sections
### 1. Jira Tickets (Priority)
Fetch my assigned Jira tickets using the REST API:
- Endpoint: /rest/api/3/search
- Query: assignee=currentUser() ORDER BY duedate ASC
- Max results: 10
Format output:
```
📋 JIRA TICKETS (X assigned)
- [DS-123] Ticket title [In Progress] - Due: Tomorrow ⚠️
- [DS-124] Another ticket [To Do] - Due: Friday
```
Highlight overdue items with ⚠️
### 2. Confluence Updates
Check team space for recent updates:
- Space key: Use TEAM_SPACE_KEY
- Time range: Last 7 days
- Limit: 5 updates
Format output:
```
📝 CONFLUENCE UPDATES
- [Page title] - Updated by Maria, 2 hours ago
- [Another page] - New page by Thomas, yesterday
```
### 3. Shared Files (OneDrive/SharePoint)
If Microsoft Graph is available, check recent file changes:
- Only show files in shared/team folders
- Last 5 modifications
Format output:
```
📁 RECENT FILE CHANGES
- Q4_Report.xlsx - Modified by Sarah, 3h ago
- Meeting_Notes.docx - New file
```
### 4. Pending from Yesterday
Review my conversation history and any saved todos:
- Look for uncompleted tasks
- Check for promised follow-ups
- Include any deadlines mentioned
Format output:
```
✅ YESTERDAY'S PENDING
- Review PR from junior dev
- Send feedback on dashboard mockups
```
### 5. Today's Focus (AI Recommendation)
Based on all the above, recommend:
- Top 3 priorities for today
- Any urgent items that need immediate attention
- Suggested order of tasks
Format output:
```
🎯 TODAY'S FOCUS
1. [Most urgent task] - Why it's urgent
2. [Second priority] - Quick win opportunity
3. [Third priority] - Important but not urgent
```
## Output Format
- Use emoji headers for visual scanning
- Keep each section concise (max 5 items)
- Bold any overdue or urgent items
- End with an encouraging message
Save this as ~/.claude/commands/start_my_day.md.
Secure Token Storage
Never put real API tokens in command files. Here's how to handle them safely.
Option 1: Environment Variables
Set tokens in your shell profile (~/.zshrc or ~/.bashrc):
export JIRA_TOKEN="your-token-here"
export JIRA_EMAIL="[email protected]"
export CONFLUENCE_TOKEN="your-token-here"
Then reference them in commands:
Use environment variables for authentication:
- Email: $JIRA_EMAIL
- Token: $JIRA_TOKEN
Option 2: Claude's Memory
Tell Claude once:
> Remember my Jira credentials: email is [email protected], token is abc123
Claude stores this in memory and uses it when needed. Use /memory to manage stored info.
Option 3: Credential Manager
For enterprise setups, use your OS credential manager:
# Mac: Keychain
security find-generic-password -a "jira" -s "api-token" -w
# Windows: Credential Manager
cmdkey /generic:jira /user:email /pass:token
More Command Ideas
Once you understand the pattern, you can create commands for anything:
| Command | Purpose |
|---|---|
/weekly_report |
Generate weekly summary from Jira + git commits |
/prep_meeting [topic] |
Research topic, prepare talking points |
/review_pr [url] |
Analyze pull request, suggest improvements |
/check_compliance |
Scan document for GDPR/AI Act issues |
/draft_email [topic] |
Draft email with your writing style |
/end_my_day |
Summarize accomplishments, plan tomorrow |
Example: /end_my_day Command
# End My Day - Daily Wrap-up
## Tasks
1. Summarize what I worked on today (from our conversation)
2. List any tasks I mentioned but didn't complete
3. Note any blockers or issues encountered
4. Suggest 3 priorities for tomorrow
## Format
```
📊 TODAY'S ACCOMPLISHMENTS
- Completed: [list]
- In Progress: [list]
- Blocked: [list]
📅 TOMORROW'S PRIORITIES
1. [First priority]
2. [Second priority]
3. [Third priority]
💡 NOTES
- [Any important context to remember]
```
Save to memory so I can reference it tomorrow.
Pro Tips
Tip 1: Use Arguments
Commands can accept arguments using $ARGUMENTS:
# Research Command
Research the following topic: $ARGUMENTS
Provide:
- Summary (2-3 paragraphs)
- Key statistics
- Relevant links
- Opposing viewpoints
Use it: /research AI regulation in Europe
Tip 2: Chain Commands
Reference other commands:
# Monday Morning Command
Run these in sequence:
1. First, run /start_my_day
2. Then check my calendar for the week
3. Finally, draft my weekly goals email
Tip 3: Team Commands
Put team-shared commands in your project's .claude/commands/ folder (not ~/.claude/). Everyone on the team gets the same commands.
project/
└── .claude/
└── commands/
└── deploy_checklist.md → /deploy_checklist (team-wide)
Troubleshooting
Command not found?
- Check file is in
~/.claude/commands/(global) or.claude/commands/(project) - Check filename ends in
.md - Run
/helpto see available commands
API calls failing?
- Verify credentials are correct
- Check API endpoint URLs
- Test curl commands manually first
Output not formatted right?
- Be specific about format in your command
- Include example output
- Use code blocks for exact formatting
What's Next
In Part 3, we'll add voice input to your workflow. Imagine:
- You finish a meeting
- You speak into your phone: "Summarize action items from the product review meeting"
- Your laptop transcribes it, sends it to Claude, and you get formatted action items
No typing. No switching apps. Just speak and done.
We'll cover SuperWhisper, local Ollama models for privacy, and the complete voice-to-action pipeline.
Previous: The AI-Powered Workday | Next: Voice-First Workflow (coming soon)
About this series: Part 2 of 5 in the Claude Code Series. Written for managers, product owners, data leads, and anyone who works smart.