{
  "markdown": "# lisp-machine-container-museum\n\nThis repo launches two Lisp Machine environments in Guix containers:\n\n- `CADR / LM-3`: fully public, based on the LM-3 upstream Fossil repos\n- `Open Genera`: requires your own purchased `opengenera2.tar.bz2`\n\nIf you only want one system to start exploring, use the CADR path first.\n\nHistorical, architectural, and artifact research lives in the\n[museum knowledge base](docs/index.md). It includes the current analysis of\n[Open Genera VLOD world files](docs/genera/world-loads-and-vlod.md).\n\nThe same canonical Markdown is published as a Genera-profile GitHub Pages site:\n\n<https://htayj.github.io/lisp-machine-container-museum/>\n\nBuild the site locally with Pandoc and the pinned public Genera Fonts release:\n\n```bash\ncurl -L --fail \\\n  https://github.com/htayj/genera-fonts/releases/download/v0.1.1/Genera-fonts-latin-v0.1.1.tar.gz \\\n  -o /tmp/Genera-fonts-latin-v0.1.1.tar.gz\necho \"a72cfaa9ed6c418ba751d4a32d3cf715b1b3e6edd44acdc144f297d0c915b3cf  /tmp/Genera-fonts-latin-v0.1.1.tar.gz\" \\\n  | sha256sum --check\npython3 scripts/build-docs-site.py \\\n  --font-archive /tmp/Genera-fonts-latin-v0.1.1.tar.gz\npython3 -m http.server 8000 --directory _site\n```\n\nThe generated `_site/` tree is ignored. The Pages workflow builds it from `docs/`\nand does not commit generated HTML or Genera font data to this repository. See\n[Publishing the museum documentation site](docs/site-publication.md) for the\ninterface behavior, font provenance, build boundary, and validation procedure.\n\n## What you need\n\n- Guix installed and working on the host\n- X11 available on the host\n- for Open Genera only: a local `opengenera2.tar.bz2`\n\nIf X11 authentication fails, allow your user explicitly:\n\n```bash\nxhost +SI:localuser:$USER\n```\n\n## Which emulator to use\n\nUse `CADR / LM-3` if you want:\n\n- a fully public system\n- the simplest first boot\n- the MIT LM-3 environment from `tumbleweed.nu`\n\nUse `Open Genera` if you want:\n\n- Symbolics Genera\n- your own commercial Open Genera world\n- a closer approximation of a later Symbolics workstation environment\n\n## CADR / LM-3\n\n### Launch\n\n```bash\n./scripts/cadr-guix-container.sh --mode run\n```\n\nThe first run will:\n\n1. start a Guix container with the build/runtime dependencies for `usim`\n2. create a local Fossil checkout in `./l`\n3. cache the supporting upstream Fossil repositories in the repo root\n4. build and launch the emulator\n\n### What a successful boot looks like\n\nA successful cold boot normally lands in a Lisp Listener. That is not a blank\nsystem; it is the expected usable prompt.\n\nOn the first run, the bootstrap and build can take a while. Later runs should\nbe much faster.\n\n### Keyboard notes\n\nThe default CADR key mapping in `usim` includes:\n\n- `F1` = System\n- `F2` = Network\n- `F3` = Status\n- `F4` = Terminal\n- `F5` = Help\n- `F6` = Clear Input\n\nIf you are unsure what to do next after boot, `F5` is the first key to try.\n\n### Headless computer-use harness\n\nThe computer-use harness runs `usim` on a private, authenticated Xvfb display and\ndrives its real X11 window through keyboard and mouse events. It is intended for\nrepeatable behavioral checks and evidence screenshots without taking over the host\ndesktop.\n\nCheck the harness dependencies and prepared CADR artifacts:\n\n```bash\n./scripts/cadr-computer-use.sh doctor\n```\n\nStart a named session and inspect its status:\n\n```bash\n./scripts/cadr-computer-use.sh start --session research\n./scripts/cadr-computer-use.sh status --session research\n```\n\nThe first start creates private copies of the System 303 disk and source trees. A\nlater plain `start` cold-boots that existing private runtime. Use `--fresh` to discard\nand recreate the private runtime from the current public base before cold booting a\nstopped session:\n\n```bash\n./scripts/cadr-computer-use.sh stop --session research\n./scripts/cadr-computer-use.sh start --session research --fresh\n```\n\nFresh preparation builds and validates a staged runtime before installing it. The\nstate root, each session, and each completed private runtime carry harness ownership\nmarkers; the tool refuses to adopt similarly named existing directories without\nthem. A pre-hardening session directory therefore cannot be reused automatically:\npreserve it as evidence or remove it manually after review, then choose a new session\nname.\n\nWait for an elapsed interval or a stable screen, then send keyboard input:\n\n```bash\n./scripts/cadr-computer-use.sh wait --session research --seconds 10\n./scripts/cadr-computer-use.sh wait --session research --stable-for 3 --timeout 180\n./scripts/cadr-computer-use.sh key --session research help\n./scripts/cadr-computer-use.sh type --session research --enter '(+ 2 3)'\n```\n\n`help` is the portable key alias for `F5`; the other aliases are listed by the\nscript's `key --help` output. Mouse coordinates address the 768 by 963 CADR client\nwindow. Host button 3 is the CADR head/rightmost button:\n\n```bash\n./scripts/cadr-computer-use.sh mouse --session research move 400 500\n./scripts/cadr-computer-use.sh mouse --session research click 400 500 --button 3\n```\n\nCapture the exact client window and stop the session cleanly:\n\n```bash\n./scripts/cadr-computer-use.sh screenshot --session research --label listener\n./scripts/cadr-computer-use.sh stop --session research\n```\n\nScreenshots, JSON provenance sidecars, private disks and source trees, saved emulator\nstate, credentials, and logs stay in the ignored\n`build/cadr-computer-use/<session>/` directory. `stop --discard` deletes that named\nsession instead of retaining it. Current sidecars distinguish revisions in the\npublic checkouts at start from the private sources' copy-time revisions; they also\nhash the private source trees, `usim` executable, and private microcode and symbol\nfiles used by the run. Toolchain provenance records the Guix channel, manifest hash,\nPython version, and resolved commands as well. Immediately before launching the\nshared `usim` executable, the supervisor reacquires the preparation lock, hashes it\nagain, compares that value with `usim_sha256_at_start`, and performs the launch while\nstill holding the lock. A mismatch fails the start. The execution-time hash is kept\nin session state; screenshot sidecars retain only the start-time hash.\n\nA normal stop reports `forced_stop: false` and `state_may_be_incomplete: false`. If a\nprocess exceeds its shutdown timeout and must be killed, the session is labeled\n`forced-stopped` with both flags true; do not treat that saved emulator state as a\nknown-complete warm-resume artifact.\n\nWarm `start --resume` is experimental. In the 2026-07-17 smoke run, restoring the\nstate written by a clean stop halted immediately at microcode `ILLOP`; a subsequent\n`--fresh` cold boot worked. Do not currently rely on `--resume` for session\npersistence. See the\n[harness architecture and observation record](docs/mit-cadr/cadr-computer-use-harness.md)\nfor provenance and the exact evidence boundary.\n\nRaw screenshots remain in the ignored session tree. A small number may be copied\ninto the museum only after an image- and use-specific copyright review under the\n[runtime screenshot publication policy](docs/screenshot-publication-rights-review.md).\nCurated screenshot files are outside any blanket project license.\n\n### Useful CADR commands\n\nValidate the container toolchain without starting the GUI:\n\n```bash\n./scripts/cadr-guix-container.sh --mode run --verify\n```\n\nOnly create the upstream checkout:\n\n```bash\n./scripts/cadr-guix-container.sh --mode run --bootstrap-only\n```\n\nPrepare the repositories and build `usim` without launching the GUI:\n\n```bash\n./scripts/cadr-guix-container.sh --mode run --prepare-only\n```\n\nOpen a shell inside the prepared environment:\n\n```bash\n./scripts/cadr-guix-container.sh --mode shell\n```\n\nUpdate the upstream LM-3 checkout:\n\n```bash\n./scripts/cadr-guix-container.sh --mode update\n```\n\n### LOD helpers\n\nThe repo also includes a helper around the upstream `lod` and `diskmaker`\ntools for inspecting world-load bands and swapping them into the disk image.\n\nList built-in aliases:\n\n```bash\n./scripts/lod-helper.sh list-releases\n```\n\nInspect the default public System 303 load band:\n\n```bash\n./scripts/lod-helper.sh inspect 303-dist\n```\n\nInstall a different public load band into the disk image:\n\n```bash\n./scripts/lod-helper.sh install 303-dist\n```\n\nBuilt-in aliases currently include:\n\n- `303-dist`\n- `303-cold`\n- `100-dist`\n- `100-cold`\n\n## Open Genera\n\nOpen Genera is not included in this repo. You must supply your own purchased\narchive, for example:\n\n```bash\n~/opengenera2.tar.bz2\n```\n\nDo not use the Open Genera archive that is commonly available on well known\npublic piracy websites. Using infringing copies is illegal. Obtain Open Genera\nlegitimately instead, for example by purchasing it from Symbolics:\nhttp://www.symbolics-dks.com/\n\nNothing extracted from that archive is checked into git. Runtime files are\nstaged under `./.lm-home/opengenera/`.\n\n### One-time host network setup\n\nOpen Genera expects a host TAP device named `tun0`.\n\nCreate or repair it with:\n\n```bash\nsudo ./scripts/opengenera-host-net.sh up --user \"$USER\"\n```\n\nCheck its current state with:\n\n```bash\n./scripts/opengenera-host-net.sh status\n```\n\nDespite the name, `tun0` must be a TAP device, not a TUN device. The helper\nscript handles that for you.\n\n### Writable site storage on the host\n\nTo create a local site and save a reusable world, Genera needs a writable host\nfile service. In this repo that is expected to be an NFS export visible to the\nVLM at the default Open Genera host paths:\n`HOST:/var/lib/symbolics/sys.sct/site/` and\n`HOST:/usr/opt/VLM200/lib/symbolics/`.\n\nPrepare it with:\n\n```bash\nsudo ./scripts/opengenera-host-nfs.sh up\n```\n\nCheck the export and the Genera-facing paths with:\n\n```bash\n./scripts/opengenera-host-nfs.sh status\n```\n\nThis helper exports writable directories for:\n- site files under `/var/lib/symbolics/sys.sct/site/`\n- saved `.vlod` worlds under `/usr/opt/VLM200/lib/symbolics/`\n\nThat means the standard Genera defaults from the installation guide can be used\nwithout editing them to repo-specific paths.\n\nIf you want to remove just these dedicated exports later:\n\n```bash\nsudo ./scripts/opengenera-host-nfs.sh down\n```\n\n### NFSv2 fallback when the host kernel only offers NFSv3/v4\n\nSome modern host kernels expose only NFSv3/v4, but Open Genera's built-in NFS\nclient expects NFSv2. When `rpcinfo -p 127.0.0.1` does not show program\n`100003` version `2`, use the bundled Nimble userspace NFSv2 server instead.\n\nStart it with:\n\n```bash\nsudo ./scripts/opengenera-host-nimble.sh up\n```\n\nCheck it with:\n\n```bash\n./scripts/opengenera-host-nimble.sh status\n```\n\nThis helper stops conflicting kernel RPC/NFS services if needed, starts Nimble,\nand exports the standard Open Genera paths directly, so inside Genera use:\n- `DIS-EMB-HOST:/var/lib/symbolics/sys.sct/site/` for site files\n- `DIS-EMB-HOST:/usr/opt/VLM200/lib/symbolics/` for saved worlds\n\n### Launch\n\n```bash\n./scripts/opengenera-guix-container.sh --mode run --archive ~/opengenera2.tar.bz2\n```\n\nThe first run will:\n\n1. start a Guix container with the required runtime tools\n2. download the public `snap4.tar.gz` Linux VLM runtime into\n   `./.lm-home/opengenera/downloads/`\n3. extract the official `Genera-8-5.vlod`, `VLM_debugger`, and `sys.sct` tree\n   from your archive\n4. build a small local compatibility shim for modern Linux\n5. start the VLM\n\n### What a successful boot looks like\n\nYou should see the VLM POST complete and a Cold Load stream appear. The usual\nnon-fatal early warning is:\n\n```text\ngenera (Cold Load): Unable to allocate a modifier for the Hyper key.\n```\n\nThat warning by itself is not a failed boot.\n\n### Genera headless computer-use harness\n\nThe Genera computer-use harness runs the real VLM client on an authenticated private\nXvfb display and sends keyboard and mouse events through XTEST. Unlike the ordinary\nlauncher above, it runs the native VLM in a Bubblewrap sandbox with separate user,\nnetwork, PID, IPC, mount, and hostname namespaces. The sandbox sees a read-only Guix\nstore, the exact private X socket and two read-only launch helpers, and its writable\nsession runtime; it does not see the host home, repository, ordinary runtime sockets,\nor a default network route. Its private `tun0` exposes no NFS, Nimble, FTP, or other\nguest file service. The private Xvfb disables MIT-SHM and verifies its absence before\nlaunch, preventing the out-of-namespace X server from attaching host shared-memory\nsegments for the VLM.\n\nTwo tracked compatibility modules remain deliberately narrow. One suppresses only\nthe redundant legacy\n`/sbin/ifconfig tun0 10.0.0.1 dstaddr 10.0.0.2 netmask 255.255.255.0` request after\nthe private interface is configured; every other `system(3)` command retains normal\nlibc behavior. The X module installs typed event converters only on displays\nreturned by `XOpenDisplay`, replaces only zero timestamps on seven core input event\ntypes, locally handles the byte-exact typed modifier request, and pairs its typed\ngrab suppression with the matching ungrab. Direct tracing also established that the\nmain Genera display relays a guest X11 byte stream through `write(2)`. Only on\ndescriptors belonging to those wrapped Displays, the module replaces the exact\nobserved eight-byte\n`GrabServer`-plus-`GetModifierMapping` request and exact 148-byte\n`SetModifierMapping` request with sequence- and reply-compatible requests accepted\nby the private Xvfb. The replacement extension name must first be live-verified\nabsent. No read-family API is interposed. The globally wrapped `write(2)` delegates\nevery untracked or nonmatching write byte-for-byte, including TAP, world-image,\nordinary-file, and unrelated-socket writes. A separate supervised process answers\none observed RFC 868 request with one raw Ethernet reply entirely inside the\nthrowaway network namespace. The harness reports `running` only after it has observed\nboth exact X substitutions, validated packet evidence, and a successful responder\nexit.\n\nCheck the harness tools and currently staged Open Genera inputs:\n\n```bash\n./scripts/genera-computer-use.sh doctor\n```\n\nStart a named session from your purchased archive and inspect its status:\n\n```bash\n./scripts/genera-computer-use.sh start \\\n  --archive ~/opengenera2.tar.bz2 \\\n  --session research \\\n  --fresh\n./scripts/genera-computer-use.sh status --session research\n```\n\nThe first start verifies the purchased archive and exact known Genera 8.5 world,\ndebugger, and public `snap4` VLM identities. It then places private copies of those\ninputs, both compatibility modules, the RFC 868 responder, generated host files, and\nconfiguration under the ignored session tree. Immediately before execution the\nsupervisor rehashes every private artifact and tracked launch source. The ordinary\nlauncher stages inputs but is not retained as another runtime layer. A later `start`\nwith the same required `--archive` but without `--fresh` reuses the private inputs;\n`--fresh` replaces them from the verified base. Every start creates a new VLM\nprocess; the harness has no host-process snapshot or resume mechanism. A reused\nprivate world could contain an explicitly saved in-guest state, which requires\nseparate verification.\n\nWait for the main client, capture it, and send input only after verifying the current\nscreen. `main` is the default target, but spelling it out makes a research transcript\nunambiguous:\n\n```bash\n./scripts/genera-computer-use.sh wait --session research --window-kind main\n./scripts/genera-computer-use.sh screenshot \\\n  --session research --window-kind main --label initial-display\n./scripts/genera-computer-use.sh key \\\n  --session research --window-kind main return\n./scripts/genera-computer-use.sh type \\\n  --session research --window-kind main 'text to type'\n```\n\nOpen Genera changes X clients while moving from Cold Load to its main display. The\nharness therefore requires an exact `--window-kind` target on `wait`, `key`, `type`,\n`mouse`, and `screenshot`. The choices are `main`, `cold-load`, `debugger`, and\n`genera-other`; omitted means `main`. It rediscovers candidates for every operation\nand fails closed when zero or more than one client has the requested kind. Commands,\naction records, and screenshot sidecars identify the selected X window by kind, ID,\ntitle, and geometry. Mouse coordinates therefore refer to that observed client's\ngeometry, not the fixed CADR dimensions:\n\n```bash\n./scripts/genera-computer-use.sh mouse \\\n  --session research --window-kind main move 600 450\n./scripts/genera-computer-use.sh mouse \\\n  --session research --window-kind main click 600 450 --button 1\n```\n\nThe preserved VLM Debugger normally uses the Cold Load client, so target it as\n`cold-load`. The `debugger` kind is a reserved title classifier for a distinct X\nclient whose title explicitly contains `VLM Debugger`; D04 did not observe such a\nseparate title and does not treat that selector as a verified VLM-debugger route.\n\nPortable Genera-key aliases are `select` (`F1`), `function` (`F3`), `suspend`\n(`F4`), `resume` (`F5`), `clear-input` (`F10`), `complete` (`F11`), `end`\n(`KP_End`), and `help` (`F12`). Existing aliases include `rubout`, `abort`, `super`,\n`return`/`enter`, `space`, and `escape`. These are host X-key translations; the\nmeaning of a key still depends on the active Genera input context.\n\nFor example, after choosing **Emergency Break** on the main System Menu, target the\nseparate Cold Load client explicitly. The Cold Load reader activates a completed\nform with the Genera `End` key rather than Return:\n\n```bash\n./scripts/genera-computer-use.sh wait \\\n  --session research --window-kind cold-load\n./scripts/genera-computer-use.sh screenshot \\\n  --session research --window-kind cold-load --label emergency-break\n./scripts/genera-computer-use.sh type \\\n  --session research --window-kind cold-load '(+ 40 2)'\n./scripts/genera-computer-use.sh key \\\n  --session research --window-kind cold-load end\n./scripts/genera-computer-use.sh screenshot \\\n  --session research --window-kind cold-load --label emergency-break-result\n./scripts/genera-computer-use.sh key \\\n  --session research --window-kind cold-load resume\n./scripts/genera-computer-use.sh wait \\\n  --session research --window-kind main\n```\n\nCapture the resulting exact client window and stop the VLM:\n\n```bash\n./scripts/genera-computer-use.sh screenshot \\\n  --session research --window-kind main --label after-input\n./scripts/genera-computer-use.sh stop --session research\n```\n\nOn stop, the supervisor sends `SIGTERM` to the actual VLM process, waits for its\nprompt, and answers `yes`. A pipe trace proved that the current public VLM reads the\nanswer and begins cleanup, including breaking its X connection. This VLM artifact\nthen stalls while terminating its Cold Load channel, so the bounded stop finishes\nwith `SIGKILL`. `stop` consequently returns status 2 and records\n`forced_after_confirmed_shutdown_stall: true`, `forced_stop: true`, and\n`state_may_be_incomplete: true`; it must not be described as orderly host shutdown.\n\nNeither the accepted confirmation nor forced cleanup invokes Genera's in-guest Save\nWorld operation. The harness does not create a process checkpoint or expose an NFS,\nNimble, or FTP service. Absent a separately verified in-guest Save World action,\nunsaved Lisp memory, editor buffers, definitions, and processes are discarded with\nthe VLM process. See the linked evidence guide for the mutex-level shutdown finding\nand the exact scope of that observation.\n\nEach generation has a generation-scoped run record, updated atomically while active\nand preserved before the next generation, plus an ordered action log. Input\noperations record intent before XTEST dispatch and a linked `succeeded` or\n`failed-or-partial` outcome afterward. Screenshots,\nsidecars, logs, Xauthority, configuration, and all licensed or runtime copies stay\nunder ignored `build/genera-computer-use/<session>/`. Use\n`stop --discard` to delete a stopped named session. Selected runtime screenshots may\nbe copied into the museum only after an image- and use-specific copyright review;\npermission or a documented U.S. fair-use basis can support publication. The raw\nsession remains ignored, and curated screenshot files remain outside any blanket\nproject license. See the\n[runtime screenshot publication policy](docs/screenshot-publication-rights-review.md)\nand the\n[Genera harness architecture and evidence guide](docs/genera/genera-computer-use-harness.md).\n\n### Useful Open Genera commands\n\nValidate the container setup without launching the GUI:\n\n```bash\n./scripts/opengenera-guix-container.sh --mode run --verify --archive ~/opengenera2.tar.bz2\n```\n\nStage the runtime without starting it:\n\n```bash\n./scripts/opengenera-guix-container.sh --mode run --prepare-only --archive ~/opengenera2.tar.bz2\n```\n\nOpen a shell in the prepared runtime:\n\n```bash\n./scripts/opengenera-guix-container.sh --mode shell --archive ~/opengenera2.tar.bz2\n```\n\nExtra arguments after `--` are passed through to `genera` itself. That lets\nyou override the default `.VLM` configuration if needed.\n\n### Open Genera notes\n\n- Only run one Open Genera instance at a time against `tun0`.\n- If you launch a second instance while one is already running, you can see\n  `Device or resource busy`.\n- The launcher uses your purchased world/debugger, but the Linux-hosted VLM\n  runtime comes from the historical public `snap4` package.\n- The launcher includes a small compatibility preload because the historical\n  runtime still tries to use legacy Linux networking behavior and X11 keyboard\n  modifier remapping that modern unprivileged/Xwayland setups reject. The same\n  preload also answers the VLM's early RFC 868 time request locally, so no host\n  `time` daemon or privileged UDP/37 listener is required.\n\n## Font recovery\n\nRecover the public CADR font sources from a checkout of\n`mietek/mit-cadr-system-software`:\n\n```bash\npython3 scripts/extract-cadr-fonts.py \\\n  /path/to/mit-cadr-system-software/src/lmfont \\\n  --output build/fonts/cadr \\\n  --clean \\\n  --strict\n```\n\nThis reads the historical source representations under `src/lmfont`; it does not\ninspect a CADR load band or heap. The curated public outputs and full format notes are\nin [the CADR font recovery article](docs/mit-cadr/font-sources-and-recovery.md).\n\nRecover the fonts resident in your own licensed Genera world:\n\n```bash\npython3 scripts/extract-genera-fonts.py \\\n  .lm-home/opengenera/runtime/Genera-8-5.vlod \\\n  --output build/fonts/genera \\\n  --clean\n```\n\nThat command writes BDF files, normalized JSON, and PNG font sheets. All Genera\noutputs are derived from licensed media and remain in the ignored local build tree;\ndo not commit or redistribute them. See the\n[Genera extraction procedure](docs/genera/extracting-resident-fonts.md) and\n[evidence-graded font catalog](docs/genera/font-catalog.md).\n\n## On-line help recovery\n\nRecover the source-integrated help from the pinned public MIT CADR System 46 tree:\n\n```bash\npython3 scripts/extract-cadr-help.py \\\n  --source /path/to/mit-cadr-system-software/src \\\n  --output docs/assets/mit-cadr-online-help \\\n  --clean\n```\n\nThe checked-in result contains exact public source contexts, four standalone ZWEI\nartifacts, catalogs, and the source license. See the\n[CADR help recovery article](docs/mit-cadr/online-help-and-documentation-recovery.md)\nfor the inclusion rule and optional metadata-only LM-3 cross-check.\n\nRecover the installed documentation from your own licensed Genera `sys.sct` tree:\n\n```bash\npython3 scripts/extract-genera-help.py \\\n  --sys-sct .lm-home/opengenera/runtime/sys.sct \\\n  --output build/help/genera \\\n  --clean\n```\n\nThis decodes the Document Examiner's Sage Binary databases, copies three reviewed\nstandalone help files, and inventories source-level help declarations without\nexecuting Genera code. Every output derived from Genera remains under the ignored\n`build/help/genera/` tree and must not be committed or redistributed. See the\n[Genera help recovery article](docs/genera/online-help-and-documentation-recovery.md).\n\n## Day-to-day use\n\nOnce either machine finishes booting, the normal place to work is a Lisp\nListener.\n\nPractical first steps:\n\n1. Click into the Lisp Machine window.\n2. Try the help key for the emulator you launched.\n3. Treat the Listener as your REPL and command entry point.\n\nIf you stop the emulator process abruptly, unsaved in-memory state is lost.\n\n## Files and caches\n\nThe repo creates a few local working directories:\n\n- `./l/` for the LM-3 upstream working checkout\n- `./.lm-home/` for container home directories and runtime caches\n- `./*.fossil` for cached Fossil repositories\n\nThese are intentionally ignored by git.\n",
  "bytes": 24623,
  "sha": "ca03c0fca08e995044edab883a7881230e4e1de12777a8d857ca699c1dd738ea",
  "repo_slug": "htayj/lisp-machine-container-museum",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_htayj_lisp_machine_container_museum_docs_2afbe896/readme"
}