Graduate hacks to skills¶
URL: https://mkdocs.justinsforge.com/memory/general/feedback_graduate_hacks_to_skills/
When I just hand-rolled a one-off (downloaded a tool, chained 3 CLI invocations, wrote an inline Bash loop, manually converted a file format, scraped a thing), STOP at task end and decide whether to graduate it via /learnskill.
Why: Justin's forge gets stronger every time a manual step becomes a deterministic, registered, documented tool. Forgetting to graduate means the same hack gets rebuilt next month, except probably slightly differently. That's debt the forge eval harness exists to catch but graduation prevents up front. Per skill systems pattern and register every reusable tool.
How to apply:
Run this trigger check at the end of any task where I wrote ad-hoc code. Graduate if any of these fire:
| Signal | Example |
|---|---|
| Seen-twice rule | I'm doing this for the second time (or vaguely remember doing it before) |
| Obvious reuse | Inline script is named generically: "convert", "fetch", "compare", "download-and-X" |
| External-tool wrapper | I downloaded yt-dlp / ffmpeg / a CLI and used it from a one-liner |
| Format conversion | Image, audio, doc, data format wrangle, especially if it took >1 try to get right |
| API call boilerplate | I curl'd a third-party API with auth + parsing logic Justin will need again |
| Multi-step CLI chain | Three or more piped tools to produce one logical output |
| User flagged it | Justin said "save this", "make this a tool", "lets keep this" |
Skip graduation if:
- It's truly one-off (renaming three files in a specific dir, fixing a typo)
- The "tool" is just running an existing forge script with different args (use /followup to schedule it instead)
- Justin explicitly said don't bother
When the trigger fires, propose /learnskill in one line at the end of the response. Don't ask permission to graduate trivial stuff, just do it. Ask first if the script is non-trivial (>50 lines, network calls, mutates state) so Justin can scope.
Output discipline reminder (Section 9.5):
- Idempotent by default (rerun produces same end state)
- Fail loud (no silent except)
- snake_case [source]_[entity]_[state] naming
- No em dashes anywhere
- Append URL: https://mkdocs.justinsforge.com/<path>/ to every new .md in indexed dirs
- Register in MEMORY.md index, write memory/general/reference_<thing>.md topic file