Agents that keep their own notes, and old packages released again
A month of plugins, skills and package releases
Most of what I've built since late August comes from one annoyance. A coding agent learns something on Monday (a port, a quirk in a build tool, why a test fails on Windows) and on Tuesday a fresh session learns it all over again. Everything below is an attempt to make that stop, or a side effect of trying.
Write it down where any tool can read it
Everlast gives each project an ai-docs/ folder: a short handoff, an append-only log, decisions, dead ends and plans. Facts about me and my machines go in a private vault instead of a repository. The record lives on disk as plain markdown. A session in Claude Code, Copilot or Codex can pick up the work from it without relying on any one tool's memory. It reached 0.6.1 today.
Evergreen is the same idea applied to skills. An agent skill is a set of instructions, and instructions about fast-moving tools go stale. An evergreen skill carries its research notes, a changelog, a learnings file and an eval suite, plus a schedule for checking its claims against primary sources again. Version 0.15.0 (October 2) added setup checks, so a skill can say what it needs (a tool, an API key, a local server, access to a database) and walk you through getting it.
Two smaller helpers came out of running a lot of skills at once. context-health warns when a session's context has grown large enough to make the model worse, in Claude Code, Copilot CLI, VS Code, Codex, Gemini CLI and Cursor. skill-tidy lints skill descriptions, finds the ones that collide and trims what the catalog costs in tokens.
I read most of this output in Obsidian, so obsidian-notes lints and indexes AI-written markdown until it works as a vault and still renders on GitHub.
Skills for specific jobs
Once the maintenance layer existed, building narrow skills on top of it got cheap:
- chartwright picks and builds a chart from a knowledge base of about 80 chart types, rendered for wherever it will be read (Markdown, a web page, PNG, PowerPoint, the terminal).
- threewright is three.js knowledge and a command-line checker, so an agent can prove a scene renders the way it claims. The 3D hero on this site's front page was checked with it.
- unity-agent has five skills for driving Unity from an agent: the new Unity CLI, headless batchmode, MCP bridges, workflow rules and packages.
- everscout: name a subject and get a scout for it, with a verified list of communities and feeds, polite scanning, notes and reports.
- readwright reads ebooks and documents a section at a time (outline first, then only the chapters needed) so a whole book doesn't land in the context at once.
- wikiwright writes a repository's GitHub wiki and checks every code example against the published npm or NuGet package.
- everwrite makes prose read as if a person wrote it, with a small checker script that counts what's left to fix. This post went through it.
Old packages, new releases
The biggest test of all this was going back to packages I published between 2010 and 2019 and left alone. package-modernize is the skill that came out of it. It surveys the old package, records what the published version does, and writes a decisions table. Then it stops until I approve. After that it rewrites, reviews, cleans up the repository and rehearses the release before anything ships. Releases go out through trusted publishing, so no long-lived registry token sits in the repository.
So far it has rebuilt ten packages:
| Package | Registry | First released | Now |
|---|---|---|---|
| JsonPrettyPrinter | NuGet | 2010 | 3.0.2 |
| RandomNameGeneratorLibrary | NuGet | 2015 | 2.3.0 |
| TrailerClipper | NuGet | 2015 | 2.0.0 |
| get-title-at-url | npm | 2016 | 3.0.0 |
| markdown-plain-link-replacer | npm | 2016 | 2.0.0 |
| stack-exchange-markdown-retriever | npm | 2016 | 2.0.0 |
| replace-string-at-position | npm | 2016 | 2.0.0 |
| is-an-image-url | npm | 2017 | 2.0.0 |
| format-json-files | npm | 2018 | 2.0.0 |
| seeded-random-utilities | npm | 2019 | 2.0.1 |
Several of them were the subject of my 2016 post on making npm packages. Ten years on, that post's complaint about a dependency whose owner never merged my pull request is moot: the new versions don't need it.
One rule I added along the way is a size budget. I like adding features, but a small library should stay small enough that nobody hesitates to install it. Every package plan now sets green, yellow and red size limits, and CI checks them.
Something new
The first new library from this setup is UniverseGenerator, a seeded galaxy and planet generator pulled out of my game SpaceDeckBuilder2. Version 1.0.0 shipped today, and it gets a post of its own.
Claude wrote this post with the everwrite plugin, running Opus 5.5 at medium effort.