Skip to main content
skill CX Codex

encore-secret — Claude Code skill: what it does, how to install

This skill manages API keys and other private values in Encore.ts. It helps agents declare, read, and set secrets for separate environments.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add encoredev/skills --skill encore-secret -a claude-code
npx skills add encoredev/skills --skill secret -a claude-code
Open on GitHub

What encore-secret does

The skill uses secret(...) from encore.dev/config. It places a declaration at package scope, then reads the value by calling the returned function. The pattern fits Stripe keys, GitHub tokens, webhook signatures, database passwords, and other credentials. Secret names resolve to one shared value across the application.

Values can be assigned with encore secret set for prod, dev, preview, or local. For local work, a .secrets.local.cue file at the repository root can provide overrides; keep that file in .gitignore so its contents stay out of the repository.

Declaring secret(...) inside a function breaks the skill’s rule. The value must be read as stripeKey(), not as the variable itself.

What it helps with

  • declare an API key in Encore.ts
  • read a credential inside a handler
  • assign separate values by environment
  • add local overrides with .secrets.local.cue
  • pass a secret to a third-party SDK

Example prompts for the agent

  • Set up the Stripe credential in Encore.ts and show how the handler should read it.
  • Configure OpenAIKey for dev with encore secret set, then pass it to the SDK.
  • Create a local GitHubAPIToken override in .secrets.local.cue and show the required Git ignore entry.

How to install encore-secret

1Skills CLI (Vercel)

npx skills add encoredev/skills --skill encore-secret -a claude-code
npx skills add encoredev/skills --skill secret -a claude-code

2Manually: put the files in place

~/.claude/skills/secret/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/secret/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about encore-secret

How do I install encore-secret in Claude Code?

Run these steps in order: npx skills add encoredev/skills --skill encore-secret -a claude-code, then npx skills add encoredev/skills --skill secret -a claude-code. The skill file is at ~/.claude/skills/secret/SKILL.md.

What does encore-secret do?

It guides Encore.ts secret declarations, function-based reads, environment-specific values through encore secret set, and local overrides stored in .secrets.local.cue.

How should I provide secrets during local development?

Put local values in .secrets.local.cue at the repository root and add that file to .gitignore. Use encore secret set for the other environment types.

Source text

SKILL.md · Apache-2.0
---
name: encore-secret
description: Manage API keys, credentials, and other secrets in Encore.ts using `secret(...)` from `encore.dev/config`.
when_to_use: >-
  User wants to load a private credential into the service without committing it to the repo — third-party API keys (Stripe, OpenAI, Twilio, SendGrid), database passwords, signing keys, OAuth client secrets, JWT signing keys, webhook signing secrets. Covers `secret()` declarations, calling the secret as a function to read its value, setting values via `encore secret set`, and `.secrets.local.cue` for local overrides. Trigger phrases: "API key", "third-party token", "credentials", "without committing", "private key", "signing secret", "secret manager", ".env replacement", "encore secret set".
---

# Encore Secrets

## Instructions

Secrets are encrypted, environment-scoped values managed by Encore. Declare them at package level by calling `secret(name)` and read them by calling the returned function.

```typescript
import { secret } from "encore.dev/config";

// Package-level declaration
const stripeKey = secret("StripeSecretKey");

// Read inside a handler
async function chargeCustomer() {
  const key = stripeKey();        // <-- function call returns the value
  const stripe = new Stripe(key);
  // ...
}
```

Secret names are globally unique across the application (the same name resolves to the same value everywhere).

## Setting values

```bash
# Set per environment type
encore secret set --type prod StripeSecretKey
encore secret set --type dev StripeSecretKey
encore secret set --type local StripeSecretKey
```

Environment types: `production` (alias `prod`), `development` (alias `dev`), `preview` (alias `pr`), `local`.

## Local overrides

For local development without going through `encore secret set`, create a `.secrets.local.cue` file at the repo root (gitignore it):

```cue
StripeSecretKey: "sk_test_local_..."
GitHubAPIToken:  "ghp_local_..."
```

## Common usage patterns

```typescript
// HTTP headers
const githubToken = secret("GitHubAPIToken");
const resp = await fetch("https://api.github.com/user", {
  headers: { Authorization: `token ${githubToken()}` },
});

// Webhook signature verification
const stripeWebhookSecret = secret("StripeWebhookSecret");
stripe.webhooks.constructEvent(rawBody, sig, stripeWebhookSecret());

// Connecting to a third-party SDK
const openaiKey = secret("OpenAIKey");
const openai = new OpenAI({ apiKey: openaiKey() });
```

## Guidelines

- Always declare `secret(...)` at package level, never inside functions.
- Read with a function call: `stripeKey()` not `stripeKey`.
- Set distinct values per environment via `encore secret set --type <env>`.
- Never commit secret values; use `.secrets.local.cue` for local overrides and gitignore it.
- For webhook signature secrets specifically, see also the `encore-webhook` skill.

© encoredev · Apache-2.0 · encoredev/skills

Similar skills

All skills for Security →

From the same set25

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor