Skip to content

Commit 14e6b65

Browse files
committed
Merge remote-tracking branch 'origin/main' into docs/verified-assistant-installs
2 parents 1d74cfc + 97dbd29 commit 14e6b65

39 files changed

Lines changed: 749 additions & 182 deletions

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"name": "crowdstrike-falcon-fusion",
1010
"source": "./",
1111
"description": "CrowdStrike Falcon Fusion skills for authoring, deploying, and executing Fusion workflows. Includes live action discovery, YAML authoring with schema validation, workflow import and release, execution monitoring, and Falcon Next-Gen SIEM lookup files.",
12-
"version": "1.0.0",
12+
"version": "1.0.1",
1313
"author": {
1414
"name": "CrowdStrike"
1515
},

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "crowdstrike-falcon-fusion",
33
"description": "CrowdStrike Falcon Fusion skills for authoring, deploying, and executing Fusion workflows. Includes live action discovery, YAML authoring with schema validation, workflow import and release, execution monitoring, and Falcon Next-Gen SIEM lookup files.",
4-
"version": "1.0.0",
4+
"version": "1.0.1",
55
"author": {
66
"name": "CrowdStrike"
77
},

.github/workflows/main.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
run: command -v shellcheck || { sudo apt-get update -qq && sudo apt-get install -y -qq shellcheck; }
1919
- name: Run ShellCheck
2020
run: |
21-
shellcheck hooks/*.sh bin/*.sh
21+
shellcheck hooks/*.sh scripts/*.sh
2222
shellcheck --severity=error *.sh
2323
2424
test-hooks:
@@ -69,7 +69,7 @@ jobs:
6969
--cov=skills/deployment/scripts \
7070
--cov=skills/execution/scripts \
7171
--cov=skills/lookup-files/scripts \
72-
--cov=bin \
72+
--cov=scripts \
7373
--cov-report=term-missing \
7474
--cov-fail-under=90
7575
@@ -95,7 +95,7 @@ jobs:
9595
skills/deployment/scripts/*.py \
9696
skills/execution/scripts/*.py \
9797
skills/lookup-files/scripts/*.py \
98-
bin/*.py
98+
scripts/*.py
9999
100100
validate:
101101
runs-on: ubuntu-latest

CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,24 @@ All notable changes to this project will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
66

7+
## [1.1.0] - TBD
8+
9+
### Added
10+
11+
- US-3 cloud region to credential setup: a `[us-3]` profile example (`https://api.us-3.crowdstrike.com`) in the setup skill's multi-cloud block and in the README region notes, alongside a `[us-gov-1]` example that was also missing. The auth module already accepts any `base_url`, so this documents the host rather than changing behavior.
12+
- Throttling reference in the execution skill: explains that a workflow stuck "in progress" may be throttled (Fusion paces an action past a volume limit, auto-retrying up to 6 hours) rather than failed, how to recognize it on the execution detail view, and when sustained throttling signals a workflow-design issue.
13+
- Deduplicate and Rate Limit action reference plus a worked tutorial example. Covers all six Deduplicate activities and all four Rate Limit activities: the `definition`/`cid` scope values (which the console labels "Workflow" and "CID"), the atomic claim, metadata handoff, and the save-time validation the builder runs. The example deduplicates third-party NG-SIEM detections into a single case. Action IDs were confirmed against a live tenant; the example passes validation at all tiers.
14+
15+
## [1.0.1] - 2026-08-07
16+
17+
### Fixed
18+
19+
- Relocated helper scripts from `bin/` to `scripts/` so the plugin installs on claude.ai and Cowork. A top-level `bin/` directory is added to the CLI's PATH but isn't shown on the web admin approval surface, so those hosts rejected the plugin. The scripts are internal helpers, not entry points, and moving them out of `bin/` clears the block. Command-line installs were unaffected.
20+
21+
### Changed
22+
23+
- Renamed the deployment skill from `deploy` to `deployment` so it matches its sibling skills (`authoring`, `execution`) and the `foundry-skills` convention. The command is now `/crowdstrike-falcon-fusion:deployment`; the picker no longer rewrites `:deploy` to `:deployment` on submit.
24+
725
## [1.0.0] - 2026-07-30
826

927
First public release of Falcon Fusion Skills — AI coding assistant skills for building CrowdStrike Falcon Fusion workflows. Describe the automation you want in plain language and your assistant discovers the real action IDs from your tenant, writes the YAML, validates it against the platform schema, imports it to your CID, and runs it.
@@ -33,4 +51,6 @@ First public release of Falcon Fusion Skills — AI coding assistant skills for
3351

3452
- Tested with Claude Code. Experimental setup instructions for Codex, Copilot CLI, Cursor, and Antigravity CLI, written from each tool's own documentation but not yet verified end to end. The skills are plain markdown, so any assistant that reads local files can use them.
3553

54+
[1.1.0]: https://github.com/CrowdStrike/fusion-skills/releases/tag/v1.1.0
55+
[1.0.1]: https://github.com/CrowdStrike/fusion-skills/releases/tag/v1.0.1
3656
[1.0.0]: https://github.com/CrowdStrike/fusion-skills/releases/tag/v1.0.0

README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Falcon Fusion Skills
44

5-
![Version](https://img.shields.io/badge/version-1.0.0-blue)
5+
[![Version](https://img.shields.io/badge/version-1.0.1-blue)](https://github.com/CrowdStrike/fusion-skills/releases/tag/v1.0.1)
66
[![CI](https://github.com/CrowdStrike/fusion-skills/actions/workflows/main.yml/badge.svg)](https://github.com/CrowdStrike/fusion-skills/actions/workflows/main.yml)
77

88
AI coding assistant skills for building [CrowdStrike Falcon Fusion](https://www.crowdstrike.com/en-us/platform/next-gen-siem/falcon-fusion/) workflows. Go from a natural language prompt to a working Fusion workflow — discover real action IDs from the live API, author the YAML, validate it against the platform schema, import it to a CID, and trigger and monitor its execution.
@@ -56,6 +56,7 @@ For CI or a one-off override, set environment variables instead:
5656
export FALCON_CLIENT_ID=your_client_id_here
5757
export FALCON_CLIENT_SECRET=your_client_secret_here
5858
# export FALCON_BASE_URL=https://api.crowdstrike.com # US-1 (default)
59+
# US-2: https://api.us-2.crowdstrike.com · US-3: https://api.us-3.crowdstrike.com · EU-1: https://api.eu-1.crowdstrike.com · US-GOV-1: https://api.laggar.gcw.crowdstrike.com
5960
```
6061

6162
Credentials come from environment variables (checked first) or the TOML profile, and are never hardcoded. Verify your setup:
@@ -171,7 +172,7 @@ The skills include hooks that ensure the right skills get used:
171172

172173
3. **`PreToolUse` hook (cross-plugin bridge)** — Advisory only. If a request needs a Foundry app (UI, functions, collections, `manifest.yml`), it suggests the sibling [`crowdstrike-falcon-foundry`](https://github.com/CrowdStrike/foundry-skills) plugin. It never blocks a skill.
173174

174-
The `workflows` orchestrator is the entry point: you say what you want, and it routes to `authoring` (discover actions, write and validate YAML), `deploy` (import and release to a CID), and `execution` (trigger and monitor). Hooks observe prompts and tool I/O to keyword-match Fusion actions; no data leaves the session.
175+
The `workflows` orchestrator is the entry point: you say what you want, and it routes to `authoring` (discover actions, write and validate YAML), `deployment` (import and release to a CID), and `execution` (trigger and monitor). Hooks observe prompts and tool I/O to keyword-match Fusion actions; no data leaves the session.
175176

176177
## Skills
177178

@@ -181,7 +182,7 @@ One plugin provides five skills: an orchestrator plus four focused sub-skills.
181182
|-------|---------|
182183
| `workflows` | Primary orchestrator — routes intent and coordinates the full workflow lifecycle |
183184
| `authoring` | Action discovery (`action_search.py`), YAML authoring, CEL expressions, schema validation (`validate.py`) |
184-
| `deploy` | Duplicate check, import to CID, release, version management |
185+
| `deployment` | Duplicate check, import to CID, release, version management |
185186
| `execution` | Trigger workflows with payloads, monitor status, tail logs, debug failures |
186187
| `lookup-files` | Manage Falcon Next-Gen SIEM lookup files (CSV/JSON/TXT) for CQL `match()` queries |
187188

@@ -205,7 +206,7 @@ graph TD
205206
style LF fill:#f59e0b,stroke:#d97706,color:#fff
206207
```
207208

208-
A typical lifecycle: `authoring` produces a validated YAML file → `deploy` imports it and returns a `definition_id``execution` triggers it and returns an `execution_id`. Each phase depends on the previous one's output.
209+
A typical lifecycle: `authoring` produces a validated YAML file → `deployment` imports it and returns a `definition_id``execution` triggers it and returns an `execution_id`. Each phase depends on the previous one's output.
209210

210211
```
211212
skills/
@@ -289,7 +290,7 @@ python common/scripts/auth.py # Verify credentials resolve and a token
289290
/crowdstrike-falcon-fusion:setup # Re-run interactive credential setup (Claude Code)
290291
```
291292

292-
Confirm `FALCON_CLIENT_ID` and `FALCON_CLIENT_SECRET` are set in your environment or TOML profile, and that `FALCON_BASE_URL` points at the correct cloud (US-1 is the default; set it for US-2, EU-1, or US-GOV).
293+
Confirm `FALCON_CLIENT_ID` and `FALCON_CLIENT_SECRET` are set in your environment or TOML profile, and that `FALCON_BASE_URL` points at the correct cloud (US-1 is the default; set it for US-2, US-3, EU-1, or US-GOV).
293294

294295
### Stale action cache
295296

common/scripts/_bootstrap.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
33
The skill's Python scripts depend on `crowdstrike-falconpy` (and `pyyaml`). Those
44
live in a managed virtualenv at ``~/.cache/claude-code-fusion/venv``, created by
5-
the plugin's SessionStart hook and used by ``bin/python.sh``. But a script may be
5+
the plugin's SessionStart hook and used by ``scripts/python.sh``. But a script may be
66
launched with a bare ``python script.py`` — for example from a cloned repo in dev
77
mode, where the plugin hook never fired — using an interpreter that has no
88
falconpy installed. That produces a ``ModuleNotFoundError`` at the first API call.
99
1010
``ensure_deps()`` makes the scripts resilient to how they are launched: if the
1111
marker dependency (``falconpy``) is missing from the current interpreter, it
12-
re-executes the script through ``bin/python.sh``, which runs (and, on demand,
12+
re-executes the script through ``scripts/python.sh``, which runs (and, on demand,
1313
builds) the managed venv. If falconpy is already importable — the normal case,
1414
including when already running inside the venv — it does nothing.
1515
@@ -33,13 +33,13 @@
3333

3434

3535
def _python_sh_path():
36-
"""Absolute path to bin/python.sh, resolved relative to this file.
36+
"""Absolute path to scripts/python.sh, resolved relative to this file.
3737
3838
This module lives at ``<repo>/common/scripts/_bootstrap.py``; the wrapper is
39-
at ``<repo>/bin/python.sh``.
39+
at ``<repo>/scripts/python.sh``.
4040
"""
4141
here = os.path.dirname(os.path.abspath(__file__))
42-
return os.path.join(here, "..", "..", "bin", "python.sh")
42+
return os.path.join(here, "..", "..", "scripts", "python.sh")
4343

4444

4545
def ensure_deps(script_path):

hooks/bootstrap.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
PLUGIN_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
77

8-
"$PLUGIN_ROOT/bin/setup-python-venv.sh" >&2 || {
9-
echo "fusion-skills: venv bootstrap did not complete; scripts may need a manual venv setup (bin/setup-python-venv.sh)." >&2
8+
"$PLUGIN_ROOT/scripts/setup-python-venv.sh" >&2 || {
9+
echo "fusion-skills: venv bootstrap did not complete; scripts may need a manual venv setup (scripts/setup-python-venv.sh)." >&2
1010
}
1111

1212
exit 0

release.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ main() {
162162
# Use portable sed with temp file pattern (macOS and Linux compatible)
163163
sed 's/badge\/version-[0-9.]*-blue/badge\/version-'"$NEXT_VERSION"'-blue/' "$SCRIPT_DIR/README.md" > /tmp/README.md.tmp
164164
mv /tmp/README.md.tmp "$SCRIPT_DIR/README.md"
165+
# Update the badge release link target
166+
sed 's|releases/tag/v[0-9.]*|releases/tag/v'"$NEXT_VERSION"'|' "$SCRIPT_DIR/README.md" > /tmp/README.md.tmp
167+
mv /tmp/README.md.tmp "$SCRIPT_DIR/README.md"
165168
printf "${GREEN}${RESET} README badge → v${NEXT_VERSION}\n"
166169

167170
printf "\n${BLUE}Step 3: Update SKILL.md versions${RESET}\n"

run-ab-test.sh

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ find_workflow_file() {
9393

9494
# Clean up deployed Fusion workflows from a phase directory.
9595
#
96-
# Deletes via the Workflows delete API (bin/cleanup_workflows.py, FalconPy
96+
# Deletes via the Workflows delete API (scripts/cleanup_workflows.py, FalconPy
9797
# delete_definitions) — no browser. Collects the workflow names deployed by each
9898
# run in the phase, then deletes them by name. Skipped entirely in --skip-deploy
9999
# mode, where nothing was imported.
@@ -109,17 +109,22 @@ cleanup_phase_workflows() {
109109
local wf_file wf_name
110110
wf_file=$(find_workflow_file "$dir")
111111
[ -n "$wf_file" ] || continue
112-
wf_name=$(grep -m1 -E '^name:' "$wf_file" 2>/dev/null | sed -E "s/^name:[[:space:]]*['\"]?(.+?)['\"]?[[:space:]]*$/\1/")
112+
# Strip the "name:" prefix and any surrounding quotes. Uses three simple
113+
# substitutions rather than one lazy-quantified capture group, because BSD
114+
# (macOS) sed rejects the '.+?' non-greedy operator with "RE error:
115+
# repetition-operator operand invalid".
116+
wf_name=$(grep -m1 -E '^name:' "$wf_file" 2>/dev/null \
117+
| sed -E "s/^name:[[:space:]]*//; s/^[\"']//; s/[\"'][[:space:]]*$//")
113118
[ -n "$wf_name" ] && names+=("$wf_name")
114119
done
115120

116121
if [ ${#names[@]} -eq 0 ]; then
117122
return 0
118123
fi
119124

120-
local cleanup_py="$REPO_ROOT/bin/cleanup_workflows.py"
125+
local cleanup_py="$REPO_ROOT/scripts/cleanup_workflows.py"
121126
if [ ! -f "$cleanup_py" ]; then
122-
echo " NOTE: bin/cleanup_workflows.py not found — skipping cleanup."
127+
echo " NOTE: scripts/cleanup_workflows.py not found — skipping cleanup."
123128
echo " Remove these manually in Falcon console → Fusion → Workflows:"
124129
printf ' - %s\n' "${names[@]}"
125130
return 0

0 commit comments

Comments
 (0)