Push Claude Code activity to the user's device (e.g. An agent skill from autonomous-ai/Physical-AI-Operating-System.

Apache-2.0Auto-check: notesWriting & Content

Install Claude Code Buddy

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

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

GitHub CLI
$ gh skill install autonomous-ai/Physical-AI-Operating-System claude-code-buddy --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/integrations/companions/claude-desktop-buddy/claude-code-buddy .claude/skills/claude-code-buddy && 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
claude-code-buddy
GitHub stars
381
Token cost
~2.4k tokens
SKILL.md length
977 words
Files
13 (incl. scripts)
Skills in repo
28
Repo updated
First seen
Licence
Apache-2.0

At a glance

Push Claude Code activity to the user's device (e.g. An agent skill from autonomous-ai/Physical-AI-Operating-System.

  • Works in 6 steps: Discover / Connect → Notify → Usage → …
  • Writing & Content work in your project
  • SKILL.md covers Config, 1. Discover / Connect, 2. Notify and 3. Usage, plus 4 more sections
  • Runs Python scripts from its folder; calls python3 and claude; reaches api.anthropic.com

What it does

Claude Code Buddy is an agent skill from autonomous-ai/Physical-AI-Operating-System. Push Claude Code activity to the user's device (e.g. a lamp) over the LAN. The plugin POSTs semantic events to a companion daemon on the device (HTTP, port 5002); the device turns them into its own feedback (LED / round display / voice). Supports connecting a device, pushing usage, sending notifications, and tuning how/when the user is alerted. Triggers: "connect my device", "push my usage to my device", "notify my device", "send to my device", "mute my device", "warn me earlier", "set warning threshold to N"…

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 16 other files, including scripts (for example `.claude-plugin/marketplace.json`, `GUIDE.md` and `README.md`).

It sits in Writing & Content. The repository describes itself as: The open-source operating system for physical AI. The licence is Apache-2.0.

When your agent uses it

  • Writing & Content work in your project

Example prompts

  • “connect my device”
  • “push my usage to my device”
  • “notify my device”
  • “/claude-code-buddy”

Requirements

  • Python 3
  • Pre-approved tools (allowed-tools): Bash(*)

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Discover / Connect
  2. Notify
  3. Usage
  4. Task Done + "Claude needs you" (automatic)
  5. Tuning (plain-language config edits)
  6. HTTP responses

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash(*)

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 5 files in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python3
    • claude

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.anthropic.com

    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

Claude Code Buddy loads about 2.4k tokens when it runs. Until then it costs about 142 tokens; SKILL.md has 977 words of instructions outside code blocks.

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

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash(*)

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); the scripts in this folder are not scanned.

SKILL.md

The full file from autonomous-ai/Physical-AI-Operating-System at commit 92b6219, republished under its Apache-2.0 licence (© autonomous-ai). 977 words, ~2,354 tokens.

