I am finally getting to learn AlfredApp Workflows. Previously they looked rather daunting to me.

Since I moved to a new laptop I’m learning to do more with AlfredApp (it is Mac only, and I use the paid PowerPack option). On my old laptop I first only used it for custom search, such as finding a business on Open Street Map. Later I added the automated expansion of text snippets, which saves me a lot of typing during the day.

AlfredApp also allows you to make Workflows, where you string together triggers, inputs, operators, actions and outputs to automate tasks on your machine. I had previously looked at Workflows but they seemed complicated to me, judging by some example workflows I downloaded that weren’t at all clear to me. Early this morning I came across this video of Automating All The Things, where Aron Korenblit talks with Chris Messina about using Workflows (it was early and I did not jot down where I found the vid, in someone’s RSS, mastodon stream or someplace else, so HT to whoever pushed it in my stream)

this is just a screenshot from the video that links to the video on YT, not a video player: I didn’t want to embed YT video.

This morning I reckoned I wasn’t going to watch a 87 minute video, but I was wrong (though I did jump forward a few times). Chris takes Aron through the basics of building your own Workflows, and I now get what they are and how to build my own. First I’ve added some fairly easy things, like having typing ‘read’ open up my fresh articles in my TinyTinyRSS feedreader instance, or typing ‘blog’ followed by a type of post, e.g. ‘blog bookmark’ open up the correct editing window for it. Next, I will be thinking through my local routines and context switches, and how I might be able to assist myself by automating them. The video starts with a few quick tips on how to make AlfredApp easier to access and use for yourself, so it can get embedded in your muscle memory.

Recently Stephen Downes linked to an article on the various levels of sophistication of AI personal assistants. He added that while all efforts are currently at the third level of those 5 he sees a role in education for such assistance only once level 4 or higher is available (not now the case).

AI assistants maturity levels

Those five levels mentioned in the article are:

  1. Notification bots and canned pre-programmed responses
  2. Simple dialogues and FAQ style responses. All questions and answers pre-written, lots of ‘if then’ statements in the underlying code / decision tree
  3. More flexible dialogue, recognising turns in conversations
  4. Responses are shaped based on retained context and preferences stored about the person in the conversation
  5. An AI assistant can monitor and manage a range of other assistants set to do different tasks or parts of them

I fully appreciate how difficult it is to generate natural sounding/reading conversation on the fly, when a machine interacts with a person. But what stands out to me in the list above and surrounding difficulties is something completely different. What stands out to me is how the issues mentioned are centered on processing natural language as a generic thing to solve ‘first’. A second thing that stands out is while the article refers to an AI based assistant, and the approach is from the perspective of a generic assistant, that is put to use into 1-on-1 situations (and a number of them in parallel), the human expectation at the other end is that of receiving personal assistance. It’s the search for the AI equivalent of a help desk and call center person. There is nothing inherently personal in such assistance, it’s merely 1-on-1 provided assistance. It’s a mode of delivery, not a description of the qualitative nature of the assistance as such.

Flip the perspective to personal

If we start reasoning from the perspective of the person receiving assistance, the picture changes dramatically. I mostly don’t want to interact with AI shop assistants or help desk algorithms of each various service or website. I would want to have my own software driven assistant, that then goes to interact with those websites. I as a customer have no need or wish to automate the employees of the shops / services I use, I want to reduce my own friction in making choices and putting those choices to action. I want a different qualitative nature of the assistance provided, not a 1-on-1 delivery mode.

That’s what a real PA does too, it is someone assisting a single person, a proxy employed by that person. Not employed by whomever the PA interacts with on the assisted person’s behalf.
What is mentioned above only at level 4, retained context and preferences of the person being assisted, then becomes the very starting point. Context and preferences are then the default inputs. A great PA over time knows the person assisted deeply and anticipates friction to take care of.

This allows the lower levels in the list above, 1 and 2, the bots and preprogrammed canned responses and action, to be a lot more useful. Because apart from our personal preferences and the contexts each of us operates in, the things themselves we do based on those preferences and contexts are mostly very much the same. Most people use a handful of the same functions for the same purpose at the same time of day on their smart speakers for instance, which is a tell. We mostly have the same practices and routines, that shift slowly with time. We mostly choose the same thing in comparable circumstances etc.

Building narrow band personal assistants

A lot of the tasks I’d like assistance with can be well described in terms of ‘standard operating procedures’, and can be split up in atomic tasks. Atomic tasks you can string together.
My preferences and contextual deliberations for a practice or task can be captured in a narrow set of parameters that can serve as input for those operating procedures / tasks.
Put those two things together and you have the equivalent of a function that you pass a few parameters. Basically you have code.

Then we’re back to automating specific tasks and setting the right types of alerts.

Things like when I have a train trip scheduled in the morning, I want an automatic check for disturbances on my route when I wake up and at regular intervals until 20 mins before the train leaves (which is when I get ready to leave for the rail way station). I want my laptop to open up a specific workspace set-up if I open my laptop before 7 am, and a different one when I’m re-opening my laptop between 08:30-09:00. I want when planning a plane trip an assistant that asks me for my considerations in my schedule what would be a reasonable time to arrive at the airport for departure, when I need to be back, and I want it to already know my preferences for various event times and time zone differences w.r.t spending a night before or after a commitment at the destination. Searching a hotel with filter rules based on my standard preferences (locations vis-a-vis event location and public transport, quality, price range), or simpler yet rebook a hotel from a list of previous good experiences after checking if price range e.g. hasn’t changed upward too much. Preference for direct flights, specific airlines (and specific airlines in the case of certain clients) etc. Although travel in general isn’t a priority now obviously. When I start a new project I want an assistant to ask a handful of questions, and then arrange the right folder structure, some populated core notes, plan review moments, populate task lists with the first standard tasks. I only need to know the rain radar forecast for my daughter’s school start and finish, and where my preferred transport mode for an appointment is bicycle. For half a dozen most used voice commands I might consider Mycroft on a local system, foregoing the silos. Keeping track of daily habits, asking me daily reflection questions. Etc.

