#+TITLE: SKILL: Diagnostics (org-skill-diagnostics.org) #+AUTHOR: Agent #+FILETAGS: :system:diagnostics:doctor: #+PROPERTY: header-args:lisp :tangle org-skill-diagnostics.lisp * Overview The *Diagnostics Skill* (Doctor) provides system-wide health checks and dependency verification. * Implementation ** Package Context #+begin_src lisp (in-package :opencortex) #+end_src ** Dependency Check (doctor-check-dependencies) #+begin_src lisp (defun doctor-check-dependencies () "Verifies that all required external binaries are available." (let ((deps '("sbcl" "emacs" "git" "curl" "nc")) (all-ok t)) (format t "DOCTOR: Checking System Dependencies...~%") (dolist (dep deps) (if (uiop:run-program (list "which" dep) :ignore-error-status t) (format t " [OK] Found ~a~%" dep) (progn (format t " [FAIL] Missing ~a~%" dep) (setf all-ok nil)))) all-ok)) #+end_src ** XDG Check (doctor-check-xdg) #+begin_src lisp (defun doctor-check-xdg () "Verifies XDG environment variables and directory structure." (format t "DOCTOR: Checking XDG environment...~%") (let ((vars '("OC_CONFIG_DIR" "OC_DATA_DIR" "OC_STATE_DIR" "MEMEX_DIR"))) (dolist (var vars) (let ((val (uiop:getenv var))) (if val (format t " [OK] ~a: ~a~%" var val) (format t " [WARN] ~a is not set.~%" var))))) t) #+end_src ** Main Diagnostic (doctor-main) #+begin_src lisp (defun doctor-main () "Runs all diagnostic checks." (format t "==================================================~%") (format t " OpenCortex System Diagnostic~%") (format t "==================================================~%") (let ((d-ok (doctor-check-dependencies)) (x-ok (doctor-check-xdg))) (format t "==================================================~%") (if (and d-ok x-ok) (format t " ✓ SYSTEM HEALTHY: Ready for ignition.~%") (format t " ✗ SYSTEM UNHEALTHY: Issues detected.~%")))) #+end_src ** Skill Registration #+begin_src lisp (defskill :skill-diagnostics :priority 100 :trigger (lambda (ctx) (eq (getf (getf ctx :payload) :sensor) :heartbeat)) :deterministic (lambda (action ctx) (declare (ignore action ctx)) nil)) #+end_src