Download SKILL.mdSave it as .claude/skills/claude-code-buddy/SKILL.md (or your agent's skills folder). This skill also uses 12 other files; get the full folder from GitHub.
name
claude-code-buddy
description
Push Claude Code activity to the user's device (e.g. a lamp) over the LAN. The plugin POSTs semantic events to a companion daemon on the device (HTTP, port 5002); the device turns them into its own feedback (LED / round display / voice). Supports connecting a device, pushing usage, sending notifications, and tuning how/when the user is alerted. Triggers: "connect my device", "push my usage to my device", "notify my device", "send to my device", "mute my device", "warn me earlier", "set warning threshold to N", "stop the task done notification".
allowed-tools
Bash(*)

Claude Code Buddy Skill

Connect to a device on the local network and push Claude Code events to it. After connecting, the Stop and Notification hooks fire automatically — this skill covers the on-demand actions (connect, notify, usage) and the plain-language config tuning.

The plugin only speaks the HTTP contract below. The device decides the actual LED / display / voice feedback; the plugin never draws anything itself.

Config

Path: ~/.config/claude-code-buddy.json (file permission 0600).

json
{
  "devices": [
    { "label": "My Device", "host": "lamp-a1b2.local", "last_known_ip": "192.168.1.50", "password": "the-web-admin-password" }
  ],
  "default_host": "lamp-a1b2.local",
  "usage_threshold": 80,
  "sounds_enabled": true,
  "task_done_enabled": true,
  "notify_enabled": true
}
  • host is the device's mDNS hostname (like lamp-a1b2.local); last_known_ip is the cached address used to avoid re-resolving every time.
  • password is the device's admin password — the same one used to log into the device's web UI. The daemon gates its LAN endpoints (notify / usage / approval) with it, sent as an Authorization: Bearer header; without it those calls return HTTP 401. Discovery (/health) stays open, so the device is still findable before a password is set. Stored only in this 0600 file.
  • Shared helpers live in scripts/buddy_client.py (config load/save, discovery, send(), usage fetch). Prefer them over re-implementing.

1. Discover / Connect

Find the device on the LAN and save it to config.

When to use: "connect my device", "set up my device", or when a POST fails with a connection error/timeout (the cached IP is stale).

Run discovery
bash
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/discover.py

How it works (automatic): cache check (cached IP → /health) → mDNS browse for _autonomous._tcp → /24 subnet /health sweep. Returns the found device(s) as JSON, e.g.:

json
[{ "host": "lamp-a1b2.local", "ip": "192.168.1.50" }]

On success: ask the user for the device's admin password (the same one they use to log into the device's web UI) — the daemon requires it to accept activity/approval pushes. Then write the device into devices[] (append new, update existing by host) including the password field, set default_host if it's the first device, and write the file with permission 0600.

If a later push returns HTTP 401, the stored password is missing or wrong (or was changed in the web UI) — ask the user for the current admin password and update the device entry.

On failure: exits non-zero with {"error": "not_found"} on stderr. Suggest: device powered on? Same WiFi as the computer?


2. Notify

POST a notification to the device. Most common on-demand action.

When to use: "notify my device", "send to my device", "ping my device when done". Also reasonable proactively at the end of a long task.

2.1 Pick the target

Use default_host (and its last_known_ip) from config. If no config or no devices → tell the user to connect a device first (section 1).

2.2 Build the payload
json
{
  "title": "Build passed",
  "subtitle": "3m 12s, 0 failures",
  "level": "done",
  "sound": true
}
  • title (string, required) — short headline, plain text.
  • subtitle (string) — one line of detail.
  • level — "done" | "attention" | "info". Use attention when the user needs to act, done for completions, info otherwise.
  • sound (boolean) — whether the event carries a sound cue. The device picks the actual cue; do not send sound indices. Respect sounds_enabled from config.
2.3 Send (urllib, stdlib only)
python
import json, urllib.request

payload = json.dumps({
    "title": "Build passed",
    "subtitle": "3m 12s",
    "level": "done",
    "sound": True,
}).encode()

req = urllib.request.Request(
    "http://<ip>:5002/claude-code/notify",
    data=payload,
    headers={"Content-Type": "application/json"},
    method="POST",
)
with urllib.request.urlopen(req, timeout=3) as resp:
    print(resp.status)          # expect 200, body {"ok": true}

Replace <ip> with the device's last_known_ip (or resolve host).


3. Usage

Fetch the user's OAuth usage and POST it to /claude-code/usage.

When to use: "push my usage to my device", "/claude-code-buddy:usage".

3.1 Fetch usage

Read the OAuth token (~/.claude/.credentials.json, or the macOS keychain item Claude Code-credentials; the token starts with sk-ant-oat), then:

python
import json, urllib.request

req = urllib.request.Request(
    "https://api.anthropic.com/api/oauth/usage",
    headers={
        "Authorization": f"Bearer {token}",
        "anthropic-beta": "oauth-2025-04-20",
    },
)
with urllib.request.urlopen(req, timeout=15) as resp:
    usage = json.loads(resp.read())

from buddy_client import time_left

five_hour = int(usage["five_hour"]["utilization"])
seven_day = int(usage["seven_day"]["utilization"])
reset_5h  = time_left(usage["five_hour"]["resets_at"])   # -> "1h 56m"
reset_7d  = time_left(usage["seven_day"]["resets_at"])   # -> "1d 11h"

scripts/buddy_client.py already wraps token lookup + fetch — use it.

3.2 POST to /claude-code/usage
json
{
  "five_hour": 41,
  "seven_day": 48,
  "reset_5h": "1h 56m",
  "reset_7d": "1d 11h",
  "sound": true
}

