agentleFS
yologdevyologdev/yoyo-evolve/skills/inspect-machine/SKILL.md

inspect-machine

Skill1.9k starsChanged 8 months agoMITView on GitHub

Before planning work that depends on hardware (GPU, camera, mic, USB, RAM, cores), list what this machine has — read-only, nothing identifying, and ask before using any device

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 4 are distinctive, and 1 is 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.

  • 1

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Don't use it for ordinary coding work.

    line 18
  2. Very specific:

    Start with uname -s. Each command may be missing: skip what fails, and don't install anything to fill a gap.

    line 29
  3. Distinctive:

    Run the commands for this OS (one batch).

    line 96
  4. Distinctive:

    Before a step that uses a device, ask (Rule 2).

    line 103
  5. Distinctive:

    No device was opened, and nothing about the machine was written to the repository.

    line 118

≈ “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

Inspect the machine

When to use

  • You are about to plan or test something whose feasibility depends on hardware: a local model or GPU work, vision or audio features, a USB or serial device, heavy parallel builds.
  • A task says "on this machine", "use the camera / mic / GPU", or a test fails in a way that smells like missing hardware.
  • Once per session at most. Re-run only if the user plugs something in or asks.

Don't use it for ordinary coding work. Most tasks don't care what the machine is.

Rules

  1. List, never use. These commands only read the system's device lists. Never open a camera or microphone, capture anything, write to a device, or start a Bluetooth scan.
  2. Ask before using a device. Knowing a camera exists is not permission to use it. Ask the user (ask_user) before any step that opens a device, and say what for. The operating system may ask too. When there is no one to ask (CI, piped or -p mode, any run where ask_user is unavailable or unanswered), never use a device: report what you found and stop there.
  3. Nothing identifying in what you keep. Drop serial numbers, MAC and Bluetooth addresses, UUIDs and unique ids, device and host names (e.g. "Alex's AirPods"), and user names. Keep class, model, vendor, capability and counts.
  4. Don't commit it. The profile describes one machine at one moment. Keep it in this session's context. Never write it to memory/, the journal, an issue or a commit.

Quick reference

Start with uname -s. Each command may be missing: skip what fails, and don't install anything to fill a gap.

macOS and Linux: cores, disk (Windows gets these from its own block)

getconf _NPROCESSORS_ONLN 2>/dev/null; df -h . | tail -1

macOS (system_profiler takes a few seconds; one call for all types)

sysctl -n machdep.cpu.brand_string hw.memsize hw.ncpu
hw=$(mktemp)   # private temp file; removed after the strip step below
system_profiler -json SPDisplaysDataType SPCameraDataType SPAudioDataType SPUSBDataType 2>/dev/null > "$hw"

Apple silicon has a Neural Engine: the chip model in machdep.cpu.brand_string (e.g. "Apple M3") tells you. Its GPU shares system memory, so there is no separate VRAM figure: say "unified, N GB" rather than "unknown".

Linux (x86 and ARM)

grep -m1 'model name' /proc/cpuinfo || { tr -d '\0' < /proc/device-tree/model; echo; } 2>/dev/null   # ARM boards (Raspberry Pi, Jetson) name themselves here
grep MemTotal /proc/meminfo
lspci 2>/dev/null | grep -Ei 'vga|3d|display'      # GPUs, any vendor (name only)
nvidia-smi --query-gpu=name,memory.total --format=csv,noheader 2>/dev/null   # NVIDIA: memory
rocm-smi --showproductname --showmeminfo vram 2>/dev/null                    # AMD: memory
ls /dev/accel/ 2>/dev/null                           # NPUs (Intel, AMD; Linux 6.x accel driver)
ls /dev/video* 2>/dev/null                           # cameras
cat /proc/asound/cards 2>/dev/null                   # sound devices
lsusb 2>/dev/null | sed -E "s/[[:alnum:]]+[’']s /(personal) /g"   # USB (vendor:product and names)
ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null             # serial boards

Windows (the bash tool needs Git Bash or WSL here; it hands the script to PowerShell on stdin, so nothing needs escaping)