While all this sounds difficult when you would want to create this as generic functionality, it is in fact much more simpler in the case of building it for one specific individual. And it won’t need mature AI natural conversation, merely a pleasantly toned interaction surface that triggers otherwise hard coded automated tasks and scripts. The range of tasks might be diverse but the range of responses and preferences to take into account are narrow, as it only needs to pertain to me. It’s a narrow band digital assistant, it’s the small tech version.

Aazai

For some years I’ve dubbed bringing together the set of individual automation tasks I use into one interaction flow as a personal digital assistant ‘Aazai’ (a combination of my initials A.A.Z. with AI, where the AI isn’t AI of course but merely has the same intention as what is being attempted with AI generally). While it currently doesn’t exist mostly as a single thing, it is the slow emergence of something that reduces digital friction throughout my day, and shifts functionality with my shifts in habits and goals. It is a stringed together set of automated things arranged in the shape of my currently preferred processes, which allows me to reduce the time spent consciously adhering to a process. Something that is personal and local first, and the atomic parts of which can be shared or are themselves re-used from existing open source material.

Friday I made another step towards ditching Evernote, which has been my green elephant in the room for quite a while. Whenever I start a new project I run a little Applescript that sets up a few standard folders, note files and tasks, depending on the type of project (client project, internal, etc.). Folders and template files would be in the file system, tasks in Things, and note files in a specific notebook and with tags in Evernote. The note files are now being created as markdown text files on my filesystem, with the right links and tags put into the files.

The toughest thing to crack will be how to deal with existing notes. Not adding new stuff to Evernote is one thing, but dealing with archives another. I took a few samples and a lot isn’t of much use anymore obviously, but other things might be of interest. Finding those is the challenge.

Through a posting of Roel I came across Rick Klau again, someone who like me was blogging about knowledge management in the early ’00s. These days his writing is on Medium it seems.

Browsing through his latest posts, I came across this one about homebrew contact management.

Contact management is one area where until now I mostly stayed away from automating anything.
First and foremost because of the by definition poor initial data quality that you use to set it up (I still have 11 yr old contact info on my phone because it is hard to delete, and then gets put back due to some odd feedback loop in syncing).
Second, because of the risk of instrumentalising the relationships to others, instead of interacting for its own sake.
Third, because most systems I encountered depend on letting all your mail etc flow through it, which is a type of centralisation / single point of failure I want to avoid.

There’s much in Rick’s post to like (even though I doubt I’d want to shell out $1k/yr to do the same), and there are things in there I definitely think useful. He’s right when he says that being able to have a better overview of your network in terms of gender, location, diversity, background etc. is valuable. Not just in terms of contacts, but in terms of information filtering when you follow your contacts in several platforms etc.

Bookmarked to come up with an experiment. Timely also because I just decided to create a simple tool for my company as well, to start mapping stakeholders we encounter. In Copenhagen last September I noticed someone using a 4 question page on her phone to quickly capture she met me, the context and my organisation. When I asked she said it was to have an overview of the types of organisations and roles of people she encountered in her work, building a map as it were of the ecosystem. Definitely something I see the use of.

Handshakes and conversations is what I’m interested in, not marketing instruments. Image Handshake by Elisha Project, license CC BY SA

For a few things I use Apple Script to automate tasks. For instance if I start a new project, I run a script that creates basic things like folders, standard to-do’s and notes on my hard drive and in my Things and Evernote applications. They save me time and let me avoid a lot of repetitive work. I wrote those scripts years ago, and meanwhile I have forgotten what little I knew about Apple Script.

Now I’m trying to build a new script. I had thought about this already, then Frank Meeuwsen’s similar steps (in Dutch) triggered me to start.

During my reading online I save articles and documents into Evernote, which I tag and store.
I’d like to automatically create a Suggested Reading posting weekly based on what I save in Evernote. I imagine adding a specific tag for this to the things I save, so I can also save things without them showing up in such a posting. The articles I save usually have a short sentence about why it’s relevant to me.

This means:

  • Running the script automatically weekly
  • Selecting Evernote notes from the last 7 days with the right tag
  • From each Evernote extract the short descriptive sentence I added, the associated weblink, as well as other tags I added when saving.
  • Then build a bullet list, with the descriptive sentences as text, and the link embedded either at the end, with its title as text, or maybe embedded in the description, based on some sort of indication.
  • Select three random tags that occur at least twice in the list of links
  • Add those three tags as part of the title of the blog post
  • Add all tags used to the tags for the blogpost
  • Set Linklog as the Category
  • Save as draft in my WordPress blog, with a scheduled post date of 16 hours.
  • Send me a message inviting me to review the draft and post. (If I don’t review, the posting will thus automatically appear)

I used to use a bookmarking service like Delicious or Diigo, and there used to be ways, or maybe still are, to blog automatically from their service. However it would necessitate me to save everything twice: As a bookmark and as a full article in Evernote. (Saving the entire article circumvents issues with link rot and paywalls, and allows me local full text search in all my notes)

I’ll likely suffer hours of frustration trying to find out how to do things correctly in AppleScript. Any pointers to useful resources (example libraries for instance) are therefore welcome.

(And yes, I understand the discrepancy between wanting to write a script to work with Evernote, while simultaneously wanting to leave Evernote)