**REQUIRED for ALL LimaCharlie operations** - list orgs, sensors, rules, detections, queries, and 143 functions. NEVER call LimaCharlie MCP tools directly. Use cases: 'what orgs do I have', 'list sensors', 'search IOCs', 'run LCQL query', 'create detection rule'. This skill loads function docs and delegates to sub-agent.
Executes 143 LimaCharlie operations through a sub-agent with dynamic function loading and validation.
/plugin marketplace add refractionPOINT/lc-ai/plugin install refractionpoint-lc-essentials-marketplace-plugins-lc-essentials@refractionPOINT/lc-aiThis skill is limited to using the following tools:
functions/add-output.mdfunctions/add-tag.mdfunctions/batch-search-iocs.mdfunctions/collect-velociraptor-artifact.mdfunctions/create-api-key.mdfunctions/create-installation-key.mdfunctions/create-org.mdfunctions/create-payload.mdfunctions/delete-api-key.mdfunctions/delete-cloud-sensor.mdfunctions/delete-dr-general-rule.mdfunctions/delete-dr-managed-rule.mdfunctions/delete-extension-config.mdfunctions/delete-external-adapter.mdfunctions/delete-fp-rule.mdfunctions/delete-installation-key.mdfunctions/delete-investigation.mdfunctions/delete-lookup.mdfunctions/delete-org-note.mdfunctions/delete-output.mdPerform any LimaCharlie operation by dynamically loading function references.
Prerequisites: Run
/init-lcto initialize LimaCharlie context.
| Rule | Wrong | Right |
|---|---|---|
| MCP Access | Call mcp__* directly | Use limacharlie-api-executor sub-agent |
| LCQL Queries | Write query syntax manually | Use generate_lcql_query() first |
| D&R Rules | Write YAML manually | Use generate_dr_rule_*() + validate_dr_rule_components() |
| Timestamps | Calculate epoch values | Use date +%s or date -d '7 days ago' +%s |
| OID | Use org name | Use UUID (call list_user_orgs if needed) |
Critical: Always load the relevant function file BEFORE calling it. Never assume you know how just from the name and description.
Before calling any function, read its documentation to get correct parameter names:
Read ./functions/{function-name}.md
Why this matters: Parameter names are often prefixed (e.g., secret_name not name). Using wrong names causes silent failures. Function docs have warnings for commonly confused parameters.
All API operations go through the limacharlie-api-executor sub-agent:
Task(
subagent_type="lc-essentials:limacharlie-api-executor",
model="haiku",
prompt="Execute LimaCharlie API call:
- Function: <function-name>
- Parameters: {<params>}
- Return: RAW | <what data you need>
- Script path: {skill_base_directory}/../../scripts/analyze-lc-result.sh"
)
Return field is REQUIRED:
RAW → Complete API response<instructions> → Extract specific data (e.g., "Count of sensors", "Only hostnames")Script path is REQUIRED: The agent needs this path to handle large API results. Skills have access to {skill_base_directory} (shown at the top of this prompt), which resolves to the plugin scripts.
Spawn multiple agents in a single message:
Task(subagent_type="lc-essentials:limacharlie-api-executor", prompt="... Script path: {skill_base_directory}/../../scripts/analyze-lc-result.sh")
Task(subagent_type="lc-essentials:limacharlie-api-executor", prompt="... Script path: {skill_base_directory}/../../scripts/analyze-lc-result.sh")
get_org_oid_by_name - Convert org name to OID (preferred for single lookups)list_user_orgs - List all accessible orgs with OIDs (use when listing multiple orgs)list_sensors - Primary function for finding sensors. Supports selector (bexpr filter) and online_only parameters. Use this to find sensors by platform, hostname, tags, etc.get_sensor_info - Detailed info for a single sensor (when you already have the SID)is_online - Check if a specific sensor is onlineget_online_sensors - Returns only SIDs of online sensors (no filtering). Use list_sensors with online_only: true instead when you need to filter by platform/hostname/tagsadd_tag / remove_tag - Sensor taggingisolate_network / rejoin_network - Network isolationFinding sensors by platform: Always use list_sensors with a selector:
list_sensors(oid, selector="plat == windows", online_only=true)
Do NOT use get_online_sensors + loop through get_sensor_info—that wastes API calls.
LCQL Workflow (mandatory):
generate_lcql_query - Convert natural language to LCQLrun_lcql_query - Execute generated queryOther search functions:
search_iocs / batch_search_iocs - IOC searchessearch_hosts - Host searchesget_historic_events - Historical telemetryget_historic_detections - Search detections by timeget_detection - Get one detection by IDget_processes - Running processesget_network_connections - Active connectionsget_autoruns - Persistence mechanismsdir_list - Browse filesystemyara_scan_* - YARA scanninggenerate_dr_rule_detection - AI-generate detection logicgenerate_dr_rule_respond - AI-generate response actionsvalidate_dr_rule_components - Validate syntaxtest_dr_rule_events - Test against sample eventsreplay_dr_rule - Test against historical dataset_dr_general_rule - Deploy ruleslist_outputs / add_output / delete_output - Data outputslist_secrets / set_secret / delete_secret - Secretslist_lookups / set_lookup / query_lookup - Lookupslist_payloads / create_payload / get_payload / delete_payload - Payloadslist_user_orgs → ./functions/list-user-orgs.mdget_org_oid_by_name → ./functions/get-org-oid-by-name.mdget_org_info → ./functions/get-org-info.mdcreate_org → ./functions/create-org.mdget_org_errors → ./functions/get-org-errors.mddismiss_org_error → ./functions/dismiss-org-error.mdget_org_invoice_url → ./functions/get-org-invoice-url.mdget_billing_details → ./functions/get-billing-details.mdget_usage_stats → ./functions/get-usage-stats.mdlist_api_keys → ./functions/list-api-keys.mdcreate_api_key → ./functions/create-api-key.mddelete_api_key → ./functions/delete-api-key.mdlist_sensors → ./functions/list-sensors.mdget_sensor_info → ./functions/get-sensor-info.mddelete_sensor → ./functions/delete-sensor.mdis_online → ./functions/is-online.mdget_online_sensors → ./functions/get-online-sensors.mdadd_tag → ./functions/add-tag.mdremove_tag → ./functions/remove-tag.mdlist_sensor_tags → ./functions/list-sensor-tags.mdis_isolated → ./functions/is-isolated.mdisolate_network → ./functions/isolate-network.mdrejoin_network → ./functions/rejoin-network.mdget_time_when_sensor_has_data → ./functions/get-time-when-sensor-has-data.mdupgrade_sensors → ./functions/upgrade-sensors.mdlist_installation_keys → ./functions/list-installation-keys.mdcreate_installation_key → ./functions/create-installation-key.mddelete_installation_key → ./functions/delete-installation-key.mdlist_cloud_sensors → ./functions/list-cloud-sensors.mdget_cloud_sensor → ./functions/get-cloud-sensor.mdset_cloud_sensor → ./functions/set-cloud-sensor.mddelete_cloud_sensor → ./functions/delete-cloud-sensor.mdlist_external_adapters → ./functions/list-external-adapters.mdget_external_adapter → ./functions/get-external-adapter.mdset_external_adapter → ./functions/set-external-adapter.mddelete_external_adapter → ./functions/delete-external-adapter.mdget_processes → ./functions/get-processes.mdget_process_modules → ./functions/get-process-modules.mdget_process_strings → ./functions/get-process-strings.mdget_network_connections → ./functions/get-network-connections.mdget_os_version → ./functions/get-os-version.mdget_users → ./functions/get-users.mdget_services → ./functions/get-services.mdget_drivers → ./functions/get-drivers.mdget_autoruns → ./functions/get-autoruns.mdget_packages → ./functions/get-packages.mdget_registry_keys → ./functions/get-registry-keys.mddir_list → ./functions/dir-list.mddir_find_hash → ./functions/dir-find-hash.mdfind_strings → ./functions/find-strings.mdyara_scan_process → ./functions/yara-scan-process.mdyara_scan_file → ./functions/yara-scan-file.mdyara_scan_directory → ./functions/yara-scan-directory.mdyara_scan_memory → ./functions/yara-scan-memory.mdreliable_tasking → ./functions/reliable-tasking.mdlist_reliable_tasks → ./functions/list-reliable-tasks.mddelete_reliable_task → ./functions/delete-reliable-task.mdget_detection_rules → ./functions/get-detection-rules.mdlist_dr_general_rules → ./functions/list-dr-general-rules.mdget_dr_general_rule → ./functions/get-dr-general-rule.mdset_dr_general_rule → ./functions/set-dr-general-rule.mddelete_dr_general_rule → ./functions/delete-dr-general-rule.mdlist_dr_managed_rules → ./functions/list-dr-managed-rules.mdget_dr_managed_rule → ./functions/get-dr-managed-rule.mdset_dr_managed_rule → ./functions/set-dr-managed-rule.mddelete_dr_managed_rule → ./functions/delete-dr-managed-rule.mdget_mitre_report → ./functions/get-mitre-report.mdtest_dr_rule_events → ./functions/test-dr-rule-events.mdreplay_dr_rule → ./functions/replay-dr-rule.mdget_fp_rules → ./functions/get-fp-rules.mdget_fp_rule → ./functions/get-fp-rule.mdset_fp_rule → ./functions/set-fp-rule.mddelete_fp_rule → ./functions/delete-fp-rule.mdlist_rules → ./functions/list-rules.mdget_rule → ./functions/get-rule.mdset_rule → ./functions/set-rule.mddelete_rule → ./functions/delete-rule.mdlist_outputs → ./functions/list-outputs.mdadd_output → ./functions/add-output.mddelete_output → ./functions/delete-output.mdlist_secrets → ./functions/list-secrets.mdget_secret → ./functions/get-secret.mdset_secret → ./functions/set-secret.mddelete_secret → ./functions/delete-secret.mdlist_lookups → ./functions/list-lookups.mdget_lookup → ./functions/get-lookup.mdset_lookup → ./functions/set-lookup.mdquery_lookup → ./functions/query-lookup.mddelete_lookup → ./functions/delete-lookup.mdlist_playbooks → ./functions/list-playbooks.mdget_playbook → ./functions/get-playbook.mdset_playbook → ./functions/set-playbook.mddelete_playbook → ./functions/delete-playbook.mdlist_extension_configs → ./functions/list-extension-configs.mdget_extension_config → ./functions/get-extension-config.mdset_extension_config → ./functions/set-extension-config.mddelete_extension_config → ./functions/delete-extension-config.mdsubscribe_to_extension → ./functions/subscribe-to-extension.mdunsubscribe_from_extension → ./functions/unsubscribe-from-extension.mdlist_extension_subscriptions → ./functions/list-extension-subscriptions.mdlist_velociraptor_artifacts → ./functions/list-velociraptor-artifacts.mdshow_velociraptor_artifact → ./functions/show-velociraptor-artifact.mdcollect_velociraptor_artifact → ./functions/collect-velociraptor-artifact.mdlist_yara_rules → ./functions/list-yara-rules.mdget_yara_rule → ./functions/get-yara-rule.mdset_yara_rule → ./functions/set-yara-rule.mddelete_yara_rule → ./functions/delete-yara-rule.mdlist_artifacts → ./functions/list-artifacts.mdget_artifact → ./functions/get-artifact.mdlist_payloads → ./functions/list-payloads.mdcreate_payload → ./functions/create-payload.mdget_payload → ./functions/get-payload.mddelete_payload → ./functions/delete-payload.mdget_event_schema → ./functions/get-event-schema.mdget_event_schemas_batch → ./functions/get-event-schemas-batch.mdget_event_types_with_schemas → ./functions/get-event-types-with-schemas.mdget_event_types_with_schemas_for_platform → ./functions/get-event-types-with-schemas-for-platform.mdget_platform_names → ./functions/get-platform-names.mdrun_lcql_query → ./functions/run-lcql-query.mdlist_saved_queries → ./functions/list-saved-queries.mdget_saved_query → ./functions/get-saved-query.mdset_saved_query → ./functions/set-saved-query.mddelete_saved_query → ./functions/delete-saved-query.mdrun_saved_query → ./functions/run-saved-query.mdsearch_hosts → ./functions/search-hosts.mdsearch_iocs → ./functions/search-iocs.mdbatch_search_iocs → ./functions/batch-search-iocs.mdget_historic_events → ./functions/get-historic-events.mdget_historic_detections - Search by time: (oid, start, end) → ./functions/get-historic-detections.mdget_detection - Get one by ID: (oid, detection_id) → ./functions/get-detection.mdget_event_by_atom → ./functions/get-event-by-atom.mdget_atom_children → ./functions/get-atom-children.mdlist_investigations → ./functions/list-investigations.mdget_investigation → ./functions/get-investigation.mdset_investigation → ./functions/set-investigation.mddelete_investigation → ./functions/delete-investigation.mdexpand_investigation → ./functions/expand-investigation.mdgenerate_lcql_query → ./functions/generate-lcql-query.mdgenerate_dr_rule_detection → ./functions/generate-dr-rule-detection.mdgenerate_dr_rule_respond → ./functions/generate-dr-rule-respond.mdgenerate_sensor_selector → ./functions/generate-sensor-selector.mdgenerate_python_playbook → ./functions/generate-python-playbook.mdgenerate_detection_summary → ./functions/generate-detection-summary.mdvalidate_dr_rule_components → ./functions/validate-dr-rule-components.mdvalidate_yara_rule → ./functions/validate-yara-rule.mdThe limacharlie-api-executor agent handles large results (>100KB) automatically by downloading resource links and processing data according to your Return specification.
This skill should be used when the user asks about libraries, frameworks, API references, or needs code examples. Activates for setup questions, code generation involving libraries, or mentions of specific frameworks like React, Vue, Next.js, Prisma, Supabase, etc.