packages/cli/skills/pikku-aws/SKILL.md
Use when setting up AWS services (S3, SQS, Secrets Manager) in a Pikku app. Covers S3Content for file storage, SQSQueueService for queues, and AWSSecrets for secret management. TRIGGER when: code uses S3Content, SQSQueueService, AWSSecrets, or user asks about AWS integration, S3 uploads, SQS queues, or AWS Secrets Manager with Pikku. DO NOT TRIGGER when: user asks about AWS Lambda runtime (use pikku-deploy-lambda).
npx skillsauth add pikkujs/pikku pikku-awsInstall 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.
Use this skill as an execution checklist, not reference material.
pikku-meta when available; otherwise run the relevant pikku meta ... --json command and inspect only the focused output you need..pikku, node_modules, vendored packages, or broad build artifacts.pikku-verify or pikku all when functions, wirings, schemas, or generated clients may have changed.@pikku/aws-services provides AWS-backed implementations of Pikku's content, queue, and secret service interfaces.
yarn add @pikku/aws-services
S3Content (File Storage)import { S3Content } from '@pikku/aws-services'
const content = new S3Content(
config: S3ContentConfig,
logger: Logger,
signConfig: { keyPairId: string; privateKey: string }
)
Methods:
signURL(url: string, dateLessThan: Date, dateGreaterThan?: Date): Promise<string> — Sign a CloudFront URLsignContentKey(key: string, dateLessThan: Date, dateGreaterThan?: Date): Promise<string> — Sign a content keygetUploadURL(Key: string, ContentType: string): Promise<{ uploadUrl, assetKey }> — Get presigned upload URLreadFile(Key: string): Promise<ReadableStream> — Read file as streamreadFileAsBuffer(Key: string): Promise<Buffer> — Read file as bufferwriteFile(Key: string, stream: ReadableStream): Promise<boolean> — Write file from streamcopyFile(Key: string, fromAbsolutePath: string): Promise<boolean> — Copy local file to S3deleteFile(Key: string): Promise<boolean> — Delete fileSQSQueueService (Queue)import { SQSQueueService } from '@pikku/aws-services'
const queue = new SQSQueueService(config: SQSQueueServiceConfig)
Implements QueueService. Note: supportsResults = false — job status tracking is not supported.
Methods:
add<T>(queueName: string, data: T, options?: JobOptions): Promise<string> — Enqueue a messageAWSSecrets (Secrets Manager)import { AWSSecrets } from '@pikku/aws-services'
const secrets = new AWSSecrets(config: AWSConfig)
Methods:
getSecret<R>(SecretId: string): Promise<R> — Get a secret valuegetSecretJSON<R>(SecretId: string): Promise<R> — Get and parse a JSON secrethasSecret(SecretId: string): Promise<boolean> — Check if secret existsconst createSingletonServices = pikkuServices(async (config) => {
const logger = new PinoLogger()
const content = new S3Content(
{ bucket: config.s3Bucket, region: config.awsRegion },
logger,
{ keyPairId: config.cfKeyPairId, privateKey: config.cfPrivateKey }
)
return { config, logger, content }
})
const createSingletonServices = pikkuServices(async (config) => {
const queue = new SQSQueueService({
region: config.awsRegion,
queueUrlPrefix: config.sqsUrlPrefix,
})
return { config, queue }
})
documentation
Deprecated — use pikku-middleware instead. Tag middleware (addTagMiddleware) is now documented as a section within the pikku-middleware skill, alongside global HTTP middleware, execution order, and the service-to-service bearer auth pattern.
testing
Use when adding authorization checks to Pikku functions or routes — pikkuPermission, pikkuAuth, per-function permissions, pattern-based permissions, or understanding OR/AND permission logic. TRIGGER when: user wants to restrict who can call a function, check resource ownership, add role-based access, or understand where permission checks belong. DO NOT TRIGGER when: user asks about middleware or request interception (use pikku-middleware), authentication strategies (use pikku-security), or session management.
testing
Use when adding any middleware to a Pikku app — global HTTP middleware, tag-scoped middleware (including service-to-service bearer auth), per-route middleware, session-setting middleware, or understanding middleware execution order and priority. TRIGGER when: user wants middleware on some or all routes, machine-to-machine auth, tag-scoped cross-cutting concerns, global interceptors, or middleware priority/order questions. DO NOT TRIGGER when: user asks about permissions/authorization checks (use pikku-permissions), auth strategies like authBearer/authCookie (use pikku-security), or deployment.
documentation
Standard cleanup to run right after a Pikku template is cloned or scaffolded into a new project. TRIGGER when: a Pikku template was just cloned/scaffolded (via `pikku create`, `git clone <template>`, or the user says "I cloned the kanban template / starter / template"), or the working tree still looks like an untouched template (template README, placeholder `@project/*` name in package.json). DO NOT TRIGGER when: working in an established project mid-feature, or editing the template repo itself.