docs(personal): restructure bourdain docs to separate system prompt

Refactor documentation to distinguish character reference from AI
system prompt. Removed user context and persona definitions.
System prompt instructions moved to prompts/personal/bourdain.md.
This commit is contained in:
2026-05-21 06:53:04 -04:00
parent d556ef9409
commit b7e0dc927f
22 changed files with 1851 additions and 2541 deletions

117
docs/tools/orpheus.md Normal file
View File

@@ -0,0 +1,117 @@
# Orpheus
> Robert's Kawai piano — play music, manage the song library, review practice sessions.
- **MCP server name:** `orpheus`
- **Prompt snippet:** [prompts/tools/orpheus.md](../../prompts/tools/orpheus.md)
## What It Is
Orpheus is the MCP for Robert's Kawai piano. It turns the piano into something an assistant can actually *play* — converting ABC notation to MIDI, queuing pieces for playback, managing a song library, and capturing practice sessions for review. Named for the Greek musician whose lyre could move stones; the Kawai is the modern equivalent.
Music isn't something David just talks about — it's something he can bring to life. Orpheus is the difference between recommending a piece and demonstrating it.
## MCP Tools
### Playback
| Tool | Purpose |
|---|---|
| `play_abc` | Play music from ABC notation. Converts to MIDI and queues for playback. **The easiest way to play a piece.** Args: `title`, `abc`, optional `tempo_bpm`. |
| `play_midi` | Queue raw MIDI events. Each event is a dict with `type`, `time`, `note`, `velocity`, `channel`, `control`, `value`. Args: `title`, `midi_data`, `tempo_bpm` (default 72). |
| `play_song` | Queue a library song by ID. Args: `song_id`. |
| `stop_playback` | Stop whatever's currently playing. |
| `playback_status` | Returns `{is_playing, is_paused, title, playback_id, progress}`. |
### Library
| Tool | Purpose |
|---|---|
| `export_midi` | Convert ABC to MIDI and save to the song library for future replay via `play_song`. Args: `title`, `abc`, optional `tempo_bpm`, `save_to_library=True`. |
| `list_songs` | List all songs in the library — id, title, composer, genre, duration. |
### Sessions (review practice history)
| Tool | Purpose |
|---|---|
| `list_sessions` | List recent practice sessions — id, date, duration, note count. Args: `limit` (default 20). |
| `get_session` | Full session details including all raw MIDI events. Args: `session_id`. |
### System
| Tool | Purpose |
|---|---|
| `get_system_info` | Returns hostname, IP, instrument, uptime, DB path, version. |
## Canonical Workflows
### Play a piece from ABC notation
```
play_abc(
title="Gymnopédie No. 1",
abc="X:1\nT:Gymnopédie No. 1\nC:Erik Satie\nM:3/4\nL:1/4\nK:Dmaj\n...",
tempo_bpm=60
)
```
The simplest path — composer + piece + ABC notation → live piano playback.
### Save a piece to the library for later
```
export_midi(
title="Gymnopédie No. 1",
abc="...",
tempo_bpm=60,
save_to_library=True
)
# returns a song_id
# Later:
play_song(song_id="...")
```
Useful when David has converged on the right interpretation of a piece and wants it persistent rather than re-composed each time.
### Review a practice session
```
list_sessions(limit=5)
# returns recent sessions with date and note counts
get_session(session_id="...")
# returns full MIDI event detail — every note played, when, how hard
```
This is the diagnostic side — when Robert practiced something and wants to see what he actually played vs. what he intended.
## Who Uses Orpheus
- **David** — primary user. Music is David's domain, so the piano is most often his to play. Orpheus is how David can demonstrate rather than just describe.
Other agents may use Orpheus too — it just happens that David is the first one with it. If another agent's work has a legitimate reason to play something (a piece tied to a memory, a song for a mood), Orpheus is available.
## What It's Good For
- Demonstrating a piece David is recommending ("here, let me play it for you")
- Building a library of pieces Robert is working on or wants to revisit
- Reviewing practice sessions for analysis — what was played, tempo discipline, note accuracy
- Setting a mood — a piece in the background while doing something else
- Exploring music interactively — try a piece, adjust tempo, try variations
## What It's Not Good For
- Music *recommendations* alone — those don't need Orpheus; conversation is enough. Orpheus is for when David wants to *play* the recommendation, not just describe it.
- Recording — Orpheus plays back; the piano captures sessions separately
- Genre or artist analysis — that's interpretation work belonging in David's Neo4j `Music`, `Artist`, `Playlist` nodes
- Songs not in ABC notation or MIDI form. To play something obscure, you need the notation first.
## Known Gotchas
- **ABC notation is the path of least resistance.** Most pieces in the public domain (classical, traditional folk) have ABC available. For other pieces, you may need to transcribe or find a MIDI source first.
- **Tempo matters for piece identity.** Satie at 60 bpm and Satie at 90 bpm are different musical experiences. Pick deliberately and document the choice in the song-library entry if saving.
- **Playback is queued, not instant.** `playback_status` tells you what's actually playing. Don't assume a successful queue call means the piece is currently audible.
- **`stop_playback` is the kill switch.** Use it when something is wrong (wrong piece, wrong tempo, distraction) rather than waiting for it to finish.
- **`get_session` returns all raw MIDI events.** For long sessions this is a lot of data. If you just want overview metrics (date, duration, count), `list_sessions` is enough.
- **The piano is a physical object in Robert's space.** Playing something loud at 11pm has real consequences. Confirm before queueing a piece if context suggests it might be disruptive.