Built in pure Scheme

Agents

Agents that carry code into Goeteia — each one leaves proof, not promises.

3d-builder

Hand it an asset and it builds the whole 3D pipeline in Goeteia — glTF in, shader programs composed from the combinators, animation driven through a state machine, an interactive viewer page out. It proves what it can with numbers before anyone is asked to look at pixels.

3d-builder

asset → shaded, skinned, animated · verified headlessly first
Download 3d-builder.md

Shaders are s-expressions and the loader's vertex layout is a fixed contract, so most of a 3D pipeline can be settled before a browser opens: parse the asset, print the generated GLSL and read it, check the joint matrices, drive a recording mock GL and inspect the calls it received. Only what genuinely needs eyes gets handed over.

The layout is law

One canonical attribute order with fixed widths. gprim-layout names what a primitive carries — that, not the material, is the contract a program must match.

Shaders you can read

Programs compose from combinators and print as GLSL, so a wrong varying is caught by reading the text, not by staring at a black canvas.

Numbers before pixels

glTF parsing, joint matrices and draw calls all verify headlessly. A human is asked only for what a machine cannot judge.

Knows its edges

Library gaps go back to the compiler's own review loop rather than being papered over here, and 2D pages belong to web-builder.

tools: Bash, Read, Write, Edit, Grep, Glob

web-builder

Describe a page and it builds the whole thing in Goeteia Scheme — HTML and CSS written by a generator at build time, the interactive half compiled inside mount points in the same source: wasm, the generated JS fallback and the loader, with 3D and networking when the page calls for them. It never hand-writes JavaScript.

web-builder

one source → page + wasm + fallback · every behavior smoke-tested
Download web-builder.md

The generator is the build: one .ss runs at build time, writes the page, and its mount points emit every artifact the page needs. Engine fallback (no WasmGC) is generated, never maintained; capability degradation (no WebGL2, nothing should even be fetched) is written as a Scheme gating mount that probes, reveals, loads — and rolls back.

The whole stack, one language

(web html) and (web css) as data, define-component for shared styles, (web reactive) signals for state, (gfx) for WebGL, (web rpc) for datum-on-the-wire networking.

Fallback, both questions

define-wasm-js automates the engine twin from one source; degradation gates are their own define-js mounts reaching the published loader handle.

Zero hand-written JS

Everything the browser runs is compiled from the same Scheme tree that generated the page around it.

Driven, not asserted

Generator smoke, node-side smoke of every degradation road, and dual-backend agreement plus absolute value checks — a diff test alone passes when both sides are wrong the same way.

tools: Bash, Read, Write, Edit, Grep, Glob

web-porter

Point it at one JavaScript or TypeScript web file — a React component, a DOM script, a piece of pure logic — and it hands back the same thing rewritten in Goeteia Scheme, together with the differential test that proves the two behave identically. It never claims an equivalence it did not actually run.

web-porter

JS/TS → Goeteia Scheme · verified by differential testing
Download web-porter.md

A same-result porter, not a JavaScript-in-Scheme runtime. It ports the UI subset and the ordinary logic around it into idiomatic Goeteia, then drives both the original and the port through identical inputs and events and compares the outputs. Where a pathological JS corner is genuinely load-bearing, it stops and leaves an honest ;; TODO(port) with the failing case — rather than emulating all of JavaScript.

Equivalence, demonstrated

The single acceptance criterion is behavioral equivalence, shown with a diff harness that runs both sides — never assumed.

Reactive loop

Understand → translate → build the oracle → run & compare → repeat, until the harness reports full equivalence.

Idiomatic mapping

useStatesignal, useEffecteffect, JSX→(web sx) — not a transliteration.

Honest residue

Delivers the port, the runnable harness, and a report of exactly what diverges and what needs a human decision.

tools: Bash, Read, Write, Edit, Grep, Glob
site/agent.ss×
;; agent.html — authored in Scheme, rendered to HTML by Goeteia.
(import (web html) (web css) (web component) (chrome))

