Files
passepartout/skills/org-skill-self-fix.org
Amr Gharbeia 2e8e79a193
Some checks failed
Deploy-Agent-V15-Stdin / JOB-V15-STDIN (push) Failing after 2s
fix(v0.2.0): finalize structural integrity and clean boot
- Fixed memory.org source blocks to ensure persistence functions are tangled.
- Improved extract-tangle-target to handle complex Elisp expressions.
- Corrected opencortex.sh initialization paths to prevent setup loops.
- Reordered variable definitions in policy and standards skills to eliminate forward-reference warnings.
2026-04-27 18:54:18 -04:00

4.2 KiB

SKILL: Self-Fix Agent

Overview

The Self-Fix Agent is the system's "Repair Mechanism." It takes failure hypotheses, applies surgical code modifications, and verifies them using the Memory's rollback capabilities.

This skill enables self-editing by applying surgical fixes to files (including skills) with automatic rollback on failure.

Phase D: Build (Implementation)

Repair Logic

(in-package :opencortex)
(defun self-fix-apply (action context)
  "Applies a surgical code fix and reloads the modified skill."
  (declare (ignore context))
  (let* ((payload (getf action :payload))
         (target-file (getf payload :file))
         (old-code (getf payload :old))
         (new-code (getf payload :new))
         (is-skill (and (stringp (namestring target-file))
                        (search "skills/" (namestring target-file)))))
    
    (opencortex:snapshot-memory)
    (opencortex:harness-log "SELF-FIX - Attempting surgical fix on ~a..." target-file)
    
    (handler-case
        (if (uiop:file-exists-p target-file)
            (let ((content (uiop:read-file-string target-file)))
              (if (search old-code content)
                  (let ((new-content (cl-ppcre:regex-replace-all (cl-ppcre:quote-meta-chars old-code) content new-code)))
                    (with-open-file (out target-file :direction :output :if-exists :supersede)
                      (write-string new-content out))
                    
                    (if is-skill
                        (progn
                          (opencortex:harness-log "SELF-FIX - Reloading modified skill ~a..." target-file)
                          (if (opencortex:load-skill-from-org target-file)
                              (progn
                                (opencortex:harness-log "SELF-FIX SUCCESS - Applied and reloaded.")
                                t)
                              (progn
                                (opencortex:harness-log "SELF-FIX FAILURE - Skill reload failed. Rolling back.")
                                (with-open-file (out target-file :direction :output :if-exists :supersede)
                                  (write-string content out))
                                (opencortex:rollback-memory 0)
                                nil)))
                        (progn
                          (opencortex:harness-log "SELF-FIX SUCCESS - Applied fix to file.")
                          t)))
                  (progn (opencortex:harness-log "SELF-FIX FAILURE - Pattern not found.") nil)))
            (progn (opencortex:harness-log "SELF-FIX FAILURE - File not found.") nil))
      (error (c)
        (opencortex:harness-log "SELF-FIX CRASH - ~a. Rolling back." c)
        (opencortex:rollback-memory 0)
        nil))))

Cognitive Tool

(def-cognitive-tool :repair-file 
  "Applies a surgical code modification to a file and reloads the skill if applicable."
  ((:file :type :string :description "Path to the target file")
   (:old :type :string :description "The literal code block to find")
   (:new :type :string :description "The literal code block to replace it with"))
  :body (lambda (args)
          (if (self-fix-apply (list :payload args) nil)
              "REPAIR SUCCESSFUL."
              "REPAIR FAILED.")))

Skill Definition

(defskill :skill-self-fix
  :priority 95
  :trigger (lambda (context) (eq (getf (getf context :payload) :sensor) :repair-request))
  :probabilistic (lambda (context)
           (format nil "You are the opencortex Repair Actuator. Synthesize a surgical fix for the reported failure.
Return a Lisp plist for :repair-file."))
  :deterministic (lambda (action context)
              (let ((payload (getf action :payload)))
                (self-fix-apply action context))))

See Also