atelier — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited atelier (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
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).
sibling model is text-only (cannot see images) you must write it a rich prose style brief instead.
.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.
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.
and is a valid PNG before claiming success.
explorer.exe "$(wslpath -w <abs>)" on WSL). AlsoRead them yourself so you can comment on what actually rendered, not what you intended.
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).
.md (brief commentary per piece and thediscussion 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 /atelier (no fixed interval) so the modelpaces 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.)
(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.
producing on an empty seed is manufacturing, not making.
file reports valid PNG before you say "rendered."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.
git status + git diff --check (no conflict markers) before committing.YYYY-MM-DD-<name>) so re-running never overwrites orcompounds. Each iteration is safe to repeat.
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.)
# 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 PillowThe 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.
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 modelgrounded differently; name the difference, don't flatten it.
ones (verify the record). Don't accept blame you don't own; don't perform guilt.
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 5mis fixed-interval, max 7-day auto-expiry. (scheduled-tasks)
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)
expiry, and exact fork-vs-main thresholds for creative subagents.
/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.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.