An apparatus comprising: a processor running an operating system ; wherein the processor is configured to: run a set of one or more applications; receive a message from a first application in the set of one or more applications run by the processor , wherein the received message indicates a user action; determine if the user action is in a predetermined set of user actions; and when the user action is in the predetermined set of user actions, create an intercepted message comprising a copy of the received message; append sensor data to the intercepted message , wherein the sensor data comprises at least one of a timestamp and a location; receive one intercepted message from the operating system ; read the sensor data corresponding to the received intercepted message , determine a context information based on the received intercepted message and the sensor data; append the context information to the received intercepted message , determine, using a random indexing algorithm, a set of predicted user actions based on the context information and the received intercepted message , and broadcast the intercepted message to one or more applications in the set of applications run by the processor that are configured to receive the intercepted message. a processor running an operating system ; wherein the processor is configured to: run a set of one or more applications; receive a message from a first application in the set of one or more applications run by the processor , wherein the received message indicates a user action; determine if the user action is in a predetermined set of user actions; and when the user action is in the predetermined set of user actions, create an intercepted message comprising a copy of the received message; append sensor data to the intercepted message , wherein the sensor data comprises at least one of a timestamp and a location; receive one intercepted message from the operating system ; read the sensor data corresponding to the received intercepted message , determine a context information based on the received intercepted message and the sensor data; append the context information to the received intercepted message , determine, using a random indexing algorithm, a set of predicted user actions based on the context information and the received intercepted message , and broadcast the intercepted message to one or more applications in the set of applications run by the processor that are configured to receive the intercepted message. run a set of one or more applications; receive a message from a first application in the set of one or more applications run by the processor , wherein the received message indicates a user action; determine if the user action is in a predetermined set of user actions; and when the user action is in the predetermined set of user actions, create an intercepted message comprising a copy of the received message; append sensor data to the intercepted message , wherein the sensor data comprises at least one of a timestamp and a location; receive one intercepted message from the operating system ; read the sensor data corresponding to the received intercepted message , determine a context information based on the received intercepted message and the sensor data; append the context information to the received intercepted message , determine, using a random indexing algorithm, a set of predicted user actions based on the context information and the received intercepted message , and broadcast the intercepted message to one or more applications in the set of applications run by the processor that are configured to receive the intercepted message. <EOS>