sensors
Working with LimaCharlie sensors — listing, filtering, info, tags, installation keys, and sensor selectors. Covers both EDR agents and adapter sensors at the inventory level. Use when managing sensor inventory, checking sensor status, working with tags, creating installation keys, or building sensor selectors.
What this skill does
# Sensors
How to work with sensors as objects in LimaCharlie. This covers inventory operations — listing, filtering, inspecting, tagging, and managing installation keys. For sending commands to sensors, see the `sensor-tasking` skill. For configuring adapter data sources, see the `adapters` skill.
## Sensor Types
All telemetry sources in LimaCharlie are "sensors" with a Sensor ID (SID, UUID). Two main categories:
| Type | Description | Taskable |
|------|-------------|----------|
| **EDR Agent** | Endpoint sensor (Windows, Linux, macOS, ChromeOS) | Yes |
| **Adapter** | Third-party telemetry source (cloud or on-prem) | No |
To distinguish: EDR agents have a platform of `windows`, `linux`, `macos`, or `chrome` with architecture NOT `usp_adapter`. Adapters have either a non-EDR platform or `arch=usp_adapter`.
## CLI Commands
### List Sensors
```bash
# All sensors in an org
limacharlie sensor list --oid <oid> --output yaml
# Only online sensors
limacharlie sensor list --online --oid <oid> --output yaml
# With selector filter
limacharlie sensor list --selector "plat==windows" --oid <oid> --output yaml
# With tag filter
limacharlie sensor list --tag production --oid <oid> --output yaml
# Reduce output with JMESPath filter
limacharlie sensor list --oid <oid> --filter "[].{sid:sid,hostname:hostname,plat:plat}" --output yaml
```
### Get Sensor Info
```bash
limacharlie sensor get --sid <sid> --oid <oid> --output yaml
```
Key fields in response: `sid`, `hostname`, `plat` (platform), `arch` (architecture), `alive` (last seen timestamp), `ext_ip`, `int_ip`, `tags`.
### Manage Tags
```bash
# Add a tag (with optional auto-expiry TTL in seconds)
limacharlie tag add --sid <sid> --tag <tag> --oid <oid> --output yaml
limacharlie tag add --sid <sid> --tag <tag> --ttl 604800 --oid <oid> --output yaml
# Remove a tag
limacharlie tag remove --sid <sid> --tag <tag> --oid <oid> --output yaml
# List tags on a sensor
limacharlie tag list --sid <sid> --oid <oid> --output yaml
# Find sensors by tag
limacharlie tag find --tag <tag> --oid <oid> --output yaml
# Mass-add a tag to sensors matching a selector
limacharlie tag mass-add --selector "plat==windows" --tag <tag> --oid <oid> --output yaml
# Mass-remove a tag from sensors matching a selector
limacharlie tag mass-remove --selector "plat==windows" --tag <tag> --oid <oid> --output yaml
```
Tags can also be added/removed via D&R rule response actions.
### Delete a Sensor
```bash
limacharlie sensor delete --sid <sid> --confirm --oid <oid>
```
### Installation Keys
Installation keys register new sensors/adapters with an org. Each key has an Installer ID (IID, UUID).
```bash
# List installation keys
limacharlie installation-key list --oid <oid> --output yaml
# Create an installation key
limacharlie installation-key create --description "Windows servers" --tags server,windows --oid <oid> --output yaml
```
When deploying adapters, use the IID (UUID format) not the full base64 installation key string.
### Find Sensors by Installation Key
```bash
limacharlie sensor list --selector "iid == \`<iid-uuid>\`" --oid <oid> --output yaml
```
## Sensor Selectors
Sensor selectors use [bexpr](https://github.com/hashicorp/go-bexpr) syntax to filter sensors. Used in CLI commands (`--selector`), D&R rules, and fleet operations.
### Selector Examples
| Selector | Description |
|----------|-------------|
| `*` | All sensors |
| `plat==windows` | Windows sensors |
| `plat==linux` | Linux sensors |
| `plat==macos` | macOS sensors |
| `production in tags` | Sensors tagged "production" |
| `hostname matches '^web-'` | Hostname starts with "web-" |
| `sid=='<uuid>'` | Specific sensor by SID |
| `iid=='\`<uuid>\`'` | Sensors from specific installation key |
| `plat==windows and production in tags` | Windows + production tag |
| `(plat==windows or plat==linux) and arch!=usp_adapter` | EDR agents only (no adapters) |
### Available Selector Fields
| Field | Type | Description |
|-------|------|-------------|
| `sid` | string | Sensor ID (UUID) |
| `iid` | string | Installer ID (UUID) |
| `plat` | string | Platform name (`windows`, `linux`, `macos`, `chrome`, `json`, `text`, etc.) |
| `arch` | string | Architecture (`x86`, `x64`, `arm64`, `usp_adapter`, etc.) |
| `hostname` | string | Sensor hostname |
| `tags` | list | Sensor tags |
| `ext_ip` | string | External IP |
| `int_ip` | string | Internal IP |
## EDR vs Adapter Identification
To filter only EDR agents (taskable sensors), combine platform and architecture:
```bash
limacharlie sensor list --selector "(plat==windows or plat==linux or plat==macos) and arch!=usp_adapter" --oid <oid> --output yaml
```
Non-EDR platforms include: `json`, `text`, `gcp`, `aws`, `office365`, `okta`, `crowdstrike`, `carbon_black`, `sophos`, and many others. A sensor with `plat==linux` but `arch==usp_adapter` is an adapter running on Linux, not an EDR agent.
## Platform Reference
### EDR Platforms
| Platform | Selector | Decimal ID |
|----------|----------|-----------|
| Windows | `plat==windows` | 268435456 |
| Linux | `plat==linux` | 536870912 |
| macOS | `plat==macos` | 805306368 |
| ChromeOS | `plat==chrome` | 1610612736 |
### Common Adapter Platforms
| Platform | Selector | Source Type |
|----------|----------|------------|
| `json` | `plat==json` | JSON telemetry |
| `text` | `plat==text` | Text/syslog telemetry |
| `gcp` | `plat==gcp` | Google Cloud |
| `aws` | `plat==aws` | Amazon Web Services |
| `office365` | `plat==office365` | Microsoft 365 |
| `okta` | `plat==okta` | Okta |
| `crowdstrike` | `plat==crowdstrike` | CrowdStrike |
## System Tags
LimaCharlie provides system-level tags that control sensor behavior:
| Tag | Effect |
|-----|--------|
| `lc:latest` | Forces latest sensor version (ignores org-assigned version). Use to test-deploy on a representative set. |
| `lc:stable` | Forces stable sensor version. Use to hold specific sensors back during an org-wide upgrade. |
| `lc:experimental` | Runs experimental sensor version. Used when troubleshooting with the LimaCharlie team. |
| `lc:no_kernel` | Kernel component will not load on the host. |
| `lc:debug` | Uses debug version of sensor. |
| `lc:limit-update` | Sensor won't update version at runtime — only changes on restart/reboot. |
| `lc:sleeper` | Disables all functionality except cloud connection. Minimal system impact ($0.10/30d). |
### Sleeper Mode
Sleeper mode lets you pre-deploy sensors at near-zero cost ($0.10/30 days per sensor) and activate them on-demand:
1. Create an installation key with the `lc:sleeper` tag
2. Deploy sensors fleet-wide — they enter sleeper mode within ~10 minutes
3. To activate: remove the `lc:sleeper` tag and ensure org quota accommodates the sensor count
4. Sensors resume full EDR within ~10 minutes
**Requirements**: org must have billing enabled (quota >= 3). No binary change or reboot needed.
**Gotcha**: there is a ~10-minute delay when applying or removing `lc:sleeper`. It is not instant.
## Device ID vs Sensor ID
- **SID** (Sensor ID): unique per sensor installation. Changes if the sensor is reinstalled.
- **DID** (Device ID): hardware-derived identifier in `routing/did`. Persists across reinstalls on the same machine.
Use DID to track a device across sensor reinstalls. The `entire_device: true` parameter on tag actions applies tags to ALL sensors sharing a Device ID.
## Tag Gotchas
- **Tag TTL is per-application**: each `add tag` creates its own TTL timer. Reapplying a tag with a new TTL does not extend the original — it creates a new entry.
- **`entire_device: true`**: applies the tag to ALL sensors sharing the same Device ID, not just the targeted sensor.
- **Tags appear in every event**: tags are included in `routing/tags` of every event from the sensor, so they can be used in D&R rule detection logic via the `is tagged` operator.
## Checking Sensor Health
### Online Status
The `alive` field in sensor info shows the last seen timestamp. Compare with current timeRelated in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.