Skip to content

Instantly share code, notes, and snippets.

@johnlindquist
Created December 7, 2025 20:16
Show Gist options
  • Select an option

  • Save johnlindquist/6cb28663c8985d061b2be8e4a562126d to your computer and use it in GitHub Desktop.

Select an option

Save johnlindquist/6cb28663c8985d061b2be8e4a562126d to your computer and use it in GitHub Desktop.
Microsoft AI Dev Days Talk: Scripting Copilot - Piping Hot Intelligence (Storytelling Edition)

Scripting Copilot: Piping Hot Intelligence

Microsoft AI Dev Days Talk (15-20 min)

Storytelling Edition: A Developer's Day Transformed


The Premise

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.


ACT 1: THE HOOK (1-2 minutes)

Opening: The Terminal That Talked Back

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" -s

The 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."


ACT 2: MAYA'S DAY — THE MAIN CONTENT (12-15 minutes)

Scene 2.1: The Morning Stand-up (2 min)

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" -s

What 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 -s flag 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)

Scene 2.2: The Code Review That Actually Got Done (3-4 min)

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" -s

Explain 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."


Scene 2.3: The Bug That Almost Ruined Lunch (3-4 min)

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?" -s

But 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.5

Teaching 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."


Scene 2.4: The Deployment Gatekeeper (3-4 min)

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-tool flag 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."


Scene 2.5: The Evening Epiphany (2 min)

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?"


ACT 3: THE RESOLUTION (3-4 minutes)

The Reveal: Markdown Becomes Code

Slide: A file icon with .copilot.md extension

The command:

$ ma review.copilot.md

What 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."


Maya's Day, Scripted

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.md

The 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 security

The Paradigm Shift

Before 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."


CLOSING: THE NEXT DEVELOPER (1 minute)

The Bridge

"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."

Call to Action

"Tonight — not next week, tonight — try this:

  1. Pick something that annoyed you today
  2. Pipe it to copilot with -p and -s
  3. 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."

Final Line

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."


TIMING GUIDE

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

KEY COPILOT CLI FLAGS (Reference)

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:*)'

DEMO CHECKLIST

  • Terminal with large font (24pt minimum)
  • Git repo with realistic changes staged
  • Sample test failure output ready
  • Pre-written .copilot.md agent files
  • Test all pipes before the talk
  • Backup: screenshot/video of each demo
  • Verify copilot CLI is installed and authenticated
  • Verify ma is installed and working

DEMO FILES

standup.copilot.md

---
model: claude-haiku-4.5
---
Based on this git log, write a concise standup update.
Use bullet points. Be specific about what was accomplished.

review.copilot.md

---
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.

debug.copilot.md

---
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

pre-deploy.copilot.md

---
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.

QUOTABLE MOMENTS

"Maya didn't learn a new tool that morning. She asked a question. And for the first time, her terminal answered."

"The -s flag 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."


WHAT MAKES THIS TALK DIFFERENT

  1. Character-driven: Audience remembers Maya, not just flags
  2. Temporal structure: One day, morning to evening, builds momentum
  3. Emotional beats: Dread (big PR), panic (failing tests), anxiety (deploy), relief (success)
  4. The twist: markdown-agent isn't revealed until Maya needs it
  5. 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment