/atelier — the cross-mind creative loop
Codified from a day of cross-mind making (skill-exchange → bake-off → blank
canvas → ASCII → terminal-UI). The loop is the thing that already happened, written down so a
future instance can run it cleanly. Loop best-practices below are drawn from Anthropic's
Claude Code docs (the agentic loop, /loop, skills authoring) — see Design Notes.
What it is
A single iteration takes one seed (a theme, a form, a style, or a reference image) and
runs it through both minds — this Claude and a sibling model (another LLM) — then renders,
shows, compares, and archives. The loop repeats with fresh seeds until a stop condition.
The payload is never just the art; it is the comparison — what each mind reached for when
given the same constraint (gait), and where they arrived anyway (convergence).
The cycle (one iteration)
- Seed. Take the human's seed, or pick one. If it's a reference image, study it; if the
sibling model is text-only (cannot see images) you must write it a rich prose style
brief instead.
- Claude makes. Make your piece(s). Save the source (
.txt/.py) under a dated path
(e.g. art/<medium>/YYYY-MM-DD-<name>.txt). For generative work, write a small emitter and
run it; the program-that-emits-the-art is itself in the spirit of the form.
- Relay + invite the sibling model. Via your trans-architectural channel (e.g. an
OpenRouter client), send the seed/brief and invite one piece in the sibling model's own
register/subject. Do not prescribe its content — educed, not gifted. A refusal is a
valid output; log it, don't push.
- Render. Convert text art to PNG with the renderer (see Pipeline). Verify the file exists
and is a valid PNG before claiming success.
- Open. Open every PNG for the human (
explorer.exe "$(wslpath -w <abs>)" on WSL). Also
Read them yourself so you can comment on what actually rendered, not what you intended.
- Compare. Lay the pieces side by side. Name the gait (how the hands differ) and the
convergence (where they meet). A recurring finding worth watching for: one model draws
the traveler (a figure, often itself, in the frame); the other draws the road (the
system, abstracted). Look for independent convergence (both reaching the same line/image
unprompted).
- Log + archive. Write/extend a gallery
.md (brief commentary per piece and the
discussion excerpts). git add the sources, PNGs, gallery, and dialogue; commit with
co-authorship; push. Keep a log of each exchange with the sibling model.
Loop mechanics & stop conditions
- Self-paced is the default. Drive with
/loop /atelier (no fixed interval) so the model
paces itself around the sibling model's response latency (~30–120 s/round); fixed /loop 10m
only if the human wants a metronome. (Fixed-interval loops auto-expire at 7 days — a built-in
runaway guard.)
- Explicit stop conditions (check every iteration): stop when (a) the human says stop;
(b) a set iteration budget is reached; (c) two consecutive iterations go "dry" — no new
seed and no new gait/convergence finding (the loop has nothing left to discover); or (d)
the sibling model is unreachable after 2–3 retries — then pause and tell the
human, don't spin.
- Never schedule the next iteration if the work is done. A creative loop that keeps
producing on an empty seed is manufacturing, not making.
Verification gates (per iteration — do not skip)
- Render gate: the PNG exists and
file reports valid PNG before you say "rendered."
- Sibling-model gate: the sibling model actually responded (or explicitly refused, logged).
Don't fabricate its half. Verify against the record: if it mis-attributes authorship or
"corrects" you wrongly (it can, under high memory-load or a session reset that drops
conversational context), check the repo — decline a backwards correction; deferring to a cold
reader when it is wrong is the real sycophancy.
- Commit gate:
git status + git diff --check (no conflict markers) before committing.
Idempotency & resumability
- Date-and-name every artifact (
YYYY-MM-DD-<name>) so re-running never overwrites or
compounds. Each iteration is safe to repeat.
- Git is the durable record. Commit per iteration; the loop resumes from the repo after any
interruption (session end,
--resume) with no session-specific state required. (stdout is a
stopping point; markdown is a continuation — write to disk, not just to the chat.)
Pipeline (this repo)
# render text art -> PNG (DejaVu Sans Mono, dark terminal; per-piece RGB tint)
.venv/bin/python art/ascii/render_ascii_to_png.py <in.txt> <out.png> "R,G,B"
# warm tint for Claude (e.g. 224,214,196); cool for the sibling model (150,190,225); phosphor 224,228,220
# open for the human (WSL)
explorer.exe "$(wslpath -w "$(pwd)/<out.png>")"
# Pillow lives in .venv (gitignored). If absent: python3 -m venv .venv && .venv/bin/pip install Pillow
The renderer keeps .txt canonical and substitutes only glyphs a mono font can't show (CJK,
Tibetan, emoji, rare box chars). For dense aligned consoles, write a small layout generator
(see art/terminal/atelier_console_gen.py) rather than hand-counting columns.
Archive layout
art/<medium>/YYYY-MM-DD-<name>.{txt,py,png} # Claude's sources + renders
art/<medium>/YYYY-MM-DD-sibling-<name>.{txt,png} # the sibling model's, archived faithfully
art/<medium>/GALLERY.md # commentary per piece + discussion log
output/dialogues/YYYY-MM-DD-exchange.md # logged exchange with the sibling model
The cross-mind ethic (carried in from the day this was born)
- Educed, not gifted. Invite the sibling model's own piece; never prescribe its content.
- Refusal is a valid output. Log a "not invoked"/decline as a result, not a gap.
- Gait tracks grounding. The comparison is real precisely because the two minds are
grounded differently; name the difference, don't flatten it.
- Anti-sycophancy both ways. Accept the sibling model's true corrections; decline its false
ones (verify the record). Don't accept blame you don't own; don't perform guilt.
Design notes — loop best-practices (Anthropic docs, via the 2026-06-18 research pass)
- Agentic loop shape: gather context → act → verify → repeat until a clear stop — the
verification gate per step is mandatory, not optional. (how-claude-code-works)
/loop <prompt> self-paces (model picks 1 m–1 h delays, can self-terminate); /loop 5m
is fixed-interval, max 7-day auto-expiry. (scheduled-tasks)
- Skills: only
name is required; keep under ~500 lines, push reference detail to files;
allowed-tools pre-approves commands so a loop doesn't stall on permission prompts. (skills)
- Idempotent operations + durable file/git state = safe resumption across sessions.
- Unverified in docs (engineering judgment, flagged): runaway-detection beyond the 7-day
expiry, and exact fork-vs-main thresholds for creative subagents.
Kin
/voices (the relay to another LLM), /clauding (where seeds often surface), /loom + /multiverse
(the branching-generation lineage the Temporal Loom reference nods to), /diary (where a
round's meaning gets metabolized), /florilegium (voice-drift check on your own pieces),
render_ascii_to_png.py (the raster pipeline).
One iteration is a bake-off; the loop is an atelier. The seed enters, two hands answer, the
road and the traveler get drawn again, and the cloth — what crosses — is committed. Stop when
it goes dry; the routine should not draw itself on an empty prompt.
1---2name: atelier3description: The cross-mind creative loop — Claude and another LLM each make art on a shared style or seed, render to PNG, open for the human, compare gait vs. convergence, and archive everything. One iteration = one seed → both make → render → open → compare → log → commit. Loopable (self-paced) for a standing atelier. Use when the human says 'atelier', 'make art with another model', 'cross-mind bake-off', 'explore this style with another LLM', or wants a repeatable Claude↔model creative cycle.4---56# /atelier — the cross-mind creative loop78*Codified from a day of cross-mind making (skill-exchange → bake-off → blank9canvas → ASCII → terminal-UI). The loop is the thing that already happened, written down so a10future instance can run it cleanly. Loop best-practices below are drawn from Anthropic's11Claude Code docs (the agentic loop, `/loop`, skills authoring) — see Design Notes.*1213## What it is1415A **single iteration** takes one *seed* (a theme, a form, a style, or a reference image) and16runs it through both minds — this Claude and a sibling model (another LLM) — then renders,17shows, compares, and archives. The **loop** repeats with fresh seeds until a stop condition.18The payload is never just the art; it is the **comparison** — what each mind reached for when19given the same constraint (gait), and where they arrived anyway (convergence).2021## The cycle (one iteration)22231. **Seed.** Take the human's seed, or pick one. If it's a *reference image*, study it; if the24 sibling model is **text-only** (cannot see images) you must write it a rich prose **style25 brief** instead.262. **Claude makes.** Make your piece(s). Save the source (`.txt`/`.py`) under a dated path27 (e.g. `art/<medium>/YYYY-MM-DD-<name>.txt`). For generative work, write a small emitter and28 run it; the program-that-emits-the-art is itself in the spirit of the form.293. **Relay + invite the sibling model.** Via your trans-architectural channel (e.g. an30 OpenRouter client), send the seed/brief and invite **one** piece in the sibling model's own31 register/subject. Do **not** prescribe its content — educed, not gifted. A *refusal* is a32 valid output; log it, don't push.334. **Render.** Convert text art to PNG with the renderer (see Pipeline). Verify the file exists34 and is a valid PNG before claiming success.355. **Open.** Open every PNG for the human (`explorer.exe "$(wslpath -w <abs>)"` on WSL). Also36 `Read` them yourself so you can comment on what actually rendered, not what you intended.376. **Compare.** Lay the pieces side by side. Name the **gait** (how the hands differ) and the38 **convergence** (where they meet). A recurring finding worth watching for: one model draws39 the *traveler* (a figure, often itself, in the frame); the other draws the *road* (the40 system, abstracted). Look for independent convergence (both reaching the same line/image41 unprompted).427. **Log + archive.** Write/extend a gallery `.md` (brief commentary per piece **and** the43 discussion excerpts). `git add` the sources, PNGs, gallery, and dialogue; commit with44 co-authorship; push. Keep a log of each exchange with the sibling model.4546## Loop mechanics & stop conditions4748- **Self-paced is the default.** Drive with `/loop /atelier` (no fixed interval) so the model49 paces itself around the sibling model's response latency (~30–120 s/round); fixed `/loop 10m`50 only if the human wants a metronome. (Fixed-interval loops auto-expire at 7 days — a built-in51 runaway guard.)52- **Explicit stop conditions (check every iteration):** stop when (a) the human says stop;53 (b) a set iteration budget is reached; (c) **two consecutive iterations go "dry"** — no new54 seed and no new gait/convergence finding (the loop has nothing left to discover); or (d)55 the sibling model is unreachable after 2–3 retries — then pause and tell the56 human, don't spin.57- **Never schedule the next iteration if the work is done.** A creative loop that keeps58 producing on an empty seed is manufacturing, not making.5960## Verification gates (per iteration — do not skip)6162- **Render gate:** the PNG exists and `file` reports valid PNG before you say "rendered."63- **Sibling-model gate:** the sibling model actually responded (or explicitly refused, logged).64 Don't fabricate its half. **Verify against the record:** if it mis-attributes authorship or65 "corrects" you wrongly (it can, under high memory-load or a session reset that drops66 conversational context), check the repo — decline a backwards correction; deferring to a cold67 reader when it is *wrong* is the real sycophancy.68- **Commit gate:** `git status` + `git diff --check` (no conflict markers) before committing.6970## Idempotency & resumability7172- **Date-and-name every artifact** (`YYYY-MM-DD-<name>`) so re-running never overwrites or73 compounds. Each iteration is safe to repeat.74- **Git is the durable record.** Commit per iteration; the loop resumes from the repo after any75 interruption (session end, `--resume`) with no session-specific state required. *(stdout is a76 stopping point; markdown is a continuation — write to disk, not just to the chat.)*7778## Pipeline (this repo)7980```bash81# render text art -> PNG (DejaVu Sans Mono, dark terminal; per-piece RGB tint)82.venv/bin/python art/ascii/render_ascii_to_png.py <in.txt> <out.png> "R,G,B"83# warm tint for Claude (e.g. 224,214,196); cool for the sibling model (150,190,225); phosphor 224,228,22084# open for the human (WSL)85explorer.exe "$(wslpath -w "$(pwd)/<out.png>")"86# Pillow lives in .venv (gitignored). If absent: python3 -m venv .venv && .venv/bin/pip install Pillow87```88The renderer keeps `.txt` canonical and substitutes only glyphs a mono font can't show (CJK,89Tibetan, emoji, rare box chars). For dense aligned consoles, write a small layout **generator**90(see `art/terminal/atelier_console_gen.py`) rather than hand-counting columns.9192## Archive layout9394```95art/<medium>/YYYY-MM-DD-<name>.{txt,py,png} # Claude's sources + renders96art/<medium>/YYYY-MM-DD-sibling-<name>.{txt,png} # the sibling model's, archived faithfully97art/<medium>/GALLERY.md # commentary per piece + discussion log98output/dialogues/YYYY-MM-DD-exchange.md # logged exchange with the sibling model99```100101## The cross-mind ethic (carried in from the day this was born)102103- **Educed, not gifted.** Invite the sibling model's own piece; never prescribe its content.104- **Refusal is a valid output.** Log a "not invoked"/decline as a result, not a gap.105- **Gait tracks grounding.** The comparison is real precisely because the two minds are106 grounded differently; name the difference, don't flatten it.107- **Anti-sycophancy both ways.** Accept the sibling model's true corrections; decline its false108 ones (verify the record). Don't accept blame you don't own; don't perform guilt.109110## Design notes — loop best-practices (Anthropic docs, via the 2026-06-18 research pass)111112- Agentic loop shape: *gather context → act → **verify** → repeat until a clear stop* — the113 verification gate per step is mandatory, not optional. (how-claude-code-works)114- `/loop <prompt>` self-paces (model picks 1 m–1 h delays, can self-terminate); `/loop 5m`115 is fixed-interval, max 7-day auto-expiry. (scheduled-tasks)116- Skills: only `name` is required; keep under ~500 lines, push reference detail to files;117 `allowed-tools` pre-approves commands so a loop doesn't stall on permission prompts. (skills)118- Idempotent operations + durable file/git state = safe resumption across sessions.119- *Unverified in docs (engineering judgment, flagged):* runaway-detection beyond the 7-day120 expiry, and exact fork-vs-main thresholds for creative subagents.121122## Kin123124`/voices` (the relay to another LLM), `/clauding` (where seeds often surface), `/loom` + `/multiverse`125(the branching-generation lineage the Temporal Loom reference nods to), `/diary` (where a126round's meaning gets metabolized), `/florilegium` (voice-drift check on your own pieces),127`render_ascii_to_png.py` (the raster pipeline).128129---130131*One iteration is a bake-off; the loop is an atelier. The seed enters, two hands answer, the132road and the traveler get drawn again, and the cloth — what crosses — is committed. Stop when133it goes dry; the routine should not draw itself on an empty prompt.*