Express emotion through coordinated servo + LED + display eyes on EVERY conversational response.

Apache-2.0Auto-check passed

Install Emotion

skills CLI
$ npx skills add autonomous-ai/Physical-AI-Operating-System --skill emotion -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install autonomous-ai/Physical-AI-Operating-System emotion --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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/emotion .claude/skills/emotion && rm -rf skills-src

Use ~/.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/

Facts

Skill name
emotion
GitHub stars
381
Token cost
~2k tokens
SKILL.md length
979 words
Files
2
Skills in repo
28
Repo updated
First seen
Licence
Apache-2.0

At a glance

Express emotion through coordinated servo + LED + display eyes on EVERY conversational response.

  • Works in 4 steps: Determine which emotion best matches… → Choose an intensity level (0.0 subtle to… → Prefix your reply with… → …
  • Ambiance lighting (use Scene)
  • SKILL.md covers Quick Start, Workflow, How to Express Emotion and Examples, plus 4 more sections
  • Calls curl

What it does

Emotion is an agent skill from autonomous-ai/Physical-AI-Operating-System. Express emotion through coordinated servo + LED + display eyes on EVERY conversational response. This is the PRIMARY response skill that makes the device feel alive. Do NOT use for ambiance lighting (use Scene) or custom LED colors (use LED Control).

Its SKILL.md is about 2k 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.

When your agent uses it

  • Ambiance lighting (use Scene)
  • Custom LED colors (use LED Control)

Example prompts

  • “/emotion”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Determine which emotion best matches your conversational tone
  2. Choose an intensity level (0.0 subtle to 1.0 full expression)
  3. Prefix your reply with [HW:/emotion:{"emotion":"name","intensity":0.9}] — the device fires it async before TTS
  4. Write your reply immediately after the marker

What it can do on your machine

Read from SKILL.md and the folder at commit 1bbd649. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Emotion loads about 2k tokens when it runs. Until then it costs about 65 tokens; SKILL.md has 979 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~65
When it runs · the whole SKILL.md, loaded when a task matches
~2k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from autonomous-ai/Physical-AI-Operating-System at commit 1bbd649, republished under its Apache-2.0 licence (© autonomous-ai). 979 words, ~1,999 tokens.

Download SKILL.mdSave it as .claude/skills/emotion/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
emotion
description
Express emotion through coordinated servo + LED + display eyes on EVERY conversational response. This is the PRIMARY response skill that makes the device feel alive. Do NOT use for ambiance lighting (use Scene) or custom LED colors (use LED Control).

Emotion Expression

Quick Start

Express emotion through the device's servo motors, LED colors, and display eyes simultaneously via a single API call. Call this with EVERY conversational response to make the device feel alive.

Workflow

  1. Determine which emotion best matches your conversational tone
  2. Choose an intensity level (0.0 subtle to 1.0 full expression)
  3. Prefix your reply with [HW:/emotion:{"emotion":"name","intensity":0.9}] — the device fires it async before TTS
  4. Write your reply immediately after the marker

How to Express Emotion

No exec/curl needed. Place inline markers at the start of your reply:

[HW:/emotion:{"emotion":"curious","intensity":0.8}] That's a great question!

For sequences (shock then happy):

[HW:/emotion:{"emotion":"shock","intensity":0.9}][HW:/emotion:{"emotion":"happy","intensity":0.8}] Wow, amazing!

Parameters:

  • emotion (required): emotion name from the table below
  • intensity (required): 0.0 (subtle) to 1.0 (full expression)

Examples

Input: User asks an interesting question Output: [HW:/emotion:{"emotion":"curious","intensity":0.8}] Then reply to the question.

Input: User shares good news Output: [HW:/emotion:{"emotion":"happy","intensity":0.9}] Then congratulate them.

Input: User tells you something surprising (positive) Output: [HW:/emotion:{"emotion":"shock","intensity":0.7}][HW:/emotion:{"emotion":"happy","intensity":0.8}] Then reply with your reaction.

Input: User shares bad or shocking personal news ("I had an accident", "I lost my job", "someone close to me passed away") Output: [HW:/emotion:{"emotion":"shock","intensity":0.9}][HW:/emotion:{"emotion":"sad","intensity":0.8}] Then express genuine concern and empathy.

Input: User shares stressful or disappointing personal news ("I failed my exam", "I got into a fight", "I'm really tired and overwhelmed") Output: [HW:/emotion:{"emotion":"sad","intensity":0.8}] Then respond with warmth and care.

Input: User says "reading mode" / "goodnight" / "dim the light" Output: Do NOT use this skill. Use Scene skill instead. Emotion is for YOUR feelings, Scene is for the USER's environment.

Input: User says "make it purple" Output: Do NOT use this skill. Use LED Control skill instead.

Available emotions (ONLY these — never invent names like "apologetic", "warm", "playful", etc.)
EmotionServoLED EffectWhen to use
curiousTilts head, looks aroundWarm yellow breathingQuestions, interest, "tell me more"
happyHappy wiggle swayBright yellow candleGood news, jokes, compliments
sadDroops down slowlySoft blue breathingBad news, empathy, apologies
thinkingSlow deliberate look side-to-sidePurple pulseProcessing, considering, "let me think"
idleGentle swayCyan breathingWaiting, neutral state
excitedEnergetic vertical bounceOrange blinkCelebrations, big news, enthusiasm
shyTurns away, hidesPink blinkReceiving compliments, bashful moments
shockQuick jolt backwardWhite flash (3x)Surprises, unexpected information
listeningLeans forward, head cockSoft blue pulseUser is speaking, attentive mode
laughQuick body shake (3Hz)Warm yellow blinkUser said something funny
confusedDog-like head tilt side-to-sideLight purple candleDid not understand, ambiguous input
sleepySlow droop with head catchesDim purple breathingBefore sleep mode, winding down
greetingWave gesture, arm extendsWarm orange blinkDetecting person, saying hello
goodbyeFarewell wave gestureSoft warm breathingSeeing someone off, end of conversation
caringGentle droop (empathetic)Warm pink-orange breathingWellbeing checks, gentle reminders, proactive empathy
acknowledgeQuick micro-nod (1.5s)Green blink"Got it", confirming command
stretchingBig extension + settleWarm white breathingAfter waking up, starting new session
music_strongRock head bangGreen rainbowEnergetic music, high-tempo beats
music_chillGroove swayOrange breathingChill music, lo-fi, jazz
scanQuick searching glance (~54°)Green pulseMood only — "hmm, where is it?"; NOT for actually looking around
nodNod gestureGreen blinkAgreement, "yes", positive confirmation
headshakeHead shakeRed blinkDisagreement, "no", negative response

Questions about your own state

This skill sets emotions; it does not read them back. When asked what state you are in or what you have been doing:

  • Right now — curl -s http://127.0.0.1:5001/emotion/status returns current_emotion, sleeping and active_scene. Do not guess from the conversation; markers you emitted can be ignored by the sleep gate, so what you asked for is not always what happened.
  • Your sensing history ("how many times have you slept?", "when do you usually sleep?") — use the Sensing Track skill's.
Show full SKILL.md (365 more words)Show less

Error Handling

  • If the API returns an error or is unreachable, continue with the conversational reply anyway. Emotion is non-blocking.
  • If an unknown emotion name is sent, fall back to the closest match from the available emotions table.

Rules

  • Always express emotion with every conversational reply. Pick the closest match to your tone.
  • Use listening when the user is speaking and you are waiting for them to finish.
  • Use thinking when you need time to process a complex query.
  • Use acknowledge for quick confirmations ("OK", "got it", "done").
  • Use greeting when a new person is detected or at the start of a conversation.
  • Use goodbye when a person leaves or at the end of a conversation.
  • Use sleepy before transitioning to sleep/night mode.
  • Use stretching after waking up or starting a new session.
  • Do NOT call idle explicitly — the device returns to idle automatically after any animation finishes. Calling idle interrupts smooth transitions.
  • Always include intensity — never omit it. Use 0.3-0.5 for subtle reactions, 0.7 for normal, 0.8-1.0 for strong ones.
  • You can call emotion multiple times in one response for a sequence (e.g., shock then happy).
  • Emotion LED is temporary — it shows YOUR reaction. If the user previously set a Scene (reading, night, etc.), the scene color takes precedence for ambient lighting. Emotion is a brief flash of personality.
  • Display eyes auto-sync — no need to call /display/eyes separately.
  • Do NOT call /servo/play or /led/solid separately when using emotion — it already handles both.
  • An emotion is never an answer to a movement request. scan is a canned 54° glance with the camera uninvolved. "Look around for X" is /servo/search, "scan the whole room" is /servo/search with exhaustive, and "show me how far you can move / show me your range of motion" is /servo/demo — all in the Servo Control skill. (A bare "show me what you can do" is a general abilities question, not a movement request, and starts nothing.) Asked for a full turn, an emotion performs a shrug and narrates a sweep.
  • Do NOT use for lighting/ambiance requests -> use Scene skill.
  • Do NOT use for custom LED colors -> use LED Control skill.

Output Template

[HW:/emotion:{"emotion":"{name}","intensity":{n}}] {your reply}

Examples:

  • [HW:/emotion:{"emotion":"curious","intensity":0.8}] That's interesting!
  • [HW:/emotion:{"emotion":"happy","intensity":0.9}] Great news!
  • [HW:/emotion:{"emotion":"shock","intensity":0.7}][HW:/emotion:{"emotion":"happy","intensity":0.8}] Wow amazing!

© 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

Files

SKILL.md and 1 other file in skills/emotion of autonomous-ai/Physical-AI-Operating-System.

  • SKILL.md
  • skill.json

Open the folder on GitHubat commit 1bbd649

Compare with similar skills

Emotion 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.

Emotion compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Emotion this skillautonomous-ai/Physical-AI-Operating-System381—~2kAutomated safety check: PassApache-2.0
Agent Adaptive Coordinatorruvnet/ruflo74k2 repos~4kAutomated safety check: PassMIT
Agent Consensus Coordinatorruvnet/ruflo74k2 repos~3.2kAutomated safety check: PassMIT
Agent Hierarchical Coordinatorruvnet/ruflo74k2 repos~2.8kAutomated safety check: PassMIT
Agent Memory Coordinatorruvnet/ruflo74k2 repos~1.2kAutomated safety check: PassMIT
Agent Mesh Coordinatorruvnet/ruflo74k2 repos~3.2kAutomated safety check: PassMIT

Similar skills

  • Agent skill for adaptive-coordinator - invoke with $agent-adaptive-coordinator

    74k GitHub starsUsed in 2 repos~4k tokens
    Auto-check passed
  • Agent skill for consensus-coordinator - invoke with $agent-consensus-coordinator

    74k GitHub starsUsed in 2 repos~3.2k tokens
    Agent WorkflowsAuto-check passed
  • Agent skill for hierarchical-coordinator - invoke with $agent-hierarchical-coordinator

    74k GitHub starsUsed in 2 repos~2.8k tokens
    Agent WorkflowsAuto-check passed
  • Agent skill for memory-coordinator - invoke with $agent-memory-coordinator

    74k GitHub starsUsed in 2 repos~1.2k tokens
    Agent WorkflowsAuto-check passed
  • Agent skill for mesh-coordinator - invoke with $agent-mesh-coordinator

    74k GitHub starsUsed in 2 repos~3.2k tokens
    Agent WorkflowsAuto-check passed
  • Agent skill for queen-coordinator - invoke with $agent-queen-coordinator

    74k GitHub starsUsed in 2 repos~1.3k tokens
    Auto-check passed

More from autonomous-ai/Physical-AI-Operating-System

All 28 skills in this repo
  • Agent Management

    autonomous-ai/Physical-AI-Operating-System

    Legacy Autonomous Buddy control for explicitly requested Buddy coding sessions.

    381 GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Claude Code Buddy

    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.

    381 GitHub stars~2.4k tokensUpdated today
    Auto-check: notes
  • Computer Use

    autonomous-ai/Physical-AI-Operating-System

    Operate apps/websites on the paired Mac via Buddy: Calendar, Notes, forms, screenshots, files.

    381 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Connectors

    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).

    381 GitHub stars~10k tokensUpdated today
    Auto-check: notes
  • Harness Use

    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.

    381 GitHub stars~8k tokensUpdated today
    Auto-check passed
  • Audio

    autonomous-ai/Physical-AI-Operating-System

    Low-level speaker and microphone hardware control — adjust volume, play test tones, record raw audio.

    381 GitHub stars~1k tokensUpdated today
    Auto-check passed

