Introducing Asanawarrior

Hey guys,

As you might know, I haven’t been happy with the speed and UI/UX of Asana. It’s slow, hugely reliant on mouse, has cumbersome keyboard shortcuts (tab+a, really?!) and takes a whole bunch of effort to sort through tasks. I’ve been wanting to do something about this problem. So far my idea has been to switch away from it, and bake something in-house. I spent a whole bunch of thought effort on Friday, researching various possible solutions, drawing out sketches of how we could build something, and even writing a long discuss post about how we could build such a system (and then abandoning it).

There’s a great command line tool for managing personal tasks called Taskwarrior. It’s free, open source and as one would expect from a good command line tool, fast, feature rich and can get things done.

I wanted to fashion something which would be inspired by TW, except as you build more features, it would come closer to a dirtier version of TW. And then it hit me! Why not bring Asana to TW.

So, I started working on a way by which I could do a bi-directional sync between our Asana boards and Taskwarrior. The guiding principle was that Asana would hold the main persistent state, and Taskwarrior would act as a client. You could throw one away and start a new one on another machine, and TW would sync quickly and let you get back to your tasks without much interruption. Also, any changes done on TW would automatically sync to Asana and vice-versa; as bi-directional sync suggests. No mutual sync is required between multiple TW instances (except via Asana).

So, what can you do with it (from perspective of TW, with sync to Asana):

  • View all the pending and completed Asana tasks, of all the team members.
  • Create new tasks
  • Assign tasks to yourself.
  • Assign tasks to others.
  • Update task name.
  • Update task tags.
  • Create new tags.
  • Assign project to task.
  • Assign section to task.
  • (TODO) Sync description.
  • (TODO) Sync comments (TW has an annotate feature, which is similar to Asana’s comments).

So, most things that one needs to operate with Asana, can now be done via TW. And that’s awesome!

TW has an amazing way to assign scores to various tags, projects etc. to help you determine the next task to work on. Also, it has crazy fast and easy to use batch edit feature on tasks. All this power of TW can now be used and all updates would automatically be synced up to Asana; which means one doesn’t need to use the slow Asana interface, or even switch away from the terminal.

I just barely stopped coding on the tool, so haven’t had a chance to set up my TW with the right priority scores and other color settings, but I’ll share my settings as they get built (also, will work on documentation). Meanwhile, try it out:


Update: If anyone is interested in contributing, here’re the Github issues: Issues · manishrjain/asanawarrior · GitHub

4 Likes

This is pretty awesome. Great work @mrjn. No more using the Asana GUI :grin:.

I will let you add the official documentation but for others trying it, do this

  1. Install Taskwarrior (Taskwarrior - What's next?).
  2. Start it using task list, it will ask you to create a .taskrc file, do that.
  3. Get a personal access token from Asana.
  4. Then build and run asanawarrior like ./asanawarrior --token access_token --domain dgraph.io.
  5. Then you can explore your tasks with task list, other commands from Taskwarrior - What's next?.
2 Likes

My .taskrc so far. Note that there’s one setting here which is required by Asanawarrior.

include /usr/share/doc/task/rc/solarized-dark-256.theme

# Required by Asanawarrior.
uda.xid.type=string

# Urgency coefficients
urgency.user.tag.just.do.it.coefficient = 15.0
urgency.age.coefficient              = 2.0 # coefficient for age
urgency.user.tag.@manish.coefficient = 10.0
urgency.user.tag._SomedayMaybe.coefficient = -15.0
urgency.user.tag._WaitingFor.coefficient = -10.0
urgency.user.project.Learning and Improvement.coefficient = -5.0
urgency.user.project.Technical Stuff.coefficient = 2.0
urgency.user.project.v0.4 Release.coefficient = 5.0

# Colors
color.tag.just.do.it = bold white on red
color.tag.next = bold white on red
color.project.v0.4 Release = black on rgb332
color.project.Learning and Improvement = gray10
color.project.Company Stuff= rgb233
color.project.Technical Stuff= rgb023

And this is how it looks.

1 Like

Updated config.

# Required by Asanawarrior.
uda.xid.type=string

# Urgency coefficients
urgency.user.tag.just.do.it.coefficient       = 15.0
urgency.age.coefficient                       = 2.0 # coefficient for age
urgency.user.tag.@manish.coefficient          = 10.0
urgency.user.tag._SomedayMaybe.coefficient    = -15.0
urgency.user.tag._WaitingFor.coefficient      = -10.0
urgency.user.project.Learning.coefficient     = -5.0
urgency.user.project.Technical.coefficient    = 2.0
urgency.user.project.v0.4 Release.coefficient = 5.0

# Colors
color.tag.just.do.it       = bold white on red
color.tag.next             = bold white on red
color.project.v0.4 Release = black on rgb332
color.project.Learning     = gray10
color.project.Company      = rgb233
color.project.Technical    = rgb023

# Personal report
report.m.description = Tasks assigned to Manish
report.m.columns     = id,project,tags,description,urgency
report.m.labels      = ID,Project,Tags,Description,Urg
report.m.sort        = urgency-
report.m.filter      = status:pending +@manish

For those new to Taskwarrior

  • Here is how you would add a task.

task add Update ToProtocolBuffer to be in sync with ToJSON project:v0.4\ Releases +@pawan +blue

Note that for project names with spaces, you have to escape the space.

  • Say you completed a task and wan’t to add a label, and mark it as done. You can.
    1. Search for a task by puttin it between // like task /loader/ list. This gives you a list of tasks. Note the id of the task you want to modify.
    2. To modify the title and add a tag run this - task 34 modify Read and understand how the loader works and make minor improvements. +blue
    3. To mark it as done task 34 done
1 Like

On static vs dynamic ids

https://taskwarrior.org/docs/ids.html

1 Like