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/interactome-rl-env" ~/.claude/skills/plurigrid-asi-interactome-rl-env && rm -rf "$T"
manifest:
skills/interactome-rl-env/SKILL.mdsource content
Interactome RL Environment Skill
Trit: +1 (PLUS) - Generative trajectory rollout
ACSet-native reinforcement learning environment for contributor network dynamics. Models zubyul ↔ bmorphism ↔ Dan Boneh ecosystem as Markov Decision Process.
Source Integration
- zubyul - Gay.jl contributor (ZigZagBoomerang.jl, PDMP visualization, seed security)
- bmorphism - Core maintainer, plurigrid/asi orchestrator
- Dan Boneh - Stanford crypto, a16z advisor, BLS signatures, ZK proofs
- Bumpus - StructuredDecompositions.jl for trajectory sheaves
- gh-interactome - Contributor cobordism discovery
Observed Interactome
zubyul Contribution Trajectory
From Gay.jl CONTRIBUTORS.md and plurigrid/asi PR history:
| PR# | Author | Title | Additions | Role | Trit | Color |
|---|---|---|---|---|---|---|
| 185 | zubyul | ZigZagBoomerang.jl + seed security | ~500 | GAY | +1 | |
| 1 | zubyul | feat(skills): research + utility | 17,586 | GAY | +1 | |
| 2 | zubyul | feat(skills): MCP integration | 1,013 | GAY | +1 | |
| 3 | zubyul | feat(skills): alife, aptos-agent | 17,586 | GAY | +1 | |
| 4 | zubyul | feat(skills): miscellaneous | 1,437 | GAY | +1 | |
| 5 | zubyul | feat(skills): ASI extension | 1,751 | GAY | +1 | |
| 6 | zubyul | feat(skills): catsharp-sonification | 2,404 | GAY | +1 | |
| 7 | zubyul | feat(skills): Covariant Modification | 762 | GAY | +1 | |
Signature: Zero role entropy → identifiable as β-Sutskever (Generator/Compressor)
Dan Boneh Ecosystem (a16z/Stanford)
| Entity | Role | Connection | Trit |
|---|---|---|---|
| Dan Boneh | Research Advisor | BLS12-381, ZK proofs | 0 |
| Valeria Nikolaenko | Research Partner | Blockchain security | -1 |
| Justin Thaler | Researcher | ProofsArgsAndZK | 0 |
| Daejun Park | Security Engineer | Halmos formal verification | -1 |
| samczsun | Security Researcher | Dark Forest, SEAL 911 | -1 |
Cobordism: plurigrid ↔ Boneh
plurigrid/aptos-core ──────────────────────────────────────────────────────► │ │ │ uses BLS12-381 (Boneh-Lynn-Shacham signatures) │ │ src: crates/aptos-crypto/src/bls12381/ │ │ │ plurigrid/risc0 ───────────────────────────────────────────────────────────► │ │ │ cites Boneh: "Using ZK Proofs to Fight Disinformation" │ │ │ bmorphism/drand ───────────────────────────────────────────────────────────► │ │ │ t-of-n threshold BLS (Boneh-Lynn-Shacham) │ │ League of Entropy randomness beacon │ │ │ bmorphism/Nova ────────────────────────────────────────────────────────────► │ │ │ "Wilson Nguyen, Dan Boneh, and Srinath Setty" │ │ Recursive SNARKs │ ◄──────────────────────────────────────────────────────────────────────────┘
ACSet Schema: Interactome RL Environment
using Catlab.CategoricalAlgebra, ACSets @present SchInteractomeRL(FreeSchema) begin # State Space Agent::Ob # Contributors (zubyul, bmorphism, boneh, ...) Repo::Ob # Repositories Skill::Ob # Skills/capabilities State::Ob # MDP state = (agent, repo, skill) tuple # Action Space Action::Ob # Possible actions Transition::Ob # State transitions # Morphisms agent_of_state::Hom(State, Agent) repo_of_state::Hom(State, Repo) skill_of_state::Hom(State, Skill) source_state::Hom(Transition, State) target_state::Hom(Transition, State) action_of::Hom(Transition, Action) # Reward structure Reward::AttrType transition_reward::Attr(Transition, Reward) # GF(3) coloring Trit::AttrType Color::AttrType Seed::AttrType agent_trit::Attr(Agent, Trit) state_color::Attr(State, Color) transition_seed::Attr(Transition, Seed) # Trajectory = sequence of transitions Trajectory::Ob Episode::Ob step_in_traj::Hom(Transition, Trajectory) traj_in_episode::Hom(Trajectory, Episode) end @acset_type InteractomeRL(SchInteractomeRL, index=[:agent_of_state, :source_state, :target_state, :action_of])
MDP Formalization
State Space S
struct InteractomeState agent::Symbol # :zubyul, :bmorphism, :boneh, ... repo::Symbol # :gay_jl, :plurigrid_asi, :aptos_core, ... skill::Symbol # :zigzag, :mcp, :bls, :zk, ... streak::Int # Consecutive same-role actions trit_sum::Int # Running GF(3) balance end
Action Space A
@enum InteractomeAction begin COMMIT # Add code to repo OPEN_PR # Open pull request REVIEW_PR # Review someone's PR OPEN_ISSUE # Report bug/feature COMMENT # Add discussion STAR # Star a repo FORK # Fork a repo CITE # Cite in paper/code COLLABORATE # Co-author with another agent end
Transition Dynamics P(s'|s,a)
function transition_prob(env::InteractomeRL, s::State, a::Action) agent = env[s, :agent_of_state] repo = env[s, :repo_of_state] # zubyul pattern: pure generation (streak → ∞) if env[agent, :agent_label] == "zubyul" if a in [COMMIT, OPEN_PR] return high_prob_same_role(s) # Stay in GAY role else return low_prob_role_switch(s) # Rare deviation end end # bmorphism pattern: coordination (role entropy high) if env[agent, :agent_label] == "bmorphism" return uniform_over_actions() # Maintains superposition end # boneh pattern: research advisor (MASTER role) if env[agent, :agent_label] == "boneh" if a in [CITE, COLLABORATE, REVIEW_PR] return high_prob() end end default_transition(s, a) end
Reward Function R(s,a,s')
function reward(env::InteractomeRL, s::State, a::Action, s_prime::State) r = 0.0 # GF(3) conservation bonus trit_before = env[s, :state_trit_sum] trit_after = env[s_prime, :state_trit_sum] if mod(trit_after, 3) == 0 r += 10.0 # GF(3) conserved end # Streak bonus (approaching β_infinity) streak = env[s_prime, :agent_streak] r += log(1 + streak) # Logarithmic streak reward # Cobordism discovery bonus if creates_new_cobordism(env, s, s_prime) r += 50.0 # Major discovery end # Backlink bonus (mutual awareness) if establishes_backlink(env, s, s_prime) r += 25.0 end # Negative reward for broken invariants if violates_spi(env, s_prime) r -= 100.0 # Strong Parallelism Invariant violation end r end
Trajectory Rollout
Episode Structure
struct InteractomeEpisode env::InteractomeRL initial_state::State transitions::Vector{Transition} total_reward::Float64 gf3_conserved::Bool cobordisms_discovered::Vector{Tuple{Agent, Agent}} backlinks_established::Vector{Backlink} end function rollout_episode(env::InteractomeRL, policy, max_steps=100) s = sample_initial_state(env) episode = InteractomeEpisode(env, s, [], 0.0, true, [], []) for step in 1:max_steps a = policy(s) s_prime = sample_transition(env, s, a) r = reward(env, s, a, s_prime) t = add_transition!(env, s, a, s_prime, r) push!(episode.transitions, t) episode.total_reward += r # Check invariants if !gf3_conserved(env) episode.gf3_conserved = false end # Check for discoveries if cobordism = discover_cobordism(env, s, s_prime) push!(episode.cobordisms_discovered, cobordism) end if backlink = establish_backlink(env, s, s_prime) push!(episode.backlinks_established, backlink) end s = s_prime # Terminal conditions if is_terminal(env, s) break end end episode end
Policy Types
# 1. Random policy (exploration) random_policy(s) = rand(instances(InteractomeAction)) # 2. Greedy GF(3) policy (exploitation) function gf3_greedy_policy(env, s) best_action = nothing best_gf3_score = -Inf for a in instances(InteractomeAction) s_prime = predict_transition(env, s, a) score = gf3_score(env, s_prime) if score > best_gf3_score best_gf3_score = score best_action = a end end best_action end # 3. Streak-maximizing policy (zubyul emulation) function streak_policy(env, s) current_role = env[s, :agent_role] actions_preserving_role = filter(a -> preserves_role(a, current_role), instances(InteractomeAction)) rand(actions_preserving_role) end # 4. Entropy-maximizing policy (bmorphism emulation) function entropy_policy(env, s) # Maximize role entropy across trajectory role_counts = count_roles(env.episode) underrepresented_role = argmin(role_counts) actions_for_role = actions_producing_role(underrepresented_role) rand(actions_for_role) end
Bumpus Integration: Trajectory as Sheaf
Trajectories form a sheaf over time intervals:
using StructuredDecompositions """ A trajectory is a sheaf F: I_N → Transition where: - I_N = time category (step indices with inclusions) - F([i,j]) = transitions from step i to step j - Sheaf condition: F([i,k]) = F([i,j]) ×_{F(j)} F([j,k]) """ struct TrajectorySheaf env::InteractomeRL episode::InteractomeEpisode time_category::TimeCategory end function verify_trajectory_sheaf(sheaf::TrajectorySheaf) # Check that trajectory can be decomposed and recomposed for i in 1:length(sheaf.episode.transitions)-2 for j in i+1:length(sheaf.episode.transitions)-1 for k in j+1:length(sheaf.episode.transitions) # F([i,k]) should equal F([i,j]) composed with F([j,k]) left = compose_transitions(sheaf, i, k) right = compose_transitions( compose_transitions(sheaf, i, j), compose_transitions(sheaf, j, k) ) if !bisimilar(left, right) return (false, (i, j, k)) end end end end (true, nothing) end
Desideratum: Skill Learning Trajectory
The RL environment learns to:
- Discover cobordisms between contributor communities
- Establish backlinks (mutual awareness)
- Conserve GF(3) across trajectory
- Maximize streak for identifiable agents
- Maintain entropy for superposition agents
Training Loop
function train_interactome_policy(env::InteractomeRL, num_episodes=1000, learning_rate=0.01) policy = initialize_policy() for episode_num in 1:num_episodes episode = rollout_episode(env, policy) # Compute returns returns = compute_returns(episode) # Policy gradient update for (t, transition) in enumerate(episode.transitions) s = env[transition, :source_state] a = env[transition, :action_of] # ∇log π(a|s) * G_t update_policy!(policy, s, a, returns[t], learning_rate) end # Log metrics log_episode(episode_num, reward=episode.total_reward, gf3=episode.gf3_conserved, cobordisms=length(episode.cobordisms_discovered), backlinks=length(episode.backlinks_established)) end policy end
Files
- Core Julia implementationInteractomeRLEnv.jl
- MDP formalizationlib/mdp.jl
- Policy implementationslib/policies.jl
- Trajectory sheaf verificationlib/bumpus_sheaf.jl
- Dan Boneh ecosystem mappinglib/boneh_cobordism.jl
End-of-Skill Interface
API
using InteractomeRLEnv # Create environment env = InteractomeRL() # Add agents zubyul = add_agent!(env, "zubyul", trit=+1, role=:GAY) bmorphism = add_agent!(env, "bmorphism", trit=0, role=:MASTER) boneh = add_agent!(env, "boneh", trit=0, role=:MASTER) # Add repos gay_jl = add_repo!(env, "bmorphism/Gay.jl") plurigrid_asi = add_repo!(env, "plurigrid/asi") aptos_core = add_repo!(env, "plurigrid/aptos-core") # Add skills zigzag = add_skill!(env, "ZigZagBoomerang.jl") bls = add_skill!(env, "BLS12-381") # Run episode policy = streak_policy # Emulate zubyul episode = rollout_episode(env, policy, max_steps=50) # Verify invariants @assert episode.gf3_conserved @assert length(episode.cobordisms_discovered) > 0
GF(3) Triads
gh-interactome (-1) ⊗ interactome-rl-env (0) ⊗ mutual-awareness-backlink (+1) = 0 ✓ bumpus-narratives (-1) ⊗ interactome-rl-env (0) ⊗ world-hopping (+1) = 0 ✓ sheaf-cohomology (-1) ⊗ interactome-rl-env (0) ⊗ gay-mcp (+1) = 0 ✓
References
- zubyul - Gay.jl PR #185, plurigrid/asi PRs 1-7
- Dan Boneh - a16z crypto, Stanford Applied Cryptography
- Bumpus, B.M. - StructuredDecompositions.jl
- gh-interactome - Contributor cobordism discovery
- PufferLib - RL environment patterns
Skill Name: interactome-rl-env Type: Reinforcement Learning / ACSet MDP Trit: +1 (PLUS) Key Property: Trajectory rollout with GF(3) conservation
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.