One of my favorite pieces ever published on Engadget was written by my good pal Joshua Topolsky, wherein he coins the term "Continuous Client" and describes a beautiful dream so named. Here's his summary:

So what is a Continuous Client you ask? Well the premise is simple: when you leave one device, you pick up your session in exactly the same place on the next device you use. Meaning your IM, Twitter, web browsing, applications, even your windows (given the availability of such a thing on the corresponding platform) appear just as they did on the previous device.

Now, there are plenty of truly excellent, or at least usable, examples of Continuous Client functionality that have already been built into single products:

The problem is that nobody does this. That is to say, nobody does this for everything. I want a single service that syncs multiple apps at once, and a service that translates those app states generically, so that I can use my browser or Twitter client or e-reader of choice for each platform.

It's wild to me that a tech industry defined by its vertical integrators (Apple, Google, Microsoft-ish) hasn't at least figured out the first half of that equation. It would certainly be a start, but I don't think it would be enough. We need an open standard ™ to make sure we get both parts of this dream.

I also don't want to be locked into the first manufacturer to figure this out. Maybe that's in the manufacturer's best interest, but it isn't in the best interest of the user. And here's a little newsflash: users will eventually win, and get what they want and what they need. Because they have the dollars.

So, how do we get there sooner, rather than later? I propose an open standard. The Continuous Client. (Josh has been gracious enough to lend his term to this effort).

How would it work?

Each user has one file, called cc_username.xml

The file lives in "the cloud." It doesn't matter where, it just has to be readable and editable from any internet-connected device. I plan on putting cc_futurepaul.xml on my Dropbox, which means it will be secure and everywhere. This is similar to how 1Password operates on multiple devices. If someone wants to set up a more formalized and secure service to deal with this file (like Firefox Sync), then that's fine too.

The file defines two main things:

  1. The devices owned by the user, CC-compatible applications on that device, and the CC "session types" that each app can handle (Tweeting, browsing).
  2. The current session, broken down with generic session data (Twitter, browser tabs) and custom app-specific data (Twitter.exe, Chrome.exe tabs).

Other things that might be nice to include, but aren't as fundamental:

  • An option to save a mobile session separately from a desktop session.
  • A session archive of some sort.
  • References to docs-in-progress and where they're stored in the cloud (this would work particularly well if the CC file is in a Dropbox or similar cloud storage setup).
  • Media playback continuation. Possibly over DLNA if the file isn't stored in the cloud.

So, cc_futurepaul.xml exists, and it's on my Dropbox. Let's do this.

I'm currently working on my PC, but I'm about to head out the door and I want to continue my work on the iPhone. What do I do?

There is an application on my PC (cc.exe, let's call it) that does all the work. I can set it up to either capture my session in CC-compatible apps every few minutes, or just have a manual "eject" button when I'm ready to leave one system and move on to another. I think I'd probably use CC manually.

I push "eject." A pop-up (that I specified) asks me what I actually want to bring along. I can uncheck a window full of tabs that I'm tired of, and then click confirm. It writes my new session to cc_futurepaul.xml, and Dropbox syncs the changed file.

Now I pull out my phone. I've already set up some of my apps to call on my cc_futurepaul.xml file, so when I launch Twitter.app it syncs up to the brand new saved session from my desktop and scrolls to the exact same Tweet I was looking at on my computer. When I open Opera.app it automatically opens the maximum number of "tabs" it can handle, prioritizing the most recent ones. At the forefront is the webpage I was just on, scrolled to the same position on the page. I pull up Simplenote and the same text document I was working on in Notational Velocity is pulled up, cursor blinking at the exact same place.

Does that sound interesting to you? It sounds amazing to me.

How do we get there?

Well, I propose that we form a Continuous Client Coalition. It would be composed of some interested users (like me) and some interested developers. We would work together to define the scope of the functionality and the specific syntax of the xml document. Then, if a specific developer is happy with the results, they can go about implementing CC support in whatever applications they think it would be suited to. There would be a formal process for adding new generic session types to be supported, but a dev could put any sort of data under their own app-specific tags (with the limitation of some number of bytes per app, so that the xml file doesn't get too large).

The first implementation I'd like to see out of the gate would simply be a Chrome extension that would allow me to at least maintain browser sessions from desktop computer to desktop computer. A Pidgin / Adium extension would be great as well, and a Twitter app or two with support would be icing on the preliminary cake. I'm no dev, but I don't think implementation for at least these initial applications would be that difficult (maybe that's why I'm no dev). Deeper implementation and mobile implementation would hopefully happen, but probably only after these initial uses start to gain traction. Having a Google or Apple or Microsoft adopt the standard would be the holy grail, but let's not get ahead of ourselves.

Together we can build a better world. A world where the "session" revolves around the user, not around the device. Who's with me?

Email me (paul+cc@thisismynext.com) or find me on Twitter (@futurepaul) if you'd like to be involved. I have some more specific ideas on execution, but I'd like to get some feedback and hear some ideas before moving forward.