The Process Aptitude provides the ability to examine attributes about processes running on the user's computer.
Each call to the Process Aptitude is providing you with one of two types of information. It either returns ProcessInfo or a ProcessEvent . Let's take a moment to define what these two things are.
interface ProcessInfo {
command: string; // The name of the process (i.e. Olive Helps, Google Chrome, etc.
pid: number; // The process id number
enum ProcessAction {
Started = 1,
Unknown = 0,
Stopped = 2,
interface ProcessEvent {
processInfo: ProcessInfo;
processAction: ProcessAction;


Gets a list of the current running processes on a user's system.
import { process } from '@oliveai/ldk';
process.all().then((processInfoArray) => {
// Logs a process name like "Olive Helps", "Google Chrome", "pbpaste" etc.


Listens to all processes starting and stopping on a user's system. Triggers the callback whenever a process is started or stopped.
import { process } from '@oliveai/ldk';
process.listenAll((processEvent) => {
if (process.processAction === process.ProcessAction.Started) {
// New process started
Let's say that you wanted to design a Loop that opens a helpful Whisper when the end user starts a certain application. We can accomplish this through using the Process Aptitude.
First, we need to know the name of the application. In this case, let's use the popular note taking software Evernote. Let's set up an example that executes some logic in our Loop when someone opens the Evernote application.
In this example we will also close the listening stream set by listenAll after the event we are looking for has occurred. A reference to that stream is returned in the promise after calling listenAll, and when you are ready to end the stream, call streamVar.cancel();
import { process } from '@oliveai/ldk';
import { Cancellable } from '@oliveai/ldk/dist/cancellable';
const listenForApplicationStart = () => {
let cancellableStream: Cancellable;
process.listenAll((response) => {
const {processInfo, processAction} = response;
if (
processInfo.command.includes('Evernote') &&
processAction === process.ProcessAction.Started
) {
// Logic to respond to the program starting...
// Cancel the listening stream if needed.
.then((cancellable: Cancellable) => {
// Set the value of the stream so that we can close it if needed
cancellableStream = cancellable;
To use the Process Aptitude, simply set the following permissions in your package.json under the ldk object.
Please see our Permissions page for more information.
"ldk": {
"permissions": {
"process": {},