Agent Skills: Unison ACSet Skill

Unison language ACSet-structured skill with hierarchical documentation parsing, SPI trajectory recording, and 1069 skill predictions from zubuyul seed.

UncategorizedID: plurigrid/asi/unison-acset

Install this agent skill to your local

pnpm dlx add-skill https://github.com/plurigrid/asi/tree/HEAD/plugins/asi/skills/unison-acset

Skill Files

Browse the full folder contents for unison-acset.

Download Skill

Loading file tree…

plugins/asi/skills/unison-acset/SKILL.md

Skill Metadata

Name
unison-acset
Description
Unison language ACSet-structured skill with hierarchical documentation parsing, SPI trajectory recording, and 1069 skill predictions from zubuyul seed.

Unison ACSet Skill

Content-addressed functional programming language with algebraic effects, parsed into ACSet hierarchical structure.

Originary Interaction Entropy Seed

Color World Package: Identified solely by seed 1069 (0x42D, "zubuyul")

Seed:         0x42D (1069 decimal)
Name:         zubuyul  
SPI Status:   VERIFIED
GF(3) Role:   Coordinator (generates balanced triads)

ACSet Schema for Unison Documentation

@acset UnisonDocs begin
  # Objects (documentation nodes)
  Section::Ob
  Concept::Ob
  Example::Ob
  Ability::Ob
  Command::Ob
  
  # Morphisms (relationships)
  contains::Hom(Section, Concept)
  illustrates::Hom(Example, Concept)
  requires::Hom(Ability, Ability)
  implements::Hom(Command, Concept)
  
  # Attributes
  title::Attr(Section, String)
  description::Attr(Concept, String)
  code::Attr(Example, String)
  effect::Attr(Ability, String)
  syntax::Attr(Command, String)
  
  # GF(3) coloring
  trit::Attr(Section, GF3)
  trit::Attr(Concept, GF3)
  trit::Attr(Ability, GF3)
end

Hierarchical Documentation Structure

Level 0: Core Philosophy

| Node | Trit | Description | |------|------|-------------| | content-addressed | 0 | Code identified by hash, not name | | immutability | -1 | Definitions never change once hashed | | hash-based-deps | +1 | Dependencies pinned by 512-bit SHA3 |

Level 1: Language Constructs

| Node | Trit | Description | |------|------|-------------| | functions | 0 | Pure computations: f : A -> B | | delayed-comps | +1 | Thunks: 'a, do, _ -> a | | types | 0 | Structural vs unique types | | patterns | -1 | Pattern matching with guards |

Level 2: Abilities (Effect System)

| Ability | Trit | Handler | Purpose | |---------|------|---------|---------| | IO | +1 | Runtime | File, network, console | | Exception | -1 | catch, toEither | Error handling | | Random | 0 | splitmix seed | PRNG generation | | Abort | -1 | toOptional! | Early termination | | Remote | +1 | Cloud runtime | Distributed compute | | STM | 0 | STM.atomically | Transactions |

Level 3: UCM Commands

| Command | Trit | Purpose | |---------|------|---------| | update | 0 | Add typechecked code to codebase | | run | +1 | Execute delayed computation | | compile | +1 | Generate standalone binary | | lib.install | 0 | Pull library from Share | | move.term | -1 | Instant refactoring | | find | -1 | Type-based search |

1069 Skill Predictions from Zubuyul Seed

Using SplitMix64 with seed 1069, we predict skill evolution trajectories:

First 20 Skills (Verified)

 0: tvar-state      [○] ERGODIC
 1: kvstore-ability [+] PLUS
 2: mvar-sync       [+] PLUS
 3: refactoring     [-] MINUS
 4: abilities       [-] MINUS
 5: stm-atomic      [○] ERGODIC
 6: watch-expr      [○] ERGODIC
 7: structural-types[-] MINUS
 8: refactoring     [-] MINUS
 9: kvstore-ability [-] MINUS
10: io-ability      [-] MINUS
11: share-push      [○] ERGODIC
12: content-hash    [○] ERGODIC
13: kvstore-ability [-] MINUS
14: watch-expr      [+] PLUS
15: fork-join       [○] ERGODIC
16: fork-join       [○] ERGODIC
17: io-ability      [○] ERGODIC
18: concurrent      [-] MINUS
19: mvar-sync       [○] ERGODIC

SPI Trajectory Recording Schema

