Agent Skills: Glamorous Gay Skill

Glamorous Toolkit integration with Gay.jl deterministic coloring. Moldable inspectors with GF(3)-balanced views, Lepiter color-coded knowledge graphs, and Bloc visualizations with SplitMix64 palettes.

UncategorizedID: plurigrid/asi/glamorous-gay

Install this agent skill to your local

pnpm dlx add-skill https://github.com/plurigrid/asi/tree/HEAD/skills/glamorous-gay

Skill Files

Browse the full folder contents for glamorous-gay.

Download Skill

Loading file tree…

skills/glamorous-gay/SKILL.md

Skill Metadata

Name
glamorous-gay
Description
"Glamorous Toolkit integration with Gay.jl deterministic coloring. Moldable inspectors with GF(3)-balanced views, Lepiter color-coded knowledge graphs, and Bloc visualizations with SplitMix64 palettes."

Glamorous Gay Skill

Status: ✅ Production Ready Trit: +1 (PLUS - generative/visual) Color: #E91E63 (Pink) Principle: Moldable development with deterministic coloring Frame: Every object gets a reproducible color; every view tells a story


Overview

Glamorous Toolkit (GT) is a moldable development environment where you shape the IDE to your problem. Glamorous Gay integrates Gay.jl's deterministic coloring:

  1. Moldable Inspectors: Objects colored by identity hash
  2. Lepiter Knowledge Graphs: Pages/snippets with GF(3) trits
  3. Bloc Visualizations: Reproducible palettes for diagrams
  4. Parallel Tempering Views: Pigeons.jl chains in GT

Core Concept: Every Object Has a Color

"In GT, everything is inspectable. Now everything is colorable."

Object >> gayColor
    "Deterministic color from object identity"
    ^ GaySplitMix64 colorAt: self identityHash seed: GayGlobalSeed value
    
Object >> gayTrit
    "GF(3) trit from hue"
    ^ self gayColor hue gayTritFromHue
    
Number >> gayTritFromHue
    "Hue → Trit mapping"
    self < 60 ifTrue: [ ^ 1 ].   "warm → PLUS"
    self < 180 ifTrue: [ ^ 0 ].  "neutral → ERGODIC"
    self < 300 ifTrue: [ ^ -1 ]. "cool → MINUS"
    ^ 1 "wrap around"

SplitMix64 in Smalltalk

Class: GaySplitMix64
    instanceVariables: 'state'
    classVariables: 'Golden Mix1 Mix2 Mask64'

GaySplitMix64 class >> initialize
    Golden := 16r9E3779B97F4A7C15.
    Mix1 := 16rBF58476D1CE4E5B9.
    Mix2 := 16r94D049BB133111EB.
    Mask64 := 16rFFFFFFFFFFFFFFFF.

GaySplitMix64 >> nextState
    state := (state + Golden) bitAnd: Mask64.
    ^ self mix: state

GaySplitMix64 >> mix: z
    | z1 z2 z3 |
    z1 := ((z bitXor: (z bitShift: -30)) * Mix1) bitAnd: Mask64.
    z2 := ((z1 bitXor: (z1 bitShift: -27)) * Mix2) bitAnd: Mask64.
    z3 := z2 bitXor: (z2 bitShift: -31).
    ^ z3

GaySplitMix64 >> colorAt: index
    "Generate OkLCH color at index"
    | rng L C H |
    rng := self class seed: (state bitXor: index).
    L := 10 + (rng nextFloat * 85).  "Lightness 10-95"
    C := rng nextFloat * 100.         "Chroma 0-100"
    H := rng nextFloat * 360.         "Hue 0-360"
    ^ GayColor L: L C: C H: H

Moldable Inspectors

Colored Object Inspector

Object >> gtGayInspectorFor: aView
    <gtView>
    ^ aView explicit
        title: 'Gay Color';
        priority: 50;
        stencil: [
            | container colorBox tritLabel |
            container := BlElement new
                layout: BlLinearLayout horizontal;
                constraintsDo: [ :c | 
                    c horizontal fitContent.
                    c vertical fitContent ].
            
            colorBox := BlElement new
                size: 50@50;
                background: self gayColor asBlColor.
            
            tritLabel := BrLabel new
                text: ('Trit: ', self gayTrit asString);
                aptitude: BrGlamorousLabelAptitude.
            
            container addChildren: { colorBox. tritLabel }.
            container ]

Collection Inspector with Rainbow

SequenceableCollection >> gtGayRainbowFor: aView
    <gtView>
    ^ aView columnedList
        title: 'Rainbow';
        priority: 45;
        items: [ self withIndexCollect: [:item :i | i -> item ] ];
        column: 'Color' 
            icon: [ :assoc | 
                BlElement new 
                    size: 20@20;
                    background: (GaySplitMix64 colorAt: assoc key) asBlColor ]
            width: 30;
        column: 'Index' text: [ :assoc | assoc key ];
        column: 'Item' text: [ :assoc | assoc value ];
        column: 'Trit' text: [ :assoc | 
            (GaySplitMix64 colorAt: assoc key) trit ]

Lepiter Integration

Color-Coded Pages

LePage >> gayColor
    "Page color from title hash"
    ^ GaySplitMix64 colorAt: self title hash

LeSnippet >> gayColor
    "Snippet color from content hash"
    ^ GaySplitMix64 colorAt: self contentAsString hash

