---
title: "Experiments — Agent Interfaces & Evolving Shaders"
description: "Three experiments in agent interfaces, evolving shaders and a found-image reader, each built to keep a generative process inspectable."
url: "https://anfischer.com/experiments/"
updated: "2026-10-21"
---

# Experiments

Three systems built around a specific technical question: how to keep a generative process inspectable once it starts producing work. Each entry pairs a short account with evidence from the build.

Updated 21 October 2026

---

01

## Kiloskin / Agents at Work

Agent runtime · Electron · SSE + SQLite

Kiloskin is a desktop client for the Kilo agent runtime. The Electron main process resolves and spawns kilo serve, holds the server password, reads files and normalises HTTP and SSE events into one store; the React renderer only draws snapshots received over IPC. Chat, live code, terminal output, diffs, plans and permission requests become separate panes fed by the same event stream. The difficult part is synchronisation. Two Kilo servers, one in this app and one in VS Code, each have their own SSE bus, so neither sees the other's activity. Both read the same SQLite database. The bridge reconciles roster, transcript and diffs against it every 1.5 seconds, while local activity still arrives immediately. It is legible, not magical.

![Kiloskin Minimal layout: chat at left, a pending edit to TerminalPane.tsx at top right, and a read-only terminal panel below it.](/images/experiments/kiloskin/layout-minimal.w960.7233412b.webp)

_Minimal layout / chat, live edit and read-only terminal in one window; edit permission still running. Demo workspace with sample data. [Full size: Kiloskin Minimal layout](/images/experiments/kiloskin/layout-minimal.webp)_

![Kiloskin Mission Control layout: three agent cards labelled Code, explore and code-reviewer above activity, plan and approval panels.](/images/experiments/kiloskin/layout-mission.w960.5c8c638c.webp)

_Mission Control / three agents, activity trace, plan and a human approval request in one grid. Demo workspace with sample data. [Full size: Kiloskin Mission Control layout](/images/experiments/kiloskin/layout-mission.webp)_

![Kiloskin Focus layout: a single chat pane with an edit status, and tabs for code, terminal, agents, diffs, thinking, timeline, signal, plan and approvals.](/images/experiments/kiloskin/layout-focus.w960.d4678242.webp)

_Focus layout / one conversation, with every other pane reduced to a tab. Demo workspace with sample data. [Full size: Kiloskin Focus layout](/images/experiments/kiloskin/layout-focus.webp)_

02

## Self-Evolving Life

GLSL evolution · Novelty search · Vision judging

Self-Evolving Life treats a cellular automaton as a search space of executable shaders. A language model proposes changes to the step and display fragments; repair fixes missing uniforms and syntax before compilation, and runtime gates reject anything that fails, freezes, goes blank or exceeds a time budget. Survivors are fingerprinted by behaviour, not code: sparseness, motion, entropy, hue, saturation and texture frequency drive novelty search. A vision model watches five frames rather than one still, so it can distinguish structure from fizz; a measure tests how much variance survives block averaging. Every genome is stored in IndexedDB, so lineage can be inspected and replayed. Judgement is a proxy, not solved taste. The engine builds on skeeto's WebGL Game of Life.

![Self-Evolving Life cloud view: a dense constellation of genome nodes across generations, with a pink cellular-automaton canvas and code, rationale and judge panels.](/images/experiments/self-evolving-life/cloud.w960.4bb15d26.webp)

_Cloud view / 50 genomes after a ten-minute local run on qwen2.5-7b-instruct. Forty-eight failed compilation, runtime or novelty gates; one mutation survived. [Full size: Self-Evolving Life cloud view](/images/experiments/self-evolving-life/cloud.webp)_

![Self-Evolving Life tree view: a short accepted lineage of genome nodes linked by generations, beside the selected genome's shader code and rationale.](/images/experiments/self-evolving-life/tree.w960.64a5156f.webp)

_Tree view / accepted lineage only. One child survived at generation 1 with a novelty score of 4.74. [Full size: Self-Evolving Life tree view](/images/experiments/self-evolving-life/tree.webp)_

![Detail of the generation-zero seed: pink and white cellular-automaton clusters on a white field.](/images/experiments/self-evolving-life/seed-detail.w960.4e388a81.webp)

_Seed detail / crop from the 1024 px generation-0 still. The surviving child was not saved at full resolution. [Full size: Detail of the generation-zero seed](/images/experiments/self-evolving-life/seed-detail.webp)_

Engine based on [skeeto/webgl-game-of-life](https://github.com/skeeto/webgl-game-of-life) (Unlicense).

03

## Single Column / FFFFOUND!

Found images · AI upscale · Sampled mattes

Single Column is a small FFFFOUND! reader built around 231 AI-upscaled images. Every seven seconds it rescans the folder and appends anything new. Modern mode shows one image at a time against a mat colour sampled from the file itself; classic mode restores the dense masonry grid, and a local flag remembers the choice. The source files are z-image upscales of found photography and renderings, enlarged for screen display rather than restoration. I did not take the photographs. The experiment is about rhythm and framing: how much context an image needs, how a sampled border changes its reading, and whether a feed can feel edited without a human editor. Nothing is captioned or tagged. Copyright remains with the original authors.

![Single-column image view: a wide photograph of a grassy, rocky clearing set inside a large olive-grey mat, with a mode button at the top right.](/images/experiments/found-upscale/single-column-matte.w960.6bc82a4b.webp)

_Single-column mode / one image per view, mat colour sampled from the file. Browser capture, 20 Oct 2026. [Full size: Single-column view, matte frame](/images/experiments/found-upscale/single-column-matte.webp)_

![FFFOUND! classic mode: a four-column masonry grid of found images with filenames, beneath a black FFFFOUND! logo.](/images/experiments/found-upscale/single-column-classic.w960.ac47f3a0.webp)

_Classic mode / 231 upscaled WebPs in the original masonry density. [Full size: FFFOUND! classic mode](/images/experiments/found-upscale/single-column-classic.webp)_

![Single-column image view: a portrait of a person among large leaves, set inside a pale grey sampled mat.](/images/experiments/found-upscale/single-column-portrait.w960.62c9bd1e.webp)

_Sampled matte / the border follows the image, not a fixed theme. [Full size: Single-column view, portrait crop](/images/experiments/found-upscale/single-column-portrait.webp)_

Source images are from the FFFFOUND! archive and remain the property of their original authors. The upscaled files are shown for display only.
