skills/aws-cli/SKILL.md
--- name: aws-cli description: Expert guidance on AWS CLI v2 for managing AWS services from the command line. Integrates with the dash monitoring dashboard. Use when developers mention: (1) aws command or AWS CLI, (2) CloudWatch metrics or alarms, (3) ECS/EC2/Lambda service discovery, (4) S3 bucket operations, (5) Cost Explorer queries, (6) Security Hub or GuardDuty findings, (7) configuring AWS credentials or profiles, (8) dash AWS monitoring setup. --- # AWS CLI v2 ## Overview The AWS Comma
npx skillsauth add dl-alexandre/cli-installer-toolkit skills/aws-cliInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The AWS Command Line Interface (AWS CLI) is a unified tool to manage AWS services from the command line. Version 2 is the current major version with improved installers, new configuration options, and native support for AWS IAM Identity Center (SSO).
Official Documentation: https://docs.aws.amazon.com/cli/latest/userguide/
aws configure
# AWS Access Key ID: AKIAIOSFODNN7EXAMPLE
# AWS Secret Access Key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# Default region name: us-west-2
# Default output format: json
aws configure --profile production
aws configure --profile development
# Use a profile
aws s3 ls --profile production
export AWS_PROFILE=production
# ~/.aws/credentials
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[production]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
# ~/.aws/config
[default]
region = us-west-2
output = json
[profile production]
region = us-east-1
output = json
[profile sso-user]
sso_start_url = https://my-sso-portal.awsapps.com/start
sso_region = us-east-1
sso_account_id = 123456789012
sso_role_name = ReadOnlyAccess
region = us-west-2
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=us-west-2
export AWS_PROFILE=production
export AWS_SESSION_TOKEN=... # For temporary credentials
aws configure sso
# SSO session name: my-sso
# SSO start URL: https://my-sso-portal.awsapps.com/start
# SSO region: us-east-1
# SSO registration scopes: sso:account:access
# Login to SSO
aws sso login --profile my-sso-profile
aws sts get-caller-identity # Who am I?
aws iam list-users # List IAM users
aws iam get-user --user-name alice # Get user details
aws iam list-roles # List IAM roles
aws ec2 describe-instances # List all instances
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running"
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,State.Name,Tags[?Key==`Name`].Value|[0]]' --output table
aws ec2 start-instances --instance-ids i-1234567890abcdef0
aws ec2 stop-instances --instance-ids i-1234567890abcdef0
aws ec2 describe-regions --all-regions # List all regions
aws ecs list-clusters # List ECS clusters
aws ecs list-services --cluster my-cluster # List services in cluster
aws ecs describe-services --cluster my-cluster --services my-service
aws ecs list-tasks --cluster my-cluster --service-name my-service
aws ecs describe-tasks --cluster my-cluster --tasks <task-arn>
aws ecs update-service --cluster my-cluster --service my-service --force-new-deployment
aws lambda list-functions # List all functions
aws lambda get-function --function-name my-function
aws lambda invoke --function-name my-function output.json
aws lambda update-function-code --function-name my-function --zip-file fileb://function.zip
aws s3 ls # List buckets
aws s3 ls s3://my-bucket/ # List bucket contents
aws s3 cp file.txt s3://my-bucket/ # Upload file
aws s3 cp s3://my-bucket/file.txt ./ # Download file
aws s3 sync ./local-dir s3://my-bucket/prefix/ # Sync directory
aws s3 rm s3://my-bucket/file.txt # Delete file
aws s3 rb s3://my-bucket --force # Delete bucket
aws s3api get-bucket-location --bucket my-bucket
# List alarms
aws cloudwatch describe-alarms
aws cloudwatch describe-alarms --state-value ALARM
# Get metrics
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
--start-time 2024-01-01T00:00:00Z \
--end-time 2024-01-02T00:00:00Z \
--period 3600 \
--statistics Average
# List metrics
aws cloudwatch list-metrics --namespace AWS/ECS
# Put metric data
aws cloudwatch put-metric-data \
--namespace "Custom/MyApp" \
--metric-name "RequestCount" \
--value 100
aws rds describe-db-instances # List RDS instances
aws rds describe-db-clusters # List Aurora clusters
aws rds describe-db-snapshots # List snapshots
aws rds create-db-snapshot --db-instance-identifier mydb --db-snapshot-identifier mydb-snapshot
aws ce get-cost-and-usage \
--time-period Start=2024-01-01,End=2024-01-31 \
--granularity DAILY \
--metrics "BlendedCost" "UnblendedCost" \
--group-by Type=DIMENSION,Key=SERVICE
aws securityhub get-findings --max-results 100
aws securityhub get-findings --filters '{"SeverityNormalized": [{"Gte": 70}]}'
aws securityhub describe-standards
aws guardduty list-detectors
aws guardduty list-findings --detector-id <detector-id>
aws guardduty get-findings --detector-id <detector-id> --finding-ids <finding-id>
aws elbv2 describe-load-balancers # List ALB/NLB
aws elbv2 describe-target-groups --load-balancer-arn <arn>
aws elbv2 describe-target-health --target-group-arn <arn>
aws elasticbeanstalk describe-environments
aws elasticbeanstalk describe-environment-health --environment-name my-env --attribute-names All
The dash monitoring dashboard uses AWS CLI for service discovery and metrics collection. Configuration is in config/aws-monitoring.yaml.
# config/aws-monitoring.yaml
aws:
region: "us-west-2"
credentials:
use_iam_role: true # Use EC2 instance role or default chain
profile: "" # Or specify a named profile
access_key_id: "" # Or explicit credentials
secret_access_key: ""
service_stability:
discovery:
enabled: true
use_aws_cli: true # Enable CLI-based discovery
clusters:
- name: "production-cluster"
region: "us-west-2"
ec2_filters:
- name: "tag:Environment"
values: ["prod"]
discover_elastic_beanstalk: true
discover_lambda: true
The AWSCLIExecutor in dash executes AWS CLI commands for:
# Test identity
aws sts get-caller-identity
# Test ECS discovery
aws ecs list-clusters
aws ecs list-services --cluster production-cluster
# Test CloudWatch access
aws cloudwatch describe-alarms --state-value ALARM
# Test Cost Explorer (requires activation)
aws ce get-cost-and-usage \
--time-period Start=$(date -v-7d +%Y-%m-%d),End=$(date +%Y-%m-%d) \
--granularity DAILY \
--metrics BlendedCost
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:ListClusters",
"ecs:ListServices",
"ecs:DescribeServices",
"ecs:ListTasks",
"ecs:DescribeTasks",
"ec2:DescribeInstances",
"ec2:DescribeRegions",
"lambda:ListFunctions",
"lambda:GetFunction",
"elasticbeanstalk:DescribeEnvironments",
"elasticbeanstalk:DescribeEnvironmentHealth",
"cloudwatch:DescribeAlarms",
"cloudwatch:GetMetricData",
"cloudwatch:GetMetricStatistics",
"cloudwatch:ListMetrics",
"rds:DescribeDBInstances",
"rds:DescribeDBClusters",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:DescribeTargetHealth",
"s3:ListAllMyBuckets",
"s3:GetBucketLocation",
"ce:GetCostAndUsage",
"securityhub:GetFindings",
"guardduty:ListDetectors",
"guardduty:ListFindings",
"guardduty:GetFindings",
"sts:GetCallerIdentity"
],
"Resource": "*"
}
]
}
# Discover all running services across ECS clusters
for cluster in $(aws ecs list-clusters --query 'clusterArns[*]' --output text); do
echo "Cluster: $cluster"
aws ecs list-services --cluster "$cluster" --query 'serviceArns[*]' --output table
done
for lb in $(aws elbv2 describe-load-balancers --query 'LoadBalancers[*].LoadBalancerArn' --output text); do
echo "Load Balancer: $lb"
for tg in $(aws elbv2 describe-target-groups --load-balancer-arn "$lb" --query 'TargetGroups[*].TargetGroupArn' --output text); do
aws elbv2 describe-target-health --target-group-arn "$tg" \
--query 'TargetHealthDescriptions[*].[Target.Id,TargetHealth.State]' --output table
done
done
aws cloudwatch get-metric-data \
--metric-data-queries file://queries.json \
--start-time $(date -v-1H -u +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
--output json > metrics.json
aws ce get-cost-and-usage \
--time-period Start=$(date -v-30d +%Y-%m-%d),End=$(date +%Y-%m-%d) \
--granularity MONTHLY \
--metrics "BlendedCost" \
--group-by Type=DIMENSION,Key=SERVICE \
--query 'ResultsByTime[*].Groups[*].[Keys[0],Metrics.BlendedCost.Amount]' \
--output table
aws ec2 describe-instances --output json # JSON (default)
aws ec2 describe-instances --output text # Tab-separated
aws ec2 describe-instances --output table # ASCII table
aws ec2 describe-instances --output yaml # YAML
# Get instance IDs only
aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId' --output text
# Filter and format
aws ec2 describe-instances \
--query 'Reservations[*].Instances[*].[InstanceId,State.Name,Tags[?Key==`Name`].Value|[0]]' \
--output table
# Complex filtering
aws ec2 describe-instances \
--query 'Reservations[*].Instances[?State.Name==`running`].[InstanceId,InstanceType]' \
--output table
# Check current identity
aws sts get-caller-identity
# Debug credential chain
AWS_DEBUG=1 aws sts get-caller-identity
# Clear cached credentials
rm -rf ~/.aws/cli/cache/*
# Check configured region
aws configure get region
# Override region
aws ec2 describe-instances --region us-east-1
# Increase timeout
aws configure set cli_read_timeout 60
aws configure set cli_connect_timeout 30
# Or via environment
export AWS_READ_TIMEOUT=60
export AWS_CONNECT_TIMEOUT=30
# Configure retry mode
aws configure set retry_mode adaptive
aws configure set max_attempts 10
aws ec2 describe-instances --debug 2>&1 | head -100
This skill includes Python helper scripts in the scripts/ directory. Run with uv run:
uv run ~/.claude/skills/aws-cli/scripts/aws_check.py # Full diagnostic
uv run ~/.claude/skills/aws-cli/scripts/aws_check.py identity # Check credentials
uv run ~/.claude/skills/aws-cli/scripts/aws_check.py permissions # Test dash-required permissions
uv run ~/.claude/skills/aws-cli/scripts/aws_check.py services # Discover AWS services
uv run ~/.claude/skills/aws-cli/scripts/aws_check.py config # Show AWS configuration
uv run ~/.claude/skills/aws-cli/scripts/aws_metrics.py list AWS/ECS
uv run ~/.claude/skills/aws-cli/scripts/aws_metrics.py get CPUUtilization --namespace AWS/EC2 --dimension InstanceId=i-1234567890
uv run ~/.claude/skills/aws-cli/scripts/aws_metrics.py alarms ALARM
uv run ~/.claude/skills/aws-cli/scripts/aws_metrics.py ecs my-cluster my-service --hours 24
uv run ~/.claude/skills/aws-cli/scripts/aws_metrics.py ec2 i-1234567890abcdef0 --hours 6
uv run ~/.claude/skills/aws-cli/scripts/aws_metrics.py rds mydb-instance --hours 12
uv run ~/.claude/skills/aws-cli/scripts/aws_metrics.py export metrics.json --hours 24
# Homebrew (recommended)
brew install awscli
# Official installer
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
# x86_64
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
# ARM64
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
docker run --rm -it amazon/aws-cli --version
docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli s3 ls
aws --version
# aws-cli/2.x.x Python/3.x.x Darwin/23.x.x source/arm64
tools
--- name: slack-cli summary: Command-line interface for creating and managing Slack apps, used with Deno Slack SDK or Bolt frameworks for JavaScript and Python triggers: - slack cli - slack-cli - slack command line - create slack app - manage slack app - slack app development - slack app lifecycle - deploy slack app - slack app authorization - slack bolt framework - deno slack sdk --- # Slack CLI ## Overview The Slack CLI is a command-line tool for creating and managing S
tools
--- name: jira-cli summary: Feature-rich interactive CLI for Atlassian Jira. Provides issue management, epic/sprint navigation, transitions, and more from the command line. triggers: - jira-cli - jira command line - jira issue list - jira issue create - jira sprint - jira epic - atlassian jira cli - ticket management cli - jira from terminal - move jira ticket - transition jira issue --- # Jira CLI ## Overview JiraCLI is an interactive command line tool for Atlassian Jir
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------