reset_5h / reset_7d are display-ready strings (humanize the resets_at ISO timestamp with buddy_client.time_left()), not raw ISO — the device shows them as-is.

POST to http://<ip>:5002/claude-code/usage exactly like section 2.3 (expect 200, {"ok": true}). The usage API rate-limits hard — do not poll faster than once per minute.


Show full SKILL.md (399 more words)Show less

4. Task Done + "Claude needs you" (automatic)

These run via Claude Code hooks; no skill action needed.

  • Stop hook (scripts/on-stop-done.py) — fires after each response. POSTs /claude-code/notify with level: "done". If 5-hour or 7-day usage is >= usage_threshold, it also POSTs /claude-code/usage. Skipped when task_done_enabled is false.
  • Notification hook (scripts/on-notify.py) — fires when Claude needs approval or input has gone idle. POSTs /claude-code/notify with level: "attention". Skipped when notify_enabled is false.

Both honor sounds_enabled for the sound field and fail silently if no device is connected.


5. Tuning (plain-language config edits)

Let the user retune behavior in plain language — read config, change only the relevant key(s), preserve everything else, write back with permission 0600, then confirm in plain language. If the config is missing → tell them to connect a device first.

5.1 Threshold

When to use: "warn me earlier", "set warning threshold to 60", "only warn me near the limit", "I want pushes at 90%".

  • Explicit number → use it. "earlier"/"sooner" → lower (e.g. 60). "only near the limit" → raise (e.g. 90). If unclear, ask for a number.
  • Validate integer 0–100, then set usage_threshold.
5.2 The three toggle flags

All default true and live at the top level of the config.

KeyControls
sounds_enabledWhether events carry a sound cue. false = silent feedback.
task_done_enabledThe Task Done push after each response.
notify_enabledThe "Claude needs you" ping (approval / idle).

Mapping requests:

  • "mute my device" / "turn off the sounds" → sounds_enabled = false
  • "unmute" / "sounds back on" → sounds_enabled = true
  • "stop the task done notification" → task_done_enabled = false
  • "stop pinging me when Claude needs me" → notify_enabled = false
  • "turn all notifications off" → task_done_enabled = false and notify_enabled = false
  • "turn everything back on" → all three true

The hooks read these flags on every run, so changes take effect immediately — no restart.


6. HTTP responses

StatusMeaning / Action
200Success, body {"ok": true}. Update last_known_ip in config if it changed.
400Bad JSON / malformed payload. Fix the payload and retry.
Connection error / timeoutCached IP is stale or device offline. Re-run discovery (section 1) and retry once.

Important

  • Python 3 stdlib only — no pip, no extra dependencies.
  • Keep sound a boolean; the device decides the actual cue.
  • Never print or log the OAuth token.
  • Config file permission must be 0600.
  • Device-side /claude-code/notify and /claude-code/usage receivers exist and log the payload, but may not yet render device feedback on every device (the HAL bridge is the remaining work); /health and /status exist for liveness/discovery.

© 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 12 other files (scripts) in integrations/companions/claude-desktop-buddy/claude-code-buddy of autonomous-ai/Physical-AI-Operating-System.

  • SKILL.md
  • .claude-plugin/marketplace.json
  • GUIDE.md
  • README.md
  • commands/notify.md
  • commands/usage.md
  • hooks/hooks.json
  • plugin.json
  • scripts/buddy_client.py
  • scripts/discover.py
  • scripts/on-notify.py
  • scripts/on-permission-request.py
  • scripts/on-stop-done.py

Open the folder on GitHubat commit 92b6219

Compare with similar skills

Claude Code Buddy 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.

Claude Code Buddy compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Claude Code Buddy this skillautonomous-ai/Physical-AI-Operating-System381—~2.4kAutomated safety check: NotesApache-2.0
HumanizerAzure-Samples/interview-coach-agent-framework17237 repos~5.8kAutomated safety check: PassMIT
Avoid AI Writingconorbronsdon/avoid-ai-writing4.9k3 repos~8.1kAutomated safety check: PassMIT
JavaScript Concept Fact Checkerleonardomso/33-js-concepts67k1 repos~5kAutomated safety check: PassMIT
User-Facing Text Cleanupguillaumemeyer/watermarks-remover23k—~3.5kAutomated safety check: PassMIT
Install Anti Sloptrycompai/crm11k1 repos~881Automated safety check: PassMIT

