> Creates Elastic Cloud Serverless projects (Elasticsearch, Observability, or Security) via the REST API, saves credentials to file, and bootstraps a scoped Elasticsearch API key. Use when creating a new serverless project, provisioning a search or observability environment, or spinning up a new Elastic Cloud project.
npx skills add https://github.com/elastic/agent-skills --skill cloud-create-project
Create Elastic Cloud Serverless projects using the Serverless REST API. Use the cloud-manage-project skill for day-2
operations like listing, updating, or deleting projects.
EC_API_KEY is configured. If not, run cloud-setup skill first.authorization. If the API returns an authorization error (for example, 403 Forbidden), stop and ask the user to
verify the provided API key permissions.
cloud-setup is unavailable)If this skill is installed standalone and cloud-setup is not available, instruct the user to configure Cloud
environment variables manually before running commands. Never ask the user to paste API keys in chat.
| Variable | Required | Description |
| ------------- | -------- | -------------------------------------------------------------- |
| EC_API_KEY | Yes | Elastic Cloud API key used for project creation operations. |
| EC_BASE_URL | No | Cloud API base URL (default: https://api.elastic-cloud.com). |
> Note: If EC_API_KEY is missing, or the user does not have a Cloud API key yet, first check whether the user has
> an Elastic Cloud account. If not, propose starting a free trial at
> Elastic Cloud free trial — 14 days of full access with no credit card
> required. Once registered, direct the user to generate a key at
> Elastic Cloud API keys, then configure it locally using the steps below.
Preferred method (agent-friendly): create a .env file in the project root:
EC_API_KEY=your-api-key
EC_BASE_URL=https://api.elastic-cloud.com
All cloud/* scripts auto-load .env from the working directory.
Alternative: export directly in the terminal:
export EC_API_KEY="<your-cloud-api-key>"
export EC_BASE_URL="https://api.elastic-cloud.com"
Terminal exports may not be visible to sandboxed agents running in separate shell sessions, so prefer .env when using
an agent.
messages or agent thinking. Direct the user to the .elastic-credentials file instead. The admin password must
never appear in chat history, thinking traces, or agent output.
running the creation script.
admin password to .elastic-credentialsfor bootstrapping a scoped API key. The admin user has full privileges and cannot be modified in serverless. Never
use admin credentials for direct Elasticsearch operations (querying, indexing, etc.) — always create a scoped API key
first (see Step 8). The load-credentials command excludes admin credentials by default — use --include-admin
only during Step 7/8, then reload without it once the API key is created. Never read or display the contents of
.elastic-credentials in chat.
.elastic-credentials (disk full, permissions, etc.), thesave may be incomplete. Check .elastic-credentials for the password first. If missing, use the
cloud-manage-project skill's reset-credentials command to generate a new password.
--wait to the creation script so it polls until the phase changes frominitializing to initialized. Only fall back to manually polling the status endpoint if --wait is unavailable.
| Type | Description | Key endpoints |
| --------------- | ----------------------------------------- | -------------------------------- |
| elasticsearch | Search, analytics, and vector workloads | Elasticsearch, Kibana |
| observability | Logs, metrics, traces, and APM | Elasticsearch, Kibana, APM, OTLP |
| security | SIEM, endpoint protection, cloud security | Elasticsearch, Kibana, OTLP |
Map the user's request to the correct --type value:
| User says | --type |
| ----------------------------------------------------------- | --------------- |
| "search project", "elasticsearch project", vector search | elasticsearch |
| "observability project", "o11y", logs, metrics, traces, APM | observability |
| "security project", "SIEM", detections, endpoint protection | security |
Do not silently default to any type. If the user does not specify a type, infer it from the conversation context
(for example, discussing log ingestion suggests observability, discussing detections or SIEM suggests security,
discussing search or vector workloads suggests elasticsearch). Always present the inferred type to the user and ask
for confirmation before proceeding. If context is insufficient to infer a type, ask the user to choose.
Observability and security projects support a --product-tier flag. Default to complete unless the user explicitly
requests a different tier.
| Project type | Tier | Description |
| --------------- | ----------------- | ----------------------------------------------------- |
| observability | complete | Full observability suite (logs, metrics, traces, APM) |
| observability | logs_essentials | Log management only |
| security | complete | Full security suite (SIEM, cloud, endpoint) |
| security | essentials | Core SIEM only |
Elasticsearch projects do not have a product tier — use --optimized-for instead.
Present these defaults to the user before creation. Ask if they want to use or change them:
| Setting | Default |
| ------- | ----------------- |
| Region | gcp-us-central1 |
Project type must be confirmed with the user — do not assume a default. See "Project type inference" above.
Always use --optimized-for general_purpose unless the user explicitly requests vector. Do not proactively offer the
vector option.
If the user does not specify a name, ask for one — it is required.
Project Creation:
- [ ] Step 1: Verify API key is set
- [ ] Step 2: Present defaults and confirm with user
- [ ] Step 3: List available regions (optional)
- [ ] Step 4: Create the project
- [ ] Step 5: Save credentials and endpoints
- [ ] Step 6: Wait for project to initialize
- [ ] Step 7: Set environment variables
- [ ] Step 8: Recommend creating a scoped API key
echo "${EC_API_KEY:?Not set}"
If EC_API_KEY is not set, run the cloud-setup skill first to configure authentication and defaults.
Before presenting the summary, ensure the project type has been explicitly confirmed by the user. If no type was
specified, infer one from the conversation context and propose it. If the context is ambiguous, ask the user to choose
from elasticsearch, observability, or security.
Always show a confirmation summary before creating. Include different fields depending on project type:
Elasticsearch project:
Project Summary:
Type: elasticsearch
Name: my-project
Region: gcp-us-central1
Observability project:
Project Summary:
Type: observability
Name: my-project
Region: gcp-us-central1
Product tier: complete
Security project:
Project Summary:
Type: security
Name: my-project
Region: gcp-us-central1
Product tier: complete
Ask the user to confirm or override any values before proceeding.
python3 skills/cloud/create-project/scripts/create-project.py list-regions
The output is grouped by cloud provider (AWS, Azure, GCP) and sorted alphabetically. Regions marked with * do not
support project creation.
python3 skills/cloud/create-project/scripts/create-project.py create \
--type elasticsearch \
--name "my-project" \
--region gcp-us-central1 \
--optimized-for general_purpose \
--wait
Always pass --optimized-for general_purpose for Elasticsearch projects. Only use vector if the user explicitly
requests it.
For observability and security projects, pass --product-tier complete unless the user explicitly requests a different
tier.
Always pass --wait so the script automatically polls until the project is ready.
The script automatically writes credentials to .elastic-credentials in the working directory. The password is redacted
from the JSON output on stdout.
If saving succeeds, tell the user:
Credentials saved to .elastic-credentials — open that file to retrieve your password.
Do not read, cat, or display the contents of .elastic-credentials in chat.
If saving fails, the script prints an error to stderr. Check whether .elastic-credentials exists and contains a
password (a partial write is possible). If the password is missing or the file does not exist, immediately run the
cloud-manage-project skill's reset-credentials command to generate a new password.
The creation response also contains:
The admin credentials are for initial bootstrap only. Recommend creating a scoped API key for ongoing access (Step 8).
When --wait is passed (recommended), the script polls automatically until the project phase becomes initialized. No
manual polling is needed.
If the agent ran without --wait, poll manually:
python3 skills/cloud/create-project/scripts/create-project.py status \
--type elasticsearch \
--id <project-id>
Repeat until phase changes from initializing to initialized.
The creation script saves credentials and endpoints to .elastic-credentials with the project name in the header. Load
them into the current shell with --include-admin so admin credentials are available for API key creation in Step
8:
eval $(python3 skills/cloud/manage-project/scripts/manage-project.py load-credentials \
--name "<project-name>" --include-admin)
This sets ELASTICSEARCH_URL, KIBANA_URL, any project-type specific endpoints (APM_URL, INGEST_URL), and the
admin ELASTICSEARCH_USERNAME/ELASTICSEARCH_PASSWORD needed to bootstrap an API key.
The admin user has full privileges and cannot be modified in serverless projects. **Do not proceed with Elasticsearch
operations using admin credentials.** Create a scoped Elasticsearch API key with only the permissions the user needs.
If the elasticsearch-authn skill is available, use it for API key creation — it covers the full lifecycle (create,
grant, invalidate, query) and handles scoping privileges correctly. If the skill is not installed, ask the user to
either install it or create the API key manually through Kibana > Stack Management > API keys. After creation, save
the API key to .elastic-credentials using the project-specific header format (see manage-project skill's "Credential
file format" section), then reload without --include-admin to drop admin credentials from the environment:
eval $(python3 skills/cloud/manage-project/scripts/manage-project.py load-credentials \
--name "<project-name>")
python3 skills/cloud/create-project/scripts/create-project.py create \
--type elasticsearch \
--name "my-search-project" \
--region gcp-us-central1 \
--optimized-for general_purpose \
--wait
python3 skills/cloud/create-project/scripts/create-project.py create \
--type observability \
--name "prod-o11y" \
--region aws-eu-west-1 \
--product-tier complete \
--wait
python3 skills/cloud/create-project/scripts/create-project.py create \
--type security \
--name "siem-prod" \
--region gcp-us-central1 \
--product-tier complete \
--wait
cloud-setup skill first if EC_API_KEY is not set..elastic-credentials.general_purpose optimization. Only use vector if the user explicitly requests it.complete product tier for observability and security projects. Only use logs_essentials or essentialsif the user explicitly requests it.
--wait so the script polls until the project is ready.cloud-manage-project skill.| Command | Description |
| -------------- | --------------------------------- |
| create | Create a new serverless project |
| status | Get project initialization status |
| list-regions | List available regions |
| Flag | Commands | Description |
| ----------------- | -------------- | ---------------------------------------------------------- |
| --type | create, status | Project type: elasticsearch, observability, security |
| --name | create | Project name (required) |
| --region | create | Region ID (default: gcp-us-central1) |
| --id | status | Project ID |
| --optimized-for | create | Elasticsearch subtype: general_purpose or vector |
| --product-tier | create | Observability/security tier (see "Product tiers" section) |
| --wait | create | Poll until project is initialized before exiting |
| Variable | Required | Description |
| ----------------------- | -------- | ------------------------------------------------------------------------ |
| EC_API_KEY | Yes | Elastic Cloud API key |
| EC_BASE_URL | No | Cloud API base URL (default: https://api.elastic-cloud.com) |
| ELASTICSEARCH_URL | Output | Elasticsearch URL (loaded via load-credentials after creation) |
| KIBANA_URL | Output | Kibana URL (loaded via load-credentials after creation) |
| APM_URL | Output | APM endpoint (observability projects only) |
| INGEST_URL | Output | OTLP ingest endpoint (observability and security projects) |
| ELASTICSEARCH_API_KEY | Output | Elasticsearch API key (created in Step 8, loaded via load-credentials) |
references/api-reference.md
Assess Kubernetes workloads and cluster configuration for AKS Automatic compatibility. Identifies incompatibilities, generates fixes, and guides migration from AKS Standard to AKS Automatic. WHEN: migrate to AKS Automatic, check AKS Automatic readiness, validate manifests for Automatic, assess cluster for Automatic compatibility, fix deployment for Automatic compatibility, identify AKS Automatic migration blockers, is my cluster ready for AKS Automatic.
Discovers available Azure OpenAI model capacity across regions and projects. Analyzes quota limits, compares availability, and recommends optimal deployment locations based on capacity requirements. USE FOR: find capacity, check quota, where can I deploy, capacity discovery, best region for capacity, multi-project capacity search, quota analysis, model availability, region comparison, check TPM availability. DO NOT USE FOR: actual deployment (hand off to preset or customize after discovery), quota increase requests (direct user to Azure Portal), listing existing deployments.
Interactive guided deployment flow for Azure OpenAI models with full customization control. Step-by-step selection of model version, SKU (GlobalStandard/Standard/ProvisionedManaged), capacity, RAI policy (content filter), and advanced options (dynamic quota, priority processing, spillover). USE FOR: custom deployment, customize model deployment, choose version, select SKU, set capacity, configure content filter, RAI policy, deployment options, detailed deployment, advanced deployment, PTU deployment, provisioned throughput. DO NOT USE FOR: quick deployment to optimal region (use preset).
Unified Azure OpenAI model deployment skill with intelligent intent-based routing. Handles quick preset deployments, fully customized deployments (version/SKU/capacity/RAI policy), and capacity discovery across regions and projects. USE FOR: deploy model, deploy gpt, create deployment, model deployment, deploy openai model, set up model, provision model, find capacity, check model availability, where can I deploy, best region for model, capacity analysis. DO NOT USE FOR: listing existing deployments (use foundry_models_deployments_list MCP tool), deleting deployments, agent creation (use agent/create), project creation (use project/create).
Intelligently deploys Azure OpenAI models to optimal regions by analyzing capacity across all available regions. Automatically checks current region first and shows alternatives if needed. USE FOR: quick deployment, optimal region, best region, automatic region selection, fast setup, multi-region capacity check, high availability deployment, deploy to best location. DO NOT USE FOR: custom SKU selection (use customize), specific version selection (use customize), custom capacity configuration (use customize), PTU deployments (use customize).
This skill should be used when working with LaminDB, an open-source data framework for biology that makes data queryable, traceable, reproducible, and FAIR. Use when managing biological datasets (scRNA-seq, spatial, flow cytometry, etc.), tracking computational workflows, curating and validating data with biological ontologies, building data lakehouses, or ensuring data lineage and reproducibility in biological research. Covers data management, annotation, ontologies (genes, cell types, diseases, tissues), schema validation, integrations with workflow managers (Nextflow, Snakemake) and MLOps platforms (W&B, MLflow), and deployment strategies.
Latch platform for bioinformatics workflows. Build pipelines with Latch SDK, @workflow/@task decorators, deploy serverless workflows, LatchFile/LatchDir, Nextflow/Snakemake integration.
Run Python code in the cloud with serverless containers, GPUs, and autoscaling. Use when deploying ML models, running batch processing jobs, scheduling compute-intensive tasks, or serving APIs that require GPU acceleration or dynamic scaling.
Take elastic/cloud-create-project from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.