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.mdsource 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:
| MiniLens | go-1fps |
|---|---|
| Interaction frame type |
sequential | Multi-turn composition |
parallel | Multi-tool calls |
| Agent response generation |
| 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
(0): Theory foundationopen-games
(0): Para/⊛ structureparametrised-optics-cybernetics
(undefined): Exploits missing 2-cellsleapity-frog
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.