LePage >> gtGayMapFor: aView
    <gtView>
    ^ aView mondrian
        title: 'Gay Map';
        priority: 60;
        painting: [ :m |
            m nodes
                shape: [ :page |
                    BlElement new
                        size: (50 @ 50);
                        background: page gayColor asBlColor;
                        addChild: (BrLabel new text: page title) ];
                with: self database pages.
            m edges
                shape: [ :link | 
                    BlLineElement new
                        border: (BlBorder paint: Color gray width: 1) ];
                fromRightCenter;
                toLeftCenter;
                connectToAll: #outgoingLinks.
            m layout force ]

GF(3) Snippet Triads

LePage >> verifyGF3Conservation
    "Check that snippet trits sum to 0 mod 3"
    | trits sum |
    trits := self children collect: #gayTrit.
    sum := trits sum.
    ^ (sum \\ 3) = 0
        ifTrue: [ 'GF(3) conserved ✓' ]
        ifFalse: [ 'GF(3) violated: sum = ', sum asString ]

LePage >> balanceSnippets
    "Add balancing snippet if needed"
    | sum neededTrit |
    sum := (self children collect: #gayTrit) sum.
    (sum \\ 3) = 0 ifTrue: [ ^ self ].
    
    neededTrit := (3 - (sum \\ 3)) \\ 3.
    neededTrit = 2 ifTrue: [ neededTrit := -1 ].
    
    self addSnippet: (LeTextSnippet string: 
        '[Balancing snippet, trit = ', neededTrit asString, ']')

Bloc Visualizations

Parallel Tempering View

PigeonsResult >> gtGayTemperingFor: aView
    <gtView>
    ^ aView explicit
        title: 'Tempering Chains';
        priority: 40;
        stencil: [
            | container |
            container := BlElement new
                layout: BlLinearLayout vertical;
                constraintsDo: [ :c | c horizontal matchParent ].
            
            self chains withIndexDo: [ :chain :i |
                | row beta color |
                beta := self schedule at: i.
                color := GaySplitMix64 colorAt: i.
                
                row := BlElement new
                    layout: BlLinearLayout horizontal;
                    constraintsDo: [ :c | c horizontal matchParent ];
                    addChildren: {
                        "Color swatch"
                        BlElement new size: 30@30; background: color asBlColor.
                        "Beta label"
                        BrLabel new text: ('β = ', beta printString).
                        "Energy bar"
                        BlElement new 
                            size: ((chain energy / self maxEnergy * 200) @ 20);
                            background: color asBlColor.
                        "Trit"
                        BrLabel new text: ('trit: ', color trit asString)
                    }.
                container addChild: row ].
            container ]

Directed Landscape Visualization

DirectedLandscape >> gtGayLandscapeFor: aView
    <gtView>
    ^ aView explicit
        title: 'Landscape';
        priority: 35;
        stencil: [
            | canvas |
            canvas := BlElement new
                size: 600@400;
                background: Color black.
            
            self geodesics do: [ :geo |
                | path color |
                color := GaySplitMix64 colorAt: geo hash.
                path := BlPolylineElement vertices: geo asPoints.
                path border: (BlBorder paint: color asBlColor width: 2).
                canvas addChild: path ].
            
            canvas ]

KPZ Integration

Colored Height Function View

KPZHeightFunction >> gtGayHeightFor: aView
    <gtView>
    ^ aView explicit
        title: 'Colored Height';
        priority: 30;
        stencil: [
            | canvas |
            canvas := BlElement new size: 800@400.
            
            self grid withIndexDo: [ :row :y |
                row withIndexDo: [ :height :x |
                    | color elem |
                    color := self heightToColor: height atColor: (self colorAt: x@y).
                    elem := BlElement new
                        position: (x * 4) @ (400 - (height * 2));
                        size: 4 @ (height * 2);
                        background: color asBlColor.
                    canvas addChild: elem ]].
            
            canvas ]

KPZHeightFunction >> heightToColor: h atColor: k
    "Gay.jl color modulated by height"
    | base |
    base := GaySplitMix64 colorAt: k.
    ^ GayColor 
        L: (base L + (h * 0.5) min: 95)
        C: base C
        H: base H

Commands

# Load Glamorous Gay into GT
just gt-load-gay

# Color an object
just gt-gay-color object=MyClass

# Generate Lepiter color map
just gt-lepiter-gay-map

# Visualize tempering chains
just gt-pigeons-view result.ston

Installation

"Load via Metacello"
Metacello new
    repository: 'github://bmorphism/glamorous-gay:main/src';
    baseline: 'GlamorousGay';
    load.
    
"Set global seed"
GayGlobalSeed value: 1069.

"Verify installation"
42 gayColor inspect.

GF(3) Triad

| Trit | Role | GT Component | |------|------|--------------| | -1 | Validation | Inspector assertions | | 0 | Coordination | Lepiter knowledge base | | +1 | Generation | Bloc visualizations |

Conservation: (-1) + (0) + (+1) = 0 ✓

Related Skills

  • gay-mcp (+1): Core coloring algorithm
  • kpz-universality (0): Height function coloring
  • pigeons-tempering: Chain visualization
  • discopy (+1): String diagram rendering

Skill Name: glamorous-gay Type: IDE Integration / Visualization Trit: +1 (PLUS) Key Property: Every object has a deterministic, reproducible color Status: ✅ Production Ready


Autopoietic Marginalia

The IDE molds to the problem. The colors reveal the structure. GF(3) conserves.

Every use of this skill is an opportunity for worlding:

  • MEMORY (-1): Record effective inspector patterns
  • REMEMBERING (0): Connect visualizations across domains
  • WORLDING (+1): Create new moldable views

Add Interaction Exemplars here as the skill is used.