# Send Roon Controller to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "roon-controller",
    "name": "Roon Controller",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/puterjam/roon-controller",
    "canonicalUrl": "https://clawhub.ai/puterjam/roon-controller",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/roon-controller",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=roon-controller",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "requirements.txt",
      "SKILL.md",
      "roon_controller.py"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/roon-controller"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/roon-controller",
    "downloadUrl": "https://openagent3.xyz/downloads/roon-controller",
    "agentUrl": "https://openagent3.xyz/skills/roon-controller/agent",
    "manifestUrl": "https://openagent3.xyz/skills/roon-controller/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/roon-controller/agent.md"
  }
}
```
## Documentation

### Roon Control Skill

Control the Roon music player with Chinese command support.

### Install Dependencies

pip install roonapi

### Usage Examples

from roon_controller import RoonController

# Create controller (token will be saved automatically)
controller = RoonController(verbose=True)

# Play/Pause
result = controller.play_pause()

# Next track
result = controller.next()

# Get current track
track_info = controller.get_current_track()
print(f"Now playing: {track_info['track']}")

### 1. Automatic Discovery and Connection

Automatic Roon Core discovery
Token automatically saved to ~/clawd/roon_config.json
Auto-reconnect after restart, no re-authorization needed

### 2. Zone Selection and Switching

Supports switching between any available zone
Selected zone is saved in config and persists across restarts
If no zone is selected, defaults to zones ending with "[roon]"
Use set_zone() to switch zones programmatically

Switch Zone

result = controller.set_zone("Living Room")
# {"success": True, "message": "Switched to zone: Living Room", "zone": "Living Room"}

Get Current Zone

zone = controller.get_current_zone()
# Returns zone info dict with zone_id and zone_data

### 3. Playback Control

Play

result = controller.play()
# {"success": True, "message": "Playback started", "zone": "Living Room Muspi"}

Pause

result = controller.pause()
# {"success": True, "message": "Paused", "zone": "Living Room Muspi"}

Play/Pause Toggle

result = controller.play_pause()

Previous Track

result = controller.previous()

Next Track

result = controller.next()

### 4. Get Current Track

track_info = controller.get_current_track()
# Returns:
# {
#   "success": True,
#   "is_playing": True,
#   "zone": "Living Room Muspi",
#   "track": "Bohemian Rhapsody",
#   "artist": "Queen",
#   "album": "A Night at the Opera",
#   "seek_position": 12345,  # milliseconds
#   "length": 354000        # milliseconds
# }

### 5. List All Zones

zones = controller.list_zones()
# ["Living Room Muspi", "Kitchen", "Bedroom"]

### Command Line Tool

The script can be used as a command line tool:

# Play
python roon_controller.py play

# Pause
python roon_controller.py pause

# Previous track
python roon_controller.py prev

# Next track
python roon_controller.py next

# View current track
python roon_controller.py status

# List all zones
python roon_controller.py zones -v

# switch zone
python roon_controller.py switch zonename

### Chinese Command Support

The skill supports the following Chinese trigger words:

CommandMeaningExample音乐播放 / 播放音乐Start playback"音乐播放"暂停 / 暂停播放Pause playback"暂停一下"下一曲 / 切歌Next track"下一曲"上一曲Previous track"上一曲"当前曲目 / 正在放什么View current track"当前曲目"

### Error Handling

All methods return a unified dictionary structure:

{
    "success": True/False,
    "message": "Operation result description",
    "zone": "Zone name (optional)"
}

### Common Errors

Muspi zone not found: Check if the Roon zone name ends with "muspi"
Failed to connect to Roon: Ensure Roon Core is running and network-accessible
Token load failed: First run requires authorization, ensure authorization completes successfully

### Notes

First Run: Extension authorization required in Roon, check for the extension authorization prompt in Roon interface
Zone Naming: Muspi zone names must end with "muspi" (case-insensitive)
Token Storage: Token is saved in ~/clawd/roon_config.json, ensure secure file permissions
Network Requirements: The device running the script must be on the same network as Roon Core

### Dependencies

roonapi>=0.1.6: Official Roon API Python library

### Token Management

Token storage path: ~/clawd/roon_config.json
Auto-load: Automatically loaded on each startup
Auto-save: Automatically saved on first authorization or update

### Zone Finding Algorithm

# Find all zones
zones = roon.zones

# Filter zones with muspi suffix
muspi_zones = [
    (zone_id, zone_data)
    for zone_id, zone_data in zones.items()
    if zone_data['display_name'].lower().endswith('muspi')
]

# Use the first matching zone
zone_id, zone_data = muspi_zones[0]
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: puterjam
- Version: 1.0.3
## Source health
- Status: healthy
- Source download looks usable.
- Yavira can redirect you to the upstream package for this source.
- Health scope: source
- Reason: direct_download_ok
- Checked at: 2026-05-07T17:22:31.273Z
- Expires at: 2026-05-14T17:22:31.273Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/roon-controller)
- [Send to Agent page](https://openagent3.xyz/skills/roon-controller/agent)
- [JSON manifest](https://openagent3.xyz/skills/roon-controller/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/roon-controller/agent.md)
- [Download page](https://openagent3.xyz/downloads/roon-controller)