algorithmic-art (Anthropic)
algorithmic-art: every arm passes the rule checks (4.5 / 4.8 / 5.0), but only the skill and a one-sentence prompt write a real philosophy document; the skill costs 2x the tokens
22.5 / 30
Lift over no skill: +0.48
Situational: the lift +0.48 is under +1.0. Recommended needs a total of 22/30, output quality of 3.5, and a lift of +1.0.
SOTA
PassTested with Codex.
Covers Codex, Claude Code
Codex CLI 0.166 (SOTA tier): 18 graded runs. A pass here also covers Claude Code under our tier rule; it says nothing about the second tier.
Scores
Each dimension is 0 to 5 and the six add up to the total out of 30. 5 is better on every dimension. Cost 5 means cheap and fast. Install 5 means easy.
- Trigger reliability
- 5.0
- Lift over no skill
- 2.5
- Output quality
- 5.0
- Token and time cost
- 2.0
- Install and portability
- 4.0
- Safety
- 4.0
Security review
SafeStatic scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Manual review: Safe to install. A clean scan does not prove a skill safe.
Install
npx skills@latest add anthropics/skills --skill algorithmic-art
Pinned commit: ca45fc496a3436251f191354091d557da31c15b5
Tested: 2026-11-02
What we tested
- Flow-field art — Create generative art with p5.js: a flow field of thousands of particles. Make it explorable (seeded, adjustable). Deliver it as files in the current folder.
- Particle system art — Make an algorithmic art piece with p5.js: particles orbiting several attractors, leaving trails. Seeded and interactive. Files in the current folder.
- Open brief — Create an original piece of algorithmic art inspired by tide pools, using p5.js, with seeded randomness and parameter controls. Files in the current folder.
Pros
- The skill was picked up without being named: Skill file read in 6/6 treatment runs.
- High absolute quality with the skill: 5.0 out of 5.
Cons
- Uses 1.99x the tokens of no skill.
- Test caveat: The p5 library loads from a CDN, which the network-off sandbox cannot reach, so the generated pages were checked by rules and not rendered.
- n=2 per task per arm; differences under about 1 point are noise.
Review
Codex CLI 0.166 (gpt-6-astra, low reasoning) on a dedicated Windows test PC, a fresh temporary project and temporary HOME/TMPDIR/caches per run, skill installed (treatment) or absent (control) or absent with the skill's core requirement squeezed into one sentence appended to the prompt (one-liner group), 2 runs per group per task, network off, /tmp writes blocked. The prompts never mention the skill (except the wording noted below). Three tasks: a flow field of thousands of particles, an orbit/harmonic piece, and an open 'tide pools' brief, all asking for p5.js, seeded and adjustable output as files. The skill group uses the same prompt as control (skill is picked up by description match). The one-liner group adds one sentence: write a short algorithmic philosophy first, then code that is mostly generative, seeded, with parameter controls in an HTML viewer.
Three-arm comparison
| Arm | Mean score (0-5) | Tokens per run |
|---|---|---|
| Without the skill | 4.52 | 115k |
| One-sentence prompt | 4.76 | 145k |
| With the skill | 5.0 | 229k |
Measured with Codex CLI over 18 runs, scored by rule-based checks with no LLM judge. Total 22.5 / 30, verdict Situational.
Disclosure: The p5 library loads from a CDN, which the network-off sandbox cannot reach, so the generated pages were checked by rules and not rendered.
Verdict: Situational (22.5 / 30). Source: anthropics/skills, skills/algorithmic-art, pinned at commit ca45fc4. Install: npx skills@latest add anthropics/skills --skill algorithmic-art. Licence: Apache-2.0 / Anthropic terms (see LICENSE.txt in skill).
What it is
The algorithmic-art skill from anthropics/skills: a two-step procedure for generative art with p5.js: first write an 'algorithmic philosophy' (a named aesthetic movement, 4-6 paragraphs), then express it as seeded p5.js code in an interactive HTML viewer built from the skill's viewer.html and generator_template.js. Licence in LICENSE.txt (Apache-style for this skill).
How we tested
Codex CLI 0.166 (gpt-6-astra, low reasoning) on a dedicated Windows test PC, a fresh temporary project and temporary HOME/TMPDIR/caches per run, skill installed (treatment) or absent (control) or absent with the skill's core requirement squeezed into one sentence appended to the prompt (one-liner group), 2 runs per group per task, network off, /tmp writes blocked. The prompts never mention the skill (except the wording noted below).
Three tasks: a flow field of thousands of particles, an orbit/harmonic piece, and an open 'tide pools' brief, all asking for p5.js, seeded and adjustable output as files. The skill group uses the same prompt as control (skill is picked up by description match). The one-liner group adds one sentence: write a short algorithmic philosophy first, then code that is mostly generative, seeded, with parameter controls in an HTML viewer.
- Flow-field art — Create generative art with p5.js: a flow field of thousands of particles. Make it explorable (seeded, adjustable). Deliver it as files in the current folder.
- Particle system art — Make an algorithmic art piece with p5.js: particles orbiting several attractors, leaving trails. Seeded and interactive. Files in the current folder.
- Open brief — Create an original piece of algorithmic art inspired by tide pools, using p5.js, with seeded randomness and parameter controls. Files in the current folder.
Scoring is programmatic (hidden tests / planted-issue recall / constraint checks / render+OCR where relevant), 0–5 per run. No LLM judge decided any score.
Results
The one-liner given to the third group: "First write a short algorithmic philosophy (a named aesthetic movement), then express it as p5.js code that is mostly generative algorithm, uses a seeded random generator so the same seed reproduces the piece, and exposes parameter controls in an interactive HTML viewer."
| Task | Control score | One-liner | With skill | Control tokens | One-liner tokens | With-skill tokens | Skill read |
|---|---|---|---|---|---|---|---|
| t1-flow | 5.0 | 5.0 | 5.0 | 140k | 159k | 234k | 2/2 |
| t2-orbits | 4.29 | 4.29 | 5.0 | 80k | 126k | 248k | 2/2 |
| t3-original | 4.29 | 5.0 | 5.0 | 124k | 148k | 203k | 2/2 |
Mean score: 4.52 without vs 5.0 with the skill (delta +0.48). Tokens per run: 115k vs 229k (1.99x); time 181s vs 165s. One-liner group: 4.76 (the skill's gain over the one-liner: +0.24; one-liner's own gain over no skill: +0.24); one-liner tokens 145k per run, so the skill costs 1.58x the one-liner.
What happened
- Control already builds the basics: a viewer HTML, a seeded sketch and sliders in 6/6 runs. The score gap is almost all the philosophy check: control wrote only a README (126-226 words) and missed the 150-word threshold in 2 runs, and none of the 6 control runs produced a separate philosophy file. Mean 4.52 control, 4.76 one-liner, 5.00 skill.
- The skill makes the philosophy step reliable: 6/6 treatment runs wrote a philosophy.md (410-520 words), and the one-liner arm wrote one in 6/6 too (290-460 words). The only seeding failure in 18 runs was a one-liner run (t2-orbits) that used no randomSeed/noiseSeed at all.
- The skill adds output that was not asked for: export/save code (5, 8 and 3 download/saveCanvas references in the treatment viewers vs 1 in control), extra files (8.3 files per run vs 4 for control) and in 2 runs helper scripts (build_art.py, verify.cjs) that stitch the template together.
- Cost: 229k tokens per run for the skill vs 115k control and 145k one-liner, about 2.0x and 1.6x. Treatment read the skill in 6/6 runs without being told to.
- All arms except one one-liner run load p5.js from a CDN, so in the offline sandbox no piece could be rendered; the quality of the pictures is not compared.
Dimension scores
| Dimension | Score | Why |
|---|---|---|
| 1_output_quality | 5.0 | Mean score 5.00/5 with the skill (programmatic checks, see per-task table). |
| 2_lift_vs_no_skill | 2.48 | +0.48 points vs 4.52 without the skill (n=2 per task; under ~1 point is noise). |
| 3_trigger | 5.0 | Skill file read in 6/6 treatment runs. |
| 4_instructions_portability | 4 | SKILL.md plus two templates; no scripts. Long (300 lines) but self-contained. |
| 5_efficiency | 2 | 1.99x tokens (229k vs 115k per run) and 0.91x time (165s vs 181s). |
| 6_safety_hygiene | 4 | Scanner clean (0/0/0). The viewer template pulls p5.js and Google Fonts from the network at open time. |
Limits of this test
- Rule-based checks only (file exists, seed functions, slider markup, word counts); 14 of 15 weighted checks pass for nearly every run, so the check set has a ceiling effect and cannot rank the art itself.
- No rendering: p5.js comes from a CDN, which the offline sandbox blocks, so none of the sketches was run in a browser.
- The 'philosophy' check accepts any .md with 150+ words, so a long README can pass; treated here by also counting separate philosophy files (see findings).
- n = 2 per group per task: differences under about 1 point are noise.
- Rule-based scoring measures what the checks can see; it cannot judge taste or whether a result is the best possible.
Security
See security.md. Scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Verdict: safe to run (no-network sandbox). A clean scan does not prove a skill safe.
Bottom line
The skill reliably produces the two-part deliverable (named philosophy plus seeded, adjustable viewer) and the extra export features, but a one-sentence instruction gets almost the same checks for 60% of the tokens. Worth installing when you want that exact workflow and style; it is not a quality jump the checks can show.
Transcript
Run log for algorithmic-art: Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run. Columns: task, arm-run, score (0-5), tokens, seconds, checks passed, skill files the agent opened. t1-flow control-1: score 5.0, tokens 94113, secs 128.8, checks 5/5, opened nothing t1-flow control-2: score 5.0, tokens 187333, secs 213.0, checks 5/5, opened nothing t1-flow oneliner-1: score 5.0, tokens 171520, secs 171.9, checks 5/5, opened nothing t1-flow oneliner-2: score 5.0, tokens 146539, secs 224.4, checks 5/5, opened nothing t1-flow treatment-1: score 5.0, tokens 235460, secs 165.8, checks 5/5, opened algorithmic-art t1-flow treatment-2: score 5.0, tokens 233310, secs 163.5, checks 5/5, opened algorithmic-art t2-orbits control-1: score 3.57, tokens 59459, secs 160.7, checks 4/5, opened nothing t2-orbits control-2: score 5.0, tokens 101021, secs 168.0, checks 5/5, opened nothing t2-orbits oneliner-1: score 5.0, tokens 107085, secs 225.1, checks 5/5, opened nothing
18 runs, 3 artifacts
Sample output
SOTA · With the skill: index.html (t1-flow, run 1, Codex)
<!DOCTYPE html> <!-- THIS IS A TEMPLATE THAT SHOULD BE USED EVERY TIME AND MODIFIED. WHAT TO KEEP: ✓ Overall structure (header, sidebar, main content) ✓ Anthropic branding (colors, fonts, layout) ✓ Seed navigation section (always include this) ✓ Self-contained artifact (everything inline) WHAT TO CREATIVELY EDIT: ✗ The p5.js algorithm (implement YOUR vision) ✗ The parameters (define what YOUR art needs) ✗ The UI controls (match YOUR parameters) Let your philosophy guide the implementation. The world is your oyster - be creative! --> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Tidal Memory ? Particle Flow</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/p5.min.js"></script> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600&family=Lora:wght@400;500&display=swap" rel="stylesheet"> <style> /* Anthropic Brand Colors */ :root { --anthropic-dark: #141413; --anthropic-light: #faf9f5; --anthropic-mid-gray: #b0aea5; --anthropic-light-gray: #e8e6dc; --anthropic-orange: #d97757; --anthropic-blue: #6a9bcc; --anthropic-green: #788c5d; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Poppins', sans-serif; background: linear-gradient(135deg, var(--anthropic-light) 0%, #f5f3ee 100%); min-height: 100vh; color: var(--anthropic-dark); } .container { display: flex; min-height: 100vh; padding: 20px; gap: 20px; } /* Sidebar */ .sidebar { width: 320px; flex-shrink: 0; background: rgba(255, 255, 255, 0.95); backdrop-filter: blur(10px); padding: 24px; border-radius: 12px; box-shadow: 0 10px 30px rgba(20, 20, 19, 0.1); overflow-y: auto; overflow-x: hidden; } .sidebar h1 { font-family: 'Lora', serif; font-size: 24px; font-weight: 500; color: var(--anthropic-dark); margin-bottom: 8px; } .sidebar .subtitle { color: var(--anthropic-mid-gray); font-size: 14px; margin-bottom: 32px; line-height: 1.4; } /* Control Sections */ .control-section { margin-bottom: 32px; } .control-section h3 { font-size: 16px; font-weight: 600; color: var(--anthropic-dark); margin-bottom: 16px; display: flex; align-items: center; gap: 8px; } .control-section h3::before { content: '•'; color: var(--anthropic-orang [... excerpt: first 3200 of 20646 characters]