Learnabolic
skill that gives AI agents self-improvement
Your 👍 is the gradient.
No API key. No model. ~150 lines of math.
live sim · gen 0 · fitness —
§ 02 · the problem
- Agents forget what worked.
- Every session starts from zero.
- Fine-tuning is out of reach. Prompt tweaking is guesswork.
§ 03 · the idea
The LLM proposes, statistics disposes.
kept 0 · n = 0
§ 04 · any score
If you can measure it, or rate it, learnabolic can use it to improve your agent.
- 👍
s = 1.00 - 7/10
s = 0.88 - 182 ms
s = 1.00 - 42/45 tests
s = 0.50 - 3.1% conversion
s = 0.78
- thumbs (w=1): 0..1 higher - quality (w=1): 0..10 higher target 8 - speed (w=0.3): 0..2000 lower target 500 - tests (w=0.5): auto higher - conversion (w=1): 0..10 higher target 4
§ 05 · the four instruments
Counting, not judging.
Bets on promising candidates without starving the rest.
Learns where to push: tighten, prune, explore…
Keeps a change only when the evidence says so. Then never slips back.
Notices when it's stuck, then explores.
Why no LLM judge? Judges drift, flatter and cost tokens. Counting doesn't.
§ 06 · goals steer
Goals steer; humans own the North Star.
§ 07 · live lab
Watch it learn, live.
Pick two: Correct, Fast, Cheap. Then watch it learn your taste.
§ 08 · portable brains
A brain is just a SKILL.md.
--- name: sim description: Correct, Fast, Cheap, learned in the Learnabolic Lab. --- # Coding habits Strength 0–1: how often the agent does it. - Write a failing test first (0.00) - Read the whole file before editing (0.80) - Reuse existing helpers (0.86) - Answer in one pass, skip re-checks (0.65) - Keep diffs small (0.90) - Run the full test suite after each change (0.00)```learnabolic { "version": 1, "generation": 15, "q": { "correct|flat": { "tighten": -0.025210390978246677, "emphasize-weakest-kr": -1.1091207952387683, "add-example": -1.0645384726967049, "explore": -0.982775643811597, "reorder": -1.0641952393127705, "prune": -0.9308111040422842 }, "cheap|flat": { "reorder": 0.032225360000000036, "emphasize-weakest-kr": 0.71245, "prune": 0.6944916666666667 }, "cheap|up": { "emphasize-weakest-kr": 1.1748835466666667, "add-example": 0.7455333333333333 }, "correct|up": { "tighten": 0.26, "prune": -0.4193918852993734, "add-example": -0.6080166121583175, "reorder": 0.0002642267989333702, "emphasize-weakest-kr": 0.20865139337578326 }, "correct|down": { "explore": 0.07474889337578339, "reorder": -0.16130464764556363, "tighten": 0.2262 } }, "fitnessHistory": [ 0.4185510699338983, 0.4185510699338983, 0.4185510699338983, 0.45532911077564897, 0.45109968371782677, 0.5018051015800572, 0.5266047328662946, 0.5612413968448526, 0.5669307372621828, 0.557596907934775, 0.5585242915724078, 0.6092103185292265, 0.6092103185292265, 0.6174896901796522, 0.6162652688199115, 0.6138004345546706, 0.6136325305840912, 0.6106750113707854, 0.6198476205184079, 0.6180247546058769, 0.6255667654796718, 0.6181568701494322, 0.6215617878817765, 0.619442200916749, 0.607366959403693, 0.6411773383895388, 0.6359955905763048, 0.6379649423819049, 0.6386553534693458, 0.6319588084946842, 0.6329792371079757, 0.6355738064204125, 0.6441623791654043, 0.6342062666545438, 0.631232542246862, 0.6362995909343356, 0.6362995909343356, 0.6335094530591927, 0.6336436805565426, 0.640184509563759, 0.6406878297946912, 0.6382962556595023, 0.6344966209934009, 0.6344966209934009, 0.6223205991350939, 0.6259578231945959, 0.624484599802904, 0.6211752227754676, 0.6279557349626201, 0.6274239766174715, 0.6496465854163999, 0.6516629148912165, 0.6499306901356137, 0.6422274596899268, 0.6407615429200538, 0.6389557298861409, 0.6442408077179567, 0.6459147492824876, 0.64841378815384, 0.6491813703265527, 0.5994536694873139, 0.6368341073170858, 0.6401019241396293, 0.637838009538097, 0.6520293641285502, 0.6439441601857132, 0.6438240474467677, 0.6438240474467677, 0.6466825113699703, 0.6512035790895015, 0.6512078356774467, 0.6458368213654477, 0.627979660364941, 0.6425688866957622, 0.6373025465780262, 0.6365413416518353, 0.6346643904156101, 0.6392552349591598, 0.6499623191539247, 0.6475799983748709, 0.6482736137896145, 0.6481647795950469, 0.6449799291120413, 0.6490772212601349, 0.64643596073202, 0.64643596073202, 0.6452874961604277, 0.6426935572176797, 0.6529444391477058 ], "lineage": [ { "id": "v0", "parent": null, "direction": null, "generation": 0 }, { "id": "v6", "parent": "v0", "direction": "emphasize-weakest-kr", "generation": 1 }, { "id": "v9", "parent": "v6", "direction": "emphasize-weakest-kr", "generation": 2 }, { "id": "v12", "parent": "v9", "direction": "reorder", "generation": 3 }, { "id": "v14", "parent": "v12", "direction": "add-example", "generation": 4 }, { "id": "v17", "parent": "v14", "direction": "emphasize-weakest-kr", "generation": 5 }, { "id": "v21", "parent": "v17", "direction": "emphasize-weakest-kr", "generation": 6 }, { "id": "v26", "parent": "v21", "direction": "prune", "generation": 7 }, { "id": "v41", "parent": "v26", "direction": "reorder", "generation": 8 }, { "id": "v45", "parent": "v41", "direction": "explore", "generation": 9 }, { "id": "v56", "parent": "v45", "direction": "tighten", "generation": 10 }, { "id": "v61", "parent": "v56", "direction": "tighten", "generation": 11 }, { "id": "v73", "parent": "v61", "direction": "explore", "generation": 12 }, { "id": "v85", "parent": "v73", "direction": "tighten", "generation": 13 }, { "id": "v88", "parent": "v85", "direction": "tighten", "generation": 14 }, { "id": "v120", "parent": "v88", "direction": "tighten", "generation": 15 } ], "ledger": [ {"t":"2026-10-03T14:53:21.057Z","event":"reject","variant":"v94","direction":"emphasize-weakest-kr","s":null,"decision":"reject","fitness":0.6520293641285502}, {"t":"2026-10-03T14:53:21.058Z","event":"reject","variant":"v95","direction":"tighten","s":null,"decision":"reject","fitness":0.6439441601857132}, {"t":"2026-10-03T14:53:21.058Z","event":"reject","variant":"v96","direction":"add-example","s":null,"decision":"reject","fitness":0.6438240474467677}, {"t":"2026-10-03T14:53:21.058Z","event":"propose","variant":"v97","direction":"add-example","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.058Z","event":"propose","variant":"v98","direction":"add-example","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.058Z","event":"reject","variant":"v99","direction":"reorder","s":null,"decision":"reject","fitness":0.6438240474467677}, {"t":"2026-10-03T14:53:21.059Z","event":"reject","variant":"v97","direction":"add-example","s":null,"decision":"reject","fitness":0.6466825113699703}, {"t":"2026-10-03T14:53:21.060Z","event":"reject","variant":"v98","direction":"add-example","s":null,"decision":"reject","fitness":0.6512035790895015}, {"t":"2026-10-03T14:53:21.060Z","event":"propose","variant":"v100","direction":"prune","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.060Z","event":"propose","variant":"v101","direction":"emphasize-weakest-kr","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.060Z","event":"propose","variant":"v102","direction":"emphasize-weakest-kr","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.061Z","event":"reject","variant":"v100","direction":"prune","s":null,"decision":"reject","fitness":0.6512078356774467}, {"t":"2026-10-03T14:53:21.061Z","event":"reject","variant":"v101","direction":"emphasize-weakest-kr","s":null,"decision":"reject","fitness":0.6458368213654477}, {"t":"2026-10-03T14:53:21.061Z","event":"reject","variant":"v102","direction":"emphasize-weakest-kr","s":null,"decision":"reject","fitness":0.627979660364941}, {"t":"2026-10-03T14:53:21.062Z","event":"propose","variant":"v103","direction":"reorder","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.062Z","event":"propose","variant":"v104","direction":"emphasize-weakest-kr","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.062Z","event":"propose","variant":"v105","direction":"reorder","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.062Z","event":"reject","variant":"v104","direction":"emphasize-weakest-kr","s":null,"decision":"reject","fitness":0.6425688866957622}, {"t":"2026-10-03T14:53:21.063Z","event":"reject","variant":"v105","direction":"reorder","s":null,"decision":"reject","fitness":0.6373025465780262}, {"t":"2026-10-03T14:53:21.063Z","event":"reject","variant":"v103","direction":"reorder","s":null,"decision":"reject","fitness":0.6365413416518353}, {"t":"2026-10-03T14:53:21.064Z","event":"propose","variant":"v106","direction":"add-example","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.064Z","event":"propose","variant":"v107","direction":"add-example","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.064Z","event":"propose","variant":"v108","direction":"reorder","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.064Z","event":"reject","variant":"v106","direction":"add-example","s":null,"decision":"reject","fitness":0.6346643904156101}, {"t":"2026-10-03T14:53:21.064Z","event":"reject","variant":"v108","direction":"reorder","s":null,"decision":"reject","fitness":0.6392552349591598}, {"t":"2026-10-03T14:53:21.065Z","event":"reject","variant":"v107","direction":"add-example","s":null,"decision":"reject","fitness":0.6499623191539247}, {"t":"2026-10-03T14:53:21.065Z","event":"propose","variant":"v109","direction":"explore","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.065Z","event":"propose","variant":"v110","direction":"reorder","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.065Z","event":"propose","variant":"v111","direction":"prune","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.066Z","event":"reject","variant":"v110","direction":"reorder","s":null,"decision":"reject","fitness":0.6475799983748709}, {"t":"2026-10-03T14:53:21.066Z","event":"reject","variant":"v109","direction":"explore","s":null,"decision":"reject","fitness":0.6482736137896145}, {"t":"2026-10-03T14:53:21.067Z","event":"reject","variant":"v111","direction":"prune","s":null,"decision":"reject","fitness":0.6481647795950469}, {"t":"2026-10-03T14:53:21.067Z","event":"propose","variant":"v112","direction":"emphasize-weakest-kr","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.067Z","event":"propose","variant":"v113","direction":"tighten","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.067Z","event":"propose","variant":"v114","direction":"emphasize-weakest-kr","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.067Z","event":"reject","variant":"v113","direction":"tighten","s":null,"decision":"reject","fitness":0.6449799291120413}, {"t":"2026-10-03T14:53:21.068Z","event":"reject","variant":"v112","direction":"emphasize-weakest-kr","s":null,"decision":"reject","fitness":0.6490772212601349}, {"t":"2026-10-03T14:53:21.068Z","event":"reject","variant":"v114","direction":"emphasize-weakest-kr","s":null,"decision":"reject","fitness":0.64643596073202}, {"t":"2026-10-03T14:53:21.068Z","event":"propose","variant":"v115","direction":"explore","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.068Z","event":"propose","variant":"v116","direction":"prune","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.068Z","event":"reject","variant":"v117","direction":"reorder","s":null,"decision":"reject","fitness":0.64643596073202}, {"t":"2026-10-03T14:53:21.069Z","event":"reject","variant":"v115","direction":"explore","s":null,"decision":"reject","fitness":0.6452874961604277}, {"t":"2026-10-03T14:53:21.069Z","event":"reject","variant":"v116","direction":"prune","s":null,"decision":"reject","fitness":0.6426935572176797}, {"t":"2026-10-03T14:53:21.070Z","event":"propose","variant":"v118","direction":"add-example","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.070Z","event":"propose","variant":"v119","direction":"prune","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.070Z","event":"propose","variant":"v120","direction":"tighten","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.076Z","event":"promote","variant":"v120","direction":"tighten","s":null,"decision":"promote","fitness":0.6529444391477058}, {"t":"2026-10-03T14:53:21.077Z","event":"propose","variant":"v121","direction":"tighten","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.077Z","event":"propose","variant":"v122","direction":"tighten","s":null,"decision":null,"fitness":null}, {"t":"2026-10-03T14:53:21.077Z","event":"propose","variant":"v123","direction":"emphasize-weakest-kr","s":null,"decision":null,"fitness":null} ], "envId": "sim", "policy": "# Coding habits\n\nStrength 0–1: how often the agent does it.\n\n- Write a failing test first (0.00)\n- Read the whole file before editing (0.80)\n- Reuse existing helpers (0.86)\n- Answer in one pass, skip re-checks (0.65)\n- Keep diffs small (0.90)\n- Run the full test suite after each change (0.00)\n" } ```
cli export- push to GitHub
npx skills add you/your-brain
It keeps learning from where you left off.
§ 09 · use it in 60 seconds
Install. Tell your agent. Score things.
- “tell your agent: track my commit-message skill with learnabolic”
- score things: 👍, 0–10, ms, tests passed
USE .learnabolic/commit-message/variants/v0.md PROPOSE tighten: write .learnabolic/commit-message/variants/v1.md as a small edit of v0 (weakest KR: quality), then run: node .claude/skills/learnabolic/scripts/cli.mjs propose commit-message v1 --direction tighten OK v0 (champion) s=0.75 OK v1 (tighten) is now challenging v0 PROMOTED v3 (fitness 0.47 → 0.75) PROMOTED v6 (fitness 0.76 → 0.96)
§ 10 · coming next
More worlds to learn in.
coming soon
Touchdown
A model that never sees the game writes a lander autopilot, and learns from scores alone.
Follow on GitHub →coming soon
Ratcheted autoresearch
Karpathy's overnight loop, with noise-aware keeps and a learned research taste.
Follow on GitHub →§ 11 · inspirations and credits
Standing on good shoulders.
- Memento: soft Q-learning over memory, LLM frozen.
- ACE: delta edits, not rewrites.
- karpathy/autoresearch: the keep/revert ratchet.
Built at Sundai X Copenhagen, October 2026. Theme: reinforcement learning for agents.
§ 12 · learnabolic