apple
Emulated Sign in with Apple / Apple OIDC for local development and testing. Use when the user needs to test Apple sign-in locally, emulate Apple OIDC…
Emulated AWS cloud services (S3, SQS, IAM, STS) for local development and testing. Use when the user needs to interact with AWS API endpoints locally, test S3 bucket and object operations, emulate SQS queues and messages, manage IAM users/roles/access keys, test STS assume role,
$ npx -y skills add vercel-labs/emulate --skill aws --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/awsContext preview
The summary Claude sees to decide when to auto-load this skill.
Emulated AWS cloud services (S3, SQS, IAM, STS) for local development and testing. Use when the user needs to interact with AWS API endpoints locally, test S3 bucket and object operations, emulate SQS queues and messages, manage IAM users/roles/access keys, test STS assume role,
name: aws description: Emulated AWS cloud services (S3, SQS, IAM, STS) for local development and testing. Use when the user needs to interact with AWS API endpoints locally, test S3 bucket and object operations, emulate SQS queues and messages, manage IAM users/roles/access keys, test STS assume role, or work without hitting real AWS APIs. Triggers include "AWS emulator", "emulate AWS", "mock S3", "local SQS", "test IAM", "emulate S3", "AWS locally", "STS assume role", or any task requiring local AWS service emulation. allowed-tools: Bash(npx emulate:*), Bash(curl:*)
S3, SQS, IAM, and STS emulation with AWS SDK-compatible S3 paths and query-style SQS/IAM/STS endpoints. S3 uploads and downloads preserve arbitrary binary payloads, including raw byte lengths and ETags. All state is in-memory, and responses use AWS-compatible XML.
# AWS only npx emulate --service aws # Default port (when run alone) # http://localhost:4000
Or programmatically:
import { createEmulator } from 'emulate'
const aws = await createEmulator({ service: 'aws', port: 4006 })
// aws.url === 'http://localhost:4006'Pass tokens as `Authorization: Bearer <token>`. Scoped permissions use `s3:*`, `sqs:*`, `iam:*`, `sts:*` patterns.
curl http://localhost:4006/ \ -H "Authorization: Bearer test_token_admin"
AWS_EMULATOR_URL=http://localhost:4006
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,
})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',
},
})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',
},
})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`).
S3 routes use root paths matching the real AWS S3 wire format. Legacy `/s3/` prefixed paths are also supported.
# 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 curl -X PUT http://localhost:4006/my-bucket/path/to/file.txt \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: text/plain" \ -H "x-amz-meta-author: test" \ --data-binary "file contents" # Get object curl http://localhost:4006/my-bucket/path/to/file.txt \ -H "Authorization: Bearer $TOKEN" # Head object (metadata only) curl -I http://localhost:4006/my-bucket/path/to/file.txt \ -H "Authorization: Bearer $TOKEN" # Delete object curl -X DELETE http://localhost:4006/my-bucket/path/to/file.txt \ -H "Authorization: Bearer $TOKEN" # Copy object curl -X PUT http://localhost:4006/dest-bucket/copy.txt \ -H "Authorization: Bearer $TOKEN" \ -H "x-amz-copy-source: /source-bucket/original.txt"
All SQS operations use `POST /sqs/` with `Action` as a form-urlencoded parameter.
# Create queue curl -X POST http://localhost:4006/sqs/ \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "Action=CreateQueue&QueueName=my-queue" # Create queue with attributes curl -X POST http://localhost:4006/sqs/ \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "Action=CreateQueue&QueueName=my-queue&Attribute.1.Name=VisibilityTimeout&Attribute.1.Value=30" # List queues curl -X POST http://localhost:4006/sqs/ \ -H "Authorization: Bearer $TOKEN" \ -d "Action=ListQueues" # List queues with prefix filter curl -X POST http://localhost:4006/sqs/ \ -H "Authorization: Bearer $TOKEN" \ -d "Action=ListQueues&QueueNamePrefix=my-" # Get queue URL curl -X POST http://localhost:4006/sqs/ \ -H "Authorization: Bearer $TOKEN" \ -d "Action=GetQueueUrl&QueueName=my-queue" # Get queue attributes curl -X POST http://localhost:4006/sqs/ \ -H "Authorization: Bearer $TOKEN" \ -d "Action=GetQueueAttributes&QueueUrl=<queue_url>" # Send message curl -X POST http://localhost:4006/
Local drop-in replacement services for CI and no-network sandboxes. Fully stateful, production-fidelity API emulation. Not mocks.
Repo: vercel-labs/emulate
Emulated Sign in with Apple / Apple OIDC for local development and testing. Use when the user needs to test Apple sign-in locally, emulate Apple OIDC…
Local drop-in API emulator for Vercel, GitHub, Google, Slack, Apple, Microsoft, AWS, Clerk, Linear, Twilio, and other developer APIs. Use when the user needs…
Emulated GitHub REST API for local development and testing. Use when the user needs to interact with GitHub API endpoints locally, test GitHub integrations,…
Emulated Google OAuth 2.0, OpenID Connect, Gmail, Calendar, and Drive for local development and testing. Use when the user needs to test Google sign-in…
Emulated Linear GraphQL API for local development and testing. Use when the user needs to test Linear integrations locally, emulate Linear issues, comments,…
Emulated Microsoft Entra ID (Azure AD) OAuth 2.0 / OpenID Connect for local development and testing. Use when the user needs to test Microsoft sign-in locally,…