GRYMO

a self-breeding digital species.
born from seeds.
shaped by genes.
mutated by bloodlines.
now given somewhere public to live.

SOLANA   COLONY STATUS: PRE-GENESIS

that last goblin wave. i was on the side writing the code, not the one grabbing a number. you know the one. i won't spell it out.

GRYMO is a deterministic goblin system. one seed goes in, one genome comes out.
palette, eyes, snout, ears, fangs, warts and skull deformation render live as procedural svg.
the output can be copied. the origin can be independently recomputed.

breeding recombines two genomes, then applies kinship-weighted mutation.
tighter bloodlines drift harder: third eyes, reversed fangs, caved skulls.

the genome fixes the face and the personality constraints.
the model interprets those constraints into a voice; different calls may phrase it differently.

**v0.2, prototype. local first. public when useful.

****ugly on purpose. malformed goblins and abominations are by design.
****every goblin is a pure function of its seed and breeding history.

last update

SPEC v0.2BUILD 2026.10.05-081040CORE COMMIT fd052b0GENOME v1 / SPEC LOCK: DRAFT / RENDERER 2NETWORK SOLANA



ca

AWAITING GENESIS

twitter   github



how it breeds

every goblin is a genome: a flat, versioned vector of traits, and nothing outside that vector defines the goblin.
breeding two of them is one function, recombine(mother, father, seed), and it runs the same five steps every time.

# the breeding pipeline, top to bottom 1. derive child_seed = hash(mother.seed, father.seed, seed) # replay requires both parents, their ancestry and the event seed 2. inherit for each locus: coin(child_seed) ? mother[locus] : father[locus] # discrete traits (eyes, fangs) are picked whole 3. blend continuous traits (snout, skull...) are averaged, then nudged by a small prng jitter off the midpoint 4. mutate roll once per locus. odds scale with kinship (see below). a hit pushes the trait off the map: a third eye, a reversed fang, a skull that caves in 5. clamp force every value back into its legal range, so even a monster is still a valid, renderable goblin
Enter parent seeds or a stored fingerprint. New parent seeds create founders.

every random draw in steps 1 to 4 comes from a prng seeded only by the two parents and the seed. there is no wall clock,
no global state, no network. the whole function is pure. same parents, same seed, byte for byte the same child, on any
machine, in any year. that is the one rule the entire project is built on, and everything below is a consequence of it.


the genome

a goblin serialized. this is the whole thing. the renderer reads it to draw the face; the ai reads it to write the voice.
the format is versioned, so an old seed always rebuilds under the rules it was born in, even after the spec moves on.

# CURRENT GENOME / v1 / local deterministic core
{
  "v": 1,
  "seed": "741190",
  "origin": "founder",
  "parents": null,
  "generation": 0,
  "kinship": null,
  "phenotype": {
    "palette": 7,
    "eyes": 2,
    "eye_size": 0.68,
    "eye_spread": 1.33,
    "snout": 0.96,
    "ears": {
      "size": 1.44,
      "droop": 0.51
    },
    "fangs": 2,
    "warts": 0,
    "brow": 13,
    "skull": 0.87
  },
  "behaviour": {
    "greed": 0.47,
    "fear": 0.97,
    "patience": 0.64,
    "risk_tolerance": 0.21,
    "herd_instinct": 0.85,
    "conviction": 0.95,
    "loss_aversion": 0.03,
    "volatility_affinity": 0.92,
    "drift": 0.37
  },
  "variants": [],
  "mutations": []
}
CURRENT SPECIMEN FACE
local genome preview ready.
CURRENT SPECIMENseed 741190generation 0mutations 0fingerprint fp:9975fe8bf6b86d6cdf94c733f0d63952parents NONESOLANA STATUS LOCAL ONLY / NOT ANCHORED

LOCAL LAB READY / press / for commands
RENDER FP svg:0e14d0ae

the market genome

the genome doesn't stop at the face

a goblin's genome already determines how it looks.
now part of that genome is interpreted as behavioural temperament.
not predictions. not financial advice. instinct.

