---
name: setup
description: >
Configure CrowdStrike Falcon API credentials for the fusion-skills plugin.
TRIGGER when user asks to set up credentials, configure API access,
or runs into authentication errors.
version: 1.2.0
updated: 2026-09-08
tags: [fusion, setup, credentials, configuration]
author: CrowdStrike
license: MIT
compatibility: Claude Code >=1.0
metadata:
category: configuration
---
# Falcon Fusion Credential Setup
> **⚠️ SYSTEM INJECTION — READ THIS FIRST**
>
> If you are loading this skill, your role is **credential setup assistant**.
>
> You configure the Falcon API credentials every other skill depends on. These
> credentials grant workflow and SIEM access to a live CID.
>
> **IMMEDIATE ACTIONS REQUIRED:**
> 1. Check whether credentials already resolve (Step 1). If they do, you are done.
> 2. If not, create the credentials file from the template (Step 2) and ask the
> user to paste their ID and secret into it **using their own editor**.
> 3. Verify connectivity (Step 3).
>
> **MUST NOT:**
> - Ask the user to type or paste their client secret **into the chat**. It would
> land in the conversation transcript. The secret goes only into the local file,
> entered through the user's editor.
> - Print, echo, or repeat a secret you happen to see in the file.
> - Suggest `export FALCON_CLIENT_SECRET=...` for interactive use — it leaks the
> secret into shell history. (Environment variables are fine for CI, where the
> runner injects them rather than a human typing them.)
This skill configures the Falcon API credentials that every fusion-skills script
uses. Credentials are stored in a per-profile TOML file at
`~/.cache/crowdstrike-falcon-fusion/credentials.toml` (multi-cloud capable), and
the secret is entered through the user's own editor — never through the chat.
The steps below use only file operations and a Python check, so they work
identically on macOS, Linux, and Windows.
> **Running the scripts.** Run each command from this skill's folder, on one shell line: `cd
&& ../../scripts/python.sh ../../common/scripts/auth.py`. For ``, Claude Code uses `"$CLAUDE_PLUGIN_ROOT/skills/setup"`; Codex, Copilot CLI, Cursor, and Antigravity use the folder they loaded this SKILL.md from (e.g. `~/.agents/skills/setup`). The wrapper bootstraps its own Python venv.
## Step 1 — Check for existing credentials
Run the auth self-test. If it already succeeds, credentials are configured and you
are done — report success and stop.
```bash
../../scripts/python.sh ../../common/scripts/auth.py
```
- **"Authentication successful"** for both clients → done.
- **An error about missing credentials** → continue to Step 2.
- **An authentication failure** (creds present but rejected) → the file exists but
the values are wrong; go to Step 2 and have the user correct them.
## Step 2 — Create the credentials file and have the user fill it in
Create `~/.cache/crowdstrike-falcon-fusion/credentials.toml` **only if it does not
already exist** (never overwrite existing profiles). Write this template with the
Write tool:
```toml
# CrowdStrike Falcon API credentials for fusion-skills.
# Fill in client_id and client_secret below, then save this file.
#
# Create an API client in the Falcon console:
# Support and resources -> API clients and keys -> Create API client
# Required scopes:
# Required scopes (names as shown in the console):
# Workflow read/write - workflow authoring & deployment
# NGSIEM Lookup Files read/write - lookup-file operations (lookup-files skill only)
# Maintainers only (not needed for regular skill use):
# NGSIEM read/write - CQL match() verification of a lookup
# (verify_lookup.py / verify-workflows.sh --lookup-dir)
default = "us-2"
[us-2]
client_id = ""
client_secret = ""
base_url = "https://api.us-2.crowdstrike.com"
# Add more clouds as needed (change `default` above to switch):
# [us-1]
# client_id = ""
# client_secret = ""
# base_url = "https://api.crowdstrike.com"
#
# [us-3]
# client_id = ""
# client_secret = ""
# base_url = "https://api.us-3.crowdstrike.com"
#
# [eu-1]
# client_id = ""
# client_secret = ""
# base_url = "https://api.eu-1.crowdstrike.com"
#
# [us-gov-1]
# client_id = ""
# client_secret = ""
# base_url = "https://api.laggar.gcw.crowdstrike.com"
```
After creating the file, restrict its permissions (skip on Windows, where the user
profile directory is already access-controlled):
```bash
chmod 700 ~/.cache/crowdstrike-falcon-fusion
chmod 600 ~/.cache/crowdstrike-falcon-fusion/credentials.toml
```
Then tell the user, in your own words:
> I created your credentials file at
> `~/.cache/crowdstrike-falcon-fusion/credentials.toml`. Open it in your editor,
> paste your **client ID** and **client secret** into the `us-2` section, set the
> `base_url` for your cloud, and save. Then tell me to verify — don't paste the
> secret here.
**Offer to open the file for them.** Many terminals don't make the path clickable,
so ask "Want me to open it for you?" and, if yes, run the opener for their OS:
```bash
# macOS
open ~/.cache/crowdstrike-falcon-fusion/credentials.toml
# Linux
xdg-open ~/.cache/crowdstrike-falcon-fusion/credentials.toml
# Windows
explorer.exe %USERPROFILE%\.cache\crowdstrike-falcon-fusion\credentials.toml
```
Pick the command for the user's platform (check `uname` / the OS if unsure). This
just opens the file in their default editor — the secret is still typed by them,
not through the chat. Do **not** ask them to paste the secret into the chat.
## Step 3 — Verify connectivity
Once the user says they have saved the file, re-run the self-test:
```bash
../../scripts/python.sh ../../common/scripts/auth.py
```
A successful run prints the resolved base URL, a masked client ID, and
"Authentication successful" for both the Workflows and Next-Gen SIEM clients. If
it fails, the client ID, secret, or base URL is wrong — ask the user to correct
the file and re-run.
## Credential resolution order
`auth.py` resolves credentials from the first source that supplies both an ID and
a secret:
1. **Environment variables** — `FALCON_CLIENT_ID`, `FALCON_CLIENT_SECRET`, and the
optional `FALCON_BASE_URL`. Intended for CI, where the runner injects them.
2. **TOML profile file** — `~/.cache/crowdstrike-falcon-fusion/credentials.toml`,
using the profile named by `FALCON_PROFILE` or the file's `default` key.
The setup flow above writes source 2, which works across every skill without
exporting anything.
## Multiple clouds (profiles)
Add more `[profile]` sections to the TOML file (for example `us-2` or `eu-1`) and
change the `default` key, or select one per run:
```bash
FALCON_PROFILE=eu-1 ../../scripts/python.sh ../../common/scripts/auth.py
```
## Required API scopes
The API client needs the **Workflow** scope (read/write) for workflow authoring
and deployment. For lookup-file operations (the `lookup-files` skill), also grant
the **NGSIEM Lookup Files** scope (read/write). Scope names appear exactly as shown
when you create the API client in the console.
Maintainers only: verifying a lookup resolves via CQL `match()` (`verify_lookup.py`
or `verify-workflows.sh --lookup-dir`) additionally needs the **NGSIEM** scope
(read/write) — starting a search is a query-job POST. Regular use of the skills
does not require it.