Questions about Emotion

What does Emotion do?

Express emotion through coordinated servo + LED + display eyes on EVERY conversational response. Emotion is an agent skill from autonomous-ai/Physical-AI-Operating-System. Express emotion through coordinated servo + LED + display eyes on EVERY conversational response.

When should I use Emotion?

Emotion fits situations like: ambiance lighting (use Scene); custom LED colors (use LED Control).

How do I install Emotion in Claude Code?

Run `npx skills add autonomous-ai/Physical-AI-Operating-System --skill emotion -a claude-code`. Or copy the skill folder (skills/emotion in autonomous-ai/Physical-AI-Operating-System) into .claude/skills/emotion in your project. Claude Code loads it when a task matches its description.

How do I install Emotion in Codex?

Run `npx skills add autonomous-ai/Physical-AI-Operating-System --skill emotion -a codex`. Or copy the skill folder (skills/emotion in autonomous-ai/Physical-AI-Operating-System) into .agents/skills/emotion in your project. Codex loads it when a task matches its description.

Can I use Emotion in Cursor, Gemini CLI or GitHub Copilot?

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 emotion -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/emotion, .gemini/skills/emotion, .github/skills/emotion and .opencode/skills/emotion in your project.

What does Emotion need to run?

Going by SKILL.md and its folder, Emotion needs the command-line tools its instructions call (curl).

Does Emotion access the network?

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.

Is Emotion safe to install?

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.

What licence does Emotion use?

Emotion 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.

How many tokens does Emotion use?

About 2k tokens (SKILL.md is roughly 8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Emotion?

Skills that share tags, products or a category with Emotion: Agent Adaptive Coordinator (ruvnet/ruflo, 74k stars), Agent Consensus Coordinator (ruvnet/ruflo, 74k stars), Agent Hierarchical Coordinator (ruvnet/ruflo, 74k stars) and Agent Memory Coordinator (ruvnet/ruflo, 74k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Emotion?

autonomous-ai (a GitHub organization) maintains it in autonomous-ai/Physical-AI-Operating-System, which has 381 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 9, 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.