| name | scum-score |
| description | SCUM Score Skill |
| version | 1.0.0 |
SCUM Score Skill
System Consumer Utilization Metrics - Identify and terminate resource-hogging processes
Overview
SCUM Score quantifies process resource consumption using GF(3) triadic classification:
| Trit | Category | CPU Range | Memory Range | Action |
|---|---|---|---|---|
| +1 | SCUM | >30% CPU or >5% MEM | High | Kill candidate |
| 0 | Normal | 1-30% CPU | 0.5-5% MEM | Monitor |
| -1 | Idle | <1% CPU | <0.5% MEM | Ignore |
SCUM Score Formula
SCUM(p) = 0.6 * (cpu% / 100) + 0.3 * (mem% / 100) + 0.1 * (runtime_hrs / 24)
Threshold: SCUM(p) > 0.35 = SCUM process
Quick Commands
View Current SCUM
# Top 10 SCUM processes with scores
ps axo pid,comm,%cpu,%mem,time | awk 'NR>1 {
scum = 0.6*($3/100) + 0.3*($4/100);
if (scum > 0.1) printf "%.3f SCUM %5d %s\n", scum, $1, $2
}' | sort -rn | head -10
Kill SCUM (Interactive)
# Identify and offer to kill
ps axo pid,comm,%cpu,%mem | awk 'NR>1 && $3>30 {print $1, $2, $3"%"}' | while read pid name cpu; do
echo "Kill $name (PID $pid) using $cpu CPU? [y/N]"
read ans
[[ "$ans" == "y" ]] && kill -9 $pid && echo "Killed $name"
done
Babashka SCUM Analysis
#!/usr/bin/env bb
(require '[babashka.process :refer [shell]])
(require '[clojure.string :as str])
(defn parse-ps []
(->> (shell {:out :string} "ps axo pid,comm,%cpu,%mem")
:out
str/split-lines
rest
(map #(str/split % #"\s+"))
(map (fn [[_ pid comm cpu mem]]
{:pid (parse-long pid)
:comm comm
:cpu (parse-double cpu)
:mem (parse-double mem)
:scum (+ (* 0.6 (/ (parse-double cpu) 100))
(* 0.3 (/ (parse-double mem) 100)))}))
(filter #(> (:scum %) 0.1))
(sort-by :scum >)))
(doseq [p (take 10 (parse-ps))]
(printf "%.3f SCUM [%d] %s (%.1f%% CPU, %.1f%% MEM)\n"
(:scum p) (:pid p) (:comm p) (:cpu p) (:mem p)))
GF(3) Process Classification
Process Trit Assignment:
trit(p) = sign(SCUM(p) - 0.15) where:
SCUM > 0.35 → +1 (SCUM - kill candidate)
0.15 < SCUM ≤ 0.35 → 0 (NORMAL - monitor)
SCUM ≤ 0.15 → -1 (IDLE - ignore)
Conservation: Σ trit(processes) should approach 0 for healthy system
Integration with Resource Sharing
SCUM processes are candidates for:
- Throttling via
reniceorcpulimit - Migration to other machines via LocalSend/Tailscale
- Termination if unresponsive
Sophie Lipkid Resource Sharing Protocol
Named after the "all category resource sharing machines" principle:
ResourceShare(p, target) = {
if SCUM(p) > 0.35:
migrate(p, least_loaded_peer())
elif SCUM(p) > 0.2:
throttle(p, 50%)
else:
allow(p)
}
Justfile Recipes
# View SCUM scores
scum-view:
ps axo pid,comm,%cpu,%mem | awk 'NR>1 {s=0.6*($3/100)+0.3*($4/100); if(s>0.1) printf "%.3f %s\n",s,$2}' | sort -rn | head -15
# Kill all SCUM (DANGEROUS)
scum-kill:
ps axo pid,%cpu | awk 'NR>1 && $2>50 {print $1}' | xargs -r kill -9
# Throttle high CPU
scum-throttle:
ps axo pid,%cpu | awk 'NR>1 && $2>30 && $2<50 {print $1}' | xargs -I{} renice +10 {}
Skill Name: scum-score
Trit: -1 (MINUS - Validator/Constrainer)
GF(3) Role: Identifies and constrains resource hogs
Integration: resource-sharing, localsend-mcp, tailscale-mesh
Scientific Skill Interleaving
This skill connects to the K-Dense-AI/claude-scientific-skills ecosystem:
Graph Theory
- networkx [○] via bicomodule
- Universal graph hub
Bibliography References
general: 734 citations in bib.duckdb
Cat# Integration
This skill maps to Cat# = Comod(P) as a bicomodule in the equipment structure:
Trit: 0 (ERGODIC)
Home: Prof
Poly Op: ⊗
Kan Role: Adj
Color: #26D826
GF(3) Naturality
The skill participates in triads satisfying:
(-1) + (0) + (+1) ≡ 0 (mod 3)
This ensures compositional coherence in the Cat# equipment structure.