
u/No_Skill_8393

Anthropic banned me since 2024. 3 email, 3 submitted forms. Zero human reply. Doesn’t even refund my sub. Most unprofessional company on the surface of planet earth.
So in 2024 I got an pro subscription to test out opus.
I was developing an chatbot, which one of the very important to test out its guardrail features, so I tested about 50 queries including sensitive political queries.
I was banned 1 day later. Emailed. Automated responses. Submitted forms, no responses. Zero refund, no human was found. Eloise (idk if even human) routed me into another submitted form dead end.
How can this company be more unprofessional?
I dont care if youre going for a trillion dollar ipo, but if you keep treating your customer like garbage, mark my words, this won’t end well.
Also to anthropic team: no. Do not send your customer support to me now. Im a happy codex user nowadays and your company is dead to me, well, you barred me from all access in the first place.
Update: it wasnt a pro subscription it was a prepaid 25$ api. Its been a while
I wrote a playbook for making one plugin repo run on Claude Code, Codex, OpenCode, Hermes and Antigravity at once
My learning plugin (engram) runs on Claude Code, Codex, OpenCode, and Hermes out of a single repo. An Antigravity port is in review. Same skills, same engine, same user state everywhere. Maintaining five forks would have killed me, so it had to work this way.
The portable layer is boring on purpose: SKILL.md folders (every one of the 12 platforms I surveyed reads them) plus a dependency-free Python CLI, because all of these tools can shell out and none of them share a plugin API. Hooks are where portability dies. Ten platforms have them, and no two schemas match.
Things that actually cost me:
- A contributor added a commands/ dir for Antigravity. AG ignores it, but Claude Code auto-discovers root commands/, so it would have shipped a stray command to every existing CC user. Files you add for platform A can change behavior on platform B.
- Hermes' hub installer only copies files referenced inside each skill folder. Shared engine? Silently severed. You want clone + external_dirs.
- /learn is a Hermes built-in. Whatever your command is called, some platform already uses the name.
The playbook has the repo anatomy, ten portability rules, a 12-question checklist I run before touching a new platform, per-platform crib sheets, and a July 2026 survey of 12 plugin surfaces (they drift monthly, every page is dated).
And since a playbook about omni-platform plugins that only exists as a docs repo would be a bit rich: it installs as a plugin itself. Same SKILL.md trick it preaches, so your agent pulls up the checklist on its own when you start porting something. I added those manifests an hour ago using the repo's own intake checklist, and the README says plainly which install routes are verified and which aren't yet.
https://github.com/nagisanzenin/omniplugin
It's one plugin's scar tissue, not a spec. If you've shipped multi-platform and your lessons contradict mine, I'd genuinely like to hear them.
This plugin makes your agent run a study it can't fake
Agents made running experiments cheap. They also made fooling yourself cheap.
Point one at a prompt tweak and it'll happily decide what "better" means after it sees the results, test five cases and call it a trend, then score its own output a 9/10. That isn't a finding. It's a vibe with a percentage stapled on. It's also why nobody believes the numbers in half the "I improved X" posts here.
crucible is a plugin that makes the agent do the study properly, by refusing to let it skip the three things that make one hold up:
Pre-register. The hypothesis and the bar for success get hashed and frozen before any data exists. Try to move the goalposts later and the tool catches it.
Power. It computes how many cases you need for the effect you care about. Run fewer and it won't say confirmatory, it says exploratory.
Blind judge. A separate agent scores the outputs without knowing which one is your new version, and it has to match human-labeled examples first or its vote doesn't count. No grading your own homework.
Clear all three and you get an effect size, a confidence interval, and a receipt. Miss one and it tells you which, in plain words.
I read the field before building. Every "AI scientist" and eval tool I found only advises; the model can nod and ignore it. Sakana's got audited at 57% invented numbers while reviewing its own work. Google's co-scientist scores itself on a metric its own paper says isn't ground truth. crucible's gates are code, so the agent can't opt out.
Free, MIT, Claude Code and Codex today, OpenCode next.
/plugin marketplace add nagisanzenin/crucible
/plugin install crucible@crucible
Then: "run a study with crucible on whether B beats A." It drives the rest. Codex build and setup are in the repo.
github.com/nagisanzenin/crucible
Point it at something you're sure works and see if it survives. I'd love for you to try to break it. That's the point.
This plugin makes your agent run a study it can't fake
Agents made running experiments cheap. They also made fooling yourself cheap.
Point one at a prompt tweak and it'll happily decide what "better" means after it sees the results, test five cases and call it a trend, then score its own output a 9/10. That isn't a finding. It's a vibe with a percentage stapled on. It's also why nobody believes the numbers in half the "I improved X" posts here.
crucible is a plugin that makes the agent do the study properly, by refusing to let it skip the three things that make one hold up:
Pre-register. The hypothesis and the bar for success get hashed and frozen before any data exists. Try to move the goalposts later and the tool catches it.
Power. It computes how many cases you need for the effect you care about. Run fewer and it won't say confirmatory, it says exploratory.
Blind judge. A separate agent scores the outputs without knowing which one is your new version, and it has to match human-labeled examples first or its vote doesn't count. No grading your own homework.
Clear all three and you get an effect size, a confidence interval, and a receipt. Miss one and it tells you which, in plain words.
I read the field before building. Every "AI scientist" and eval tool I found only advises; the model can nod and ignore it. Sakana's got audited at 57% invented numbers while reviewing its own work. Google's co-scientist scores itself on a metric its own paper says isn't ground truth. crucible's gates are code, so the agent can't opt out.
Free, MIT, Claude Code and Codex today, OpenCode next.
/plugin marketplace add nagisanzenin/crucible
/plugin install crucible@crucible
Then: "run a study with crucible on whether B beats A." It drives the rest. Codex build and setup are in the repo.
github.com/nagisanzenin/crucible
Point it at something you're sure works and see if it survives. I'd love for you to try to break it. That's the point.
I made a small plugin that stops Claude Code from info-dumping, without making it dumber
The plugin changes what Claude says to you, not how it works. That distinction is the entire point, so I will start there.
Claude Code is verbose by default. Preamble, a restatement of the request you just typed, "Great question", and a closing summary that repeats the summary from the middle. I read walls of text badly and they wear me out. This has annoyed me since months, so I wrote something that makes it answer first and drop the filler. It is called less.
The naive version is one line: tell the model to be concise. That version is worse. It starts cutting caveats, shortening the actual work, and skipping the one file path you needed. Concise and lobotomised are easy to confuse if you optimise the wrong layer.
So less does not touch the work. Reasoning, tool calls, and other plugins run at full depth. It governs the user-facing prose only, and it is instructed in writing to keep the load-bearing facts: numbers, paths, risks, anything you cannot undo. Minimal, not missing. When there is a decision it gives you a, b, c, and you answer with one letter.
Mechanically it is boring, which I mean as the compliment. A UserPromptSubmit hook injects a short protocol into the context each turn. It only adds, it replaces nothing, so it cannot fight your other plugins. Three modes: on is the default, zen is near silent, off is plain Claude. You switch with /less.
The whole plugin is a hook script and a markdown file. I spent longer on the markdown file than on the code, which tells you where the difficulty actually sat.
One honest limitation. I cannot measure "less tiring", it is subjective and I have no benchmark, so treat it as a preference and not a result. It is also a nudge repeated each turn, not a hard constraint, so across a very long session the model drifts back to chatty and you remind it.
MIT and free.
github.com/nagisanzenin/less
claude plugin marketplace add nagisanzenin/less
claude plugin install less@less
At this release rate by the time Opus 4.9 comes out Google will release Gemini-3.0-pro-preview
Title
I got tired of humanizer tools making everyone sound identical, so I built the opposite: 62 verified voice profiles plus an AI-tell linter, native on opencode
Founder disclosure: I built this. It's on v0.1.1 because v0.1.0 lasted about two hours before my own test run caught three bugs.
Humanizer tools are good at what they do, which is deleting AI tells. The problem is everyone deleting the same tells ends up sounding like the same person, and that clean careful nothing-voice is quietly becoming its own tell.
idiolect goes the other way: 62 complete fictional people instead of one scrubbed nobody. There's an HVAC owner in Ohio who drops the apostrophe in "its" about once per post, never twice. His wife Diane runs the phones till 6. A Glasgow art student writes everything lowercase, capital letters feel like announcements to her. My favorite is the Houston banh mi truck owner. Each profile is a biography that generates opinions, plus systematic flaws with actual rules. And three example posts that each had to score under 10 on the linter before shipping.
I lost a chunk of today to my own conform checker failing five of my sample posts in a row for being too rhythmically even. It was right all five times, which was worse.
The linter's the other half: a dependency-free python CLI that flags 235 tells with line numbers, from era-tagged vocabulary (delve is a 2023 tell, the 2026 residue is different words) to the metronomic sentence rhythm models can't stop producing. One product brief through five voices scanned 0, 0, 0, 0 and 9 out of 100, against 84 for the chatbot control. The 9 was the art student, dinged by the burstiness metric because her clipped little lines run too even. Clipped is her whole personality. I let it stand.
The limit that actually worries me is decay, word-level tells rot as models update, so the lexicon ships as era-tagged data with a local extension file rather than something I pretend is finished. Polite testimonial slop gets past any regex, mine included, that one belongs to the blind auditor agent. There's no posting automation in the box: it writes drafts, you post them.
Anyway. Free, MIT: github.com/nagisanzenin/idiolect
Install: add "skills": { "urls": ["github:nagisanzenin/idiolect"] } to opencode.json, then bash scripts/install-opencode.sh for the three agents. Skills are model-invoked here, no slash commands to memorize, you just ask for the thing. Claude Code and Codex work too.
btw, this post was written by idiolect and graded by its own blind auditor. draft one got rejected with the note "a post about metronomic rhythm has metronomic rhythm." this is draft four, and the best grade the judge will give me is "mixed," because I built it to round against the writer and it doesn't care that the writer is me. so: if you thought a real human wrote this, the plugin worked. if you clocked it, the auditor already agrees with you, which means the other half works too.
I got tired of the humanizer skill making everyone sound identical, so I built the opposite: 62 verified voice profiles plus an AI-tell linter
Founder disclosure: I built this. It's on v0.1.1 because v0.1.0 lasted about two hours before my own test run caught three bugs.
The humanizer skill is good at what it does, which is deleting AI tells. The problem is everyone deleting the same tells ends up sounding like the same person, and that clean careful nothing-voice is quietly becoming its own tell.
idiolect goes the other way: 62 complete fictional people instead of one scrubbed nobody. There's an HVAC owner in Ohio who drops the apostrophe in "its" about once per post, never twice. His wife Diane runs the phones till 6. A Glasgow art student writes everything lowercase, capital letters feel like announcements to her. My favorite is the Houston banh mi truck owner. Each profile is a biography that generates opinions, plus systematic flaws with actual rules. And three example posts that each had to score under 10 on the linter before shipping.
I lost a chunk of today to my own conform checker failing five of my sample posts in a row for being too rhythmically even. It was right all five times, which was worse.
The linter's the other half: a dependency-free python CLI that flags 235 tells with line numbers, from era-tagged vocabulary (delve is a 2023 tell, the 2026 residue is different words) to the metronomic sentence rhythm models can't stop producing. One product brief through five voices scanned 0, 0, 0, 0 and 9 out of 100, against 84 for the chatbot control. The 9 was the art student, dinged by the burstiness metric because her clipped little lines run too even. Clipped is her whole personality. I let it stand.
The limit that actually worries me is decay, word-level tells rot as models update, so the lexicon ships as era-tagged data with a local extension file rather than something I pretend is finished. Polite testimonial slop gets past any regex, mine included, that one belongs to the blind auditor agent. There's no posting automation in the box: it writes drafts, you post them.
Anyway. Free, MIT: github.com/nagisanzenin/idiolect
Install: /plugin marketplace add nagisanzenin/idiolect then /plugin install idiolect@idiolect. Codex and opencode too, one config line each.
btw, this post was written by idiolect and graded by its own blind auditor. draft one got rejected with the note "a post about metronomic rhythm has metronomic rhythm." this is draft four, and the best grade the judge will give me is "mixed," because I built it to round against the writer and it doesn't care that the writer is me. so: if you thought a real human wrote this, the plugin worked. if you clocked it, the auditor already agrees with you, which means the other half works too.
I ran ~450 benchmark runs on Claude Code's reasoning-effort levels. On most subagent tasks, max effort burned ~7x the tokens of low for zero quality gain — so I built a small open-source plugin that calibrates effort per subagent (64.7% fewer tokens at equal pass rate).
MOTIVATION
Claude Code has an effort dial (low / medium / high / xhigh / max), and subagents inherit your session's setting. There is no per-spawn effort parameter — you can override a subagent's model at the call site, but not its effort. So if your session runs at xhigh, the helper doing a one-line lookup thinks exactly as hard as the one debugging your worst code. Anthropic's own docs suggest "consider dynamic effort," and per-subagent effort is an open feature request on the Claude Code repo (issue 43083) — but nothing ships it. I wanted actual numbers instead of vibes, so I measured it.
THE HOW
The only place a subagent's effort can be set is its definition file. So the plugin ships five worker agents that are byte-identical except for one line (effort: low ... effort: max). Choosing an effort tier = choosing which worker to dispatch. That indirection is the entire mechanism — no hacks, no hidden API. A session-start hook injects a two-line dispatch policy derived from a measured calibration table, so it works with zero commands after install. There is also /effortmine if you want explicit calibrated dispatch of a multi-part job.
THE METHOD
Everything is pre-registered (decision rules fixed before any data): tasks x 5 tiers x 3 reps on claude-opus-4-8, answers graded by code (exact match and hidden adversarial pytest) wherever possible, a structurally-blind LLM grader only where not (it agreed with itself 12 out of 12 on double-graded artifacts), and every run's effort level verified via hook. About 450 real runs total. What came out:
- Median output tokens per tier: 101 (low) up to 696 (max). Roughly 7x the cost for the same work.
- Quality was flat across tiers on most task classes. Max never beat xhigh anywhere.
- Real gradients exist but are specific: diagnosis-type tasks went 6/9 at low to 9/9 at high, and one hard research question was only solved reliably at xhigh. In its failing low-effort run the model did not misread the documents — it fabricated a ticket ID that appears nowhere in them.
- Headline: calibrated dispatch used 64.7 percent fewer output tokens (95 percent CI 60.8 to 67.8) than effort inheritance, at an identical aggregate pass rate.
- Two pre-registered tests failed and are published as failures in the repo. One of them forced a data-driven recalibration (coding moved from low to medium after I wrote genuinely harder tasks). I would rather ship the losses than a highlight reel.
INSTALLATION AND HOW TO USE IT
claude plugin marketplace add nagisanzenin/effortmining
claude plugin install effortmining@effortmining
Then just use Claude Code normally — delegation gets calibrated ambiently from the next session. Or run /effortmine followed by a multi-part request for explicit dispatch. The whole benchmark is reproducible on your own account with /effort-bench, and the harness is plain stdlib Python. MIT licensed, all methodology and raw reports in the repo.
Honest limits: n=3 per cell so confidence intervals are wide, one model (re-fitting for another model is one command), and my task suite may be easier than your real work — the misclassification checks flag exactly where that is true.
Codex builds faster than I can understand what it built. So I built Engram, a learning system that runs inside the agent (real memory science, 100% local)
Why I built this
Codex ships the feature in twenty minutes. I'm still the one who reviews it, debugs it at 11pm, and explains it in front of people. That gap is the uncomfortable part of this era for me: the bottleneck quietly moved from "how fast can we build" to "how fast can we genuinely learn." We got a 10x tool for building. I wanted one for understanding.
So I built Engram. An engram is the physical trace a memory leaves in your brain, which is literally what this thing is supposed to produce.
Full honesty up front: this started as a Claude Code plugin, and a post about it recently blew up on r/claudeskill. But learning infrastructure shouldn't be locked to one agent, so I made the repo omni-agent: same skills, same engine (they're the open SKILL.md standard, shared verbatim), now running natively on Codex, with more agentic platforms coming in the next few days.
How it works
Three skills: $learn, $review, $coach. Underneath is the boring learning science that actually replicates, and none of the fun stuff that doesn't:
- retrieval practice: it tests you constantly, because testing IS the treatment, not the measurement (Roediger & Karpicke 2006)
- real spaced repetition: FSRS, the same modern scheduler Anki uses, fitted to your own review history over time
- generation first: you predict or attempt before it explains. It won't just hand you the answer, unless you say "just tell me", in which case it complies and quietly books that concept for an earlier review, because told-not-derived decays faster
- every topic becomes a first-principles concept graph ("why must this be true given that"), never textbook chapter order
- threshold concepts get generated interactive HTML explorables, sliders and prediction gates, because some things you have to poke
- explicitly no "learning styles". That theory failed every controlled test. It adapts from your measured retention instead.
The design decision I'm happiest with: the tutor never grades you. A separate assessor agent grades your free recall blind, rubric in hand, without ever seeing the lesson, and writes a receipt to disk. In my first real session the tutor was convinced things went great; the assessor came back with 1 recalled, 4 partial, 1 lapsed. It was right. (It also once logged confidence scores I never actually stated, so "never invent the learner's confidence" is now a hard rule in the code. A system that pushes back on its own optimism turned out to be the whole point.)
One Codex-specific difference: Codex spawns subagents only when you name them, so you summon the examiner explicitly with $engram-assessor at the end of a session. It stays exactly as blind, it just doesn't appear uninvited.
Does it work
Same honest answer as the original post: the science underneath is some of the most replicated stuff in psychology, the plugin itself is still small-n, and my retention data is still cooking. What I can report is that I used it to learn transformer internals and derived about half the concepts myself before being shown anything, which never happens when I just read.
And the part I want you to hold me to: the Codex glue is the newest code in the repo. The skills and the stdlib-only Python engine are shared verbatim with the Claude Code version and selftested, but the plugin route hasn't seen many live Codex installs yet. If it misbehaves, "npx skills add nagisanzenin/engram" installs the skills directly and carries the whole loop, and an issue describing what you saw is worth gold to me.
Install
codex plugin marketplace add nagisanzenin/engram
codex plugin add engram@engram
Then $learn anything. It's not code-only: history, music theory, anatomy all work. $review takes 2-4 minutes of free recall when reviews come due (a session-start hook pings you, and stays silent otherwise). $coach shows retention stats and a local HTML dashboard. Everything is plain JSON on your machine, and the engine has zero network code. Set ENGRAM_HOME=~/.engram if you'd rather not host a .claude folder.
Needs python3, no pip installs, MIT licensed. Repo: https://github.com/nagisanzenin/engram
If you try it, tell me where it feels annoying. The failure mode of every learning tool ever made is that you stop showing up, so friction reports are worth more to me than praise.
I used the rest of my Fable 5 quota to build Engram, a Claude Code plugin for learning anything (and actually keeping it)
Why I built this
Agents build faster than I can understand what they built. That's the uncomfortable part of this era for me. Claude ships a feature in twenty minutes, and I'm still the one responsible when it breaks, still the one who has to reason about it in review, still the one who's supposed to know what's going on under the hood. The bottleneck quietly moved from "how fast can we build" to "how fast can we genuinely learn." We got a 10x tool for building. I wanted one for understanding.
So I burned the rest of my Fable 5 quota building Engram. An engram is the physical trace a memory leaves in your brain, which is literally what the plugin is supposed to produce.
How it works
Three commands: /learn, /review, /coach. Under the hood it implements the boring learning science that actually replicates, and deliberately skips the fun stuff that doesn't:
- retrieval practice: it tests you constantly because testing IS the treatment, not the measurement (Roediger & Karpicke 2006)
- real spaced repetition: FSRS, the same modern scheduler Anki uses, fitted to your own review history over time
- generation first: it makes you predict or attempt before it explains. It will not just hand you the answer (unless you explicitly say "just tell me", in which case it complies and quietly schedules that concept for earlier review, because told-not-derived decays faster)
- every topic becomes a first-principles concept graph, "why must this be true given that", instead of textbook chapter order
- threshold concepts get generated interactive HTML explorables with sliders and prediction gates, because some things you need to see and poke
- explicitly no "learning styles". That theory never survived testing. It adapts from your measured retention instead.
The design decision I'm happiest with: the tutor never grades you. A separate assessor agent grades your answers blind, rubric in hand, without ever seeing the lesson, and writes a receipt to disk. In my first real session the tutor was convinced things went great and the assessor came back with 1 recalled, 4 partial, 1 lapsed. It was right. It also turned out the tutor had been logging confidence scores I never actually stated, so "never invent the learner's confidence" is now a hard rule in the code. A system that pushes back on its own optimism ended up being the whole point.
Does it work
Honest answer: the science underneath is some of the most replicated stuff in psychology, but the plugin itself currently has an n of 1, me, and my first week of retention data is still cooking. What I can report: I used it to learn transformer FFN internals yesterday and derived about half the concepts myself before being shown anything. That basically never happens when I just read about something.
Day to day it's tiny on purpose. You run /learn <anything> once (it works for non-code topics too, history or music theory or whatever). Then it pings you at session start when reviews are due, /review takes 2-4 minutes of free recall, and /coach shows retention stats and a local HTML dashboard. Everything is plain JSON in ~/.claude/learning. Nothing leaves your machine.
Install
claude plugin marketplace add nagisanzenin/engram
claude plugin install engram@engram
Needs python3, no pip installs, MIT licensed. Repo: https://github.com/nagisanzenin/engram
If you try it, tell me where it feels annoying. The failure mode of every learning tool ever made is that you stop showing up, so friction reports are worth more to me than praise.
My Claude Code agents kept saying "done, all tests passing" on apps where the login button did nothing. So I made them prove it.
A few months back I released production-grade, a free plugin that turns Claude Code into a 14-agent pipeline: PM, architect, backend, frontend, QA, security, the whole crew. It got some love here, then I went quiet because I was using it myself and kept hitting the wall everyone hits with agents.
The agent finishes, prints a lovely summary, claims every test passes. You open the app and half the buttons are decorative. My pipeline was one pass: each agent does its job, hands the work down, done. Real engineering is not one pass. It's loops. Write, run, fail, fix, run again.
v5.5 is one idea applied everywhere. An agent is not done when it says it's done. It's done when a check it cannot argue with says so. I'm calling it the Loop Engine.
Concretely:
The pipeline generates a fast check script for your project (typecheck + lint, under 15 seconds), and a hook runs it after every single file edit. Claude breaks something, the error lands back in its face immediately. Not at the end. Every edit.
Coding agents are banned from touching tests. QA writes failing tests first and owns the test folder. If a coder adds .skip or loosens an assertion to get green, that gets flagged as a critical finding. No more grading their own homework.
"12 test files written" stopped being an acceptable QA report. Suites have to actually run: executed, passing, failing.
Before the final gate, a separate agent boots your real app and drives it like a user. Every button clicked, every form submitted, every link followed. A button that renders but does nothing is a critical bug. This feature exists because I was tired of being my own QA department at 1am.
Loops stop on evidence, not vibes. Each one tracks a number (failing tests, open findings) and stops when it hits zero or stops improving, then shows you the trend, like 7 to 3 to 3, and asks. No retrying the same fix five times.
And when Claude hits something weird with no existing check, it can build its own loop, with one rule: first create a check it can run, like a failing repro script. No check, no loop.
Still free, MIT. Gates, receipts, and worktree isolation for parallel agents are unchanged.
Install:
/plugin marketplace add nagisanzenin/claude-code-plugins
/plugin install production-grade@nagisanzenin
Repo: github.com/nagisanzenin/claude-code-production-grade-plugin
Theory writeup lives in docs/LOOPS.md if you want the reasoning.
Honest caveat: this shipped this week. The edit-hook enforcement is real code, the rest is protocol the agents follow, and I want to see where they drift in the wild. If an agent cheats the rules or a loop converges badly on your project, I want the transcript.
My Claude Code agents kept saying "done, all tests passing" on apps where the login button did nothing. So I made them prove it.
A few months back I released production-grade, a free plugin that turns Claude Code into a 14-agent pipeline: PM, architect, backend, frontend, QA, security, the whole crew. It got some love here, then I went quiet because I was using it myself and kept hitting the wall everyone hits with agents.
The agent finishes, prints a lovely summary, claims every test passes. You open the app and half the buttons are decorative. My pipeline was one pass: each agent does its job, hands the work down, done. Real engineering is not one pass. It's loops. Write, run, fail, fix, run again.
v5.5 is one idea applied everywhere. An agent is not done when it says it's done. It's done when a check it cannot argue with says so. I'm calling it the Loop Engine.
Concretely:
The pipeline generates a fast check script for your project (typecheck + lint, under 15 seconds), and a hook runs it after every single file edit. Claude breaks something, the error lands back in its face immediately. Not at the end. Every edit.
Coding agents are banned from touching tests. QA writes failing tests first and owns the test folder. If a coder adds .skip or loosens an assertion to get green, that gets flagged as a critical finding. No more grading their own homework.
"12 test files written" stopped being an acceptable QA report. Suites have to actually run: executed, passing, failing.
Before the final gate, a separate agent boots your real app and drives it like a user. Every button clicked, every form submitted, every link followed. A button that renders but does nothing is a critical bug. This feature exists because I was tired of being my own QA department at 1am.
Loops stop on evidence, not vibes. Each one tracks a number (failing tests, open findings) and stops when it hits zero or stops improving, then shows you the trend, like 7 to 3 to 3, and asks. No retrying the same fix five times.
And when Claude hits something weird with no existing check, it can build its own loop, with one rule: first create a check it can run, like a failing repro script. No check, no loop.
Still free, MIT. Gates, receipts, and worktree isolation for parallel agents are unchanged.
Install:
/plugin marketplace add nagisanzenin/claude-code-plugins
/plugin install production-grade@nagisanzenin
Repo: github.com/nagisanzenin/claude-code-production-grade-plugin
Theory writeup lives in docs/LOOPS.md if you want the reasoning.
Honest caveat: this shipped this week. The edit-hook enforcement is real code, the rest is protocol the agents follow, and I want to see where they drift in the wild. If an agent cheats the rules or a loop converges badly on your project, I want the transcript.
Most teams ship prompts like its 2008. I built something better. A 4 agents pipeline to scientifically create, eval, tune the prompt for you.
Most teams ship prompts the same way they used to ship CSS in 2008. Tweak, eyeball a few outputs, push to prod, wait for users to complain, repeat. Prompts are production code. They deserve the same testing infrastructure your Python does.
That's why I built PromptLabs.
How the loop works, in five steps:
- You provide the input. Either an intent ("classify customer support emails as billing, technical, account, or other") or an existing production prompt plus the failure modes you've been seeing.
- EvalGen writes your test suite. It picks 5 to 8 categories of inputs that will exercise the prompt (happy path, edge cases, adversarial), fires one parallel LLM call per category, and dedupes the result. So you get real coverage, not 50 reworded copies of the same easy case. The same call also writes the scoring rubric. Then it splits the test set into train and holdout. The holdout never leaks into optimization.
- Runner executes the prompt across every target model in parallel. Choosing between Sonnet 4.6, GPT-5, and Gemini 3? All three run at once on the same eval set. Results in minutes, cost per eval plotted on the same chart.
- Judge scores every output, criterion by criterion. LLM-as-judge with reasoning attached, so you can see exactly why a score is what it is.
- Optimizer proposes a diff, not a regeneration. It looks at where the prompt failed, then returns specific line edits (insert this clause after line 3, delete this sentence, reword this paragraph). You read it like a pull request. The new version is scored on the holdout set. The loop checks for convergence or overfitting, and either accepts the result or loops back to step 3 with the new prompt.
The accepted prompt is served over HTTP. Your production code fetches the latest version at request time, so you can iterate without redeploying.
Three things that make this different from tools you've probably tried:
The eval set is real, not theater. Stratified by category with parallel generation and dedup, so you get coverage of edge cases instead of fifty rewordings of the happy path. Most tools either skip eval generation entirely, or give you one LLM call that quietly produces 40 near-duplicates.
Train and holdout stay separate, and the loop enforces it. The trajectory chart shows the gap widening the moment you start overfitting, and the loop halts itself when it does. The "best version" pick uses a lower confidence bound so a lucky high-variance run can't game the leaderboard. Most "optimizer" tools you've seen don't even have a holdout set.
The Optimizer evolves your prompt, it doesn't replace it. A diff is reviewable. You can accept some edits and reject others. The domain knowledge you spent six months baking into your prompt isn't thrown out every iteration. DSPy-style frameworks regenerate; this one refines.
If you've been gluing promptfoo + dspy + langfuse together to do what should be one workflow, this is one tool that does the whole thing. If you're treating prompts like config strings instead of like the production code they are, you're leaving accuracy on the table and inviting silent regressions you wont see until they hurt.
MIT, local, your keys.
Most teams ship prompts like its 2008. I built something better.
Most teams ship prompts the same way they used to ship CSS in 2008. Tweak, eyeball a few outputs, push to prod, wait for users to complain, repeat. Prompts are production code. They deserve the same testing infrastructure your Python does.
That's why I built PromptLabs.
How the loop works, in five steps:
- You provide the input. Either an intent ("classify customer support emails as billing, technical, account, or other") or an existing production prompt plus the failure modes you've been seeing.
- EvalGen writes your test suite. It picks 5 to 8 categories of inputs that will exercise the prompt (happy path, edge cases, adversarial), fires one parallel LLM call per category, and dedupes the result. So you get real coverage, not 50 reworded copies of the same easy case. The same call also writes the scoring rubric. Then it splits the test set into train and holdout. The holdout never leaks into optimization.
- Runner executes the prompt across every target model in parallel. Choosing between Sonnet 4.6, GPT-5, and Gemini 3? All three run at once on the same eval set. Results in minutes, cost per eval plotted on the same chart.
- Judge scores every output, criterion by criterion. LLM-as-judge with reasoning attached, so you can see exactly why a score is what it is.
- Optimizer proposes a diff, not a regeneration. It looks at where the prompt failed, then returns specific line edits (insert this clause after line 3, delete this sentence, reword this paragraph). You read it like a pull request. The new version is scored on the holdout set. The loop checks for convergence or overfitting, and either accepts the result or loops back to step 3 with the new prompt.
The accepted prompt is served over HTTP. Your production code fetches the latest version at request time, so you can iterate without redeploying.
Three things that make this different from tools you've probably tried:
The eval set is real, not theater. Stratified by category with parallel generation and dedup, so you get coverage of edge cases instead of fifty rewordings of the happy path. Most tools either skip eval generation entirely, or give you one LLM call that quietly produces 40 near-duplicates.
Train and holdout stay separate, and the loop enforces it. The trajectory chart shows the gap widening the moment you start overfitting, and the loop halts itself when it does. The "best version" pick uses a lower confidence bound so a lucky high-variance run can't game the leaderboard. Most "optimizer" tools you've seen don't even have a holdout set.
The Optimizer evolves your prompt, it doesn't replace it. A diff is reviewable. You can accept some edits and reject others. The domain knowledge you spent six months baking into your prompt isn't thrown out every iteration. DSPy-style frameworks regenerate; this one refines.
If you've been gluing promptfoo + dspy + langfuse together to do what should be one workflow, this is one tool that does the whole thing. If you're treating prompts like config strings instead of like the production code they are, you're leaving accuracy on the table and inviting silent regressions you wont see until they hurt.
MIT, local, your keys.
https://github.com/temm1e-labs/promptlabs
Most teams ship prompts like its 2008. I built something better.
Most teams ship prompts the same way they used to ship CSS in 2008. Tweak, eyeball a few outputs, push to prod, wait for users to complain, repeat. Prompts are production code. They deserve the same testing infrastructure your Python does.
That's why I built PromptLabs.
How the loop works, in five steps:
- You provide the input. Either an intent ("classify customer support emails as billing, technical, account, or other") or an existing production prompt plus the failure modes you've been seeing.
- EvalGen writes your test suite. It picks 5 to 8 categories of inputs that will exercise the prompt (happy path, edge cases, adversarial), fires one parallel LLM call per category, and dedupes the result. So you get real coverage, not 50 reworded copies of the same easy case. The same call also writes the scoring rubric. Then it splits the test set into train and holdout. The holdout never leaks into optimization.
- Runner executes the prompt across every target model in parallel. Choosing between Sonnet 4.6, GPT-5, and Gemini 3? All three run at once on the same eval set. Results in minutes, cost per eval plotted on the same chart.
- Judge scores every output, criterion by criterion. LLM-as-judge with reasoning attached, so you can see exactly why a score is what it is.
- Optimizer proposes a diff, not a regeneration. It looks at where the prompt failed, then returns specific line edits (insert this clause after line 3, delete this sentence, reword this paragraph). You read it like a pull request. The new version is scored on the holdout set. The loop checks for convergence or overfitting, and either accepts the result or loops back to step 3 with the new prompt.
The accepted prompt is served over HTTP. Your production code fetches the latest version at request time, so you can iterate without redeploying.
Three things that make this different from tools you've probably tried:
The eval set is real, not theater. Stratified by category with parallel generation and dedup, so you get coverage of edge cases instead of fifty rewordings of the happy path. Most tools either skip eval generation entirely, or give you one LLM call that quietly produces 40 near-duplicates.
Train and holdout stay separate, and the loop enforces it. The trajectory chart shows the gap widening the moment you start overfitting, and the loop halts itself when it does. The "best version" pick uses a lower confidence bound so a lucky high-variance run can't game the leaderboard. Most "optimizer" tools you've seen don't even have a holdout set.
The Optimizer evolves your prompt, it doesn't replace it. A diff is reviewable. You can accept some edits and reject others. The domain knowledge you spent six months baking into your prompt isn't thrown out every iteration. DSPy-style frameworks regenerate; this one refines.
If you've been gluing promptfoo + dspy + langfuse together to do what should be one workflow, this is one tool that does the whole thing. If you're treating prompts like config strings instead of like the production code they are, you're leaving accuracy on the table and inviting silent regressions you wont see until they hurt.
MIT, local, your keys.
https://github.com/temm1e-labs/promptlabs
Most teams ship prompts like its 2008. I built something better.
Most teams ship prompts the same way they used to ship CSS in 2008. Tweak, eyeball a few outputs, push to prod, wait for users to complain, repeat. Prompts are production code. They deserve the same testing infrastructure your Python does.
That's why I built PromptLabs.
How the loop works, in five steps:
- You provide the input. Either an intent ("classify customer support emails as billing, technical, account, or other") or an existing production prompt plus the failure modes you've been seeing.
- EvalGen writes your test suite. It picks 5 to 8 categories of inputs that will exercise the prompt (happy path, edge cases, adversarial), fires one parallel LLM call per category, and dedupes the result. So you get real coverage, not 50 reworded copies of the same easy case. The same call also writes the scoring rubric. Then it splits the test set into train and holdout. The holdout never leaks into optimization.
- Runner executes the prompt across every target model in parallel. Choosing between Sonnet 4.6, GPT-5, and Gemini 3? All three run at once on the same eval set. Results in minutes, cost per eval plotted on the same chart.
- Judge scores every output, criterion by criterion. LLM-as-judge with reasoning attached, so you can see exactly why a score is what it is.
- Optimizer proposes a diff, not a regeneration. It looks at where the prompt failed, then returns specific line edits (insert this clause after line 3, delete this sentence, reword this paragraph). You read it like a pull request. The new version is scored on the holdout set. The loop checks for convergence or overfitting, and either accepts the result or loops back to step 3 with the new prompt.
The accepted prompt is served over HTTP. Your production code fetches the latest version at request time, so you can iterate without redeploying.
Three things that make this different from tools you've probably tried:
The eval set is real, not theater. Stratified by category with parallel generation and dedup, so you get coverage of edge cases instead of fifty rewordings of the happy path. Most tools either skip eval generation entirely, or give you one LLM call that quietly produces 40 near-duplicates.
Train and holdout stay separate, and the loop enforces it. The trajectory chart shows the gap widening the moment you start overfitting, and the loop halts itself when it does. The "best version" pick uses a lower confidence bound so a lucky high-variance run can't game the leaderboard. Most "optimizer" tools you've seen don't even have a holdout set.
The Optimizer evolves your prompt, it doesn't replace it. A diff is reviewable. You can accept some edits and reject others. The domain knowledge you spent six months baking into your prompt isn't thrown out every iteration. DSPy-style frameworks regenerate; this one refines.
If you've been gluing promptfoo + dspy + langfuse together to do what should be one workflow, this is one tool that does the whole thing. If you're treating prompts like config strings instead of like the production code they are, you're leaving accuracy on the table and inviting silent regressions you wont see until they hurt.
MIT, local, your keys.
https://github.com/temm1e-labs/promptlabs
I just released TemRust-SMOL-v5-1.5B, an Apache-2.0 fine-tune of Qwen2.5-Coder-1.5B-Instruct specialized for Rust. Wanted to share it here because the project was specifically built around what r/rust would actually find useful: borrow-checker fixes, type-error fixes, test generation, and fix-this-issue tasks — all graded by running cargo, not by an LLM judge.
Benchmark (37 hand-curated Rust tasks, all graded by cargo check / cargo test / cargo run in a fresh tempdir per task; no string matching, no embedding similarity):
Qwen3-1.7B-chat (untrained, 1.7B) 13/37 = 35.1%
Qwen2.5-Coder-1.5B-Instruct (this base, 1.5B) 19/37 = 51.4%
TemRust-SMOL-v5-1.5B (released, 1.5B) 25/37 = 67.6%
Qwen2.5-Coder-3B-Instruct (2x params) 27/37 = 73.0%
TemRust v4 + v5 ensemble + cargo check 31/37 = 83.8%
The single 1.5B model is +16.2 pp over its untrained base. It does not beat the 3B Coder base. Running both my v4 (1.7B) and v5 (1.5B) checkpoints in parallel and accepting whichever output passes cargo check gets 83.8% — comparable total params but 10.8 pp better than the single 3B, because v4 and v5 fail on different tasks (v4 nails issue, v5 nails type/test/borrow).
Per-category for v5: borrow 7/10, issue 7/9, test 4/9, type 7/9. Tests are the weak spot — synthetic test scaffolds did not transfer well; documented honestly in the paper.
How it was built
- 263 real merged-PR file pairs (pre-fix to post-fix) crawled from 35+ popular Rust repos
- 51 hand-curated borrow/lifetime archetypes, teacher-fixed via Qwen3-Coder-Next
- 41 teacher-distilled test scaffolds
- LoRA r=32 alpha=64, 10 epochs, lr=2e-5, packing, max_seq_len=4096
- 1x RunPod H100 SXM5, ~20 min wall time, ~$1.50 per training run
- Full session spend across all experiments and ablations: ~$46
Quick usage
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tok = AutoTokenizer.from_pretrained("nagisanzeninz/TemRust-SMOL-v5-1.5B")
model = AutoModelForCausalLM.from_pretrained(
"nagisanzeninz/TemRust-SMOL-v5-1.5B",
torch_dtype=torch.bfloat16, device_map="auto",
)
System prompt I trained it with: "You are Tem-Rust, a Rust coding assistant. Return the complete fixed Rust file in a single code block."
Links
Model: <https://huggingface.co/nagisanzeninz/TemRust-SMOL-v5-1.5B>
Code: <https://github.com/temm1e-labs/temrust>
Discord: <https://discord.gg/temm1e>
Honest limitations
- Whole-file SFT, max_seq_len 4096. Multi-file refactoring is out of scope.
- The benchmark is balanced for diagnostic purposes (10/9/9/9), not weighted to real-world Rust frequency. Do not extrapolate the headline to "fixes 67% of all Rust bugs."
- Training is non-deterministic: three identically-configured retrains landed at 21, 23, and 25 on the same eval. The released checkpoint is the best of three samples. The model card documents the variance.
- No safety / RLHF post-training.
The repo includes a research_paper.md with the full v0 to v5.1 trajectory, ablations that did not work (including a capacity-scale regression and an ensemble-distill that landed within variance), and what I would try next. Honest writeup.
Feedback welcome, especially from anyone who tries it on real Rust code.
PS — this little model is a side-quest off the main project, TEMM1E, a ~160k LOC Rust AI coding agent I'm building. Discord above is the same one for both projects if you want to follow along; TEMM1E will get its own thread when it's ready.