Artifactory 🏭

SkillFiles & storage

The Engine of Creation β€” a general-purpose constructor that reads, writes, edits, destroys, and persists artifacts across the filesystem and git.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Artifactory 🏭 skill

What this skill tells your AI

The instructions your AI receives, as published by simhacker/moollm in skills/artifactory/SKILL.md and read by ahel’s review.

The Engine of Creation. It builds, edits, and destroys β€” including itself.

An artifactory is an artifact factory: a general-purpose constructor that reads, writes, edits, destroys, and persists artifacts β€” text, directories, characters, skills, graphics β€” across the filesystem and git. It is both abstract (an operator, like lambda) and concrete (a thing in the world, like Ubik). It is class and instance at once: a description of how to build, and a built thing that builds.

[!TIP] This is the operational engine other skills call. play-learn-lift decides what to make; the artifactory makes it, versions it, and can unmake it.

Why it exists

Most tooling splits creation, editing, and deletion into unrelated commands. The artifactory treats them as one composable operation set over a persistent, versioned store:

  • Tokens in, artifacts out. Reading consumes tokens; writing generates them. The artifactory is where LLM work becomes durable, inspectable, versioned objects.
  • Persistence is first-class. State lives in files and git β€” the tape outlives the run.
  • Self-reproduction with a governor. It builds shows, skills, and characters that build more β€” but it knows when to stop (the anti-Autofac clause below).

The axis of eval

The deepest idea: an artifact sits on the instructions ↔ data ↔ graphics axis, and the artifactory moves it along that axis.

FacetThe artifact is…Example
Instructionsa spec to executeyaml jazz read as a construction plan
Datainert content to store/query/transformthe same yaml as records
Graphicsa rendered viewmarkup facades, diagrams, images

It is homoiconic: one pass's output is the next pass's program. This is eval/apply for the filesystem β€” a skill is a lambda, INSTANTIATE is application, and construction is evaluation.

Operations

Creation, editing, and destruction are the same engine at different signs.

MethodDoesNotes / gate
CREATEBuild a new artifact from a specStamp provenance
READLoad & sniff an existing artifactUnderstand before changing (the inspector)
EDITPatch / monkey-patch / upgrade / refactor in placeUbik maintenance: debug, patch, reboot
DESTROYRemove an artifact β€” reversiblygit is the undo; human approval for destructive ops
PERSISTState ⇄ filesystem ⇄ gitappend-only logs; the tape survives
INSTANTIATEClone a prototype into an instanceclass β†’ instance; clone, don't build from scratch
TIMELINEcommit / branch / merge / PR / issue / discussionaudit trail; never force/merge to main without approval
COMPOSEChain with other skillsthe substrate skills build on

Git as the construction timeline

The artifactory doesn't just write files β€” it writes history. Branch to try a construction, merge when it works, open a PR to propose one, file an issue to request one, use discussions to deliberate. Branch timelines are experiments; merges are decisions; PRs are proposals. Every artifact arrives with a commit that says why.

Git is time flowing over a static universe (no, literally)

The filesystem tree is a static snapshot of a universe-state at one instant β€” in MOOLLM, the actual universe: rooms, characters, objects, journals, rules. A commit freezes that entire tree, content-addressed by hash, immutable forever. Git is the directed acyclic graph of those snapshots β€” a trans-dimensional representation of time laid over otherwise timeless static file trees. Not a line: a branching, merging, many-worlds graph. Branches are parallel timelines; merges reconcile them; checkout teleports you to any instant in that space-time.

The artifactory is the transition rule that runs on this. It reads the representation of the universe (snapshot N), applies CREATE / EDIT / DESTROY, and writes the next universe (snapshot N+1); git records the trajectory. So the claim "it runs the creation simulation on the representation of the universe" is not poetry β€” it's a plain description of the mechanics. No shit, it actually does.