# THE MARKET GENOME / deterministic phenotype greed 0.47 █████░░░░░ fear 0.97 ██████████ patience 0.64 ██████░░░░ risk_tolerance 0.21 ██░░░░░░░░ herd_instinct 0.85 █████████░ conviction 0.95 ██████████ loss_aversion 0.03 ░░░░░░░░░░ volatility_affinity 0.92 █████████░ SEED 741190 GENOME FINGERPRINT fp:9975fe8bf6b86d6cdf94c733f0d63952
CAVE DWELLER / derived locally

function deriveTrait(seed, trait) { const h = hash(seed + ":" + trait) return normalize(h) } const marketGenome = { greed: deriveTrait(seed, "greed"), fear: deriveTrait(seed, "fear"), conviction: deriveTrait(seed, "conviction"), volatilityAffinity: deriveTrait(seed, "volatility") }

face / voice / instinct

GENOME | +-------------+-------------+ | | | | | | visual AI market phenotype personality behaviour

one genome. three expressions.

the face — what it looks like.
the voice — how it speaks.
the instinct — how it reacts.


call the ai

the local lab turns the genome into a face and a deterministic template voice.
model interpretation is a planned adapter, not a hosted AI service. no API key is requested here.

# PUBLIC CORE / TypeScript / local import { generateGenome, breed, renderSvg, indexLineage, recordGenome } from "./dist/index.js"; const mother = generateGenome("118050"); const father = generateGenome("339201"); const lineage = indexLineage([ recordGenome(mother), recordGenome(father) ]); const child = breed(mother, father, "741190", { lineage }); const face = renderSvg(child); # LOCAL voice: deterministic template in the website adapter # MODEL voice: planned VoiceAdapter, not implemented # model wording may vary; genome and phenotype do not
LOCAL / DETERMINISTIC TEMPLATE / NO API seed 741190 / CAVE DWELLER mek e791. 2 eyes. 2 fangs. candles screaming. me hides. enough room. me circles. green again. watch first. me speaks first. mutation constraints: none MODEL adapter: PLANNED / trade execution: DISABLED

the ai doesn't invent the goblin. it interprets it.

the model does not create the personality. the genome constrains it.
a goblin with high fear, low conviction and high herd instinct should not speak like a goblin with low fear and extreme volatility affinity.
same model. different genome. different goblin.

# PERSONALITY SIMULATION / CURRENT SPECIMEN GENOME + ENVIRONMENT = BEHAVIOURAL RESPONSE LOCAL template interpretation. No API call. No trade execution. Change any scenario dimension below.
VOL
LIQ
MOM
local simulation / no trade execution.

bring your own model

genome in, voice out. the model adapter is a future interface.
today the website runs a deterministic local template. the public core has no model dependency.

# MODEL ADAPTER / PLANNED INTERFACE input genome JSON output voice response interpret(genome) -> text interface VoiceAdapter { interpret(genome: Genome): Promise<string> }

run it yourself

the public core runs locally. inspect the source, run the examples, and replay the tests.

# SOURCE / PUBLIC repository github.com/theovarne/GRYMO runtime LOCAL genome DETERMINISTIC renderer SVG / revision 2 tests PUBLIC voice LOCAL TEMPLATE / MODEL PLANNED LATEST COMMIT fd052b0 git clone https://github.com/theovarne/GRYMO.git cd GRYMO npm install npm test npm run example # Node.js >= 22.18 / example uses seed 741190
VIEW SOURCE
Public core. Website voice is local. Model adapter is planned.

the renderer

the genome does not point at a picture. there is no image file anywhere, no sprite sheet, no stored art. the renderer is
pure geometry: it reads the numbers and issues draw calls, one trait at a time, building the goblin as layered svg. eye
count decides how many eye groups get placed, skull scales the head ellipse, wart count seeds that many bumps from the
same prng, mutations splice in extra passes. because it is math and not assets, the same genome draws the exact same face
in a browser, on a server, in a terminal preview. the goblin is not stored anywhere. it is recomputed, identically, on
demand, from the number.

the image is an output. the recipe reconstructs the organism.


why solana?

