A Dynamic Siri

Siri, as shipped, appears already capable of adding functionality according to which applications are installed on the iPhone. Here’s a screen shot of before and after I removed Apple’s Find My Friends app from my phone. How does it do that?

Where’s “Where’s Jason?” gone?

I’m busy so I’ve not investigated this in depth but there are a couple of possibilities. First, Siri might know internally all about how to talk to Find My Friends and just turns on the functionality when it knows that Find My Friends is installed on the device. Second, and the option I think many developers hope for, is that Find My Friends somehow exposes itself to Siri, most likely via some settings in it’s Info.plist.

I took a look at the Info.plist for Find My Friends and there’s no special attributes listed. There are a few URL schemes that it accepts: “grenada:”, “findmyfriends:”, and “fmf1:”.

So, I wrote a little test app that implemented these URLs — no dice, Siri doesn’t enable the “Where’s Jason?” prompt. So then I changed the Bundle ID of the test application to match that of Find My Friends and I got this:

It appears that the presence of Find My Friends in Siri is predicated upon the Find My Friends Bundle ID, rather than some exposed capability. But it looks like Siri uses my application icon (none, in this case) in place of the real Find My Friends application icon. And then just goes and calls the app Find My Friends anyway, despite the fact that I called my app, “WTF”.

This makes sense — if I was making these choices I’d make all the same ones. The abstract conversation goes like this:

VP: How fucking cool is this Siri app?
DEVELOPER: Yeah, it’s tight!
VP: Tight? Is that like rad?
VP: Right on.

Two months pass.

VP: So, we bought it.
DEVELOPER: Bought what?
VP: That Siri thing.
DEVELOPER: Get the fuck out!
VP: What? I fucking pay you, never tell me to the fuck get out.
DEVELOPER: No, sorry, I was expressing my surprised excitement. I really didn’t mean to
VP: (interrupting) Fine. So, you’re on this. Make it better.
VP: Linen. It real needs linen.
VP: Yes.
VP: Yes.
DEVELOPER: Ok, well give me access to the code and a designer and I’ll get on that.
VP: Great. Now, get the fuck out.
DEVELOPER: Out? This is my desk.
VP: Get the fuck out.
DEVELOPER: Ok. I really should eat lunch, thanks?

Three months pass.

VP: Nice work on Siri. I am loving the linen. Why the fuck don’t you integrate with Grenada though?
DEVELOPER: Thanks, that linen background took a lot of eff
VP: (interrupting) Grenada. Have you heard of it? Make it work.
DEVELOPER: I’m sorry, I’ve never actually heard of “Grenada”. Well, beyond that place that Reagan atta
VP: (interrupting) What? It’s Grenada. We love Grenada. It’s got rich Corinthian leather.
DEVELOPER: I’ve not been disclosed. The Grenada project is something I’m unfamiliar with.
VP: Get the fuck out!
DEVELOPER: No, really, I’ve not heard about that project!
VP: Christ, It’s like you assholes don’t talk to each other. I’ll get you in touch with the Grenada lead and you two can figure it out.
DEVELOPER: That’ll be great, thanks!

One week later.

DEVELOPER: Hi, I’m in charge of integrating Siri. What do you do?
GRENADA: We Find Your Friends.
DEVELOPER: Oh, that’s pretty cool. How should we make this work?
GRENADA: Fucked if I know, I’ve not been disclosed about what you’re working on.
DEVELOPER: Ok, well let’s just base this functionality on your Bundle ID and you guys implement a URL scheme that we’ll call.
GRENADA: That’s cool with us. Have you checked out our rich Corinthian leather?


Springboard gets hardcoded to reserve a few URL schemes for an App that doesn’t ship with the OS.

There’s a tight integration between Siri and Find My Friends, but it’s not as tight as you’d imagine if there’d been total collusion between the teams. Siri will display the icon of an app pretending to be Find My Friends, and this makes sense because there’s no reason to bloat the OS with a Find My Friends icon if the two teams are separate and who knows what the final icon might be.

What does this mean? I predict that a Siri API is further off than you might think. The integration of services into Siri appears to be on a very case by case basis and even an internal app required special consideration.

I’ve shipped a number of platforms in my time — platforms are different. You need to make sure that you can guarantee the functionality you expose is something you can support going forward for months, years, and decades. Once you promise to support something, you’re locked in.

Apple doesn’t appear to have an internal SPI for Siri yet, and it’s my bet that they’re a year or so away from it. Even internally it appears that they’ve not yet drafted an approximation. And I don’t blame them. For an AI system like Siri that would require determining the plug-in based upon confidence that it could handle the request. How do you write an API that gauges the trustability of thousands of plug-ins to properly report their confidence?

I’d love a Siri API. I have custom software on a Mac Mini and my iPhone to control the lights in my place via X-10. If I could use Siri for that then Tony Stark would be calling me up for a couple of hints. But I don’t see it happening soon. I’m not sure how it could work, cleanly and while being scalable.

Siri is a process of disambiguation, but installing random apps from the App Store that support Siri can only increase how ambiguous any request is.

I’ll bet on an API later rather than sooner. If only because the success of Siri is determined upon it generating the best possible results and the ranking of those results must be determined by the plug-ins it uses. Once you allow plug-ins that potentially lie then you’ve ruined the entire Siri experience.