agentleFS
autonomous-aiautonomous-ai/autonomous-os/skills/emotion/SKILL.md

emotion

Skill494 starsChanged 7 months agoApache-2.0View on GitHub

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

We split this skill into the rules it gives an agent

13 rules. About 0 are common, 4 are distinctive, and 9 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Write your reply immediately after the marker

    line 15
  2. Distinctive:

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

    line 19
  3. Distinctive:

    If the API returns an error or is unreachable, continue with the conversational reply anyway.

    line 96
  4. Distinctive:

    If an unknown emotion name is sent, fall back to the closest match from the available emotions table.

    line 97
  5. Very specific:

    Use listening when the user is speaking and you are waiting for them to finish.

    line 101
  6. Very specific:

    Use thinking when you need time to process a complex query.

    line 102
  7. Very specific:

    Use acknowledge for quick confirmations ("OK", "got it", "done").

    line 103
  8. Very specific:

    Use greeting when a new person is detected or at the start of a conversation.

    line 104
  9. Very specific:

    Use goodbye when a person leaves or at the end of a conversation.

    line 105
  10. Very specific:

    Use sleepy before transitioning to sleep/night mode.

    line 106
  11. Very specific:

    Use stretching after waking up or starting a new session.

    line 107
  12. Very specific:

    Do NOT call idle explicitly — the device returns to idle automatically after any animation finishes.

    line 108
  13. Very specific:

    Do NOT call /servo/play or /led/solid separately: when using emotion — it already handles both.

    line 113

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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.

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!

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.