This talk tells a story. Not a tutorial with examples, but a narrative with a protagonist, obstacles, and transformation. The audience will remember the character and identify with the journey.
Main Character: Maya, a senior developer at a mid-size startup Setting: A single workday, from morning standup to evening deploy Theme: Software = Instructions + Tools. The day you stop fighting your tools and start directing them.
Slide: A blinking cursor. Nothing else.
Start quietly:
"Let me tell you about Maya."
Build the scene:
"It's 9:47 AM. Maya is staring at her terminal. She has 47 files changed in a PR that's been open for three days. Two reviewers have gone on PTO. The PM is asking for an ETA every hour.
She's been a developer for eight years. She knows she should break this PR into smaller chunks. She knows she should write better commit messages. She knows all the things she should do.
But right now, she just needs someone — anyone — to help her understand what she's even looking at."
The moment:
$ git diff main..HEAD | copilot -p "summarize these changes" -sThe response appears. 47 files become 6 bullet points.
"Maya didn't learn a new tool that morning. She asked a question. And for the first time, her terminal answered."
Pause. Let it land.
"That command — that pipe — changed her entire day. Let me show you how."
Context:
"Maya's team does async standups in Slack. Every morning, same question: 'What did you do yesterday?' And every morning, Maya stares at her git log trying to remember."
The old way:
git log --oneline --since="yesterday" | head -20"20 commits. Cryptic messages. 'fix thing', 'wip', 'actually fix thing this time'. Maya spends 10 minutes reconstructing her own work."
The transformation:
git log --oneline --since="yesterday" | copilot -p "write my standup update" -sWhat comes back:
Yesterday I:
- Fixed the auth token refresh race condition
- Updated the user profile API to handle missing fields
- Started refactoring the payment flow (WIP)
Key teaching moment:
"The
-sflag is the secret. Silent mode. No spinners, no decoration. Just text. Text that can flow into another command. Text that can be piped."
The equation:
Data (git log) | Intelligence (copilot) = Insight (standup)
Context:
"At 11 AM, Maya gets a Slack message. 'Hey, can you review my PR? It's pretty small.' Maya clicks the link. 847 lines changed across 23 files."
The dread:
"We've all been there. The PR that says 'small refactor' but touches half the codebase. Maya could spend an hour reading through it. Or..."
DEMO 1: The Basic Review Pipe
git diff main..feature-branch | copilot -p "review this for bugs" -s"Data goes in. Intelligence comes out. Same pattern as grep. Same pattern as awk. But now the transformation isn't pattern matching — it's reasoning."
DEMO 2: The Chain — Intelligence Calling Intelligence
git diff main..feature-branch | \
copilot -p "list every change with file and line" -s | \
copilot -p "rate each: low/medium/high risk" -s | \
copilot -p "format as a code review comment" -sExplain what's happening:
raw diff → summary → risk assessment → formatted output
| | | |
└──────────┴──────────────┴──────────────┘
Each pipe is a new transformation
"Three AI calls. One pipeline. Each output flows into the next input. Maya just built a code review pipeline in 30 seconds."
The key insight:
"This is still Unix philosophy. Small tools. Text streams. Composition. The only thing that changed is what the tool can do."
Context:
"12:30 PM. Maya's tests are failing. The error message is three screens long. The stack trace points to a library she didn't write. She's supposed to be at lunch in 15 minutes."
The panic:
TypeError: Cannot read properties of undefined (reading 'map')
at processResults (results.ts:47:23)
at async Promise.all (index 0)
at async fetchAllData (api.ts:112:18)
at async loadDashboard (dashboard.ts:34:12)
...
The old Maya:
"She'd copy the error, paste it into a browser, wade through Stack Overflow, try three solutions that don't work, and finally realize she was missing an optional chaining operator."
The new Maya:
npm test 2>&1 | copilot -p "what's causing this failure and how do I fix it?" -sBut here's the twist — Maya's Haiku vs Opus moment:
# First, triage with the fast model
npm test 2>&1 | copilot -p "simple or complex?" -s --model claude-haiku-4.5
# Response: "COMPLEX - race condition in async data fetching"Escalation pattern:
# Haiku said it's complex. Bring in the big model.
npm test 2>&1 | copilot -p "diagnose and fix" -s --model claude-opus-4.5Teaching moment on models:
| Model | Speed | Cost | Use Case |
|---|---|---|---|
claude-haiku-4.5 |
Fast | Cheap | Triage, classification, routing |
claude-sonnet-4 |
Balanced | Moderate | Most daily tasks |
claude-opus-4.5 |
Thorough | Premium | Deep analysis, complex fixes |
"Maya uses Haiku to decide if she needs Opus. The fast model becomes a traffic cop for the expensive model. That's not just clever — that's how you scale AI without scaling your bill."
Context:
"3 PM. Maya's PR is approved. She's ready to merge and deploy. But something feels wrong. The changes touch the payment system. What if she missed something?"
The anxiety:
"Eight years of experience, and she still gets nervous before deploying to production. Because she's been burned before. We all have."
DEMO: The Permission Boundary Pattern
# Safe mode: AI can read but not write
git diff main..HEAD | copilot -p "identify any changes that touch payments or auth" -s
# Controlled mode: AI can use specific tools
copilot -p "check if this PR affects database schema" -s --allow-tool 'shell(git:*)'
# Full autonomy: AI can do anything (supervised)
copilot -p "run the payment tests" -s --allow-tool 'shell(npm:*)'The trust ladder:
Level 1: Pure pipes (data in, analysis out) — Always safe
Level 2: Scoped tools (specific permissions) — Controlled risk
Level 3: Full autonomy (supervised by human) — Trust but verify
Teaching moment:
"The
--allow-toolflag is your permission boundary. The pipe doesn't grant permissions — YOU do. Maya decides what the AI can touch. The lid stays on until she takes it off."
Maya's deployment script:
#!/bin/bash
# pre-deploy-check.sh
# Step 1: Get changes
DIFF=$(git diff main..HEAD)
# Step 2: Check for sensitive areas
SENSITIVE=$(echo "$DIFF" | copilot -p "does this touch payments, auth, or PII?" -s --model claude-haiku-4.5)
if [[ "$SENSITIVE" == *"YES"* ]]; then
echo "Sensitive changes detected. Running deep analysis..."
echo "$DIFF" | copilot -p "detailed security review" -s --model claude-opus-4.5
echo "Manual approval required."
exit 1
fi
echo "Safe to deploy.""Maya's scripts just learned to ask for help. They recognize their own limits. That's not automation — that's judgment."
Context:
"5:30 PM. Maya's deploy is live. No alerts. No panicked Slack messages. She leans back and looks at her terminal history."
The realization:
# Morning standup
git log --since="yesterday" | copilot -p "write standup" -s
# Code review
git diff | copilot -p "review" -s
# Debugging
npm test 2>&1 | copilot -p "diagnose" -s
# Deployment check
git diff | copilot -p "security review" -s"Same pattern. Every time. Data into the pipe. Instruction to copilot. Silent output. Chain if needed."
But there's a problem:
"Tomorrow, Maya will forget the exact flags. Next week, she'll have to look up the model names. Her teammate will ask how she did that code review trick, and she'll have to type it all out in Slack."
The question:
"What if Maya could save these patterns? What if her pipelines could live in files?"
Slide: A file icon with .copilot.md extension
The command:
$ ma review.copilot.mdWhat this means:
review— Maya's workflow name.copilot— runs the copilot command.md— it's just markdown (she already knows this)
The file: review.copilot.md
---
model: claude-sonnet-4
allow-tool:
- 'shell(git:*)'
- Read
---
Review the piped code changes for:
1. Bug risks
2. Performance issues
3. Security concerns
Prioritize by severity. Reference specific lines.Usage — piping into your markdown file:
git diff | ma review.copilot.md"Maya's pipeline. In a file. In git. Shared with her team."
The transformation is complete:
# Maya's morning
ma standup.copilot.md
# Maya's code review
git diff | ma review.copilot.md
# Maya's debugging
npm test 2>&1 | ma debug.copilot.md
# Maya's deployment
git diff | ma pre-deploy.copilot.mdThe power-up — variables and templates:
---
model: claude-sonnet-4
args:
- base_branch
- focus_area
---
## Context
!`git diff {{ base_branch | default: "main" }}..HEAD`
## Task
Review with focus on {{ focus_area | default: "all areas" }}.Run with arguments:
ma review.copilot.md --base_branch develop --focus_area securityBefore Maya's transformation:
Learn tool → Memorize flags → Write scripts → Maintain scripts → Debug scripts
After:
Write markdown → Describe intent → Run it → Version it → Share it
The final equation:
Software = Instructions + Tools
Your prompts = Your codebase
"Maya didn't become a prompt engineer. She became a developer who talks to her tools. Her instructions live in version control. Her patterns are shareable. Her day got shorter."
"Here's the thing about Maya's story. It's not unique. It's not special. It's available to every one of you. Today. Right now.
The pipe has been carrying data for 50 years. Now it carries intelligence. Same
|. Same philosophy. New capability."
"Tonight — not next week, tonight — try this:
- Pick something that annoyed you today
- Pipe it to copilot with
-pand-s- Watch what comes back
And if it saves you time? Save that command in a markdown file. Commit it. Share it with your team.
Be like Maya. Stop fighting your tools. Start directing them."
Pause. Look at the audience.
"Software is instructions and tools. The instructions used to be code. Now they can be English. And your terminal? It's finally ready to listen."
| Section | Time | Cumulative |
|---|---|---|
| Act 1: Hook (Maya's 9:47 AM) | 2 min | 2 min |
| Scene 2.1: Morning standup | 2 min | 4 min |
| Scene 2.2: Code review chains | 4 min | 8 min |
| Scene 2.3: Bug debugging + model escalation | 4 min | 12 min |
| Scene 2.4: Deployment + permissions | 4 min | 16 min |
| Scene 2.5: Evening epiphany | 1 min | 17 min |
| Act 3: markdown-agent reveal | 2 min | 19 min |
| Closing: Call to action | 1 min | 20 min |
| Flag | Purpose | Example |
|---|---|---|
-p "prompt" |
Non-interactive mode with prompt | copilot -p "explain this" |
-s |
Silent mode (pipeable output) | copilot -p "review" -s |
--model X |
Choose model | --model claude-haiku-4.5 |
--allow-tool |
Permission boundary | --allow-tool 'shell(git:*)' |
- Terminal with large font (24pt minimum)
- Git repo with realistic changes staged
- Sample test failure output ready
- Pre-written
.copilot.mdagent files - Test all pipes before the talk
- Backup: screenshot/video of each demo
- Verify
copilotCLI is installed and authenticated - Verify
mais installed and working
---
model: claude-haiku-4.5
---
Based on this git log, write a concise standup update.
Use bullet points. Be specific about what was accomplished.---
model: claude-sonnet-4
allow-tool:
- 'shell(git:*)'
- Read
---
Review this code for bugs, security issues, and performance concerns.
Prioritize findings by severity. Reference specific files and lines.---
model: claude-sonnet-4
---
Given this error output:
1. Identify the root cause
2. Explain what went wrong
3. Suggest a specific fix with code---
model: claude-opus-4.5
allow-tool:
- 'shell(git:*)'
- Read
---
Security review these changes before deployment.
Flag any changes to:
- Authentication or authorization
- Payment processing
- Personal data handling
- Database schema
Output: SAFE, REVIEW_NEEDED, or BLOCK with explanation."Maya didn't learn a new tool that morning. She asked a question. And for the first time, her terminal answered."
"The
-sflag is the secret. Silent mode. No spinners, no decoration. Just text that can be piped."
"Maya uses Haiku to decide if she needs Opus. The fast model becomes a traffic cop for the expensive model."
"The pipe doesn't grant permissions — YOU do."
"Maya's scripts just learned to ask for help. They recognize their own limits. That's not automation — that's judgment."
"Software is instructions and tools. The instructions used to be code. Now they can be English."
- Character-driven: Audience remembers Maya, not just flags
- Temporal structure: One day, morning to evening, builds momentum
- Emotional beats: Dread (big PR), panic (failing tests), anxiety (deploy), relief (success)
- The twist: markdown-agent isn't revealed until Maya needs it
- Relatable moments: Cryptic commit messages, PRs labeled "small", pre-deploy nerves
The audience leaves saying: "I want to have a day like Maya's day."
Talk outline for Microsoft AI Dev Days Angle: Storytelling and Narrative Arc Theme: A Developer's Day Transformed Duration: 15-20 minutes