Claude Code Plugins

Community-maintained marketplace

Feedback

pijul-sparse-skills

@plurigrid/asi
1
0

Sparsity-preserving skill versioning via Pijul patches with GF(3) projection gates

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name pijul-sparse-skills
description Sparsity-preserving skill versioning via Pijul patches with GF(3) projection gates
version 1.0.0
trit 0
role ERGODIC
color #D2E98B
requires pijul, flox-mcp, structured-decomp

pijul-sparse-skills

Sparsity-preserving skill versioning where changes are stored as morphisms, not materialized states.

Trit: 0 (ERGODIC) - Coordinator role for projection gate decisions


Philosophy

Default: SPARSE Mode

┌─────────────────────────────────────────────────────────┐
│  SPARSE (default)                                       │
│  - Changes stored as patches (morphisms)                │
│  - No materialization unless required                   │
│  - Lazy evaluation of skill state                       │
│  - Minimal storage footprint                            │
└─────────────────────────────────────────────────────────┘

Projection Only When:

Trigger Description GF(3)
--materialize Explicit flag Any
trit == 0 ERGODIC coordination point 0
--archive Explicit archive Any
Conflict Resolution requires full state Any

Categorical Foundation

Patches as Morphisms in Cat(Skills)

Ob(C) = { skill states }
Mor(C) = { patches transforming states }

For patches p, q:
  p ⊥ q (independent) ⟹ p;q = q;p (commute)

Sparsity via Lazy Evaluation

# Sparse representation (default)
struct SparseSkill
    base_hash::UInt64      # Root state reference
    patches::Vector{Patch}  # Morphism chain, not applied
end

# Materialized only on demand
function materialize(s::SparseSkill)
    foldl(apply, s.patches; init=load(s.base_hash))
end

GF(3) Projection Gates

Gate Logic

function should_project(skill::Skill, flags::Flags)::Bool
    # Explicit materialization requested
    flags.materialize && return true
    
    # ERGODIC trit forces coordination checkpoint
    skill.trit == 0 && return true
    
    # Explicit archive
    flags.archive && return true
    
    # Conflict requires full state
    has_conflicts(skill) && return true
    
    # Otherwise: stay sparse
    return false
end

Trit-Based Behavior

trit = -1 (MINUS/Validator):
  → Verify patch integrity without materializing
  → Check commutativity conditions
  → Validate GF(3) conservation
  
trit = 0 (ERGODIC/Coordinator):
  → PROJECT: Create materialized checkpoint
  → Coordinate merge points
  → Synchronize distributed states
  
trit = +1 (PLUS/Generator):
  → Generate new patches
  → Create without materializing target
  → Lazy forward references

Workflow Examples

Record Skill Change (Sparse)

cd .agents/skills/my-skill

# Edit SKILL.md
echo "new content" >> SKILL.md

# Record as patch (NOT materialized)
pijul record -m "Add GF(3) section"
# Stores: Patch{add_lines: [...], hash: 0x...}

Sync Skills (Sparse Pull)

# Pull only patch metadata
pijul pull --partial origin

# View pending patches without applying
pijul log --pending

# Apply lazily (on access)
cat SKILL.md  # Materializes only this file

Force Materialization (ERGODIC Gate)

# Explicit checkpoint
pijul reset --materialize

# Or via trit-aware tool
skill-checkpoint my-skill --trit 0

Integration Patterns

With flox-mcp

;; Install pijul via flox MCP
(flox-install "pijul")

;; Record skill change
(shell "pijul" "record" "-m" (str "Update " skill-name))

;; Sparse pull from upstream
(shell "pijul" "pull" "--partial" upstream-url)

With structured-decomp

# Tree decomposition of skill graph
tree = decompose(skill_graph)

# Each bag gets sparse representation
for bag in tree.bags
    bag.skills = map(to_sparse, bag.skills)
end

# Sheaf gluing respects sparsity
glue!(tree)  # Only materializes at boundaries

With Gay.jl Colors

using Gay

# Patch hash → color for visual diff
function patch_color(patch::Patch)
    seed = reinterpret(UInt64, patch.hash)
    Gay.color_at(seed, 1)
end

# GF(3) conservation across patch chain
function verify_chain(patches::Vector{Patch})
    trits = [patch.trit for patch in patches]
    sum(trits) % 3 == 0
end

Delta-State CRDT Bridge

Patches as Delta-States

Pijul Patch ≅ Delta-CRDT Update

Both:
  - Commutative when independent
  - Compose via join semilattice
  - Support partial replication

Merkle Search Tree Index

skills/
├── .pijul/
│   ├── patches/       # Merkle tree of patches
│   ├── sparse-index/  # Hash → patch mapping
│   └── projection-log # When/why materialized

Commands

Check Sparsity Status

pijul-sparse status
# Output:
#   my-skill: SPARSE (3 pending patches)
#   other-skill: MATERIALIZED (checkpoint 2024-01-07)

Force Projection

pijul-sparse project my-skill --reason "coordination checkpoint"

Verify Conservation

pijul-sparse verify-gf3
# Output:
#   Chain: patch_a(-1) + patch_b(0) + patch_c(+1) = 0 ✓

References

  • pijul skill - Core VCS operations
  • flox-mcp skill - Environment management
  • structured-decomp skill - Tree decompositions
  • Mimram/Di Giusto: Categorical Patch Theory
  • Almeida et al: Delta-State CRDTs
  • Merkle Search Trees (Auvolat/Taïani)
  • Irmin/MRDTs (Tarides)

Triadic Composition

pijul-sparse-skills (0) + pijul (-1) + skill-creator (+1) = 0 ✓
     Coordinator          Validator      Generator

This skill coordinates the projection decision while pijul validates patches and skill-creator generates new content.