Hardware Assessment
When to Use This Skill
USE when:
- Inventorying machines for consolidation or repurposing decisions
- Comparing hardware specs across multiple devices
- Planning GPU, RAM, or storage upgrades
- Auditing SMART health status across storage devices
- Keeping machines updated (OS packages, tools, custom software)
- Tracking what changed after updates via changelogs
- Documenting system configurations for compliance or handoff
DON'T USE when:
- You need real-time monitoring (use Prometheus/Grafana instead)
- You need benchmark/performance data (this collects specs, not performance)
Quick Start
Linux
# Copy script to target machine, then:
bash hardware-assess.sh -p
# With sudo for SMART data + RAM type:
sudo bash hardware-assess.sh -p
# Custom output path:
bash hardware-assess.sh -o /tmp/inventory.json --pretty
Windows (PowerShell)
# Run in PowerShell:
.\hardware-assess.ps1 -Pretty
# Custom output:
.\hardware-assess.ps1 -OutputFile C:\temp\inventory.json -Pretty
Full Maintenance (assess + update + re-assess)
# Linux — runs all 4 phases, outputs to maintenance/ directory:
sudo bash system-maintain.sh -d ./maintenance
# With custom software config:
sudo bash system-maintain.sh -c ./custom-packages.json -d ./maintenance
# Assessment only (no updates):
bash system-maintain.sh --skip-update -d ./maintenance
See sub-skills for full details.
Update Only (no assessment)
# Linux:
sudo bash system-update.sh -c ./custom-packages.json
# Windows:
.\system-update.ps1 -ConfigFile .\custom-packages.json
Workstation Input Troubleshooting
X11: typing is uppercase even though Caps Lock looks off
Observed on ace-linux-1 with a Logitech K350 receiver attached: a plain text
editor typed uppercase, Caps Lock initially appeared off, and unplugging the
keyboard left X11 with Caps Lock: on but no physical key held. Treat this as
an XKB latched modifier before assuming an application bug.
Verify state:
xset q | sed -n '/Keyboard Control:/,/Pointer Control:/p'
If Caps Lock: on, clear the XKB lock directly:
python3 - <<'PY'
import ctypes, ctypes.util
lib = ctypes.cdll.LoadLibrary(ctypes.util.find_library("X11"))
d = lib.XOpenDisplay(None)
if not d:
raise SystemExit("NO_DISPLAY")
XkbUseCoreKbd = 0x0100
LockMask = 1 << 1
lib.XkbLockModifiers(d, XkbUseCoreKbd, LockMask, 0)
lib.XFlush(d)
lib.XCloseDisplay(d)
PY
Verify it cleared:
xset q | sed -n '/XKB indicators:/,/auto repeat delay:/p'
If it comes back after reconnecting the keyboard, suspect the keyboard or USB receiver is sending a Caps Lock toggle. Tap both Shift keys, then Caps Lock; if state still recurs, re-seat or replace the receiver/keyboard before chasing editor or accessibility settings. Sticky keys can be checked with:
gsettings get org.gnome.desktop.a11y.keyboard stickykeys-enable
Custom Software Config (JSON)
{
"packages": {
"apt": ["openfoam", "freecad", "paraview", "smartmontools"],
"snap": ["code"],
"pip": ["numpy", "polars"]
},
"ppas": ["ppa:openfoam/latest"],
"scripts": [
{ "name": "custom-tool", "check": "custom-tool --version", "install": "./install-custom-tool.sh" }
]
}
Keep custom installer scripts checked in or otherwise provenance-verified. Do not pipe downloaded installer content directly into a shell in this config.
Version History
- 1.1.0 (2026-02-02): Add system-update and system-maintain orchestrator scripts for OS/tools/custom software updates with changelog tracking
- 1.0.0 (2026-02-02): Initial release — Linux Bash + Windows PowerShell scripts with unified JSON schema
Sub-Skills
- Troubleshooting
Sub-Skills
- Scripts
- Linux (
hardware-assess.sh) (+1) - Output Schema (v1.0)
- Linux (+1)
- Workflow: Multi-Machine Inventory