{"id":50533154,"url":"https://github.com/daedalus/syntropy","last_synced_at":"2026-06-03T15:30:25.706Z","repository":{"id":361019885,"uuid":"1252696791","full_name":"daedalus/syntropy","owner":"daedalus","description":"Turing-complete artificial life simulation with GenomeVM — organisms evolve VM programs in a shared 2D ecosystem","archived":false,"fork":false,"pushed_at":"2026-05-28T20:59:53.000Z","size":440,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-28T22:19:09.511Z","etag":null,"topics":["artificial-life","cellular-automata","evolution","genetic-algorithm","open-ended-evolution","simulation","turing-complete"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daedalus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-28T19:25:09.000Z","updated_at":"2026-05-28T19:27:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/daedalus/syntropy","commit_stats":null,"previous_names":["daedalus/syntropy"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/daedalus/syntropy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daedalus%2Fsyntropy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daedalus%2Fsyntropy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daedalus%2Fsyntropy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daedalus%2Fsyntropy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daedalus","download_url":"https://codeload.github.com/daedalus/syntropy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daedalus%2Fsyntropy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33872297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["artificial-life","cellular-automata","evolution","genetic-algorithm","open-ended-evolution","simulation","turing-complete"],"created_at":"2026-06-03T15:30:24.564Z","updated_at":"2026-06-03T15:30:25.698Z","avatar_url":"https://github.com/daedalus.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# syntropy — self-evolving ecosystem in your terminal\n\nDigital organisms run Turing-complete VM programs (46 opcodes) on a shared 2D grid.\nNo fitness function. No selection pressure. No objective. Evolution emerges bottom-up.\n\n![syntropy screenshot](image.png)\n\n## Run\n\n```bash\npython3 syntropy.py\n```\n\nCtrl+C to stop. Extinction summary on exit.\n\n### Options\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--seed N` | time | Random seed |\n| `--width N` | 72 | Grid width |\n| `--height N` | 26 | Grid height |\n| `--tick-rate N` | 0.06 | Seconds per tick |\n| `--volume N` | 0.3 | Sound volume 0–1 |\n| `--no-sound` | — | Disable audio |\n| `--max-energy N` | 200 | System-wide energy cap |\n| `--max-movement-speed N` | 0 | Max moves/tick/org (0=unlimited) |\n| `--continuous` | — | Auto-restart on extinction |\n| `--log FILE` | extinction.json | Extinction log path |\n\n## Architecture\n\n### GenomeVM — 46 opcodes\n\nPrograms are lists of bytes grouped in 3-byte instructions: `[opcode, a1, a2]`.\nExecution is async per organism per tick. Energy = gas (budget up to `min(energy×0.4, 8.0)`).\n\n| Cat | Opcodes |\n|-----|---------|\n| Flow | NOP, JMP, JZ, JG, JL, JNE, CALL, RET, HALT |\n| Math | MOV, ADD, SUB, MUL, DIV, MIN, MAX, ABS, NEG, MOD, SQRT, EXP |\n| Stack | PUSH, POP, DUP, DROP, SWAP, OVER, PICK, DEPTH |\n| Bit | AND, OR, XOR, NOT, SHL, SHR, BIT |\n| Compare | CMP |\n| Random | RAND |\n| Reg | IND, GEN, PC, SETPC, TICK |\n| I/O | SENSE, ACT |\n| Energy | ENERGY |\n| Memory | MLOAD, MSTORE (16-slot persistent per-organism), GLOAD, GSTORE (64-slot shared world memory) |\n\n### Sensors (25)\n\nPosition, resources (food distance/direction), temperature, pressure, moisture, daylight,\norganisms (density, distance, direction), population, predator/prey/kin proximity,\ndisease, season, terrain, traces, signals, symbol channel (symbol_id, symbol_val).\n\n### Actions (13)\n\nMove N/S/E/W, toward food, away from organisms, EAT, ATTACK, REPRODUCE, REST, SOUND, EMIT, SYMEMIT.\n\n### Weight system\n\nAll organisms start at `weight=1.0`. Movement cost = `0.02 × speed × weight × dissipation`\n(speed = number of moves this tick, creating inertia). Each move burns `0.01 × speed` weight.\nEating food adds weight; eating other organisms transfers their mass (requires heavier attacker).\nWeight = 0 → wasting death.\n\n### Dual-bank DNA\n\nTwo genome banks per organism: `genome_a` (expressed) and `genome_b` (silent backup).\nActive bank selected at birth. Gene conversion (2%/tick) copies a random byte from inactive to active,\nproviding automatic repair without explicit opcodes. Each bank mutates independently during reproduction.\n\n### Traces \u0026 signals\n\nOrganisms deposit pheromones (trace=0.5/tick, decay ×0.95) detectable via TRACE sensor (radius 3).\nEMIT action broadcasts a register value to nearby cells; SIGNAL sensor reads the buffer.\nSYMEMIT broadcasts a typed `(symbol_id, value)` pair; SYMBOL_ID and SYMBOL_VAL sensors read the\ndominant symbol at the organism's cell. Enables typed coordination and proto-language.\nEnables communication, coordination, and memory sharing.\n\n### Memory systems\n\n**Per-organism persistent memory** (16 float slots, opcodes MLOAD/MSTORE): survives across ticks\nfor the lifetime of the organism. Allows learned state, counters, and context that persists.\n\n**World shared memory** (64 float slots, opcodes GLOAD/GSTORE): a single global blackboard all\norganisms can read and write. Decays slowly (×0.998/tick). Organisms that evolve to coordinate\nthrough specific slots gain collective knowledge that outlives any individual.\n\n**Cultural transmission**: on reproduction the parent's 16-slot memory is copied (with small\nGaussian noise) into the child, creating a non-genetic inheritance channel that complements\ngenome mutation. Learned behaviours can propagate across generations without being encoded in DNA.\n\n### Per-organism audio\n\n3-band sound (bass/mid/treble) driven by SENSE→ACT SOUND. Environmental ambient audio\n(pressure→bass, moisture→bass, temperature→mid, daylight→treble, season→sub-bass).\nAsync mixer with persistent `aplay` process and sample-accurate phase tracking.\n\n### Economy\n\n- INITIAL_RESOURCES=60, RESOURCE_REGEN=3, REPRODUCTION_THRESHOLD=6.0\n- Summer upkeep 0.06/tick, winter 0.12/tick\n- System-wide energy cap (default 200): total organism energy+fat scaled proportionally when exceeded\n- Energy dissipation above 5.0: `1.0 + max(0, energy-5.0) × 0.15` — anti-hoarding pressure\n- Per-opcode instruction costs: NOP=0.002 to DIV/RAND/SENSE=0.016; SENSE/ACT add variable cost from a1\n\n### Ecology\n\n- Non-toroidal world (edges clamp) — edge ecology\n- Day/night cycle with horizontal bar visualization\n- Seasons (summer/winter) affect temperature and upkeep\n- Temperature gradient: latitude + season ± diurnal cosine\n- Disease, immunity, territory, nests, fossils\n- Horizontal gene transfer, spontaneous mutation, fighting overlap\n- Weak auto-eat (30%+age bonus) and auto-reproduce (10% at 2× threshold) for bootstrap\n\n## Visualization\n\n| Glyph | Meaning |\n|-------|---------|\n| `·` | Food resource |\n| `⬟` | Organism (varies by hue/energy) |\n| `▲●★◆◉■⬢✦✧◈` | Species glyphs |\n| `✿` | Corpse / special resource |\n| `═══` | Top/bottom bars with day/night coloring |\n\nStatus line: Pop, avg energy, avg weight, generation, avg age, species count,\nShannon diversity, fossils, resources, season, tick, total system energy.\n\n## Requirements\n\nPython 3.10+. No external dependencies.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaedalus%2Fsyntropy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaedalus%2Fsyntropy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaedalus%2Fsyntropy/lists"}