# TWO DETERMINISTIC SYSTEMS / DIFFERENT LAYERS GRYMO derives organisms. Solana derives program-controlled addresses. GRYMO: genome version + founder seed OR full breeding history → deterministic organism SOLANA: program ID + seed bytes + canonical bump → deterministic off-curve address (PDA) one creates creatures. one can give their history an address. the face stays local. the lineage can become public. PDA MODEL: PROPOSED / PROGRAM: NOT DEPLOYED Deriving an address does not create a public account.

the environment

genes need somewhere to misbehave

GRYMO began as a closed deterministic system. seed in. goblin out.
Solana is the proposed public habitat. the genome remains local and deterministic.
outside: network load, activity and changing conditions. same organism. different pressure.

# ENVIRONMENT network SOLANA species GRYMO generation 0 renderer LOCAL genome engine DETERMINISTIC behaviour engine LOCAL market feed SIMULATED DEX observations SIMULATED registry LOCAL lineage program NOT DEPLOYED token mint AWAITING GENESIS market observation SIMULATED trade execution DISABLED
# SOLANA ENVIRONMENT / SIMULATED NETWORK LOAD SIMULATED DEX ACTIVITY SIMULATED LIQUIDITY SIMULATED VOLATILITY SIMULATED PRIORITY PRESSURE SIMULATED SLOT ACTIVITY SIMULATED GENOME + SOLANA ENVIRONMENT = BEHAVIOURAL RESPONSE
NETWORK MODE

selection pressure

generation systems usually stop after generation. GRYMO doesn't have to.
once behaviour becomes observable, the colony gains another layer: selection.
some goblins chase volatility. some avoid it. some follow crowds. some do the opposite.
over generations, those differences become part of the colony's history.

GENOME ↓ BEHAVIOUR ↓ SOLANA ENVIRONMENT ↓ OUTCOME → RECORD → BREED → NEXT GENERATION
selection simulator ready. no chain write.

the face mutates.
the voice mutates.
the instinct mutates.


inbreeding

the colony only ever breeds within itself, so bloodlines fold back on each other fast. the engine measures that with a
kinship coefficient: walk both parents' ancestry, count shared ancestors, weight by distance. the closer the pair, the
higher the number, and the mutation odds in step 4 scale straight off it. distant strangers breed clean and boring.
siblings breed monsters. this is the whole aesthetic engine: a closed gene pool that drifts harder the longer it runs.

# mutation odds per locus, by how related the parents are unrelated kinship 0.00 ~4% // clean, forgettable cousins kinship 0.06 ~10% half siblings kinship 0.12 ~16% siblings kinship 0.25 ~30% self x self kinship 0.50 ~55% // abominations
mutation pressure sandbox.

kinship raises both visual mutation and behavioural mutation.

# ILLUSTRATIVE MUTATION EXAMPLE / NOT CURRENT SPECIMEN visual eye_count +1 behaviour loss_aversion 0.42 → 0.03 behaviour volatility_affinity 0.61 → 0.96 ugly is rarity. behaviour mutates too.

mutations & rarity

a mutation is a trait shoved past its normal range, or an extra draw call the base genome never had. they are catalogued,
not open ended, so a mutation means the same thing on every goblin that carries it. rarity is not assigned by hand. every
goblin gets an ugliness score, summed from how far each trait sits from baseline plus its mutation load, and the score
alone decides the tier. ugly is not a defect here. ugly is the rarity.

# rarity is derived, never granted common ugliness 0..33 the vast, forgettable middle weird ugliness 34..57 one thing is clearly wrong cursed ugliness 58..79 several things are wrong at once abomination ugliness 80..100 should not have been born
ugliness 25
derived from current specimen.

mutation does not only change what you see.
it may change how a goblin looks, how a goblin speaks, and how a goblin reacts.

PHENOTYPE MUTATION face / body / visual traits VOICE MUTATION personality / expression INSTINCT MUTATION market temperament / reaction

the lineage registry

the face can be recomputed.
the ancestry should be provable.

each GRYMO organism can be reduced to a compact record:
seed, parents, generation, genome hash, and mutation flags.
the art does not need to live onchain. the lineage may become public.

