Detailed onboarding walkthrough for talonctl.
You need:
- CrowdStrike Falcon tenant with NG-SIEM (LogScale) enabled
- CrowdStrike API credentials — create an API client in the Falcon Console:
- Go to Support & Resources > API Clients and Keys
- Create a new client with the scopes needed for your resource types (see README for scope reference)
- Python 3.11+ — with pip
- Git
python3 -m venv .venv
source .venv/bin/activate
pip install talonctlDependencies (installed automatically):
crowdstrike-falconpy— CrowdStrike API SDKpyyaml— YAML template parsingrich— terminal output formattingclick— CLI frameworkrequests— HTTP calls
talonctl init myproject
cd myprojectThis creates the full project directory structure with resource directories, knowledge base templates, state file, and .gitignore.
Run the setup wizard:
talonctl auth setupThe wizard will:
- Prompt for your Client ID and Client Secret
- Ask you to select your cloud region (US1, US2, EU1, GOV1)
- Validate the connection against the CrowdStrike API
- Save credentials to
~/.config/falcon/credentials.jsonwith600permissions
If you already have credentials saved, it will show you the existing config and ask if you want to reconfigure.
If you prefer to skip the wizard:
mkdir -p ~/.config/falcon
cat > ~/.config/falcon/credentials.json << 'EOF'
{
"falcon_client_id": "YOUR_CLIENT_ID",
"falcon_client_secret": "YOUR_CLIENT_SECRET",
"base_url": "US1"
}
EOF
chmod 600 ~/.config/falcon/credentials.jsonValid base_url values: US1, US2, EU1, GOV1.
If you already have detections, saved searches, or other resources in your CrowdStrike tenant, import them to bring them under IaC management.
talonctl import --planThis connects to your tenant, discovers existing resources, and shows what would be imported — without changing anything.
# Import detection rules
talonctl import --resources=detection
# Import saved searches
talonctl import --resources=saved_search
# Import multiple types at once
talonctl import --resources=detection,saved_search,workflow
# Import everything
talonctl importWhat happens:
- YAML templates are generated in
resources/<type>/for each discovered resource - The state file (
.crowdstrike/deployed_state.json) is created/updated - Each resource gets a stable
resource_id— never change this after import
# Check the generated templates
ls resources/detections/
# Validate all templates parse correctly
talonctl validate
# Show current state
talonctl show# See what would change
talonctl plan
# Deploy (after reviewing the plan)
talonctl applyTwo GitHub Actions workflows are included in .github/workflows/:
- Trigger: PR opened/updated, or push to
main - PR behavior: Runs
plan, posts summary as PR comment - Main branch behavior: Runs
apply --auto-approve
| Secret | Value |
|---|---|
FALCON_CLIENT_ID |
Your CrowdStrike API client ID |
FALCON_CLIENT_SECRET |
Your CrowdStrike API client secret |
FALCON_BASE_URL |
Your cloud region (e.g., US1, US2, EU1) |
Set these in your GitHub repo under Settings > Secrets and variables > Actions.
Runs weekly to discover new CrowdStrike OOTB templates. Creates a PR with any new templates found for your review.
If you want AI-assisted SOC operations on top of talonctl, see the agent-skills repo. To set it up:
- Install the agent-skills plugins into Claude Code
- The integrated instructions are already in this project's
CLAUDE.md - Configure a CrowdStrike MCP server for live alert/query access
Error: Authentication failed (401)
- Verify credentials:
cat ~/.config/falcon/credentials.json - Check your cloud region matches your tenant
- Ensure the API client hasn't been revoked in the Falcon Console
- Re-run
talonctl auth setupto reconfigure
No resources found for type: detection
- Confirm your API client has the required scopes (Custom IOA Rules: Read)
- Check that you're pointing at the right tenant/region
- Try
talonctl import --planto see the full discovery output
~ update detection: my-detection (content changed)
- Someone may have edited the detection in the Falcon Console directly
- Run
talonctl driftto see what changed - Run
talonctl syncto pull the live version into state - Decide whether to keep the console change (update template) or revert it (apply)
Error: Description exceeds 2000 character limit
The CrowdStrike API silently truncates saved search descriptions beyond 2000 characters. Keep descriptions concise. The validate command catches this before deployment.