Kolide Side Dishes

At Kolide, we typically ship changes and improvements to the product multiple times a day. The vast majority of these changes are modest improvements not worthy of their own change-log post, but together, they can make a big difference. We call these smaller features side dishes!

In this edition of side dishes, we have four exciting features to announce!

Improved Privacy Center Sign-In Experience

Over the last several months, we have invested a lot of energy into Kolide's Privacy Center, including letting users see the full set of device properties, checks, and other queries run on their device. While these improvements are great, end-users can't realize their benefits if they need to spend time fighting with a sign-in screen instead of reading the content. 

We've updated our Slack application to give end-users buttons instead of links to the Privacy Center to make things a lot easier. Unlike the normal Privacy Center links (which will lead most end-users to a sign-in screen), these buttons will actually open the browser using a secret and personalized URL that will automatically sign them in. 

Additionally, we've made some improvements to the privacy command to give end-users more information about their data before sending them to the Privacy Center. You can see an example below:

We've built this with security in mind. For example, Kolide administrators who sign in to the Privacy Center using one of these magic buttons will still need to authenticate fully when they try to access any sensitive functionality.

New Automatic Device Deletion Settings

As our customers continue to grow the number of devices they enroll, many of them are looking for more advanced options to manage when inactive devices are removed automatically or if multiple device records exist in Kolide for a device with the same serial number.

With our new Automatic Device Deletion setting screen, you can tune the behavior of those options to your liking. If you find yourself frustrated by seeing too many retired devices, or old instances of devices that have to be re-provisioned to new users, I highly recommend checking out these new settings.

Renamed Device Privacy to Restrictions

Our Device Privacy settings page has been renamed to Restrictions to reflect the options available on that screen better. Here you will continue to find settings that allow you to turn off features, restrict Osquery tables, and restrict the visibility of data collected about devices.

Kolide MDM Column 

For those taking advantage of our MDM capabilities, we've added a new column in Inventory called "Kolide MDM." This will enable sorting and filtering by the managed state of the device.

Additionally the attribute kolide_mdm was added to the Device API response

API - New Global Failures Endpoints

In March, we introduced a new global failures view to Kolide. This view makes it much easier for administrators to locate failures without clicking into a specific Check. 

Since releasing this feature, we've heard a lot of great feedback from our customers that would love to list failures without needing to know anything about a check beforehand. Well, we've heard you, and we are proud to announce that we've just shipped an update to our API that enables just this use-case. So let's run through the changes.

New Failures Endpoints

View the documentation about this endpoint.

The new failures endpoints make it simple to list and access specific failures without knowing anything about the check or device they belong to. Here are some things you can do today.

List All Failures


This endpoint lists all failures for all enabled checks, regardless of their resolved/open/ignored state. Once you have an API token, you can call it using the following curl example:

curl -H "Authorization: Bearer $PRODAPIKEY" 'https://k2.kolide.com/api/v0/failures'

List Failures By Status

Failures can be ignored, resolved, or open. Accordingly, you can scope the list of failures using those keywords as shown below:


curl -H "Authorization: Bearer $PRODAPIKEY" 'https://k2.kolide.com/api/v0/failures/open'

curl -H "Authorization: Bearer $PRODAPIKEY" 'https://k2.kolide.com/api/v0/failures/resolved' 

curl -H "Authorization: Bearer $PRODAPIKEY" 'https://k2.kolide.com/api/v0/failures/ignored' 

All of these endpoints respond with a structure that matches the https://k2.kolide.com/api/v0/devices/<deviceID>/failures https://k2.kolide.com/api/v0/checks/<checkID>/failures endpoints.

Show A Specific Failure

Before, admins could only retrieve details for a single failure through the device or check API endpoints. Now, if you know the failure's ID, you can use just the following endpoint:

curl -H "Authorization: Bearer $PRODAPIKEY" 'https://k2.kolide.com/api/v0/failures/$FAILUREID'

New Failure Attribute - escalation_status

In addition, we've added a new attribute to the failure entity to indicate the escalation status of the failure. The escalation_status attribute can have one of the following values:

  • Not Escalated
  • User contact attempts exhausted
  • User requested help
  • No owner assigned

You can get more information, including full response schemas, on our API documentation site.

As always, we welcome comments and feedback from our API users. If you have a use case, please reach out to us via support@kolide.co or Intercom, and we'd love to chat about it.

Kolide Side Dishes

At Kolide, we typically ship changes and improvements to the product multiple times a day. The vast majority of these changes are modest improvements not worthy of their own change-log post, but together, they can make a big difference.

While we are working on some 25-pound-turkey sized features we plan on announcing soon, we thought we'd let you dig into some of these side-dishes first! Enjoy.

UX Improvements

Tools Menu

Depending on your level of access to Kolide, you may notice a new item in the main navigation called "Tools". This menu now houses all of the useful features of the product that don't quite need top-billing, but also do not belong in the "settings" section of the website.

Speaking of tools, the "Reporting DB" feature listed here is a feature we are currently beta testing with a few customers. If you are interested in being able to programmatically access all of the data we collect about a device in inventory, and eventually build your own reports on that data with SQL, please reach out to us via Intercom or support@kolide.co and we'd be happy to include you in our next round of testers!

Log Pipeline

The biggest change here is Log Pipeline, a feature that allows you to unlock the full power of the osquery daemon we deploy in the Kolide agent. This feature is now easier to find and users with access to it can also access other related features like creating FIM categories, configuring osquery options, and setting up your own custom decorators! 

As users of the Log Pipeline ourselves, we think all these items living together is a much more intuitive experience. Let us know what you think!

Improved Context For Slack Notifications

When an end-user successfully fixes a failing check, Kolide shows them a congratulatory message. Sometimes though, depending on the timing of the message, or where the message appeared, there might be some confusion about what device this message is referencing.

After a customer pointed this out, we decided to add some additional context to these messages so it's always clear which device Kolide is congratulating you about!

Search By Device and Person ID

If you are a regular user of our API (or are just really good a remembering numbers you see in your browser's location bar), you may have tried to lookup a device or person by their Kolide generated ID in our global search bar. Starting today, searching for both devices or people by their ID will now function as you would expect!

Performance Improvements

Live Query

If you are a regular user of Live Query, you may have noticed that devices now return up to 10x faster after querying them, and present any informational warnings or errors without requiring a page reload! Kolide now better leverages websockets to deliver this information at a much faster pace.

Device CSV Exports

We had reports from several customers that exporting the list of devices via CSV could take a long time. After investigating the issue we were able to improve the speed of this export by over 100x!

Improved User To Device Association

We've made some changes to how we build custom package and optimized our initial device data population routines to improve the accuracy and the speed in which we are able to assign users to a device. Additionally, the file names we generate for the custom packages are also now much shorter!

API Changes

Based on a customer request, we've now added a product_image_url following field to the device API endpoint. In many cases (and in all cases on Apple products), this new field features the visage of the exact hardware model enrolled in Kolide. For those of you creating your own internal experiences, these device images can help give you and your end-users the confidence that they are viewing the right device.

Speaking of product images, we've also now added updated product images for all of the new M1 Macs released by Apple earlier this months, and we've changed many of the icons on the widgets featured in the device detail pages to match the changes in macOS Big Sur!

On the log pipeline side, we've also now added the remote_ip, device_owner_email, and device_owner_type, to the kolide_decorations object in the logs emitted by our product in the log pipeline. This will allow you to easily correlate device activity with specific individual for potential integrations with IDP and authentication services.

We at Kolide hope you are all having a safe, healthy, and joyful holiday season. As always, please reach out with suggestions and feedback. Many of the improvements here were generated from customers just like you!

Improvements Enrolling Personal Devices in Kolide

Many of our customers use Kolide to verify the security of an employee's personal devices. Thanks to Kolide's user-friendly stance on privacy, we've always been a great solution for the Bring Your Own Device (BYOD) use-case.

With that said, Kolide is working on several new features (like our upcoming MDM), where the distinction between a user-owned device and an organization-owned device will be even more important. 

To that end, today we are excited to announce an official way to flag devices as User Owned. This flag can be set either by a Kolide administrator, or by a user during the Slack-based enrollment process. Once this flag is set, a device cannot be re-assigned to any other user in the system.

Changes to Onboarding

Starting today, when you onboard a new user to Kolide via Slack and enroll a device, they will be asked about the device's ownership. Based on this selection, Kolide will generate a custom package that will set the device's ownership mode correctly.

Here is what the flow looks like when you choose the option, "I own this device"

Once the user downloads and installs the package, Kolide will automatically assign it to them and mark it as user-owned. 

Note: We have renamed the installers Slack app command to enroll. Both commands now initiate this same enrollment workflow as shown above.

Manually Marking Devices User Owned

While the new onboarding flow is nice, you may have a few existing devices that need to be marked as user-owned. 

To do this, simply go to the device you want to mark, click Actions in the upper-right corner and choose Mark User Owned... This will open a modal that will allow you to confirm the switch.

Once the switch is made, the end-user will be notified via Slack and the device will be marked as "User Owned" with a badge in the header.

User-Owned Devices & Privacy

You may be familiar with Private Mode, which restricts the visibility a Kolide administrator has into a device to just the results of Checks.  This mode will remain separate from User Owned and both modes can be applied independently to each device. Depending on your requirements, it may make sense for all user-owned devices to be marked Private as well.

Changes to API

To help users of our API differentiate private and user-owned devices, we've added two new attributes are now available when querying devices in the API privacy and owned_by. We have also introduced a new Webhook event devices.personalized that fires when an administrator manually marks a device as User Owned.

Please see the API documentation for more information.

Future Plans for User-Owned Mode

Right now, the only functional change in marking a device User Owned is that Kolide will not allow you to re-assign it to someone else. While that doesn't sound like a big deal today, Kolide has several planned features with its upcoming MDM that will require informed consent, from an end-user before they can be used. It's important that end-users understand that this consent process cannot be circumvented by re-assigning the device to someone else, especially for devices that they own.

As always, if you need any help, have questions, or concerns please let us know and we will address them as soon as possible.

Upcoming Changes to API Pagination

For everyone building tooling atop our Beta API, we have some upcoming changes to announce! 

Here is the quick summary:

  • To improve the API's performance we are changing how pagination works
  • The new cursor-based pagination is available starting today. Docs are here.
  • Our old pagination scheme will continue to work until Friday Nov 6th, 2020. Make sure you update anything that uses the old pagination by then.
  • If you have any issues with the new pagination, please let us know via Intercom or support@kolide.co right away.

New Pagination Details

In an effort to improve performance, we're changing our pagination strategy for API endpoints that return collections of results. 

Complete details and the documentation can be found at the link included at the bottom of this post, but the condensed version is: We're moving from simple page-number-based pagination to cursor-based pagination. This means that instead of making requests like this:

curl --request GET \
  --url "https://k2.kolide.com/api/v0/audit_logs?page=2&per_page=25" \
  --header 'accept: application/json'

# -> 
#  page: 2, 
#  last_page: 3,
#  data: [
#       {...}
#   ]

in the future, you'll make API requests using a cursor= query parameter to specify pages of data past the first page: 

curl --request GET \
  --url "https://k2.kolide.com/api/v0/audit_logs?per_page=25&cursor=" \
  --header 'accept: application/json'
# ->
# {
#  pagination: {
#    next: "https://k2.kolide.com/api/v0/audit_logs?per_page=25&cursor=ABCDJ",
#    next_cursor: "ABCDJ",
#    current_cursor: "JDCBA",
#    count: 25,
#  }
#  data: [...]

Because no one likes to re-write their tools while worrying about downtime, we are doing a staged roll-out. The API currently behaves as it always has with respect to pagination: if you supply a page= query parameter, or only specify search and per_page, the API will use and respond with the existing page-number-based pagination. The original pagination scheme will continue to work until Friday Nov 6th, 2020. Make sure you update anything that uses the old pagination by then.

However, if you specify a cursor= query parameter (even a blank one, see the examples above), the API will use cursor-based pagination, and will respond with the new pagination information described above. This means that you can update your API clients to prepare for the coming updates, without worrying that your existing workflows and automation will be broken while you feverishly re-write them.

For full documentation and details, see https://kolidek2.readme.io/docs/pagination.

API - Live Query Status & Device Details

For those of you who are using our beta REST API, we've recently shipped two small additions that you may find useful to your workflow!

Live Query Campaign Device Status

Previously, our Live Query Campaign API would allow you to pull the results collected from the devices. We've now added the following three additional endpoints to this API:

  • api/v0/live_queries/<campaign_id>/waiting_devices
  • api/v0/live_queries/<campaign_id>/successful_devices
  • api/v0/live_queries/<campaign_id>/errored_devices

Using these endpoints, you can easily determine the progress of a campaign and understand the context of the results better! For more information check out our API documentation.

Additional Device Details

Due to popular demand, we've extended the api/v0/devices/<id> endpoint to include details about the current remote IP address associated with a device. If you allow geo-location data to be shown in your privacy settings, we will also show the very rough approximate geolocation data associated with this IP address*.

You can learn more about this API endpoint in our documentation.

* For privacy and safety reasons, Kolide never attempts to utilize collected device data to calculate a highly precise location of a device or a person. The location data we currently provide is a very low resolution approximation of location only based on the NAT IP address.

New: Custom Check Tags

Starting today, you can now apply your own custom tags to the Checks deployed in your Kolide instance.

In addition to the tag's unique name, each one can be color-coded and include an optional description that better explains the tag's purpose. One way you can use tags is to mark each Check with a different severity. In fact, we've pre-created a few tags with this in mind to get you started:

Once you've added one or many tags to a Check, those tags will appear in the check description, and on the check listing page next to the Kolide-supplied topic. 

You can also filter Checks by tag using the new Check listing sidebar:

In addition to appearing in the UI, they will also appear in the Check API response as shown below.

  "id": 1,
  "failing_device_count": 0,
  "name": "MacBook - Battery Unhealthy",
  "description": "Notebook batteries eventually degrade in performance due to excessive charge/discharge cycles, or, simply due to their age. A degraded battery has reduced charge capacity and inability to charge effectively. ",
  "compatibility": [
  "topics": [
  "tags": [
  "notification_strategy": "Notifications Off"

We hope Check Tags make it easier for you to organize your Checks today. We foresee teams taking advantage of tags in the future to allow you to customize the notification options and other settings for all checks that match a specific tag.

As always, please let us know if you have any feedback, questions, or concerns!

New Checks Sidebar

As part of our effort to improve Check discoverability in Kolide, we have rolled out improvements to the Check listing page that allow you to more easily find Checks that are compatible with certain platforms, or relate to a topic of interest.

The New Checks sidebar

The new sidebar on the Checks page allows you to filter checks by compatible platforms and various Kolide-created topics. 

You can choose many filters (which stack) to dial-in precisely the checks that match the compatibility or topic criteria you or your team is interested in.

In addition, these topics are displayed in both the Check detail view (which shows failures) and also as part of the Check API response, as shown in the example below:

  "id": 1,
  "failing_device_count": 0,
  "name": "MacBook - Battery Unhealthy",
  "description": "Notebook batteries eventually degrade in performance due to excessive charge/discharge cycles, or, simply due to their age. A degraded battery has reduced charge capacity and inability to charge effectively. ",
  "topics": "battery-health, device-health",
  "notification_strategy": "Notifications Off"

Inventory and Live Query Performance Improvements

If you have thousands of devices enrolled in Kolide, you may have noticed some modest speed improvements when browsing Inventory and using Live Query last week.

These speed boosts are part of a major initiative we rolled out last week to speed up the application. These improvements include:

  • JS, CSS, and other assets are now served via a CDN
  • Live Query is much smoother when querying thousands of devices at the same time
  • The global search bar now renders results much faster
  • Sorting and Filtering on the Devices table based on owner name and primary username is faster

There are still many areas to improve, but the performance improvements we have implemented should make browsing Inventory a more pleasant experience for organizations with many thousands of devices.

New: Run Live Queries Continuously

Ever write a useful Live Query and wish you could run it continuously to keep the results up-to-date? With the newly released Continuous Live Query option, you can now run those queries on a scheduled interval so you can always have the latest data.

About Live Query

When we launched Live Query last November, it introduced a way for you and your team to quickly run osquery SQL on all the devices in your fleet, and receive an instantaneous response from online devices.

When we launched the feature though, it contained two major limitations:

  1. You could only target specific devices in your fleet
  2. The query would only run once on the devices you targeted

With this update, both of these limitations are eliminated, and Live Query is now a much more powerful tool for regularly collecting device data your organization cares about.

New Target Selector

When you run queries continuously, it is very important to be able to select devices by their platform so that newly enrolled devices will be targeted by the query in future runs.

In anticipation of Continuous Live Query, we have rebuilt the target selector to now make this group selection possible.

Running Queries Continuously

To run write a query that will run continuously, simply write a new query and press Save/Run. Once you are happy the query returns the data you are looking for, you can click the "Draft" button, and in the modal that appears, select Published under visibility options. This should reveal an option where you can choose the desired continuous interval you would like to run the query.

Additional Published Query Protection

When you publish a Live Query, you allow others on your team to see it. Unfortunately, even well-meaning team members may not realize that when they modify that query, they may be erasing/modifying important information that others rely on.

To help mitigate this, users will now notice the Save & Run button turns orange when either the SQL or targets are modified.

If they click the orange Save & Run button, they will now be presented with a helpful dialog that gives them a number of options that clarifies their intent.


These changes represent just a small portions of the plans we have for improving Live Query this year.

We hope you find these improvements useful, and we welcome any feedback or suggestions on how we can make them even better.

Show Previous EntriesShow Previous Entries