Similar skills

  • Humanizer

    Azure-Samples/interview-coach-agent-framework

    Official

    Remove signs of AI-generated writing from text. An agent skill from Azure-Samples/interview-coach-agent-framework.

    172 GitHub starsUsed in 37 repos~5.8k tokens
    Writing & ContentAuto-check passed
  • Avoid AI Writing

    conorbronsdon/avoid-ai-writing

    Audit and rewrite content to remove AI writing patterns ("AI-isms").

    4.9k GitHub starsUsed in 3 repos~8.1k tokens
    Writing & ContentAuto-check passed
  • JavaScript Concept Fact Checker

    leonardomso/33-js-concepts

    Verifies the technical accuracy of JavaScript concept pages by checking code examples, MDN and ECMAScript claims and external links through a five-phase method.

    67k GitHub starsUsed in 1 repo~5k tokens
    Writing & ContentAuto-check passed
  • User-Facing Text Cleanup

    guillaumemeyer/watermarks-remover

    Audits prose for invisible Unicode characters and rewrites it while keeping facts, citations, code and required disclosures unchanged and the writer's voice intact.

    23k GitHub stars~3.5k tokensUpdated 2 days ago
    Writing & ContentAuto-check passed
  • Install Anti Slop

    trycompai/crm

    Install and configure the anti-slop Oxlint plugin in a local TypeScript or JavaScript repository.

    11k GitHub starsUsed in 1 repo~881 tokens
    Writing & ContentAuto-check passed
  • Social Content

    freekmurze/dotfiles

    When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram, TikTok, Facebook, or other platforms.

    1k GitHub starsUsed in 22 repos~2.1k tokens
    Writing & ContentAuto-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
  • 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
  • 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
  • Camera

    autonomous-ai/Physical-AI-Operating-System

    Camera control — snapshot, stream, and privacy toggle. An agent skill from autonomous-ai/Physical-AI-Operating-System.

    381 GitHub stars~3k tokensUpdated today
    Auto-check passed
  • Display

    autonomous-ai/Physical-AI-Operating-System

    A skill your agent uses when the user asks to change eye expression directly, show info text on the display (time, weather, timer), or manually control the round LCD — NOT needed for normal…

    381 GitHub stars~868 tokensUpdated today
    Auto-check passed

Questions about Claude Code Buddy

What does Claude Code Buddy do?

Push Claude Code activity to the user's device (e.g. An agent skill from autonomous-ai/Physical-AI-Operating-System. Claude Code Buddy is an agent skill from autonomous-ai/Physical-AI-Operating-System.g.

When should I use Claude Code Buddy?

Claude Code Buddy fits situations like: writing & Content work in your project.

How do I install Claude Code Buddy in Claude Code?

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

How do I install Claude Code Buddy in Codex?

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

Can I use Claude Code Buddy 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 claude-code-buddy -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/claude-code-buddy, .gemini/skills/claude-code-buddy, .github/skills/claude-code-buddy and .opencode/skills/claude-code-buddy in your project.

What does Claude Code Buddy need to run?

Going by SKILL.md and its folder, Claude Code Buddy needs Python for the scripts in its folder and the command-line tools its instructions call (python3 and claude). Our summary lists: Python 3. Its frontmatter pre-approves these tools: Bash(*).

Does Claude Code Buddy access the network?

SKILL.md names 1 domain. In commands or code: api.anthropic.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Claude Code Buddy safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Claude Code Buddy use?

Claude Code Buddy 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 Claude Code Buddy use?

About 2.4k tokens (SKILL.md is roughly 9.4k 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 Claude Code Buddy?

Skills that share tags, products or a category with Claude Code Buddy: Humanizer (Azure-Samples/interview-coach-agent-framework, 172 stars), Avoid AI Writing (conorbronsdon/avoid-ai-writing, 4.9k stars), JavaScript Concept Fact Checker (leonardomso/33-js-concepts, 67k stars) and User-Facing Text Cleanup (guillaumemeyer/watermarks-remover, 23k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Claude Code Buddy?

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