Duration: 15-20 minutes + demos
"In 1978, Doug McIlroy described Unix philosophy in a sentence: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams."
"Forty-seven years later, that sentence describes the most powerful AI architecture we've built."
Opening visual: Side-by-side comparison
1978: cat file.txt | grep error | wc -l
2025: cat task.md | ma | gh issue create
The Old Model:
- Learn the tool's interface
- Adapt your thinking to the tool
- Master arcane flags and options
The New Model:
- Describe what you want in text
- The AI adapts to your intent
- Configuration as prose, not syntax
# The old way: Learn fd's syntax
fd -e ts -x grep -l "TODO"
# The new way: Describe intent
echo "Find TypeScript files with TODOs" | copilot -pKey insight: We didn't abandon Unix philosophy - we completed it. Text was always the universal interface. Now we have programs that understand text.
ma does ONE thing: turns markdown into CLI commands.
.md file -> parse -> template -> spawn -> output
That's it. No orchestration frameworks. No complex state machines. Just:
- Read markdown
- Extract frontmatter
- Build CLI args
- Run command
- Return stdout
File: hello.copilot.md
---
model: gpt-4.1
---
Say "Hello from the Unix philosophy"ma hello.copilot.mdWhy this matters: The filename IS the configuration. hello.copilot.md infers the command from the extension. Configuration as convention.
# Generate, validate, deploy
ma generate-code.copilot.md | ma review.claude.md | ma deploy.copilot.mdEach agent is a filter. Each filter transforms text. This is grep | sed | awk for the AI age.
copilot for speed:
---
command: copilot
model: gpt-4.1
silent: true
---
Quick git status summaryclaude for depth:
---
command: claude
model: opus
---
Deep architectural analysis of @./src/**/*.ts#!/bin/bash
# Try fast first, escalate if needed
result=$(ma quick-check.copilot.md)
if echo "$result" | grep -q "NEEDS_REVIEW"; then
ma deep-review.claude.md
else
echo "$result"
fiThe pattern: Start cheap. Escalate when needed. This is try || fallback for intelligence.
| Agent | Speed | Cost | Use Case |
|---|---|---|---|
| copilot | Fast | Low | Routine tasks |
| claude-haiku | Fast | Low | Quick analysis |
| claude-sonnet | Medium | Medium | Complex tasks |
| claude-opus | Slow | High | Expert reasoning |
Unix taught us: use cat when you need cat, awk when you need awk. Same principle.
Traditional scripts are deterministic. AI-augmented scripts are adaptive.
File: smart-build.sh
#!/bin/bash
set -e
# Run build
if ! npm run build 2>&1 | tee build.log; then
# Build failed - ask for help
echo "Build failed. Analyzing..."
analysis=$(cat build.log | ma analyze-error.copilot.md)
if echo "$analysis" | grep -q "SIMPLE_FIX"; then
# Copilot can handle it
ma fix-simple.copilot.md --error "$(cat build.log)"
else
# Escalate to Claude for complex debugging
ma debug-complex.claude.md --error "$(cat build.log)"
fi
fiThe insight: The script doesn't just fail - it reasons about failure. It chooses its debugging strategy based on complexity.
---
command: claude
---
Review this code for issues:
@./src/main.ts # Import file
@./src/**/*.test.ts # Import with glob
@./src/utils.ts:10-50 # Import line range
@./src/types.ts#User # Import specific symbolThis is #include for the AI age. Compose context like you compose programs.
# Commands inline in markdown
!`git status`
# URLs inline
@https://api.github.com/repos/owner/repo
# Templates with variables
{{ branch_name | default: "main" }}# Full CI pipeline in pipes
git diff HEAD~1 |
ma summarize-changes.copilot.md |
ma generate-changelog.copilot.md |
ma create-release-notes.claude.md > RELEASE.mdNo frameworks. No orchestrators. Just pipes.
| Feature | Orchestration Frameworks | markdown-agent |
|---|---|---|
| State management | Complex | None |
| Error handling | Built-in | Exit codes |
| Parallelism | Configured | & and wait |
| Configuration | YAML/JSON schema | Markdown |
| Learning curve | Weeks | Minutes |
The Unix way: simple primitives, composed infinitely.
Traditional "agent" code:
class Agent:
def __init__(self, llm, tools, memory, planner):
self.orchestrator = Orchestrator(
llm=llm,
tool_registry=ToolRegistry(tools),
memory_backend=memory,
planning_strategy=planner
)
# ... 500 more linesmarkdown-agent:
---
command: claude
model: opus
---
Analyze the codebase and suggest improvements.
@./src/**/*.tsWhich one would you rather debug at 3 AM?
"The next generation of software engineers won't learn to code. They'll learn to instruct."
But the Unix philosophy endures: small tools, composed simply, through text.
"I'm fascinated that 50 years later, the Unix philosophy isn't just surviving - it's thriving. The tools got smarter, but the composition stayed simple."
The call to action:
- Start with pipes, not frameworks
- Write agents as readable markdown
- Compose intelligence like you compose commands
- Let the tools do one thing well
Final slide:
# The Unix philosophy, evolved
cat problem.txt | think | solve | verify | deployThank you.
Demo 1 files needed:
# hello.copilot.md
ma hello.copilot.mdDemo 2 files needed:
# quick-check.copilot.md
# deep-review.claude.md
./escalate.shDemo 3 files needed:
# smart-build.sh
# analyze-error.copilot.md
# fix-simple.copilot.md
# debug-complex.claude.mdDemo 4 live:
git diff HEAD~1 | ma summarize.copilot.md- If asked about security: "Same as any CLI tool - sanitize inputs, don't pipe untrusted content, use sandboxing when available"
- If asked about cost: "Start cheap, escalate when needed - that's the whole point of composition"
- If asked about vendor lock-in: "The markdown format is command-agnostic. Change
command: copilottocommand: claudein one line" - If asked about production use: "It's just spawning processes. If you trust your CLI tools in production, you can trust
ma"