# Presentation Ideas Scratchpad

Raw ideas and scenarios for future AI presentations. Capture now, refine later.

---

## Agentic Scenarios

### Cross-Platform Automation (Apple Notes/Reminders via Node)

**Demo narrative:**
1. AI runs in a secure Docker container — isolated, no direct access to user machines
2. Paired node system (MiniMe Mac Mini) allows specific, approved capabilities
3. User asks: "Create a note called X" or "Remind me to Y"
4. AI discovers the installed skill (`memo` CLI) is too interactive for automation
5. AI adapts: queries the system, finds AppleScript as the native alternative
6. Successfully creates note/reminder via `osascript` on the Mac

**Key moments for audience:**
- "Figures it out on its own" — not scripted, adaptive problem-solving
- Ecosystem bridging — Apple-only features accessible from anywhere
- Secure by design — explicit pairing, capability controls

**Commands used:**
```bash
# Failed attempt (interactive CLI)
/opt/homebrew/bin/memo notes -a

# Adaptation: query available folders
osascript -e 'tell application "Notes" to get name of every folder'

# Success: create note via AppleScript
osascript -e 'tell application "Notes" to make new note at folder "Notes" with properties {name:"Title", body:"Content"}'

# Reminders: list available lists
osascript -e 'tell application "Reminders" to get name of every list'

# Create reminder
osascript -e 'tell application "Reminders" to make new reminder in list "Tasks" with properties {name:"Title", body:"Notes"}'
```

**Generalizes to:**
- Browser automation (Playwright/browser control)
- Other platforms via nodes (Windows, Linux)
- Any native tool with scripting interface

---

## Future Ideas

*(Add ideas below as they come up)*

- 
