skill-loader

Dynamic skill loading via polynomial functor arrangements. Loads skills as interfaces p = A^y^B where state changes rewire the system.

16 stars

Best use case

skill-loader is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Dynamic skill loading via polynomial functor arrangements. Loads skills as interfaces p = A^y^B where state changes rewire the system.

Teams using skill-loader should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/skill-loader/SKILL.md --create-dirs "https://raw.githubusercontent.com/plurigrid/asi/main/plugins/asi/skills/skill-loader/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/skill-loader/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How skill-loader Compares

Feature / Agentskill-loaderStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Dynamic skill loading via polynomial functor arrangements. Loads skills as interfaces p = A^y^B where state changes rewire the system.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Skill Loader

**Dynamic Skill Loading via Polynomial Functor Arrangements**

Based on Samantha Jarvis & David Spivak's work on dynamic structures, this skill treats skill loading as dynamic arrangement morphisms in the category **Poly**.

## Polynomial Semantics

Each skill is an interface polynomial:
```
p_skill = Outputs^y^Inputs
```

Loading skills creates composite arrangements:
```
p₁ ⊗ p₂ → System
```

The **state** `S` determines which arrangement is active. Loading a skill updates `s : S`, rewiring the system dynamically.

## Usage

```bash
# Load a single skill
bb ~/.claude/skills/skill-loader/load.bb skill-name

# Load multiple skills with GF(3) trit assignment
bb ~/.claude/skills/skill-loader/load.bb skill1:-1 skill2:0 skill3:+1

# List loadable skills
bb ~/.claude/skills/skill-loader/load.bb --list

# Query skill lattice
bb ~/.claude/skills/skill-loader/load.bb --lattice

# Reverse derivative: find skills that influence current state
bb ~/.claude/skills/skill-loader/load.bb --reverse
```

## Dynamic Arrangement Protocol

### State Space

```
State = (M, move, f, m)
```
Where:
- `M` = Parameterizing object (skill configuration space)
- `move : F(M) × F(M) → F(M)` = State update function
- `f : M × A → B` = Skill morphism (input → output transformation)
- `m : F(M)` = Current parameter (loaded skill configuration)

### Load Operation

Loading skill `s` creates arrangement morphism:
```
F(A) --[m × id]--> F(M) × F(A) --[F(f)]--> F(B)
```

### Update Rule

After skill execution, update state via reverse derivative:
```
F(A) × F(B) --[R[f]]--> F(M) × F(A) --[π; move]--> F(M)
```

## GF(3) Trit Assignment

Skills loaded in triads conserve:
```
Σ trits ≡ 0 (mod 3)
```

| Trit | Role | Hue Range |
|------|------|-----------|
| -1 (MINUS) | Validator/Constrainer | 180°-300° (cold) |
| 0 (ERGODIC) | Coordinator/Synthesizer | 60°-180° (neutral) |
| +1 (PLUS) | Generator/Executor | 0°-60°, 300°-360° (warm) |

## Babashka Implementation

```clojure
(ns skill-loader
  (:require [babashka.fs :as fs]
            [clojure.edn :as edn]
            [clojure.string :as str]))

(def skills-dir (str (System/getProperty "user.home") "/.claude/skills"))

(defn list-skills []
  (->> (fs/list-dir skills-dir)
       (filter fs/directory?)
       (map fs/file-name)
       (filter #(fs/exists? (fs/path skills-dir % "skill.md")))
       sort))

(defn parse-frontmatter [content]
  (when-let [[_ yaml] (re-find #"(?s)^---\n(.*?)\n---" content)]
    (reduce (fn [m line]
              (if-let [[_ k v] (re-find #"^(\w+):\s*(.+)$" line)]
                (assoc m (keyword k) v)
                m))
            {} (str/split-lines yaml))))

(defn load-skill [skill-name]
  (let [path (fs/path skills-dir skill-name "skill.md")]
    (when (fs/exists? path)
      (let [content (slurp (str path))
            meta (parse-frontmatter content)]
        {:name skill-name
         :meta meta
         :content content
         :loaded-at (System/currentTimeMillis)}))))

(defn load-triad [s1 s2 s3]
  "Load three skills with GF(3) conservation"
  (let [skills [(assoc (load-skill s1) :trit -1)
                (assoc (load-skill s2) :trit 0)
                (assoc (load-skill s3) :trit +1)]]
    {:skills skills
     :sum (reduce + (map :trit skills))
     :conserved? (zero? (mod (reduce + (map :trit skills)) 3))}))
```

## Integration with Dynamic Categories

Following (Shapiro & Spivak 2022), skill loading forms a **dynamic monoidal category** where:
- Objects are skill interfaces
- Morphisms are arrangements
- State updates follow reverse derivative backpropagation

This enables gradient-based skill optimization analogous to neural network training.

## References

- Jarvis, S. (2024). "Building dynamic structures". Topos Institute Blog.
- Shapiro, B.T. & Spivak, D.I. (2022). "Dynamic Categories, Dynamic Operads: From Deep Learning to Prediction Markets."
- Cockett et al. (2020). "Reverse Derivative Categories." CSL 2020.