crowdstrike/crowdstrike-falcon-foundry
Build Falcon Foundry apps with guided workflows for UI, functions, collections, Falcon Fusion SOAR workflows, and API integrations.
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.5.0] - 2026-08-19
Added
- Install instructions for five AI coding assistants — Claude Code, Codex, Copilot CLI, Cursor, and Antigravity CLI each get a verified marketplace command. A collapsible table covers local clones for testing a branch. Claude Code, Copilot CLI, and Cursor take
--plugin-dir; Antigravity CLI takesagy plugin install. Codex has no such flag and reads skills from~/.agents/skills/instead. fusion-redirectskill — Declines a standalone Falcon Fusion workflow request (a trigger plus actions that already exist) and points to the sibling Falcon Fusion plugin. The advice previously lived indevelopment-workflow's body, where only the skill router hook could surface it, so it never fired on assistants that don't run hooks. As its own skill it needs no hook. When the Falcon Fusion plugin is installed, that plugin's skill takes the request instead.- Agent Plugins manifest — A root
plugin.jsonfollowing the Agent Plugins 1.0.0 spec, so any conforming client recognizes the repo as a plugin. CI validates it andrelease.shbumps its version with the rest. - Function execution, testing, and debugging (CLI 2.1.0+) — The
functions-developmentskill now coversfoundry functions exec,test, andlogs. Documents the deploy-first rule (exec and test run the deployed artifact, not local code), request-data confirmation before exec, handler disambiguation from the manifest, and thetests.ymlschema for integration test cases. Adds a code-review checklist for logging, secrets, and schema coverage. The CLI guard enforces--no-prompton the new commands. Users on CLI 2.0.x are told why the commands are unavailable and offered an upgrade. - US-3 cloud region to the cloud-region documentation: added
us-3to theFOUNDRY_CLOUD_REGIONvalue lists (headless-operation reference, e2e-testing env var table) and the multi-cloud deployment section. Foundry CLI 2.0.2 added US-3 support; the base URL (api.us-3.crowdstrike.com) is in FalconPy as of v1.6.4.
Changed
- NGSIEM
start_searchkeyword guidance updated for FalconPy 1.6.5 — Thesearch=keyword remains the recommended approach (works on all versions), but the explanation now notes thatbody=was fixed in FalconPy 1.6.5 (#1497). Since FalconPy is unpinned,search=is still the safe default.
Fixed
connection issueon tenant commands — In a workspace-scoped sandbox the CLI cannot write~/.config/foundry/token.json, where it keeps its short-lived access token. It reports only the symptom, which sent agents investigating networks and credentials. The debugging skill now explains that the token refresh is expected and that the fix is granting write access to that directory. Observed on Codex.- Three commands that reject
--no-prompt—foundry version,apps list, andapps list-deploymentsfail withunknown flag. This is CLI behavior, not assistant-specific. Two of the three are in the prerequisite check, so "always add--no-prompt" broke the first thing an agent runs. - OpenAPI adapter dependencies without hooks — Claude Code's skill router runs
adapt_spec_for_foundry.pyautomatically. Copilot CLI, Cursor, and Antigravity CLI don't, so their users invoke it directly. It needspyyaml, which a barepip installcannot supply on Homebrew or system Pythons (PEP 668). The API integrations skill now documents a virtualenv setup. - Sub-skill routing survives a single-entry-point install —
development-workflownow says where sub-skills live on disk (../<name>/SKILL.md) and what to do when a capability request lands on the orchestrator: read the sub-skill first, then go straight to the CLI command ifmanifest.ymlexists. The orchestrator's trigger description is unchanged, so a fully-registered install routes as before. - Sub-skills point back to the orchestrator — Every capability sub-skill now links to
development-workflownear the top, so an assistant without routing hooks that picks a sub-skill directly still finds the CLI prerequisite check and scaffolding order. Previously onlye2e-testingmentioned it, and only in a footer.
[1.4.1] - 2026-08-07
Fixed
- Replaced deprecated Detects API with Alerts API — The
functions-falcon-apiskill now directs users tofrom falconpy import Alertswithquery_alerts_v2()/get_alerts_v2()instead of the deprecatedDetectsclass, which returns 405 Method Not Allowed. Filter byproduct:'detections'to scope results to detections only.
[1.4.0] - 2026-07-31
Added
- LogScale query recipe — Complete
NGSIEM.start_search()/get_search_status()pattern for querying LogScale from Foundry functions. Documents thesearch-allrepository requirement (specific repo names cause 403), thesearch=keyword requirement (FalconPy documentsbody=but its guard never honors it — see falconpy#1491), theresourcesvsbodyresponse-key asymmetry betweenstart_searchandget_search_status, and clarifies thatNGSIEMis the query class whileFoundryLogScaleis ingestion-only. Addshumio-auth-proxy:readto the scope reference table, verified against a live CID. - Function I/O schema requirements — Functions called from workflows must be created with
--input-schemaand--output-schema. Schemas bind only at creation time; the CLI writesnullfor both without these flags, even when--wf-exposeis set. Functions without a response schema produce no visible output in Fusion actions. - Workflow deletion warning — Documents that deleting a workflow and recreating it with the same name causes
409 name must be unique for an appfollowed by400 dependent artifact failed, blocking all further deploys. Recovery requires a fresh app. - Cross-plugin redirect to the Falcon Fusion plugin — The development-workflow orchestrator now recognizes standalone Falcon Fusion workflow requests (trigger + actions, no UI/function/collection/API integration) and advises the
crowdstrike-falcon-fusionplugin instead of scaffolding a Foundry app. Addsdetect_fusion_redirect.pyclassifier with unit tests. - GraphQL APIs use case — Integrate GraphQL APIs (Falcon Identity Protection, GitHub, Snyk) into Foundry apps using FalconPy or HTTP POST. Covers zero-arg auth for Falcon GraphQL endpoints and the security tradeoff of env vars vs API integrations for third-party APIs.
scripts/action_search.py— API-based action discovery script that works in headless/CI environments where the CLI's interactiveactions viewprompt fails. Uses FalconPy with FQL fuzzy matching and prints action IDs withversion_constraintvalues.- CLI guard for
actions view/triggers view— Hook now catches missing--no-prompton these commands to prevent TTY hangs. foundry apps listin prerequisite check — New CLI 2.0.2 command that lists all deployed apps on the CID from any directory. Added to Step 3 to help avoid name collisions.- Collection description validation constraints — Documents the 3–500 character length limit, alphanumeric-start requirement, and allowed character set for collection descriptions.
- Function logs in testing-patterns reference — Added function logs (viewing in UI and Advanced Event Search) to the reference table entry for testing patterns.
- Query parameter type matching for API integrations — Documents that
apiIntegration().execute()types params asRecord<string, unknown>, so a quoted number likelimit: '25'passes type-checking and fails server-side withgot string want integer. The extension still renders, so the failure reads as an API or credential error rather than a code bug. - Content regression tests —
tests/test_skill_content.pyguards critical documentation (LogScale recipe, schema requirements, workflow deletion warning) against accidental removal.
Changed
- Fusion redirect names the plugin, not the repo — The cross-plugin advisory pointed users at the
fusion-skillsGitHub repo. It now names the plugin (crowdstrike-falcon-fusion) with the/plugin installcommand and the marketplace link, since most users install from the marketplace and a repo detour is confusing to anyone unfamiliar with GitHub.detect_fusion_redirect.pyreportstargetascrowdstrike-falcon-fusion/crowdstrike-falcon-foundryrather than the repo names. - Gemini CLI → Antigravity CLI — Google transitioned Gemini CLI to Antigravity CLI (binary:
agy). Updated README with new command, skills paths (~/.gemini/antigravity-cli/skills/for user scope,.agents/skills/for workspace scope). RemovedGEMINI.mdsince we never shipped Gemini CLI support; Antigravity readsAGENTS.mddirectly. - Codex docs link — Updated from
developers.openai.com/codex/skillstolearn.chatgpt.com/docs/build-skills. - Renamed Python scripts to snake_case —
scripts/adapt-spec-for-foundry.py→adapt_spec_for_foundry.pyandscripts/test-adapt-spec.py→test_adapt_spec.py, matching the repo'ssnake_caselint convention and allowing the test to import the module directly. The PreToolUse hook and all skill docs reference the new names; no behavior changed. If you invoked the old path directly in your own tooling, update it to the underscore name.
Fixed
- Fusion redirect was never wired to a hook —
detect_fusion_redirect.pyshipped as a standalone script that nothing invoked, so its verdict never reached the agent at runtime. Thefusion-redirecteval passed only 1 of 5 trials: in three runs the agent declined to scaffold an app but never mentioned the Fusion plugin, and in one it scaffolded an app anyway. The skill router now runs the classifier on Foundry-matched prompts and injects an explicit redirect advisory when it fires. The advisory indevelopment-workflowalso states that naming the plugin is required output — declining to scaffold is only half a redirect — and that hand-writing the workflow YAML defeats the purpose, since the Fusion plugin discovers real action IDs, validates against the platform schema, and imports to the CID. - Fusion redirect classifier mishandled negation —
detect_fusion_redirect.pymatched app-capability keywords without regard to negation, so a prompt saying "no Foundry app, no UI, no functions" registeredUIandFoundry appas requests for those capabilities and suppressed the redirect. Standalone Fusion workflow requests that explicitly ruled out app capabilities — the clearest possible case for redirecting — were the ones most likely to be kept in this plugin. Negated spans are now stripped before app signals are matched, and the verdict reportsnegated_app_signalsso the reasoning stays visible. Caught by thefusion-redirecteval, which failed 0/5 trials before this fix. - Removed "delete and re-create" advice — The old guidance for fixing missing
workflow_integrationsaid to delete and recreate the function. This is technically correct (schemas only bind at creation), but was misleading about workflows: you must never delete and recreate a workflow to refresh a binding. Both skills now give consistent guidance — recreate the function, update the workflow YAML reference in place. - Action discovery guidance — Updated all
actions viewexamples to include--no-promptand pointed toaction_search.pyas the primary fallback. The CLI ignores--no-promptfor these commands (tracked upstream), so the script is the reliable path. - Alert and detection query routing (population vs. enrich) — The orchestrator and workflows skills now distinguish two cases. Fetching a population the workflow doesn't already have ("summarize all high-severity alerts") goes to a source-of-truth API — a native platform action (e.g. Cases → Search Cases) first, or a FalconPy
Alerts/Detectsfunction when none fits — since an Event Query against NG-SIEM can silently return nothing (repo contents are connector-dependent). Enriching a detection the workflow already holds (query by its ID) stays an Event Query, as does historical/aggregate telemetry. New reference event-query-vs-api.md; the functions-falcon-api example keeps the verifiedseverity_name+created_timestampFQL filter. - Removed
apps deleteworkaround — The 500/stuck-in-Deleting issue is fixed in CLI 2.0.2. Removed guidance about using Falcon App Manager UI as fallback. - Corrected "commands that work from anywhere" — Replaced
foundry apps list-deployments(which requires a manifest) withfoundry apps list(which actually works from any directory). - Fixed invalid error-handling references in workflow advanced-patterns — Removed non-existent
onErrorblocks,maxConcurrency, and automatic retries. Replaced with the real mechanisms: conditional routing onWorkflow.Execution.Errors, loopcontinue_on_partial_execution, and sequential loops for stateful actions.
[1.3.0] - 2026-06-11
Changes in this release were identified by running automated eval prompts against the skills with Sonnet and Opus, then investigating failures and judging feedback to find skill gaps.
Added
Functions & API Integrations:
- Credential management section with decision table (API integration vs FalconPy vs env vars) and callout that raw HTTP works but credentials are unencrypted and visible in app exports.
- OAuth scope reference table mapping FalconPy classes and methods to required manifest scopes, derived from all production sample apps. Notes that built-in capabilities don't need explicit scopes. Eval runs confirmed this corrects invalid scope generation (e.g.,
detects-read→detects:read,collection-management-read→custom-storage:read). - Context paragraph explaining API integrations ARE Foundry's credential management system.
UI:
- Vanilla JS as a first-class template option for pages and extensions. Includes CLI scaffolding examples, note that no npm install/build step is needed, and clarification that vite/build-related pitfalls are React-specific.
- Async
connect()callout explainingfalcon.connect()must be inuseEffectand navigation must be accessed after connect resolves viauseMemowith React state (isInitialized).
Workflows:
- HTTP Actions reference (
references/http-actions.md) with verifiedInline.HTTPRequestschema, both auth patterns (API key header and OAuth 2.0 client credentials), status-code conditional routing, and an HTTP-Actions-vs-API-integration decision guide. Added a callout so HTTP Actions are suggested for simple REST calls that don't need an app. - Collection config lookup workflow example showing the pattern for reading user-configured settings from a collection before performing an action.
- Response Action Workflow (Contain Host) example showing platform action discovery and usage. Added Contain device action ID to platform actions table.
- Null-guard warning near trigger parameters explaining they're prompted in the UI but may be empty via API or sub-workflow calls.
Fixed
Functions & API Integrations:
- Strengthened zero-arg constructor pitfall to explicitly call out the
os.environanti-pattern. Clarified this applies to FalconPy only (Go requires explicit credential wiring). - Added Falcon severity values reference table for mapping to external ticketing systems.
- Clarified CustomStorage bulk read pattern: use FQL filters instead of sequential GetObject loops.
- Corrected
definition_idvs name guidance: name works in production, UUID only needed for local testing. Fixed raw HTTP claim from "won't work" to "works but credentials are unencrypted." - Added
APIIntegrations().execute_command_proxy()code examples showing how to call registered third-party API integrations from function code. Includes request body/params patterns, explanation of why the platform proxy is required, and references to 3 sample repos.
UI:
- Improved CSP/Shoelace icons pitfall to mention Foundry's CSP allowlist and local asset alternative.
Workflows:
- Clarified
system_actionguidance:falseexposes the workflow as a SOAR response action,truekeeps it internal. Changed example default tofalsesince most on-demand workflows should be SOAR-visible. - Added callout that workflows must use registered API integrations, not raw HTTP via functions with hardcoded credentials.
- Fixed incorrect trigger parameter variable syntax. Was
${data['trigger.param_name']}, corrected to${data['param_name']}(no prefix). Validated against foundry-sample-foundryjs-demo, security-skills (20+ workflows), and all other sample repos. - Fixed CEL
has()usage:has(data['key'])doesn't work in Fusion (throwsQ0910: invalid argument to has() macro). Replaced withdata['key'] != null. Documented thathas()works on object fields after retrieval, not directly on data store keys. - Added modern optional patterns:
data[?'key'].orValue(default),.or()fallback chains, safe list existence checks. Preferred over verbose!= nullternaries. - Fixed version_constraint guidance: was oversimplified ("~0 for functions, ~1 for platform actions"). Corrected to explain it pins against the activity's
semantic_versionfield. Some platform actions like "contain device" have no semantic_version and require~0. - Forced workflows-development sub-skill loading from orchestrator to prevent hallucinated workflow formats.
[1.2.0] - 2026-06-03
Added
- Deploy command validation — The CLI guard hook now catches missing
--change-typeand--change-logflags onfoundry apps deploy, preventing a 500 error from the Foundry API. - Foundry-JS API integration pattern — Added the
falcon.apiIntegration().execute()pattern for calling external APIs from the UI toui-development/references/foundry-js.md, with response structure and a cross-reference to Python/Go function examples. - Extension socket navigation — The UI socket table now includes a console navigation column and the
identity.detections.detailssocket, with verified paths to each socket's detail panel. - Python function testing — Added Falcon console testing documentation for Python functions, including discovering the Function logs button.
Changed
- ui-development — Documented that
navigateTodefaultstargetto_selfwhen omitted (navigates in the same tab). Confirmed from foundry-js source. - collections-development — Added pitfalls warning that schema field mismatches and invalid enum values return errors in the response body without throwing, so writes must check
result.errors. - debugging-workflows — Added troubleshooting rows for blank pages from an un-awaited
falcon.connect()and data not appearing after writes due to schema mismatches. - development-workflow, ui-development — Documented that
foundry apps validate,deploy, andui runmust run from the app root; running from a subdirectory produces doubled paths and misleading file-not-found errors.
Fixed
- Inclusive terminology — Changed "Whitelist approach" to "Allowlist approach" in security-examples.md.
- verify-apps.sh extension verification — Instructions now scroll to find the accordion, expand it, wait for the iframe to load, and check for content inside — matching the
expandExtensionInSocket()pattern from@crowdstrike/foundry-playwright. - test-skill.sh warmup — Use
--model haikufor the API health check to avoid wasting Opus tokens on a connectivity test. - tail-test.sh — Suppress
findstderr when test directories don't exist yet.
[1.1.0] - 2026-05-13
Added
- e2e-testing skill — End-to-end testing for Foundry apps using
@crowdstrike/foundry-playwright. Covers the 4-project pipeline (authenticate → install → test → uninstall), page objects, configuration screens, custom page objects, CI with GitHub Actions, and debugging with Playwright MCP. - NGSIEM query export use case — Export Falcon Next-Gen SIEM query results to CSV/JSON via Foundry functions with pagination and scheduled workflow patterns.
- Foundry-JS reference —
falcon.api.workflows,falcon.logscale,falcon.cloudFunction, and collections CRUD patterns for@crowdstrike/foundry-jsinui-development/references/foundry-js.md. - Visual debugging section in debugging-workflows — Screenshot-based troubleshooting with Playwright MCP and test failure artifacts.
- agentskills.io metadata — All skills now have top-level
tags,author,license, andcompatibilityfields per the agentskills.io open spec.
Changed
- development-workflow — Expanded e2e testing guidance with credential configuration details, non-SSO user requirement, and app name alignment.
- release.sh — Added Step 8 documenting the Anthropic Plugin Marketplace update process (notify Anthropic of tag + SHA after each release).
Removed
- UI skill: stale E2E Testing section — Removed placeholder in
ui-development/references/advanced-patterns.mdthat used imaginary helpers predating@crowdstrike/foundry-playwright. Proper guidance now lives in the dedicated e2e-testing skill.
[1.0.0] - 2026-04-29
Initial public release of Falcon Foundry Skills — AI coding assistant skills for building CrowdStrike Falcon Foundry apps.
Skills
- development-workflow — Orchestrates the full app lifecycle from requirements through deployment. Coordinates all sub-skills and enforces CLI-first scaffolding.
- api-integrations — Create and configure API integrations with OpenAPI specs. Includes spec adaptation for Foundry compatibility and Falcon Fusion SOAR sharing.
- collections-development — Design and implement Foundry collections with JSON Schema modeling, CRUD operations via CustomStorage, and access control patterns.
- functions-development — Build serverless functions in Python or Go with FDK handler patterns, dependency management, and testing.
- functions-falcon-api — Call CrowdStrike Falcon APIs from within Foundry functions using zero-argument FalconPy authentication.
- ui-development — Build UI pages and extensions with React, Vue, or vanilla JS. Includes Foundry-JS patterns, Shoelace theming, and iframe communication.
- workflows-development — Design Falcon Fusion SOAR workflows with YAML specs, CEL expressions, loop/condition control flow, and platform action integration.
- debugging-workflows — Systematic troubleshooting for CLI errors, deployment failures, blank pages, and runtime issues.
- security-patterns — OAuth scoping, input validation, XSS prevention, CSP configuration, and secure coding patterns.
Infrastructure
- CLI guard hook (
hooks/foundry-cli-guard.sh) — Automatically validates Bash commands to enforce--no-prompt, block manual directory creation, and validate socket IDs. - Spec adaptation script (
scripts/adapt-spec-for-foundry.py) — Fixes common OpenAPI spec issues (server variables, auth schemes, parameter deduplication) beforefoundry api-integrations create. - Test harness (
test-skill.sh,run-ab-test.sh,verify-apps.sh) — Automated skill evaluation with token counting, anti-pattern detection, deploy verification, and A/B comparison.
Use Cases
13 real-world implementation patterns extracted from CrowdStrike Tech Hub blog posts covering API pagination, detection enrichment, LogScale ingestion, custom SOAR actions, collections, GraphQL APIs, and more.
Multi-Tool Support
AGENTS.md— Canonical AI agent instruction file with tool-agnostic Foundry development guidance (CLI commands, skills ecosystem, quality guidelines, contribution conventions).CLAUDE.md— Claude Code-specific plugin additions (hooks, superpowers integration, safety enforcement). ReferencesAGENTS.mdfor the full development guide..github/copilot-instructions.md— Redirect for GitHub Copilot..cursorrules— Redirect for Cursor.