Enhancing Anki's Leech Mechanism - A Suggestion


Consider this scenario: two cards, one aged 3 years and another just 3 months old, both failing their review for the 8th time today and suspended due to the leech mechanism. It’s plausible that they don’t share the same level of forgetfulness. The older card might have a more deeply ingrained memory, while the newer one could indeed be a more likely candidate for leech status.

Shouldn’t mature cards that stumble occasionally get a bit of leniency? After all, the ability to recall a card isn’t strictly determined by the card itself. Factors like your environment and psychological status on a given day can contribute to the fact that you may forget a card even though you know it well. For this reason, all cards will eventually reach a leech state; it’s only a matter of time.

However, it’s not ideal for a mature card to be in a leech state. If you use suspend after leech, you have to reactivate them periodically and make efforts to adjust the fields, which are often unnecessary. Additionally, during the time it was suspended, you don’t get to review them anymore. The worst thing is that to prevent such cards from being sent to leech, users may have the urge (or get habituated) to dishonestly report “hard” instead of “again,” even though they can’t recall.

I propose a simple and effective tweak - let’s count the reviews flunked for leeching differently. Instead of counting all flunked reviews without discrimination, let’s only consider flunked reviews over a specified time period, say 6 months or 1 year. This way, we give mature cards a chance to recover from an occasional slip without immediately branding them as leeches.

Please note that this proposed mechanism only targets what counts as a leech. The flunked review should still reschedule the card as usual, giving you a chance to re-learn it, and punish you by finally sending it to leech if you still repeatedly fails to recall it.

This mechanism is backward compatible - the current implementation is a special case with an infinite “leech forgiving duration” - we can make that the default. Also, note that it is orthogonal to the scheduling logic; only the leech check logic needs to change.

I previously created an addon that changes this behavior - search for “Forgiving Leech” in the shared addons list. It has been working great for me. However, the monkey patch approach to the scheduler module no longer works for the v3 scheduler. That’s why I’m suggesting that perhaps this mechanism can be incorporated into part of the scheduler.

all cards will eventually reach a leech state; it’s only a matter of time.

I don’t think most Anki users would agree with this statement. If this actually happened, it would mean that spaced repetition doesn’t work.

during the time it was suspended, you don’t get to review them anymore

That’s kind of the whole point of suspending a leech card: it’s more trouble than it’s worth, so you don’t want to review it anymore, until and unless you decide to unsuspend it.

Nevertheless, you can choose not to suspend leech cards, by going to Deck Options in the Lapses section and changing “Leech Action” from “Suspend Card” to “Tag Only”.

You can also increase the “Leech threshold” value.

let’s only consider flunked reviews over a specified time period, say 6 months or 1 year

But many if not most mature cards will have an interval longer than this!

Leech cards should be rare, not a routine occurrence. If many cards are routinely hitting the leech threshold, it might be a sign of breaking some of the SuperMemo 20 rules, namely: “don’t learn things that you do not understand” and “learn before you memorize”


I never argued that spaced repetition doesn’t work. I only want to point out that the current leech mechanism doesn’t achieve what I expect of it.

If you don’t disagree that a person can fail to recall a mature card on occasion, even if the card is “remembered” well, and every card will come back indefinitely, then you have to agree with my conclusion that all cards will end up as leeches given enough time.

I believe you may want to argue that, given the exponential nature of human memory, such occasions should be arbitrarily rare for mature cards, making it not a significant issue. I agree with that, but it doesn’t invalidate my argument.

I am aware of these options. In fact, I chose a leech threshold of 4 for most of my decks, which is more aggressive than the default 8. That is because I believe the leech mechanism is an effective mechanism. Choosing a low threshold has the advantage of avoiding wasting too much time on hard-to-digest material, but it also has the drawback of resulting in more false positives on normal cards that shouldn’t be counted as leeches.

But if you think carefully, what do we mean by those “normal cards that shouldn’t be leeched”? If you follow this line of reasoning, you may come to the same conclusion:

  • A card that fails frequently is a leech.
  • A card that fails many times is not necessarily a leech.

So, this is my whole point in this “forgiving leech” idea.

It does not matter. I want to insist that if a mature card fails once or twice a year, we don’t need to count it as a leech. But it’s another story, as I pointed out, if the mature card fails repeatedly.

Your claim is not true from my personal experience. I have consistently used Anki for more than three years with an average daily review of around 250. I also have a short leech threshold of 4. Every day there are several leeches, some are true leeches, and some are not. Those “false leeches” are less frequent than real leeches, but over time they still accumulate.

I agree for those “true” leeches, which are excellent indicators of something you don’t understand. I like the leech detection mechanism, as I hoped to have made clear. It’s those “false” leeches that are most troublesome, and my point here is to have fewer of those.

1 Like

I agree with @shouya.

I feel that setting a leech threshold of 8 delays the identification of true leeches. Though I am not sure what should be the “ideal” leech threshold, the following SuperMemo page uses 5 lapses as the threshold in two different examples.


So, I want to set a leech threshold lower than 8. But, I am discouraged from doing so because, as @shouya said, setting a low leech threshold tends to give several false-positives.

Also, if given enough time (say, 10-20 years), false-positives will begin to appear even with the leech threshold of 8.

So, I think that “a card that fails frequently” is a better definition of a leech than “a card that has been failed multiple times”.


This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.