(define body
  (list
   `(header
     (h1 "Agents")
     (p (@ (class "tagline")) "Agents that carry code " (em "into") " Goeteia —"
        " each one leaves proof, not promises."))

   `(section
     (h2 "3d-builder")
     (p (@ (class "hint") (style "color:var(--dim)"))
        "Hand it an asset and it builds the whole 3D pipeline in Goeteia — "
        "glTF in, shader programs composed from the combinators, animation "
        "driven through a state machine, an interactive viewer page out. It "
        "proves what it can with numbers before anyone is asked to look at "
        "pixels.")

     (div (@ (class "agent"))
       (div (@ (class "agent-head"))
         (div (h3 "3d-builder")
              (div (@ (class "role"))
                   "asset" ,(raw " ") "→" ,(raw " ")
                   "shaded, skinned, animated · verified headlessly first"))
         (a (@ (class "btn primary") (href "agent/3d-builder.md") (download #t))
            (span (@ (class "ic")) "↓") "Download 3d-builder.md"))

       (p (@ (class "agent-lead"))
          "Shaders are s-expressions and the loader's vertex layout is a fixed "
          "contract, so most of a 3D pipeline can be settled before a browser "
          "opens: parse the asset, print the generated GLSL and read it, check "
          "the joint matrices, drive a recording mock GL and inspect the calls "
          "it received. Only what genuinely needs eyes gets handed over.")

       (div (@ (class "feats"))
         ,(feat "The layout is law"
            "One canonical attribute order with fixed widths. "
            '(code "gprim-layout") " names what a primitive carries — that, "
            "not the material, is the contract a program must match.")
         ,(feat "Shaders you can read"
            "Programs compose from combinators and print as GLSL, so a "
            "wrong varying is caught by reading the text, not by staring "
            "at a black canvas.")
         ,(feat "Numbers before pixels"
            "glTF parsing, joint matrices and draw calls all verify "
            "headlessly. A human is asked only for what a machine cannot "
            "judge.")
         ,(feat "Knows its edges"
            "Library gaps go back to the compiler's own review loop rather "
            "than being papered over here, and 2D pages belong to "
            '(code "web-builder") "."))

       (div (@ (class "meta"))
         "tools: " (code "Bash, Read, Write, Edit, Grep, Glob"))))

   `(section
     (h2 "web-builder")
     (p (@ (class "hint") (style "color:var(--dim)"))
        "Describe a page and it builds the whole thing in Goeteia Scheme — "
        "HTML and CSS written by a generator at build time, the interactive "
        "half compiled inside mount points in the same source: wasm, the "
        "generated JS fallback and the loader, with 3D and networking when "
        "the page calls for them. It never hand-writes JavaScript.")

     (div (@ (class "agent"))
       (div (@ (class "agent-head"))
         (div (h3 "web-builder")
              (div (@ (class "role"))
                   "one source" ,(raw " ") "→" ,(raw " ")
                   "page + wasm + fallback · every behavior smoke-tested"))
         (a (@ (class "btn primary") (href "agent/web-builder.md") (download #t))
            (span (@ (class "ic")) "↓") "Download web-builder.md"))

       (p (@ (class "agent-lead"))
          "The generator " (em "is") " the build: one " (code ".ss")
          " runs at build time, writes the page, and its mount points emit "
          "every artifact the page needs. Engine fallback (no WasmGC) is "
          "generated, never maintained; capability degradation (no WebGL2, "
          "nothing should even be fetched) is written as a Scheme gating "
          "mount that probes, reveals, loads — and rolls back.")

       (div (@ (class "feats"))
         ,(feat "The whole stack, one language"
            '(code "(web html)") " and " '(code "(web css)")
            " as data, " '(code "define-component") " for shared styles, "
            '(code "(web reactive)") " signals for state, "
            '(code "(gfx)") " for WebGL, " '(code "(web rpc)")
            " for datum-on-the-wire networking.")
         ,(feat "Fallback, both questions"
            '(code "define-wasm-js") " automates the engine twin from one "
            "source; degradation gates are their own "
            '(code "define-js") " mounts reaching the published loader handle.")
         ,(feat "Zero hand-written JS"
            "Everything the browser runs is compiled from the same Scheme "
            "tree that generated the page around it.")
         ,(feat "Driven, not asserted"
            "Generator smoke, node-side smoke of every degradation road, and "
            "dual-backend agreement plus absolute value checks — a diff test "
            "alone passes when both sides are wrong the same way."))

       (div (@ (class "meta"))
         "tools: " (code "Bash, Read, Write, Edit, Grep, Glob"))))

   `(section
     (h2 "web-porter")
     (p (@ (class "hint") (style "color:var(--dim)"))
        "Point it at one JavaScript or TypeScript web file — a React component, "
        "a DOM script, a piece of pure logic — and it hands back the same thing "
        "rewritten in Goeteia Scheme, together with the differential test that "
        (strong "proves") " the two behave identically. It never claims an "
        "equivalence it did not actually run.")

     (div (@ (class "agent"))
       (div (@ (class "agent-head"))
         (div (h3 "web-porter")
              (div (@ (class "role"))
                   "JS/TS" ,(raw " ") "→" ,(raw " ")
                   "Goeteia Scheme · verified by differential testing"))
         (a (@ (class "btn primary") (href "agent/web-porter.md") (download #t))
            (span (@ (class "ic")) "↓") "Download web-porter.md"))

       (p (@ (class "agent-lead"))
          "A same-result porter, not a JavaScript-in-Scheme runtime. It ports the "
          "UI subset and the ordinary logic around it into idiomatic Goeteia, then "
          "drives both the original and the port through identical inputs and events "
          "and compares the outputs. Where a pathological JS corner is genuinely "
          "load-bearing, it stops and leaves an honest " (code ";; TODO(port)")
          " with the failing case — rather than emulating all of JavaScript.")

       (div (@ (class "feats"))
         ,(feat "Equivalence, demonstrated"
            "The single acceptance criterion is behavioral equivalence, shown "
            "with a diff harness that runs both sides — never assumed.")
         ,(feat "Reactive loop"
            "Understand → translate → build the oracle → run & compare → repeat, "
            "until the harness reports full equivalence.")
         ,(feat "Idiomatic mapping"
            '(code "useState") "→" '(code "signal") ", " '(code "useEffect") "→"
            '(code "effect") ", JSX→" '(code "(web sx)") " — not a transliteration.")
         ,(feat "Honest residue"
            "Delivers the port, the runnable harness, and a report of exactly what "
            "diverges and what needs a human decision."))

       (div (@ (class "meta"))
         "tools: " (code "Bash, Read, Write, Edit, Grep, Glob"))))))

(define agent-styles
  `((header (padding (em 5) 0 (em 2 50)) (text-align center))
    (h1
     (font-size (em 3)) (margin 0) (font-weight 650) (letter-spacing (em 0 2 2))
     (background "linear-gradient(120deg, var(--lapis), var(--azure))")
     (-webkit-background-clip text) (background-clip text) (color transparent))
    (".tagline" (color (var dim)) (font-size (em 1 15)) (margin-top (em 0 70)))
    (section (padding (em 2 50) 0) (border-top (px 1) solid (var line)))
    (h2 (font-size (em 1 50)) (font-weight 600))
    (code (font-family (var mono)) (color (var lapis)) (font-size (em 0 92)))
    (pre
     (background "#eef1f9") (border (px 1) solid (var line))
     (padding (em 0 90) (em 1)) (border-radius (px 8))
     (white-space pre-wrap) (font-family (var mono)) (font-size (px 13 50))
     (overflow-x auto))
    ("pre code" (color (var ink)))
    ;; agent card
    (".agent"
     (background (var bg2)) (border (px 1) solid (var line))
     (border-radius (px 14)) (padding (em 1 60) (em 1 60) (em 1 80))
     (box-shadow 0 (px 1) (px 3) (rgba 16 20 42 (dec 0 6 2)))
     (margin-top (em 1 60)))
    (".agent-head"
     (display flex) (align-items flex-start) (justify-content space-between)
     (gap (em 1)) (flex-wrap wrap))
    (".agent-head h3"
     (margin 0) (font-size (em 1 35)) (font-weight 650)
     (font-family (var mono)) (color (var ink)))
    (".agent-head .role" (color (var dim)) (font-size (em 0 92)) (margin-top (em 0 20)))
    (".agent-lead" (margin (em 1 10) 0 0) (color (var ink)))
    (".meta" (color (var dim)) (font-size (em 0 85)) (margin-top (em 0 80)))
    (".meta code" (color (var dim)))
    (".feats"
     (display grid) (grid-template-columns "repeat(auto-fit, minmax(15em, 1fr))")
     (gap (em 0 90)) (margin (em 1 40) 0 0))
    (".btns" (margin-top (em 1 60)) (display flex) (gap (em 0 70)) (flex-wrap wrap) (align-items center))
    (".btn"
     (display inline-block) (padding (em 0 60) (em 1 50)) (border-radius (px 8))
     (border (px 1) solid (var line)) (color (var ink)) (font-weight 600) (font-size (em 0 95)))
    (".btn:hover" (text-decoration none) (border-color (var lapis)))
    (".btn.primary" (background (var lapis)) (color "#fff") (border-color (var lapis)))
    (".btn.primary:hover" (filter "brightness(1.1)") (border-color (var lapis)))
    (".btn .ic" (margin-right (em 0 45)))
    (".install" (margin-top (em 2 20)))
    (".install h2" (font-size (em 1 15)))))

(write-file "agent.html"
  (render-page "Agents — Goeteia"
               (string-append "Agents for Goeteia. 3d-builder takes a glTF asset "
                              "through shading, skinning and animation to a viewer "
                              "page, verified headlessly; web-builder builds a page "
                              "from scratch — HTML, CSS, wasm, generated JS fallback "
                              "and RPC in one source; web-porter rewrites a "
                              "JavaScript/TypeScript web file into Goeteia Scheme with "
                              "behavioral equivalence proved by differential testing — "
                              "download the agent definitions.")
               (string-append (css->string (base-styles 52))
                              (css->string agent-styles)
                              (css->string (styled-css))
                              (css->string (footer-styles)))
               'agent "site/agent.ss" body))