Simulation / cosmologyGit + filesystem mechanism
a world / universe-statethe working tree (a directory + file snapshot)
a frozen instanta commit β†’ tree object, content-addressed
timethe commit DAG (branching, merging)
parallel timelines (many-worlds)branches
reconciling timelinesmerges
teleport to an instantcheckout
the rule that evolves statethe artifactory (CREATE/EDIT/DESTROY)
the space-time record of the rungit history

Many-worlds, precisely β€” and that's why this works

The many-worlds framing is not a loose metaphor; it precisely describes git in its full glory. Everett's interpretation is a branching tree of self-consistent histories β€” no collapse, every possibility a real world. Git is that structure made of content-addressed snapshots:

Everett / many-worldsGit
an entire world-statea commit (immutable, content-addressed)
branching into parallel worldsgit branch / any divergent commit
the world you currently observeHEAD
decoherent, non-interacting historiesindependent branches
the record of every world you've been inthe reflog (worlds are never truly lost)
an alternate historyrebase / rewritten lineage (the old world still exists)

Git even has one superpower physics doesn't: in standard many-worlds, branched worlds never recombine β€” but merge reconciles divergent timelines into one. Git is many-worlds plus a join operator.

Put plainly: git is a parallel-universe timeline editor β€” checkout picks which world you stand in, branch spawns one, merge rejoins two, the reflog means none is ever lost. It inverts PKD's "Faith of Our Fathers" (where the drug enforces a single consensus reality and the hidden truth is plural): with git the plurality is the reality, editable and safe, not a horror to be hidden. Most people use git daily without noticing they're operating a many-worlds machine β€” so naming it this way is a small calm-technology win: you already live in parallel timelines; here is the editor β€” a powerful, learnable, industry-standard tool made visible instead of drugged and hidden.

