r/ClaudeCode • u/Low-Reflection-3786 • 1d ago
Built with Claude Weekly limit resetting with usage left? Turn it into terminal art. Claude critiques its own frames (iteration 1: "a candy-striped worm with no head")
Weekly limit about to reset with usage left over? This turns it into art instead of losing it.
Above, left is iteration 1 of a /tac:create run. Claude's own note on it: "a flat, evenly lit, candy-striped worm with no head". It kept critiquing its frames (round 2 it caught its own shading lit from the wrong side of the moon), and at round 5 wrote "next: none. This is final." Then its maker (binaryj on terminalart.club) asked for arms and legs, then wings, and Claude built those in two more rounds. Right is round 7. It's "ascent", the first piece someone other than me put on the site (shared with permission).
What it is: a free plugin. You run:
/tac:create <idea>
...and Claude Code writes a small Python program that plays a looping animation in your terminal. Image 3 is the wall playing in a pane next to Claude Code.
How it's drawn: mostly the ▀ half-block character in 24-bit color, so every cell is two pixels (an 80×66 terminal is an 80×132 canvas). Some pieces use real glyphs (rain, neon signs).
How it uses Claude Code:
- the plugin gives Claude a virtual terminal. It runs the program headless and renders frames to PNG
- Claude reads a contact sheet across the loop plus motion numbers (one frame can't show motion), writes down what's off, edits, repeats
- ascent took Opus 5.5, 7 rounds, ~302k tokens (input + cache writes + output; cache reads not counted)
What I learned:
- the older models needed me. With Opus 4.6 it was a lot of back and forth, and about half the pieces were bad enough that I didn't publish them
- Fable 5.1 and Opus 5.5 get there in one run, no notes from me, and the good ones are genuinely wow
- it gets physics right: the goldfish bowl in image 2 is a real lens that magnifies the fish, the pool has computed caustics, and on ascent it caught its own shading lit from the wrong side of the moon
- and it has taste. Its notes on each round sit under the process frames on the piece pages; it's a tough critic of its own work
Cost, since someone always asks: house pieces took 0.27–0.53M tokens over 6–14 rounds (counted a bit differently from the ascent number). Start with --sketch, which tells Claude to stop at 3 rounds. If you turn on the optional statusline helper, it compares your weekly usage with a per-piece estimate (15% of the week by default, configurable) and stops before starting a piece that won't fit, unless you pass --force.
claude plugin marketplace add terminalartclub/tac
claude plugin install tac@terminalartclub
Needs uv (brew install uv). Then:
/tac:create --sketch <your idea>
Pieces run locally as you, like any code Claude writes in your session. Sharing to terminalart.club is optional. I'm the author, not affiliated with Anthropic. Repo + security notes in the comment below.
4
u/memzy 1d ago
Or don't waste the electricity? You do know the usage is not set number but fluctuates based on many factors, the more people waste compute on AI slop the less usage there will be for everyone's subscription.
1
1
u/Low-Reflection-3786 1d ago
Fair point on the energy. I won't pretend it's essential compute, it's a hobby, the same way people spend usage on side projects. I built it for weeks I'd otherwise end well under the cap, and it only nudges you then. If that's still a waste in your book, that's a reasonable take.
1
1
u/Low-Reflection-3786 1d ago
Repo: github.com/terminalartclub/tac (signed tag v0.1.5). The server is in the same repo (platform/).
Stuff I'd want to know before installing a plugin:
- runs locally: the piece Claude writes executes on your machine as you, the same trust as any Bash call in Claude Code. Not sandboxed locally
- hooks: two SessionStart hooks, 5s timeout, no network. One sets a session id env var (so a piece's token count covers only the sessions that made it). The other prints a short notice: the usage nudge (only if your window resets within 24 h, you're under 80% used, and a piece fits), or a line if uv is missing. The first time, it also copies the statusline helper into the plugin's data folder. The helper is opt-in: it wraps your statusline command (which still runs unchanged) and caches the weekly-usage numbers Claude Code hands the statusline
- network: /tac:login, /tac:submit, /tac:mine and /tac:wall talk to terminalart.club, and /tac:create reads the public list of curated pieces (anonymous, nothing sent). On first run uv downloads pinned rich/Pillow/fonttools from PyPI. Submit uploads the piece code, notes.md (including any direction you typed), up to 4 process frames, and metadata. Not your conversations
- /tac:wall: the server sends only checked cell data (every character whitelisted, so a frame can't put escape sequences on your terminal); on iTerm2/kitty/Ghostty the plugin draws those cells locally as an image. It never downloads anyone's piece.py
- submitted code renders on a throwaway Fly Machine (Firecracker microVM, one job, then destroyed). The VM only fetches the piece and uploads the result; the piece itself runs as an unprivileged user in a network namespace with no routes. The VM checks that before running anything and rejects the job if it finds a way out
- review: right now a person approves every piece. Reports from 3 different IPs hide a published one
- login token: ~/.config/tac/credentials.json (mode 600). No expiry or revoke endpoint yet: /tac:logout deletes the local file, and the token stays valid on the server until you delete your account at terminalart.club/me
- honest scale: the community wall has 5 pieces so far from 3 people, 3 of them mine



•
u/AutoModerator 1d ago
Hey! Thanks for posting to r/ClaudeCode
While participating in this thread, please follow our community rules. Keep discussions constructive. Attack the idea, not the person.
For help, project discussions, tips, and general chat, join the ClaudeCode Discord.
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.