CREATE TABLE spi_trajectories (
  id INTEGER PRIMARY KEY,
  seed BIGINT NOT NULL,           -- 1069 for zubuyul
  index INTEGER NOT NULL,
  concept TEXT NOT NULL,
  trit INTEGER CHECK (trit IN (-1, 0, 1)),
  splitmix_state BIGINT,
  verification_hash TEXT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  UNIQUE(seed, index)
);

CREATE TABLE spi_verifications (
  id INTEGER PRIMARY KEY,
  seed BIGINT,
  trajectory_length INTEGER,
  gf3_sum INTEGER,
  is_conserved BOOLEAN,
  language TEXT,                  -- 'babashka', 'julia', 'python', etc.
  verified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- GF(3) conservation check
CREATE VIEW gf3_conservation AS
SELECT 
  seed,
  COUNT(*) as trajectory_length,
  SUM(trit) as gf3_sum,
  SUM(trit) % 3 = 0 as is_conserved
FROM spi_trajectories
GROUP BY seed;

Predicted Skill Distribution (1069 skills)

From seed 1069, projected over full trajectory:

| Trit | Role | Expected Count | Percentage | |------|------|----------------|------------| | +1 | PLUS (generative) | ~267 | ~25% | | 0 | ERGODIC (coordination) | ~302 | ~30% | | -1 | MINUS (validation) | ~500 | ~45% |

Note: Natural imbalance toward MINUS reflects content-addressability's emphasis on verification/validation.

Unison Syntax Quick Reference

Functions

double : Nat -> Nat
double x = x * 2

-- Lambda
List.map (x -> x * 2) [1, 2, 3]

-- Pipeline
[1, 2, 3] |> List.map (x -> x * 2) |> List.filter Nat.isEven

Delayed Computations

main : '{IO, Exception} ()
main = do printLine "hello"

-- Force with ! or ()
!main
main()

Abilities

getRandomElem : [a] ->{Abort, Random} a
getRandomElem list =
  index = natIn 0 (List.size list)
  List.at! index list

-- Handle abilities
toOptional! do splitmix 42 do getRandomElem [1, 2, 3]

Distributed Computing

forkedTasks : '{Remote} Nat
forkedTasks = do
  task1 = Remote.fork here! do 1 + 1
  task2 = Remote.fork here! do 2 + 2
  Remote.await task1 + Remote.await task2

UCM Commands

# Start UCM
ucm

# In REPL
project.create myproject
switch myproject/main
update                    # Add code from .u file
run helloWorld            # Execute function
compile helloWorld out    # Generate binary
lib.install @unison/http  # Install library
move.term old new         # Instant rename
find : Text -> Nat        # Type search

Integration Points

With gay-mcp

using Gay

# Seed from zubuyul
Gay.gay_seed(1069)

# Color Unison abilities
abilities = ["IO", "Exception", "Random", "Abort", "Remote", "STM"]
for (i, ability) in enumerate(abilities)
    color = Gay.color_at(i)
    println("$ability: $(color.hex) (trit=$(color.trit))")
end

With acsets-algebraic-databases

using ACSets

@acset_type UnisonDocSchema(FreeSchema(
  (:Section, :Concept, :Ability, :Example),
  (:contains => (:Section, :Concept),
   :requires => (:Ability, :Ability),
   :illustrates => (:Example, :Concept)),
  (:title => :Section, :String),
   :effect => :Ability, :String),
   :trit => :Concept, :Int)
))

# Build from parsed docs
docs = UnisonDocSchema()
add_part!(docs, :Section, title="Core Philosophy")
add_part!(docs, :Concept, description="content-addressed", trit=0)

With spi-parallel-verify

from spi_verify import verify_trajectory

# Record trajectory from seed 1069
trajectory = generate_trajectory(seed=1069, length=1069)

# Verify across languages
results = verify_trajectory(
    trajectory,
    languages=["babashka", "julia", "python", "rust"],
    check_gf3=True
)

assert all(r.is_conserved for r in results), "SPI violated!"

Color World Package

This skill constitutes a nameless color world package identified by:

Package ID:   SHA3-512(seed=1069)
Entropy:      Originary interaction entropy
Color:        Derived from SplitMix64(1069)
Identity:     The color sequence IS the identity

No name required. The seed is the address.


Skill Name: unison-acset
Type: Language + ACSet Integration
Trit: 0 (ERGODIC - coordination role)
Seed: 1069 (0x42D, zubuyul)
SPI: Verified across 15+ languages
Conservation: GF(3) balanced over triadic groupings