Feature Request: New Options for Habitica

One of my rules when using Beeminder is that I only pick goals that I view as unambiguously good. It helps my commitment to them and clearly justifies their value when the limits on my behavior are never debatable for unproductive work. One of the consequences of this is that I tend to prefer “negative” limits on how I spend my time rather than “positive” limits. For instance, I use rescue time, and instead of putting a hard minimum on the amount of “productive” time I need to spend on my computer, I put a hard maximum on the amount of nonproductive time I spend. I could conceive of myself doing productive work off the computer or being away from it out of choice, but it’s hard to imagine a circumstance where I’d need to spend 12+ hours on Reddit in a single week. It’s much easier to push myself and significantly change my behavior when a measure, like time spent on Reddit, is very clearly bad, and I’m not encouraging myself to do silly things like split my large git commits into chunks and push them all to my github branches.

I use Habitica partly because the exp and level indicators better reflect and encourage task completion than does a simple calendar or task management app like Todoist. When I’m using Habitica, I can set things like the “difficulty” of a task, and that allows my exp or gold consumption to be a sort of index for how productive I am that week. I’d love to enhance this by hooking it up to Beeminder; however, atm it only allows me to set two options for my goals: dailies completed, and tasks completed. This will kind of work; I have a certain amount of dailies I already use now, and can set a goal to track those, because a bare minnimum might be the dailies I’ve created before introducing this mechanic. But I would really like to track something closer to the index of exp, because I could justify requiring myself to make large gains. Obviously, even this performed in bad faith wouldn’t work, but it seems psychologically easier to go along with my regular usage of Habitica only worrying about correctly identifying task difficulty and remembering to check them off rather than having to consider whether or not I’m creating a task to fill the Beeminder bar and prevent myself from incurring the penalty.

[On this topic, one of the things I would actually like to see in Habitica is the ability to set the priority or importance of task as a first case, or at least the option to rate the difficulty of tasks after I complete them, so that my rewards are more accurate. But that’s not really a Beeminder problem, and I’m not sure if it’s a fallacy to rate task difficulty post-completion for a motivational app.]


This comment is about tracking Experience (XP) in a Beeminder goal. Tracking Gold would have similar considerations.

There are some issues that could make it unsuitable or not very meaningful for someone who uses Habitica in the common ways it’s used (e.g., anyone who participates in Quests), and some technical issues that would need to be considered.

One problem is that when you level up, your Experience drops to zero or (more usually) a bit above zero, so the goal type would need to handle that without derailing you. One way to get around that would be by tracking a combination of level and Experience, because levels correlate exactly with a certain amount of XP (Experience Level Chart). That wouldn’t be too hard, so this isn’t a huge problem.

Another issue is that you gain large amounts of Experience when you finish a Quest. A typical small task might give you 1 or 2 XP; a completed Quest would give you from 42 XP to 3500 XP, with most Quests giving a few hundred XP. If you wanted your Experience goal to be meaningful in terms of your efforts to complete tasks, you’d have to never do Quests, and Quests are one of Habitica’s fun motivational features so it would be a shame to bar yourself from them.

Beeminder could try to ignore bulk quest increases from quest completion but there’s no easy way to do that. You couldn’t rely on a single large increment of Experience being solely from a Quest because you might have finished the Quest by completing a task, and the XP from both sources would be added to your account at pretty much the same second. If you wanted to make Beeminder ignore bulk increases in XP, you’d lose some actual XP data from your tasks. If it happened to be a large, long-running, high-XP task that finished the Quest, your goal would miss out on the larger-than normal amount of task-XP that you’d rightfully earned.

The Enchanted Armoire presents a similar problem to Quests. You can use it to get a random gift of Equipment, Food for Pets, or Experience of around 20 XP to 40 XP at a time. Again, that would make your XP goal an inaccurate measure of task performance. You couldn’t really make Beeminder ignore that Armoire XP because large, long-running tasks can also give you roughly that much. You’d have to avoid using the Armoire if you wanted your goal to be accurate.

You could track XP from completed tasks by using one of Habitica’s webhooks to send data to Beeminder each time a task was scored, but that might have performance implications (probably not too bad though). It’s probably the only reasonable way to track XP from tasks.

Another issue is that the XP you earn from each task varies a fair bit depending on your avatar’s stats at the time. If you happen to be wearing Equipment that gives you a high XP boost, or if you’ve cast a Skill on yourself that does the same, or if you’re in a party with other players who have cast Skills on you, then your XP from each task will be significantly higher than from a similar task completed at a time when those buffs didn’t exist. You could avoid stats-giving Equiment and Skills, although avoiding Skills basically means never being in a Party with other players. However even then if you happened to complete all your due Dailies one day, you’d be given an unavoidable Perfect Day buff the next day, which would increase your stats by a fair bit and would give you more XP than normal for each task.

So basically, earning say 20 XP yesterday and 40 XP today might not mean you’d been twice as productive today - you might actually have completed more work yesterday. Experience in Habitica is only a rough indication of your progress, not something that counts as an accurate metric. It’s more of a motivational feature than a tracking feature alas. I’m not sure that makes it a good candidate for a Beeminder goal for many Beeminder-Habitica users.

The playing style of some users might mean that these disadvantages aren’t significant for them. For example, anyone who never changes their stats-giving Equipment and never uses stats-changing Skills would have a pretty consistent mapping between XP and productivity (especially if they always had Perfect Days or deliberately avoided them by having a Daily that they never complete). For those users, the webhooks solution could give decent Beeminder goal tracking. In the absence of an official integration it could be set up with a script that they’d run on a personal server - set up a webhook in Habitica to send data to the script and have the script send it on to a do-more Beeminder goal.


Completing a task and gaining the rewards is done by a single block of code in Habitica, so modifying the difficulty of a task after completion and then giving more rewards or taking some away would need a significant new bit of code (especially when you consider that if the user had changed their stats in the meantime, the calculations for the changes in rewards would have to take that into account, which would require permanent tracking of stats changes as well as more complicated calculations).

A better option is to change the difficulty just before you complete the task, which you can do in the task’s edit screen.

From a Habitica perspective, it’s perfectly legitimate to do that! If you discover while doing the task that it required more (or less) work than you initially thought, changing the difficulty would be the recommended approach so that you’re correctly rewarded for your work.