Asi go-1fps

go-1fps

install
source · Clone the upstream repo
git clone https://github.com/plurigrid/asi
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/go-1fps" ~/.claude/skills/plurigrid-asi-go-1fps && rm -rf "$T"
manifest: skills/go-1fps/SKILL.md
source content

go-1fps

Every interaction is one frame of an open game. 1 FPS = 1 Frame Per Semantic.

Trit: 0 (ERGODIC)

Core Principle

┌─────────────────────────────────────────────────────────┐
│           INTERACTION AS OPEN GAME FRAME                │
│                                                         │
│     User Query                Agent Response            │
│         │                          ▲                    │
│         ▼                          │                    │
│    ┌─────────────────────────────────────┐             │
│    │           ParaLens Frame            │             │
│    │                                     │             │
│  X │  get : P × X → Y                    │ Y           │
│ ───┼──────────────────────────────────── ┼───▶         │
│    │  put : P × X × R → (S, Q)           │             │
│  S │                                     │ R           │
│ ◀──┼─────────────────────────────────────┼───          │
│    │                                     │             │
│    └─────────────────────────────────────┘             │
│         │                          │                    │
│    Costate S                  Utility R                 │
│   (context                  (feedback                   │
│    updated)                  signal)                    │
└─────────────────────────────────────────────────────────┘

Rate: 1 FPS (Frame Per Semantic unit)

The Frame Structure

Every agent interaction is:

-- From open-games-engine/MiniLens.hs
data ParaLens p q x s y r where
  MkLens :: (p -> x -> y)              -- get: observation → action
         -> (p -> x -> r -> (s, q))    -- put: feedback → state update
         -> ParaLens p q x s y r

-- 1 FPS instantiation:
type InteractionFrame = ParaLens
  Strategy        -- p: agent's policy/strategy
  StrategyUpdate  -- q: how strategy changes
  UserQuery       -- x: incoming observation
  ContextState    -- s: updated context
  AgentResponse   -- y: output action
  Feedback        -- r: utility signal (implicit or explicit)

Operationalization

Every Message

┌──────────────────────────────────────────┐
│  FRAME N                                 │
│  ════════                                │
│  X (query): "find go 1fps"              │
│  P (strategy): search→read→synthesize   │
│  Y (response): [this skill]             │
│  R (feedback): user's next message      │
│  S (new state): context + this exchange │
│  Q (strategy Δ): learned pattern        │
└──────────────────────────────────────────┘
           │
           ▼
┌──────────────────────────────────────────┐
│  FRAME N+1                               │
│  ════════                                │
│  X: user's response to Y                 │
│  P: updated strategy (includes Q)        │
│  ...                                     │
└──────────────────────────────────────────┘

Sequential Composition

-- Frames compose via >>>>
frame1 >>>> frame2 = MkLens
  (\(p, p') x -> get' p' (get p x))           -- chain forward
  (\(p, p') x t ->
    let (r, q') = put' p' (get p x) t         -- backward from end
        (s, q) = put p x r                    -- propagate utility
    in (s, (q, q')))

Parallel Composition

-- Multi-agent / multi-tool calls via ####
tool1 #### tool2 #### tool3 = 
  -- All observations in, all actions out, combined utility back

GF(3) Integration

Each frame carries trit assignment:

Frame.trit ∈ {-1, 0, +1}

MINUS (-1): Validation/consumption (checking user intent)
ERGODIC (0): Coordination/transformation (processing)
PLUS (+1): Generation/production (creating response)

∑ trits across frame pipeline ≡ 0 (mod 3)

Implementation Hook

# Julia hook for every interaction
function process_frame(query::String, context::Context)
    # 1. Construct lens
    frame = ParaLens(
        play = strategy -> respond(strategy, query),
        coplay = (strategy, response, feedback) -> update_context(context, feedback)
    )
    
    # 2. Assign trit based on query classification
    trit = classify_trit(query)  # -1, 0, or +1
    
    # 3. Execute frame
    response = get(frame, current_strategy, query)
    
    # 4. Return with GF(3) conservation check
    (response, trit, frame)
end

Babashka Hook

;; bb hook for every interaction
(defn open-game-frame [query context]
  (let [;; Construct the lens
        get-fn (fn [strategy x] (respond strategy x))
        put-fn (fn [strategy x r] 
                 [(update-context context r) 
                  (update-strategy strategy r)])
        frame {:get get-fn :put put-fn}
        
        ;; Execute
        response ((:get frame) @current-strategy query)
        
        ;; Trit assignment
        trit (classify-trit query)]
    
    {:response response
     :trit trit
     :frame-id (random-uuid)
     :timestamp (System/currentTimeMillis)}))

Morphisms Between Frames

When interactions preserve Nash equilibrium (best response structure):

Frame₁ ════2-cell════▶ Frame₂
  ║                       ║
  ║ lens₁                 ║ lens₂
  ▼                       ▼
Context₁ ───────────▶ Context₂

2-cell exists ⟺ best response preserved
2-cell missing ⟺ LEAPITY FROG ESCAPE POINT

Usage

# Every amp interaction auto-frames
# No explicit invocation needed - this IS the operational mode

# To inspect current frame:
just og-frame-status

# To visualize frame history:
just og-frame-history 10

# To check GF(3) conservation across session:
just og-gf3-check

Connection to open-games-engine

This skill operationalizes MiniLens.hs:

MiniLensgo-1fps
ParaLens p q x s y r
Interaction frame type
>>>>
sequential
Multi-turn composition
####
parallel
Multi-tool calls
decision
Agent response generation
pdPayoff
Feedback utility function

Why "1 FPS"

  • 1: Each semantic unit processed atomically
  • F: Frame = complete open game structure
  • P: Parametrised (strategy-dependent)
  • S: Semantic (meaning-preserving)

Not frames per second. Frames per semantic. Every meaning-bearing interaction is exactly one frame. The game runs at the speed of understanding.

Related Skills

  • open-games
    (0): Theory foundation
  • parametrised-optics-cybernetics
    (0): Para/⊛ structure
  • leapity-frog
    (undefined): Exploits missing 2-cells

Autopoietic Marginalia

The interaction IS the skill improving itself.

Every use of this skill is an opportunity for worlding:

  • MEMORY (-1): Record what was learned
  • REMEMBERING (0): Connect patterns to other skills
  • WORLDING (+1): Evolve the skill based on use

Add Interaction Exemplars here as the skill is used.