What is the Alert system in the bitcoin protocol? How does it work? I understand Bitcoin has an alert system. Can someone explain what it is, how does it work, and what was it designed for?
TL;DR:


  As @Alex Waters has stated, it's a centralised alert system to allow
  people to shutdown their clients in response to a threat to the
  overall Bitcoin network, pending a client patch to resolve the issue.
  This was intended as a short term measure to counter-act perceived
  problems in growing the software.


This thread on the forum has some interesting information about it (I've fixed the links to cover the moved forum):


  Yes, it appeared in version 3.11. Here's the thread discussing it:
  
  "Development of alert system"
  https://bitcointalk.org/index.php?topic=898.0;all 
  
  But I think Satoshi took it out of recent builds, to avoid accusations
  that he was a point of central control (because his key would be used
  to sign the alert). If I can find the reference to that announcement,
  I'll post it.
  
  edit: here's the announcement about the removal of "safe mode". It's
  not clear to me whether the alert itself was removed, or whether the
  ability to have the alert shut down transaction processing was
  removed:
  
  Removed safe mode (0.3.19)
  https://bitcointalk.org/smf/index.php?topic=2228


Clearly, Satoshi intended it to be a centralised mechanism to issue alerts that would result in clients stopping transactions (not block generation). This would act as an effective mechanism to cause clients to upgrade as a result of a bug, but a naive interpretation is that it is also a good way to shutdown an economy. 

Anyone can build a standard client and replace the key requirement with one of their own, thus negating the efficacy of a system-wide shutdown due to a compromised key. Essentially, this would cause a fragmentation of the standard client as nodes seek to protect themselves from external compromise.

Satoshi notes this himself in this comment:


  It can't do arbitrary actions remotely.  Maybe some of you are
  responding to other posters who suggested the alert system should do
  more?
  
  If there is an alert, the following json-rpc methods return an error:
  sendtoaddress getbalance getreceivedbyaddress getreceivedbylabel
  listreceivedbyaddress listreceivedbylabel
  
  The remaining 14 methods function as normal.
  
  I believe the safer option should be enabled by default.  If you want
  your server to keep trading and ignore an alert saying the money its
  receiving might be like the money from the overflow bug, then you can
  use the switch and not blame anyone else if you lose your money.
  
  Worst case if you leave alerts enabled, your site stops trading until
  you upgrade or add the -disablesafemode switch.
  
  Getting surprised by some temporary down time when your node would
  otherwise be at risk is better than getting surprised by a thief
  draining all your inventory.
  
  Someday when we haven't found any new bugs for a long time and it has
  been thoroughly security reviewed without finding anything, this can
  be scaled back.  I'm not arguing that this is the permanent way of
  things forever.  It's still beta software.


Given the ongoing backlash of misunderstanding over the concept, it appears that it was decided to remove the feature and rely instead on detecting a dodgy blockchain that is longer than the longest valid one:


  
  Removed "safe mode" alerts "safe mode" alerts was a temporary
  measure after the 0.3.9 overflow bug.  We can say all we want that
  users can just run with "-disablesafemode", but it's better just not
  to have it for the sake of appearances.  It was never intended as a
  long term feature.  Safe mode can still be triggered by seeing a
  longer (greater total PoW) invalid block chain.
  
  
  Builds:
  http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.3.19/