git clone https://github.com/plurigrid/asi
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/asi/skills/scum-score" ~/.claude/skills/plurigrid-asi-scum-score && rm -rf "$T"
plugins/asi/skills/scum-score/SKILL.mdSCUM 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
orrenicecpulimit - 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
: 734 citations in bib.duckdbgeneral
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.