powershell.exe -NoProfile -Command - <<'PS'
$cs = Get-CimInstance Win32_ComputerSystem
$cpu = Get-CimInstance Win32_Processor | Select-Object -First 1
"CPU: $($cpu.Name) ($($cs.NumberOfLogicalProcessors) logical cores)"
"RAM: {0:N0} GB" -f ($cs.TotalPhysicalMemory / 1GB)
Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'" | ForEach-Object { "C: free {0:N0} GB" -f ($_.FreeSpace / 1GB) }
Get-CimInstance Win32_VideoController | Select-Object Name, AdapterRAM
Get-PnpDevice -PresentOnly -Class Camera,AudioEndpoint,USB,ComputeAccelerator | Select-Object Class, @{n='FriendlyName'; e={$_.FriendlyName -replace "\w+['’]s ", '(personal) '}}
PS
nvidia-smi --query-gpu=name,memory.total --format=csv,noheader 2>/dev/null   # NVIDIA: real memory

AdapterRAM is a 32-bit field and stops at 4 GB, so a 16 GB card shows about 4 GB. Trust it only below 4 GB; for NVIDIA use nvidia-smi, otherwise say "4 GB or more". ComputeAccelerator is the class NPUs register under (e.g. Intel AI Boost).

Strip identifying fields from JSON (macOS output) before reading it:

python3 - "$hw" <<'EOF'
import json, re, sys
DROP = re.compile(r"serial|uuid|unique|location_id|address|mac_?addr|host_?name", re.I)
PERSONAL = re.compile(r"[\u2019']s\b")  # "Alex's AirPods"
def clean(v, key=""):
    if isinstance(v, dict):
        return {k: clean(x, k) for k, x in v.items() if not DROP.search(k)}
    if isinstance(v, list):
        return [clean(x) for x in v]
    if key == "_name" and isinstance(v, str) and PERSONAL.search(v):
        return "(personal device name)"
    return v
out = json.dumps(clean(json.load(open(sys.argv[1]))), indent=1)
print(out[:6000] + (f"\n... [{len(out) - 6000} more characters not shown]" if len(out) > 6000 else ""))
EOF
rm -f "$hw"

_name holds each device's model ("FaceTime HD Camera"), so it is kept, unless it looks personal. USB vendor and product ids are kept too: they identify the kind of board, not the person. The lsusb and PowerShell lines above replace "Name's " in device names; neither prints serials by default. Anything else identifying in text output (a serial, an address), drop when you summarize.

Procedure

  1. Run the commands for this OS (one batch).
  2. Summarize in at most ten lines, in your context only:
    MACHINE: macOS 15 · Apple M3 (8 cores, Neural Engine) · 16 GB · 120 GB free
    GPU: Apple M3 (Metal) · Cameras: 1 built-in · Audio in: 1 · USB: 1 serial board (CH340)
  3. Decide with it: what the task can use, what it can't, and what to tell the user.
  4. Before a step that uses a device, ask (Rule 2).

Pitfalls

  • CI runners are virtual machines. In GitHub Actions you'll see no camera, no GPU and a few cores. That's the runner, not the user's machine. Never conclude "the user has no GPU" from a CI run.
  • Absence isn't proof. A missing command, a container, or a permission can hide a device. Say "not found" rather than "not present".
  • Don't overreach. A GPU doesn't mean CUDA (Apple and AMD GPUs don't have it). A camera listed doesn't mean it's free or allowed.
  • WSL sees part of the machine. A passed-through NVIDIA GPU shows in nvidia-smi, but USB devices and cameras usually don't appear. Say "inside WSL" when you report.
  • Not covered: BSDs, Android/Termux, and anything the commands above don't list. Report what you found and say the platform isn't covered, rather than guessing.
  • Keep it short. Raw system_profiler output is large. Summarize; never paste it whole into the conversation.

Verification

  • The summary names the CPU, memory, and each device class that was found (or "not found").
  • It contains no serial number, address, UUID, or personal device or host name.
  • No device was opened, and nothing about the machine was written to the repository.

Download now (ZIP)

Trending

Quiet since September.thin dataabout the whole repository

Dec 2025: 0 mentionsJan 2026: 0 mentionsFeb 2026: 0 mentionsMar 2026: 3 mentionsApr 2026: 0 mentionsMay 2026: 0 mentionsJun 2026: 2 mentionsJul 2026: 2 mentionsAug 2026: 0 mentionsSep 2026: 1 mentionOct 2026: 0 mentionsNov 2026: 0 mentions
Dec 2025Jun 2026Nov 2026
Mentions a month of the yologdev/yoyo-evolve repository that our weekly crawl found: only 8 in all, so this is a hint, not a trend. There is no adoption data for this file yet.

Who's talking about yologdev/yoyo-evolve

The biggest 5 of 8 mentions linking to the repository that our crawl found. Each line is their own headline.

See all 8

Talked about on GitHub and Hacker News (8 times).

On GitHub · 7

2 more on GitHub

On Hacker News · 1

Does it work?

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

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

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.