🔐output-credentials-env-vars
- プラグイン
- outputai
- ソース
- GitHub で見る ↗
説明
`credential:` 規則を使用して、暗号化されたクレデンシャルを環境変数に紐付けます。 次のような場合に使用: LLMプロバイダーのAPIキー(`ANTHROPIC_API_KEY`、`OPENAI_API_KEY` など)を設定する場合や、暗号化されたクレデンシャルから取得すべき任意の環境変数を設定する場合。
原文を表示
Wire encrypted credentials to environment variables using the credential: convention. Use when setting up LLM provider keys (ANTHROPIC_API_KEY, OPENAI_API_KEY) or any env var that should come from encrypted credentials.
ユースケース
- ✓APIキーを環境変数に設定するとき
- ✓暗号化されたクレデンシャルを使用するとき
- ✓LLMプロバイダーの認証情報を管理するとき
本文(日本語訳)
環境変数としてのクレデンシャル
このスキルを使用するタイミング
次のような場合に使用:
- 暗号化されたクレデンシャルから
ANTHROPIC_API_KEYまたはOPENAI_API_KEYをセットアップする - 任意のクレデンシャルパスを
process.envの変数に自動的に紐付ける - プレーンテキストの
.envシークレットから暗号化クレデンシャルへ移行する - 環境変数が Worker 起動時に解決される理由を理解する
credential: 規則
値が credential: で始まる環境変数は、Worker 起動時に暗号化クレデンシャルから解決されます。フォーマットは以下の通りです:
ENV_VAR_NAME=credential:<dot.path>
.env の例
# これらは config/credentials.yml.enc から自動的に解決される
ANTHROPIC_API_KEY=credential:anthropic.api_key
OPENAI_API_KEY=credential:openai.api_key
# 任意のクレデンシャルパスが使用可能
MY_SERVICE_TOKEN=credential:my_service.token
DATABASE_URL=credential:postgres.url
暗号化クレデンシャル(config/credentials.yml.enc)
anthropic:
api_key: sk-ant-... # → ANTHROPIC_API_KEY に解決される
openai:
api_key: sk-... # → OPENAI_API_KEY に解決される
my_service:
token: tok_live_... # → MY_SERVICE_TOKEN に解決される
postgres:
url: postgres://... # → DATABASE_URL に解決される
動作の仕組み
- Worker が dotenv 経由で
.envを読み込む —ANTHROPIC_API_KEY="credential:anthropic.api_key" - Worker がすべての Workflow アクティビティファイルを読み込む(
@outputai/credentialsをインポート) - Worker が
runStartupHooks()を呼び出す —resolveCredentialRefs()が実行される resolveCredentialRefs()がprocess.envをスキャンしてcredential:プレフィックスの値を検索する- 一致した各変数が実際の復号化されたクレデンシャル値に置き換えられる
ANTHROPIC_API_KEYがprocess.env上で"sk-ant-..."になる- 最初の Workflow アクティビティが実行される際、LLM SDK が通常どおりこれを読み取る
クレデンシャル YAML の _env セクション
クレデンシャルファイルでは、_env セクションにマッピングを直接宣言することもできます。
新規プロジェクトはこの設定があらかじめ構成された状態でスキャフォールドされます:
anthropic:
api_key: sk-ant-...
openai:
api_key: sk-...
_env:
ANTHROPIC_API_KEY: anthropic.api_key
OPENAI_API_KEY: openai.api_key
注意:
_envセクションはメタデータ専用です。意図されたマッピングを文書化するものであり、解決処理を駆動するものではありません。解決処理は.env内のcredential:値によって駆動されます。両者を常に同期させておいてください。
優先順位のルール
実際の環境変数の値は常に優先されます。ANTHROPIC_API_KEY がすでに credential: 以外の値(シェルや CI シークレットなど)に設定されている場合、その値が 上書きされることはありません:
# 実際の値 — resolveCredentialRefs によって変更されない
ANTHROPIC_API_KEY=sk-ant-real-override
# プレースホルダー — 起動時に置き換えられる
ANTHROPIC_API_KEY=credential:anthropic.api_key
これにより、ファイルを変更することなく、デプロイ時に任意のクレデンシャル参照を上書きできます。
冪等性(Idempotency)
最初の解決が完了すると、ANTHROPIC_API_KEY には実際の API キーの文字列が格納され、credential: で始まる状態ではなくなります。
その後 resolveCredentialRefs() を再度呼び出しても、該当変数に対しては何も行われません(no-op)。
規則のセットアップ手順
ステップ 1: クレデンシャルを初期化する(未実施の場合)
npx output credentials init
npx output credentials edit # anthropic.api_key、openai.api_key を追加
ステップ 2: .env を更新する
# プレーンテキストのシークレットをクレデンシャル参照に置き換える
ANTHROPIC_API_KEY=credential:anthropic.api_key
OPENAI_API_KEY=credential:openai.api_key
ステップ 3: 動作確認する
Worker を起動し、以下のログ行が出力されることを確認してください:
Startup hooks resolved env vars {"vars":["ANTHROPIC_API_KEY","OPENAI_API_KEY"]}
このログ行が表示されれば、クレデンシャルは正しく紐付けられています。
プログラムからのアクセス
Worker コンテキスト外で resolveCredentialRefs() を呼び出す必要がある場合:
import { resolveCredentialRefs } from '@outputai/credentials';
// 解決された環境変数名の配列を返す
const resolved = resolveCredentialRefs();
console.log('Resolved:', resolved);
// → ["ANTHROPIC_API_KEY", "OPENAI_API_KEY"]
確認チェックリスト
- [ ]
config/credentials.yml.encに対象のクレデンシャルパスが含まれている - [ ]
.envで関連する環境変数にcredential:<path>形式の値が使用されている - [ ] Worker 起動ログに
Startup hooks resolved env varsが表示される - [ ] 最初の LLM Workflow の実行が成功する(
ANTHROPIC_API_KEYが正しく設定されていることを確認) - [ ] シェルで実際の環境変数を設定するとクレデンシャル参照が上書きされる
関連スキル
output-credentials-init— 暗号化クレデンシャルファイルを作成するoutput-credentials-edit— クレデンシャルの値を追加・更新するoutput-dev-credentials— クレデンシャルシステムの完全なリファレンス
原文(English)を表示
Credentials as Environment Variables
When to Use This Skill
- Setting up
ANTHROPIC_API_KEYorOPENAI_API_KEYfrom encrypted credentials - Wiring any credential path to a
process.envvariable automatically - Migrating from plaintext
.envsecrets to encrypted credentials - Understanding why an env var is being resolved at worker startup
The credential: Convention
Any env var whose value starts with credential: is resolved from encrypted credentials at worker startup. The format is:
ENV_VAR_NAME=credential:<dot.path>
Example .env
# These are resolved automatically from config/credentials.yml.enc
ANTHROPIC_API_KEY=credential:anthropic.api_key
OPENAI_API_KEY=credential:openai.api_key
# Any credential path works
MY_SERVICE_TOKEN=credential:my_service.token
DATABASE_URL=credential:postgres.url
Encrypted credentials (config/credentials.yml.enc)
anthropic:
api_key: sk-ant-... # → resolves ANTHROPIC_API_KEY
openai:
api_key: sk-... # → resolves OPENAI_API_KEY
my_service:
token: tok_live_... # → resolves MY_SERVICE_TOKEN
postgres:
url: postgres://... # → resolves DATABASE_URL
How It Works
- Worker loads
.envvia dotenv —ANTHROPIC_API_KEY="credential:anthropic.api_key" - Worker loads all workflow activity files (importing
@outputai/credentials) - Worker calls
runStartupHooks()—resolveCredentialRefs()runs resolveCredentialRefs()scansprocess.envforcredential:prefix values- Each matching var is replaced with the actual decrypted credential value
ANTHROPIC_API_KEYis now"sk-ant-..."inprocess.env- LLM SDK reads it normally when the first workflow activity runs
The _env Section in Credentials YAML
The credentials file can also declare the mapping directly in an _env section. New projects scaffold with this pre-configured:
anthropic:
api_key: sk-ant-...
openai:
api_key: sk-...
_env:
ANTHROPIC_API_KEY: anthropic.api_key
OPENAI_API_KEY: openai.api_key
Note: The
_envsection is metadata only — it documents the intended mapping but does not drive resolution. Resolution is driven by thecredential:values in.env. Keep both in sync.
Precedence Rules
Real env var values always take precedence. If ANTHROPIC_API_KEY is already set to a non-credential: value (e.g. from the shell or a CI secret), it is never overwritten:
# Real value — never touched by resolveCredentialRefs
ANTHROPIC_API_KEY=sk-ant-real-override
# Placeholder — gets replaced at startup
ANTHROPIC_API_KEY=credential:anthropic.api_key
This means you can override any credential ref at deploy time without changing files.
Idempotency
After the first resolution, ANTHROPIC_API_KEY contains the real API key string — it no longer starts with credential:. Subsequent calls to resolveCredentialRefs() are no-ops for that variable.
Setting Up the Convention
Step 1: Initialize credentials (if not done)
npx output credentials init
npx output credentials edit # Add anthropic.api_key, openai.api_key
Step 2: Update .env
# Replace plaintext secrets with credential references
ANTHROPIC_API_KEY=credential:anthropic.api_key
OPENAI_API_KEY=credential:openai.api_key
Step 3: Verify
Start the worker and look for the log line:
Startup hooks resolved env vars {"vars":["ANTHROPIC_API_KEY","OPENAI_API_KEY"]}
If the log line appears, credentials are wired correctly.
Programmatic Access
If you need to call resolveCredentialRefs() outside of a worker context:
import { resolveCredentialRefs } from '@outputai/credentials';
// Returns array of env var names that were resolved
const resolved = resolveCredentialRefs();
console.log('Resolved:', resolved);
// → ["ANTHROPIC_API_KEY", "OPENAI_API_KEY"]
Verification Checklist
- [ ]
config/credentials.yml.enccontains the target credential paths - [ ]
.envusescredential:<path>values for the relevant env vars - [ ] Worker startup log shows
Startup hooks resolved env vars - [ ] First LLM workflow run succeeds (confirming
ANTHROPIC_API_KEYis set correctly) - [ ] Setting a real env var in the shell overrides the credential ref
Related Skills
output-credentials-init— Create the encrypted credentials fileoutput-credentials-edit— Add/update credential valuesoutput-dev-credentials— Full credentials system reference
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。