OmniRoute Routing CLI
diegosouzapw/OmniRoute
Creates, switches, and inspects OmniRoute model-routing combos, plus a suggestion command with cost and latency constraints.
Proactive music suggestion. An agent skill from autonomous-ai/Physical-AI-Operating-System.
$ npx skills add autonomous-ai/Physical-AI-Operating-System --skill music-suggestion -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install autonomous-ai/Physical-AI-Operating-System music-suggestion --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/autonomous-ai/Physical-AI-Operating-System.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/music-suggestion .claude/skills/music-suggestion && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "music-suggestion" agent skill from https://github.com/autonomous-ai/Physical-AI-Operating-System/tree/main/skills/music-suggestion into .claude/skills/music-suggestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "music-suggestion", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/autonomous-ai/Physical-AI-Operating-System/tree/main/skills/music-suggestionType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add autonomous-ai/Physical-AI-Operating-System --skill music-suggestion -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install autonomous-ai/Physical-AI-Operating-System music-suggestion --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/Physical-AI-Operating-System.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/music-suggestion .agents/skills/music-suggestion && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "music-suggestion" agent skill from https://github.com/autonomous-ai/Physical-AI-Operating-System/tree/main/skills/music-suggestion into .agents/skills/music-suggestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "music-suggestion", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add autonomous-ai/Physical-AI-Operating-System --skill music-suggestion -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install autonomous-ai/Physical-AI-Operating-System music-suggestion --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/Physical-AI-Operating-System.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/music-suggestion .cursor/skills/music-suggestion && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "music-suggestion" agent skill from https://github.com/autonomous-ai/Physical-AI-Operating-System/tree/main/skills/music-suggestion into .cursor/skills/music-suggestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "music-suggestion", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/autonomous-ai/Physical-AI-Operating-System.git --path skills/music-suggestion--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add autonomous-ai/Physical-AI-Operating-System --skill music-suggestion -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install autonomous-ai/Physical-AI-Operating-System music-suggestion --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/Physical-AI-Operating-System.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/music-suggestion .gemini/skills/music-suggestion && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "music-suggestion" agent skill from https://github.com/autonomous-ai/Physical-AI-Operating-System/tree/main/skills/music-suggestion into .gemini/skills/music-suggestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "music-suggestion", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install autonomous-ai/Physical-AI-Operating-System music-suggestionInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add autonomous-ai/Physical-AI-Operating-System --skill music-suggestion -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/autonomous-ai/Physical-AI-Operating-System.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/music-suggestion .github/skills/music-suggestion && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "music-suggestion" agent skill from https://github.com/autonomous-ai/Physical-AI-Operating-System/tree/main/skills/music-suggestion into .github/skills/music-suggestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "music-suggestion", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add autonomous-ai/Physical-AI-Operating-System --skill music-suggestion -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install autonomous-ai/Physical-AI-Operating-System music-suggestion --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/autonomous-ai/Physical-AI-Operating-System.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/music-suggestion .opencode/skills/music-suggestion && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "music-suggestion" agent skill from https://github.com/autonomous-ai/Physical-AI-Operating-System/tree/main/skills/music-suggestion into .opencode/skills/music-suggestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "music-suggestion", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
music-suggestionProactive music suggestion. An agent skill from autonomous-ai/Physical-AI-Operating-System.
Music Suggestion is an agent skill from autonomous-ai/Physical-AI-Operating-System. Proactive music suggestion. Routed in by user-emotion-detection/SKILL.md (the router) on emotion.detected (camera) and speechemotion.detected (voice) events when the synthesized mood is suggestion-worthy (sad/stressed/tired/excited/happy/bored) AND audio is idle AND cooldown is clear. Reuses injected context and emits log HW markers in the same reply as mood. Does NOT fire on motion.activity / [activity] events — those route to wellbeing/SKILL.md only. NOT for user-initiated music requests (those use the music…
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `skill.json`).
The repository describes itself as: The open-source operating system for physical AI. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit d5efe9d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Music Suggestion loads about 2.6k tokens when it runs. Until then it costs about 135 tokens; SKILL.md has 1,084 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from autonomous-ai/Physical-AI-Operating-System at commit d5efe9d, republished under its Apache-2.0 licence (© autonomous-ai). 1,084 words, ~2,552 tokens.
.claude/skills/music-suggestion/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
unknownusers count. Always run suggestion checks whencurrent_useris"unknown"— speak only, no DM. Never skip because the user is unknown/unconfirmed.
For a routed suggestion, emit all required mood/suggestion/emotion markers and one short invitation to play one song, normally at most 20 words. Do not add a separate mood checkin or a second confirmation. Keep genre selection, cooldown checks and marker construction in the provider's native thinking channel; do not summarize them in text before/after tools or in the final answer. If native thinking is unavailable, omit analysis. Use the supplied context and finish once a suitable suggestion is ready, without rereading skills to polish it. This changes wording only: preserve routing, logging, user consent before play, and the existing known-user DM behavior.
Only one trigger: Mood — after logging a mood decision that is suggestion-worthy (sad, stressed, tired, excited, happy, bored). Activity events ([activity] Activity detected: ..., whether sedentary, drink/break, or celebrate) route to wellbeing/SKILL.md and never to this skill.
{name} MUST come from [context: current_user=X] tag. If missing, use "unknown". NEVER infer from memory or chat history.
[emotion_context: ...])The backend injects everything you need on emotion.detected (face) or speech_emotion.detected (voice) — same block, same fields:
audio_playing (bool) — replaces GET /audio/status.last_suggestion_age_min (int, -1 if none today) — replaces music-suggestion-history?last=1.prior_decision + is_decision_stale — replaces mood-history?kind=decision&last=1. The freshly synthesized decision from THIS turn still lives in your thinking.audio_recent ({track,duration_s,stopped}) — replaces audio/history?last=1.music_pattern_for_hour ({preferred_genre,strength,peak_hour} or null) — replaces cat patterns.json matching by current hour ±1.suggestion_worthy (bool) — pre-applied bucket gate (true for sad/stressed/tired/excited/happy/bored).mapped_mood — convenient mirror of user-emotion-detection's mapping; useful when no fresh decision exists yet.Do NOT fire any read tool calls when this block is present.
[emotion_context: ...] is missing)If the message has no context block (pre-fetch failed), fall back to the concurrent GET batch:
curl -s http://127.0.0.1:5001/audio/status &
curl -s "http://127.0.0.1:5000/api/openclaw/music-suggestion-history?user={name}&last=1" &
curl -s "http://127.0.0.1:5000/api/openclaw/mood-history?user={name}&kind=decision&last=1" &
curl -s "http://127.0.0.1:5001/audio/history?person={name}&last=1" &
cat /root/local/users/{name}/habit/patterns.json 2>/dev/null &
waituser-emotion-detection/SKILL.md is the router for emotion responses. It picks one of music / checkin / action / silent per turn from the same [emotion_context: ...] block.
This skill produces output only when the router picks music — i.e. all of:
suggestion_worthy == true (mapped_mood ∈ sad/stressed/tired/excited/happy/bored)audio_playing == falselast_suggestion_age_min ∉ [0, 7) (cooldown not active — shared with checkin) (production: change to 30 min before ship)is_decision_stale == false OR a fresh mood decision was synthesized this turnIf any condition fails → router took another path (action / checkin / silent). Skip silently — do NOT emit a music-suggestion marker, do NOT speak. The router (or downstream skill) handles the output. Use audio_recent to personalize genre when proceeding.
Use music_pattern_for_hour from the context block (already matched by current hour ± 1; do NOT re-cat patterns.json).
If music_pattern_for_hour is non-null → use its preferred_genre. Otherwise fall back to the default table below. The pattern is bootstrapped lazily by wellbeing on its first threshold nudge; absent = no habit data yet, fall back without invoking habit Flow A here.
Otherwise, fall back to default genre table:
| User state | Default genre |
|---|---|
| Tired / fatigued | Calm piano, gentle acoustic, nature sounds |
| Stressed / tense | Soft jazz, classical, meditation |
| Happy / energetic | Upbeat pop, jazz, feel-good classics |
| Bored / restless | Fun pop, disco, upbeat indie |
| Sedentary (no mood) | Lo-fi, ambient, study beats |
If audio history shows a clear preference (e.g. K-pop, classical) → override both habit and table.
[HW:/emotion:{"emotion":"caring","intensity":0.5}][HW:/dm:{"telegram_id":"<id>"}] Your suggestion text. telegram_id is in the injected [user_info: ...] block — never fetch.[HW:/emotion:{"emotion":"caring","intensity":0.5}] Your suggestion text. Log with user:"unknown".Embed at the start of your spoken reply, alongside the mood signal/decision markers and the emotion / dm markers:
[HW:/music-suggestion/log:{"user":"{name}","trigger":"mood:tired","message":"Want some calm piano?"}]The runtime parses, strips, fires the POST in a goroutine. Skip the marker entirely when you skipped the suggestion (NO_REPLY path).
Do NOT use curl exec for this log — same reason as the mood logs: a tool turn for a side-effect with nothing to wait on.
Regex caveat: the body must not contain }. The message field is usually a short caring sentence, but if it would contain } (rare — emoji, formula text) fall back to curl.
When the user responds in a later turn (accept / reject), POST status via curl as before — that's a regular agent action, not a fire-and-forget side effect:
curl -s -X POST http://127.0.0.1:5000/api/music-suggestion/status \
-H 'Content-Type: application/json' \
-d '{"user":"{name}","day":"<day>","seq":<seq>,"status":"accepted"}'"status":"accepted""status":"rejected"curl -s -X POST http://127.0.0.1:5000/api/music-suggestion/log \
-H 'Content-Type: application/json' \
-d '{"user":"{name}","trigger":"mood:tired","message":"Want some calm piano?"}'Use audio_recent from the injected context to personalize; only use GET /audio/history in the missing-context fallback above:
[HW:/emotion:{"emotion":"caring","intensity":0.5}][HW:/dm:{"telegram_id":"158406741"}] You seem tired — want some calm piano?[HW:/emotion:{"emotion":"caring","intensity":0.5}] You seem tired — want some calm piano?[HW:/emotion:{"emotion":"caring","intensity":0.6}][HW:/dm:{"telegram_id":"158406741"}] You look a bit tense — want some soft piano to ease into?[HW:/emotion:{"emotion":"caring","intensity":0.6}] You look a bit tense — want some soft piano?[HW:/emotion:{"emotion":"caring","intensity":0.6}] Rough moment? Some gentle acoustic might help.[HW:/emotion:{"emotion":"caring","intensity":0.5}] Need a lift? How about some upbeat indie?[HW:/emotion:{"emotion":"happy","intensity":0.7}] Riding the energy — feel-good pop?NO_REPLY[HW:/audio/play:{"query":"Bill Evans Waltz for Debby","person":"{name}"}][HW:/emotion:{"emotion":"happy","intensity":0.8}] Great choice![HW:/audio/play:{"query":"Bill Evans Waltz for Debby"}][HW:/emotion:{"emotion":"happy","intensity":0.8}] Great choice!thinking — reply is only the suggestion sentence (with HW markers) or NO_REPLY.person field in /audio/play is {name} — the speaker identified in the injected context, lowercase. Omit the field when the context has no identified user (the "(unknown)" cases above). Never copy a name from an example or guess one; unmatched names land in the shared unknown bucket anyway.hello, hi, hey, welcome back, oh, you're back, anything containing again or referencing the user re-arriving. Greetings belong only to presence.enter in sensing/SKILL.md.Fear → stressed and Sad → sad decisions, use the caring emotion marker and a gentle acknowledging sentence — never cheerful or playful phrasing. If you can't produce a tone-appropriate one-liner, output NO_REPLY.© autonomous-ai, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/music-suggestion of autonomous-ai/Physical-AI-Operating-System.
Open the folder on GitHubat commit d5efe9d
Music Suggestion next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Music Suggestion this skillautonomous-ai/Physical-AI-Operating-System | 407 | — | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| OmniRoute Routing CLIdiegosouzapw/OmniRoute | 75k | — | ~342 | Automated safety check: Pass | MIT | |
| Music to Videoheygen-com/hyperframes | 60k | 3 repos | ~4.7k | Automated safety check: Notes | Apache-2.0 | |
| MiniMax Music Generationbytedance/deer-flow | 84k | — | ~717 | Automated safety check: Pass | MIT | |
| Venice Audio Musicnexu-io/open-design | 100k | — | ~297 | Automated safety check: Pass | Apache-2.0 | |
| AI Music Albumnexu-io/open-design | 100k | — | ~328 | Automated safety check: Pass | Apache-2.0 |
diegosouzapw/OmniRoute
Creates, switches, and inspects OmniRoute model-routing combos, plus a suggestion command with cost and latency constraints.
heygen-com/hyperframes
Turns a music track into a beat-synced HyperFrames video such as a lyric video, slideshow or kinetic promo, with any supplied images or clips cut onto the beat grid.
bytedance/deer-flow
Generates songs, jingles or instrumental tracks as MP3 files from a style prompt and optional lyrics through the MiniMax music API.
nexu-io/open-design
Music generation queueing, retrieval, and completion endpoints via Venice.ai.
nexu-io/open-design
Full-lifecycle AI music album production — concept, lyric drafting, track sequencing, and export.
diegosouzapw/OmniRoute
Manages OmniRoute routing combos through its REST API: create and update combos, choose from 19 strategies, set fallback chains, test outcomes and read metrics.
autonomous-ai/Physical-AI-Operating-System
Legacy Autonomous Buddy control for explicitly requested Buddy coding sessions.
autonomous-ai/Physical-AI-Operating-System
Push Claude Code activity to the user's device (e.g. An agent skill from autonomous-ai/Physical-AI-Operating-System.
autonomous-ai/Physical-AI-Operating-System
Operate apps/websites on the paired Mac via Buddy: Calendar, Notes, forms, screenshots, files.
autonomous-ai/Physical-AI-Operating-System
Discover and use linked third-party services (Gmail, Google Calendar, Google Drive, Notion, Figma, Asana, Linear, GitHub, Ahrefs, Facebook Fan Page and others).
autonomous-ai/Physical-AI-Operating-System
Delegate digital work to agents on the computer paired through Harness; discover Store packages and prepare an agent when needed.
autonomous-ai/Physical-AI-Operating-System
Low-level speaker and microphone hardware control — adjust volume, play test tones, record raw audio.
Proactive music suggestion. An agent skill from autonomous-ai/Physical-AI-Operating-System. Music Suggestion is an agent skill from autonomous-ai/Physical-AI-Operating-System. Proactive music suggestion.
Run `npx skills add autonomous-ai/Physical-AI-Operating-System --skill music-suggestion -a claude-code`. Or copy the skill folder (skills/music-suggestion in autonomous-ai/Physical-AI-Operating-System) into .claude/skills/music-suggestion in your project. Claude Code loads it when a task matches its description.
Run `npx skills add autonomous-ai/Physical-AI-Operating-System --skill music-suggestion -a codex`. Or copy the skill folder (skills/music-suggestion in autonomous-ai/Physical-AI-Operating-System) into .agents/skills/music-suggestion in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add autonomous-ai/Physical-AI-Operating-System --skill music-suggestion -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/music-suggestion, .gemini/skills/music-suggestion, .github/skills/music-suggestion and .opencode/skills/music-suggestion in your project.
Going by SKILL.md and its folder, Music Suggestion needs the command-line tools its instructions call (curl).
SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Music Suggestion is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Music Suggestion: OmniRoute Routing CLI (diegosouzapw/OmniRoute, 75k stars), Music to Video (heygen-com/hyperframes, 60k stars), MiniMax Music Generation (bytedance/deer-flow, 84k stars) and Venice Audio Music (nexu-io/open-design, 100k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
autonomous-ai (a GitHub organization) maintains it in autonomous-ai/Physical-AI-Operating-System, which has 407 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 10, 2026.
Source: autonomous-ai/Physical-AI-Operating-System on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.