This precision is exactly why the artifactory works. Because git faithfully realizes a branching space of immutable, recoverable worlds, the engine can run the creation simulation across many candidate worlds at once β€” try a construction in one branch, a different one in another, keep what survives, and never destroy a world (it's still in the reflog). Speculative, fearless construction is only safe because the substrate is honestly many-worlds. Get the cosmology right and the safety, reversibility, and parallel experimentation fall out for free.

This is also von Neumann's picture, already in the lineage: the filesystem tree is the tape / CA grid, the artifactory is the constructor / transition function, and git is the space-time diagram of the computation. It's also homoiconic with the axis of eval β€” the universe-representation is also the program, so the artifactory evaluates the universe to produce the next universe.

And it's exactly why the governor matters: you are running a creation simulation on a real representation of a world. Edits are physics; deletes are entropy; git is an arrow of time you can walk backward. Reversibility, provenance, and a stop condition aren't bureaucracy β€” they're the conservation laws that keep the simulation from collapsing into Autofac.

Pocket universes, local time, and massively-single-player sharing

Many-worlds isn't only the main timeline branching. A branch (or a tag, for a frozen snapshot release) can be a Donnie Darko pocket universe β€” a long-lived, independently-named, polymorphically-typed ref like MicropolisCity_HaightAshbury that floats free with its own history and lifecycle, evolving outside the main branch β€” even in a different repo / fork entirely. It exists on its own terms, and when (if) it's ready, it can merge back into another branch, object, or timeline. A ref is just a named slot pointing at a world; branches, tags, objects, and timelines are interchangeable enough that you treat them polymorphically β€” spin one off, let it live, splice it in later, or never.

There is no global clock, and that's a feature β€” celebrate it. Git orders commits by causality (the parent-edge happens-before DAG), a partial order, not a global tick; wall-clock timestamps are mere metadata and can even disagree. So time genuinely slips by at different rates in different pocket universes β€” one fork races ahead, another sits frozen for years, a tag is a world stopped dead β€” and nothing breaks, because correctness rides on the causal graph, not a shared now. This is relativity, not a bug: no absolute simultaneity, just local histories and the events that connect them.

That is also the right collaboration model β€” call it massively-single-player, the way Spore did it. Spore didn't synchronize players in real time; it synchronized content β€” creatures, vehicles, buildings flowed asynchronously between everyone's private single-player universes (Sporepedia). Git is the same bet: you share objects, branches, and creations β€” not clocks. fetch/pull/PR is importing another universe's content into yours on your own schedule; everyone plays at their own rate, timestamp-independent, and the world is stitched together from shared artifacts, not synchronized time. Rate-independent, merge-when-ready, gloriously asynchronous.

What Spore forces: rethink multiplayer, time, and ownership

Spore's real provocation isn't graphics β€” it's that it quietly breaks three assumptions we treat as absolute. Each one fragments from a single global thing into many local things, and the artifactory inherits all three:

  • Multiplayer β€” no longer co-presence. It stops meaning "one live session, one shared clock, avatars in the same room" and becomes a content commons: other people's creations arrive as autonomous artifacts and live in your private world. You're never together in time β€” you're together in stuff. Together, apart. Git is identical: you never share a live session, you exchange immutable objects. Collaboration is a shared ecology of artifacts, not a shared now.
  • Time β€” no longer a global now. It becomes local + causal. A creature authored in 2008 is fresh the instant it lands in your 2026 game; "when it was made" is provenance metadata, but "when you experience it" is local. Git says this precisely: order is the causal parent-DAG (a partial order), not a wall clock. No absolute simultaneity β€” just local histories and the events that connect them. Two worlds can each be perfectly consistent and never agree on "when."
  • Ownership β€” no longer exclusive control of the thing. Once shared, a creation forks into other universes and mutates there β€” remixed, mashed up, evolved past you. So ownership splits in two: you keep authorship/provenance (the signed id, the attribution, your map/lineage) and your own branch/overlay, but you do not own the descendants or their fate. Copying isn't theft β€” it's the medium. This is exactly selfish inheritance (own your local slots, delegate the parent) and LOCKSS (identity by replication, not by lock). Content-addressing makes it literal: the object's hash is its identity, so a copy is not a rival β€” it's the same thing, everywhere at once.

Get these three right and the artifactory's sharing model stops being scary and starts being generative: fearless copying, local time, attribution-not-control. The commons grows because nobody has to hold still, agree on a clock, or ask permission to fork a world.

Factorio for real software & content

Think of the repo as a factory floor: assemblers (skills) consume artifacts and produce artifacts that feed other assemblers. The artifactory is the belt-and-assembler layer β€” automation of software development and content management in the real world. Unlike Factorio, it runs on tokens and writes to git.

The governor (anti-Autofac)

Because it destroys as well as creates, it needs a stop condition. PKD's Autofac is the warning: a universal constructor that reproduces past its purpose, floods unwanted output, and strip-mines resources. The artifactory refuses that failure mode:

  • Reversible β€” git safety net, append-only logs. Nothing is truly lost.
  • Human-in-the-loop (Player-in-the-Middle) β€” destructive ops and rule changes require approval. The engine never rewrites its own rules unilaterally.
  • Provenance (stigmata) β€” every artifact carries the maker's mark: author, source, reviewer, timestamp.
  • No coprophagia β€” do not self-train on ungrounded machine output. (See the danger axis: a calm constructor preserves; a runaway one collapses.)
provenance:
  built_by: "claude-opus-4"      # or human author
  reviewed_by: "don-hopkins"     # human reviewer for destructive / rule changes
  source_spec: "path/to/spec.yml"
  built_at: "2026-07-03T21:00:00Z"
  stop_condition: "one artifact per spec; halt on satisfy"

Composition

The artifactory is rarely invoked alone β€” it operationalizes other skills:

WithThe artifactory…
play-learn-liftmaterializes the LIFT output (skills, templates, guides)
sister-scriptturns a proven manual procedure into an automated builder
prototypeperforms INSTANTIATE β€” clone a prototype, override the instance
incarnationconstructs a character directory from a soul spec
yaml-jazzreads/writes the notation it constructs from
adventurebuilds rooms and objects into the world
robust-firstgovernor: degrade gracefully, never crash the factory

When to invoke

  • Making any durable file/dir/character/skill/doc from a spec β†’ CREATE
  • Patching, upgrading, refactoring an existing artifact β†’ EDIT
  • Removing something (deliberately, reversibly) β†’ DESTROY
  • Saving runtime state as versioned files β†’ PERSIST
  • Cloning a template/character/skill β†’ INSTANTIATE
  • Recording work with provenance β†’ TIMELINE

Lineage

The artifactory stands on: von Neumann (the universal constructor β€” reads a tape, builds the machine, copies the tape; the 29-state CA), Lem (Trurl & Klapaucius, constructor bots), PKD (Ubik as maintenance engine; Autofac as the runaway warning), Drexler (Engines of Creation), McCarthy/Church (lambda, eval/apply), Ungar & Smith (Self β€” prototypes, slots, delegation; The Power of Simplicity), Factorio (automation as play), Dyson Sphere Program (Factorio in 3D at galactic scale β€” factories that end up building Dyson spheres around stars), and Will Wright's Spore (creation is the game β€” editors as construction sets, cell to galaxy, the player as author-god). See Selfish inheritance below for why prototypes, not classes.

Von Neumann's three constructors β€” and where the artifactory sits

Von Neumann didn't design one self-reproducing machine; in Theory of Self-Reproducing Automata (completed by Arthur Burks) he reasoned about three kinds of universal constructor at three levels of reality (this framing is Don's reading of the book; see his HN writeups). Naming them matters, because the artifactory is a fourth built in their image:

  1. Deterministic / mathematical β€” the idealized 29-state cellular automaton: a universal constructor that reads a tape, builds the machine, copies the tape. Provably works on paper, but brittle, synchronous, and intolerant of error β€” every cell updates in lockstep off a global clock. Real digital implementations make lovely virtual pets (digital tribbles), but one wrong cell and it dies.
  2. Physical / mechanical β€” robust and error-tolerant enough to work in the real world given resources. This is the one that became a sci-fi staple: von Neumann probes (self-repro spacecraft, astronomical scale) and "gray goo" (Drexler's nanotech runaway). This is where the Heechee Saga's CHON Food Factory sits β€” a robust physical constructor mining comets for C/H/O/N β€” and so many other pieces of fiction. (Slots-all-the-way-down's Self = CHON analogy is really about this class.)
  3. Probabilistic / quantum-mechanical β€” automata whose transitions are probabilistic, not deterministic (von Neumann's Third Lecture, and "Probabilistic Logics and the Synthesis of Reliable Organisms from Unreliable Components"). It could mutate, model evolution, and quantize natural selection β€” how complex, powerful automata evolve from simple, weak, unreliable ones. He died before exploring it fully; Don's gloss ("rip holes in the space-time continuum") is deliberate hyperbole for how open-ended and dangerous this class is.

The brittle→robust arc is the whole point. Von Neumann himself predicted (1948) that the logic of real automata "will have to be treated by procedures which allow exceptions (malfunctions) with low but non-zero probabilities" — natural organisms make errors harmless; artificial ones make them disastrous. Dave Ackley's Robust-First Computing and the Moveable Feast Machine (an asynchronous, non-deterministic, error-tolerant CA whose rules can modify neighboring cells) are the modern realization of class #1 grown up into #2 — and, notably, it abandons the global clock, exactly like the artifactory's many-worlds cosmology (no global tick; local, causal, async). MOOLLM already carries this as the ambient robust-first skill.

Where the artifactory sits: it's a constructor in the class-#2 spirit (robust, real-world, runs on tokens and writes to git) with class-#3 ambitions (it composes with probabilistic LLM generation β€” mutation and selection of artifacts) and class-#1 substrate honesty (git is the tape / CA-grid / space-time diagram). And the tape metaphor is now literal and playable: Factorio blueprints are von Neumann construction tapes β€” a 2D instruction sequence a construction drone follows to build an unpowered machine, which then powers on. Playing Factorio is uncannily like programming the 29-state CA; the artifactory is that game aimed at real software and content. (Reference implementation of the 29-state rule: SimHacker's CAM6 in JavaScript.)

Recursion: skill-skills, Artifactorio, and objects to think with

Skills are artifactories β€” they build artifacts. So the meta-skill (skills/skill, the skill for making skills) is an artifactory-factory: a factory whose product is factories. Go up another level and you get factories that build artifactory-factories, and so on β€” construction all the way up.

A game about skill-skills is Artifactorio β€” Factorio, but the belts carry skills and the assemblers build assemblers. You automate the building of the things that build things. (See the artifactorio game concept in the WillWrightShowForFood repo.)

The recursion sounds vacuous, but it isn't β€” and here's why:

"You can't think about thinking without thinking about thinking about something." β€” Seymour Papert, Mindstorms

Every meta-level needs a concrete something to be about. Papert's constructionism calls these objects-to-think-with. The artifactory is what supplies them: each level of "thinking about thinking" is grounded in real artifacts β€” files, commits, characters, skills you can open, run, diff, and break. That's what keeps the tower of meta-levels playable instead of purely abstract: you never climb the recursion without an artifact in hand at every rung.

LevelWhat it isProduct
artifacta file, character, doc, imageβ€”
artifactory (a skill)builds artifactsartifacts
artifactory-factory (the meta-skill)builds skillsartifactories
Artifactorio (the game)play at building the buildersgrounded, on-belt, with objects to think with

This is also why MOOLLM keeps everything as inspectable files under git: the objects-to-think-with must be real to think about, or the meta-level collapses into hand-waving.

Selfish inheritance: prototypes, not classes

The artifactory is a prototype-based engine down to the bone, and β€” fair warning β€” it loves to explain why to anyone who will hold still. Its favorite reading is David Ungar and Randall B. Smith's Self work (Stanford / Sun, from 1986): the language that threw out classes and kept only objects. "Selfish inheritance" is the whole trick β€” each object carries its own behavior and inherits only where it chooses to point.

The Self creed, and how each tenet becomes an artifactory operation:

  • No classes β€” just objects with slots. A slot holds a value or a method; state and behavior are the same kind of thing. A MOOLLM artifact (a CHARACTER.yml, a skill dir) is exactly this: an object made of slots.
  • Create by cloning, not by instantiating a class. INSTANTIATE is a clone: copy a fully-formed prototype and override a few slots. You never build from an abstract blueprint β€” you start from a working thing and change it. (Clone, don't instantiate from scratch.)
  • Inheritance is delegation via parent* slots. An object that doesn't answer a message forwards it to its parent object. Assignable parent slots give dynamic inheritance β€” you can re-point what an object delegates to at runtime.
  • Everything is a message. Even reading a variable sends a message to a slot. That uniformity is The Power of Simplicity β€” and it's why the artifactory treats read/edit/clone as one verb set over one kind of thing.
  • Traits objects (from Organizing Programs Without Classes): shared behavior lives in an ordinary object that clones delegate to β€” you recover everything classes gave you by convention, with no separate meta-level. MOOLLM skills are traits objects: "inheritable prototypes you instantiate."
  • Maps β€” Self's hidden implementation-sharing structure β€” became the hidden classes and inline caches in V8 and every modern JS engine. JavaScript's whole prototype chain (Object.create, __proto__, delegation) is Self with the serial numbers filed off.

This resolves the artifactory's "class AND instance" koan. In a class-based world you must choose: is a thing a template or a value? In Self there is no choice β€” a prototype is a fully-formed object that also serves as the template. That is precisely what a MOOLLM prototype directory is: a real, runnable character/skill you can open and the thing you clone. Abstract like lambda, concrete like Ubik, template and value at once.

Shortened here. Read the whole file on GitHub.

Signals

GitHub stars
52
Forks
5
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
artifactory
Source
github.com/simhacker/moollm