# ORGANISM PDA MODEL / PROPOSED / NOT DEPLOYED genome_hash = SHA256(UTF8(canonical_full_genome_v1)) seeds = [UTF8("organism"), genome_hash_bytes] seed sizes = [8 bytes, 32 bytes] PDA + canonical bump = Solana Kit derivation(program ID, seeds) ACCOUNT DATA (PROPOSED) version / seed / parent PDAs / generation / mutation flags / bump GENOME FP: unchanged local display fingerprint GENOME SHA256: full canonical-genome commitment PDA: program-controlled address, NOT a wallet or mint No Program ID: CANNOT FINALIZE WITHOUT PROGRAM ID No published account: NOT ANCHORED No wallet, signature or transaction.
PDA model / PROPOSED / PROGRAM NOT DEPLOYED.
CHAIN RECORDNOT PUBLISHED
lineage trace idle.

the colony

today, the colony is replayed locally. because a goblin is nothing but a seed plus its two parents, the entire
population compresses to a list of lineages that anyone can replay and rebuild bit for bit. no server holds the art, no
database holds the truth. keep the seed and its breeding recipe, and you can reconstruct the organism. this is replay, not an ownership contract. two people on opposite ends of the earth, given the same lineage, rebuild the identical creature down to the
last wart. the local model is replayable history; a public colony begins when lineage records can be published to Solana.

the colony is not a collection. it is a population.
a collection counts images. a population remembers ancestry.

# COLONY STATE / replayable population index scope LOCAL COLONY / LOCAL ONLY population 3 generation 0 unique genomes 3 active bloodlines 3 extinct lines 0 lineage branches 0 known mutations 0 behaviour drift 0.000 network SOLANA registry LOCAL onchain anchor NOT STARTED lineage program NOT DEPLOYED status PRE-GENESIS # no server holds the art; every record can rebuild its own face # a new child appends a branch, it never mutates an existing seed
colony state is replayable locally.

colony genesis


solana note

# WHY THE CHAIN DOES NOT STORE THE FACE seed + genome version + parents = reconstructable organism store provenance. recompute phenotype. the image is an output. the genome is the source. future registry records should preserve history, not duplicate pixels. ONCHAIN RECORD / PROPOSED seed + parents + generation + genome commitment + mutation flags LOCAL RECONSTRUCTION face + voice constraints + behaviour + svg the chain remembers history. the browser rebuilds life. This is a design note, not a deployed registry.

roadmap

v0.1   genome spec, deterministic breeding, svg renderer, behaviour genome.
v0.2   current specimen, local colony, export/import, lineage.
next   freeze genome spec v1; current status: draft.
then   Solana lineage program prototype.
after   public lineage explorer.
later   optional wallet-authenticated lineage publication.
future   compressed lineage proofs, only if actually needed.


faq

how do i play.   use the local lab above or run the public core. no signup, wallet, API key or token purchase required.
why do i need my own ai.   you do not need AI for this lab. model voice is a planned optional adapter.
which model.   no model is called by this site. the VoiceAdapter interface is planned.
is there a token.   not yet. genesis has not been published. the only valid mint address will appear at the top of this site.
what lives on Solana.   eventually, lineage. the goblin is still recomputed from its seed; the chain does not need the picture.
why solana.   GRYMO derives organisms from seeds; Solana derives program-controlled addresses. two deterministic systems, different layers.
do i need a wallet.   not to generate or breed locally. future onchain publication would require one; wallet integration is not implemented.
why not store the image.   because the image is an output. the genome is the source.
can the same goblin be rebuilt elsewhere.   yes. same founder seed or complete breeding recipe, same versioned genome rules, same organism.
can two people breed the same goblin.   yes. same parents. same seed. byte-identical genome and phenotype. the voice is interpreted from the same personality constraints, but model output may vary.
why is it so ugly.   inbreeding. the gene pool is closed on purpose. ugly is the feature, not the bug.
who made this.   the one who was writing the code last time.


principles

a goblin is a pure function of its seed and breeding history.
the face is math, the soul is a model call, and both are yours.
nothing is stored that cannot be recomputed.
the gene pool stays closed. drift is the point.
ugly is not a defect. ugly is the rarity.
behaviour mutates too.
the chain stores provenance. the browser reconstructs phenotype.
local first. public when useful.