All Posts

Custom Commands - Your Personal AI Assistant | Claude Code Series

January 2, 2026    9 min read

Custom Commands

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:

  1. Fetch your Jira tickets
  2. Get Confluence team updates
  3. Check OneDrive for recent files
  4. 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:

  1. Your Jira domain (e.g., yourcompany.atlassian.net)
  2. Your email address
  3. 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 /help to 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:

  1. You finish a meeting
  2. You speak into your phone: "Summarize action items from the product review meeting"
  3. 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.