
Aws
Run S3, SQS, IAM, and STS against a local AWS-compatible emulator so you can develop and test without real AWS accounts or network calls.
Overview
aws is an agent skill for the Build phase that runs emulated S3, SQS, IAM, and STS locally so your app and AWS SDK calls can be tested without real AWS APIs.
Install
npx skills add https://github.com/vercel-labs/emulate --skill awsWhat is this skill?
- In-memory S3, SQS, IAM, and STS with AWS-compatible XML responses
- Start via npx emulate --service aws or createEmulator({ service: 'aws' }) on a custom port
- Bearer token auth with scoped s3:*, sqs:*, iam:*, sts:* permission patterns
- AWS SDK v3 S3Client and environment variable AWS_EMULATOR_URL wiring examples
- curl-friendly HTTP endpoints for quick manual API checks
- Emulates four AWS service families: S3, SQS, IAM, and STS
Adoption & trust: 97 installs on skills.sh; 1.3k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need to exercise AWS-shaped APIs in development but want to avoid cost, credentials sprawl, and flaky calls to real cloud endpoints.
Who is it for?
Indie builders integrating S3 uploads, queue workers, or IAM/STS patterns who want SDK-realistic responses on a laptop.
Skip if: Teams that need durable multi-tenant cloud state, compliance-grade IAM auditing, or production deployment—the emulator is in-memory only.
When should I use this skill?
User needs AWS API endpoints locally, S3/SQS/IAM/STS testing, or mentions AWS emulator, emulate AWS, mock S3, local SQS, test IAM, AWS locally, or STS assume role.
What do I get? / Deliverables
Your agent starts or points at the emulate AWS service, configures SDK clients and AWS_EMULATOR_URL, and you can iterate on storage, queue, identity, and STS flows entirely on localhost.
- Running local AWS emulator instance URL and port configuration
- SDK or curl examples pointed at the emulator base URL
Recommended Skills
Journey fit
Local cloud emulation sits in Build because you wire SDKs and app code to fake endpoints before Ship-stage integration testing in CI. Integrations is the canonical shelf: the skill is about pointing AWS SDK clients and curl at emulated service URLs, not deploying infra.
How it compares
Use for local AWS-shaped APIs instead of mocking every SDK method by hand or always using a shared dev AWS account.
Common Questions / FAQ
Who is aws for?
Solo and indie builders using Claude Code, Cursor, or similar agents to develop features that call S3, SQS, IAM, or STS and want a local stand-in for the AWS SDK.
When should I use aws?
During Build integrations when you are wiring uploads, queues, role assumption, or IAM test fixtures; also while debugging SDK request shapes before Ship-stage automated tests.
Is aws safe to install?
The skill runs local emulation via npx and curl; review the Security Audits panel on this Prism page and treat emulator tokens as dev-only secrets, not production credentials.
SKILL.md
READMESKILL.md - Aws
# AWS Emulator S3, SQS, IAM, and STS emulation with AWS SDK-compatible S3 paths and query-style SQS/IAM/STS endpoints. All state is in-memory, and responses use AWS-compatible XML. ## Start ```bash # AWS only npx emulate --service aws # Default port (when run alone) # http://localhost:4000 ``` Or programmatically: ```typescript import { createEmulator } from 'emulate' const aws = await createEmulator({ service: 'aws', port: 4006 }) // aws.url === 'http://localhost:4006' ``` ## Auth Pass tokens as `Authorization: Bearer <token>`. Scoped permissions use `s3:*`, `sqs:*`, `iam:*`, `sts:*` patterns. ```bash curl http://localhost:4006/ \ -H "Authorization: Bearer test_token_admin" ``` ## Pointing Your App at the Emulator ### Environment Variable ```bash AWS_EMULATOR_URL=http://localhost:4006 ``` ### AWS SDK v3 ```typescript import { S3Client } from '@aws-sdk/client-s3' const s3 = new S3Client({ endpoint: process.env.AWS_EMULATOR_URL, region: 'us-east-1', credentials: { accessKeyId: 'AKIAIOSFODNN7EXAMPLE', secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY', }, forcePathStyle: true, }) ``` ```typescript import { SQSClient } from '@aws-sdk/client-sqs' const sqs = new SQSClient({ endpoint: `${process.env.AWS_EMULATOR_URL}/sqs`, region: 'us-east-1', credentials: { accessKeyId: 'AKIAIOSFODNN7EXAMPLE', secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY', }, }) ``` ```typescript import { IAMClient } from '@aws-sdk/client-iam' const iam = new IAMClient({ endpoint: `${process.env.AWS_EMULATOR_URL}/iam`, region: 'us-east-1', credentials: { accessKeyId: 'AKIAIOSFODNN7EXAMPLE', secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY', }, }) ``` ## Seed Config ```yaml aws: region: us-east-1 s3: buckets: - name: my-app-bucket - name: my-app-uploads region: eu-west-1 sqs: queues: - name: my-app-events - name: my-app-dlq visibility_timeout: 60 - name: my-app-orders.fifo fifo: true iam: users: - user_name: developer create_access_key: true - user_name: readonly-user roles: - role_name: lambda-execution-role description: Role for Lambda function execution assume_role_policy: '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"},"Action":"sts:AssumeRole"}]}' ``` Default seed (always created): S3 bucket `emulate-default`, SQS queue `emulate-default-queue`, IAM user `admin` with access key pair (`AKIAIOSFODNN7EXAMPLE` / `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`). ## API Endpoints ### S3 S3 routes use root paths matching the real AWS S3 wire format. Legacy `/s3/` prefixed paths are also supported. ```bash # List all buckets curl http://localhost:4006/ \ -H "Authorization: Bearer $TOKEN" # Create bucket curl -X PUT http://localhost:4006/my-bucket \ -H "Authorization: Bearer $TOKEN" # Delete bucket (must be empty) curl -X DELETE http://localhost:4006/my-bucket \ -H "Authorization: Bearer $TOKEN" # Head bucket (check existence, get region) curl -I http://localhost:4006/my-bucket \ -H "Authorization: Bearer $TOKEN" # List objects (with prefix, delimiter, pagination) curl "http://localhost:4006/my-bucket?prefix=uploads/&delimiter=/&max-keys=100" \ -H "Authorization: Bearer $TOKEN" # Put object