bx-oshi — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bx-oshi (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
install-bx-module bx-oshi
# CommandBox
box install bx-oshi// CPU usage over a 1-second interval
cpuPct = getCpuUsage()
cpuPct = getCpuUsage( 2 ) // 2-second measurement interval
// Disk space (path is any directory on the target drive)
freeDisk = getFreeSpace( "/" ) // bytes
totalDisk = getTotalSpace( "/" )
// Memory
freeOsMem = getSystemFreeMemory() // OS free memory in bytes
totalOsMem = getSystemTotalMemory() // OS total memory in bytes
freeJvm = getJVMFreeMemory() // JVM heap free
totalJvm = getJVMTotalMemory() // JVM heap total
// Quick display
println( "CPU: #numberFormat( getCpuUsage() * 100, 2 )#%" )
println( "Free RAM: #int( getSystemFreeMemory() / 1024 / 1024 )# MB" )
println( "Free Disk: #int( getFreeSpace( "/" ) / 1024 / 1024 / 1024 )# GB" )// Get the main OSHI entry point
sys = getSystemInfo()
// Operating System
os = getOperatingSystem()
println( os.toString() ) // e.g. "macOS 15.4"
println( os.getManufacturer() )
println( os.getFamily() )
println( os.getVersionInfo().getVersion() )
// Running processes
processes = os.getProcesses()
println( "Running processes: #processes.size()#" )
// Specific process
myProcess = os.getProcess( os.getProcessId() ) // current process
println( "PID: #myProcess.getProcessID()#" )
println( "Memory: #myProcess.getResidentSetSize()# bytes" )hardware = getHardware()
// CPU
cpu = hardware.getProcessor()
println( "CPU: #cpu.getProcessorIdentifier().getName()#" )
println( "Physical cores: #cpu.getPhysicalProcessorCount()#" )
println( "Logical cores: #cpu.getLogicalProcessorCount()#" )
// Memory (RAM)
mem = hardware.getMemory()
println( "Total RAM: #mem.getTotal() / 1024 / 1024 / 1024# GB" )
println( "Available: #mem.getAvailable() / 1024 / 1024 / 1024# GB" )
// Disks
disks = hardware.getDiskStores()
for ( disk in disks ) {
println( "#disk.getName()#: #disk.getModel()# (#disk.getSize() / 1073741824# GB)" )
}
// Network interfaces
networks = hardware.getNetworkIFs()
for ( net in networks ) {
println( "Interface: #net.getName()# - #net.getIPv4addr().toString()#" )
}
// Battery
batteries = hardware.getPowerSources()
for ( battery in batteries ) {
println( "Battery: #numberFormat( battery.getRemainingCapacityPercent() * 100, 1 )#%" )
println( "Time remaining: #battery.getTimeRemainingEstimated()# seconds" )
}
// Sensors (temperature, fan speeds)
sensors = hardware.getSensors()
println( "CPU Temp: #sensors.getCpuTemperature()#°C" )
println( "Fan speeds: #sensors.getFanSpeeds().toString()#" )function getSystemHealthReport() {
return {
cpuUsage : getCpuUsage() * 100,
freeMemGB : getSystemFreeMemory() / 1073741824,
totalMemGB : getSystemTotalMemory() / 1073741824,
freeDiskGB : getFreeSpace( "/" ) / 1073741824,
totalDiskGB : getTotalSpace( "/" ) / 1073741824,
jvmFreeGB : getJVMFreeMemory() / 1073741824
}
}getCpuUsage() takes a measurement over an interval — the result is a 0.0–1.0 decimal (multiply by 100 for percentage)getFreeSpace()/getTotalSpace() should be valid paths on the target disk~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.