Install any skill in seconds. Free to start, no credit card required.
Get Started Free →View and edit encrypted credentials in an Output.ai project. Use when adding secrets, updating API keys, verifying credential values, or retrieving a specific credential.
.claude/skills/growthxai-output-credentials-edit/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | -41% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -39% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -34% | 0% |
| case-01 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -55% | 0% |
$EDITOR)bash# Edit global credentials npx output credentials edit # Edit environment-specific npx output credentials edit -e production npx output credentials edit -e staging # Edit per-workflow credentials npx output credentials edit -w my_workflow
The file is decrypted to a temp file, opened in $EDITOR, then re-encrypted on save. The temp file is securely wiped (overwritten with null bytes) after closing.
bash# Show global credentials (plaintext — use carefully) npx output credentials show # Show environment-specific npx output credentials show -e production # Show per-workflow npx output credentials show -w my_workflow
bash# Get a single credential by dot-notation path npx output credentials get anthropic.api_key npx output credentials get aws.region npx output credentials get stripe.secret_key -w payment_processing
Returns the raw string value (or JSON for nested objects).
Credentials are stored as structured YAML with dot-notation access:
yamlanthropic: api_key: sk-ant-... openai: api_key: sk-... aws: region: us-east-1 access_key_id: AKIA... secret_access_key: ... stripe: secret_key: sk_live_... webhook_secret: whsec_... _env: ANTHROPIC_API_KEY: anthropic.api_key OPENAI_API_KEY: openai.api_key
The _env section maps credential paths to environment variables. See output-credentials-env-vars.
typescriptimport { credentials } from '@outputai/credentials'; // Safe read — returns undefined if not found const region = credentials.get('aws.region'); // Read with default const region = credentials.get('aws.region', 'us-east-1'); // Strict read — throws MissingCredentialError if not found const apiKey = credentials.require('anthropic.api_key');
Per-workflow credentials deep-merge over global credentials at runtime. Workflow values take precedence:
yaml# Global: anthropic.api_key = "sk-ant-global" # Workflow: anthropic.api_key = "sk-ant-workflow" # Runtime result: credentials.get('anthropic.api_key') → "sk-ant-workflow"
| Error | Cause | Fix | |-------|-------|-----| | MissingKeyError | Key file not found and env var not set | Run output credentials init or set OUTPUT_CREDENTIALS_KEY | | MissingCredentialError | Path not found in credentials | Run npx output credentials edit and add the value | | aes/gcm: invalid ghash tag | Key doesn't match encrypted file | Key and .yml.enc are out of sync — re-init or use correct key |
npx output credentials show prints expected valuesnpx output credentials get anthropic.api_key returns the correct keyoutput-credentials-init — Create credentials files for the first timeoutput-credentials-env-vars — Automatically wire credentials to env varsoutput-dev-credentials — Full credentials system reference| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | fail→fail | 11,591 | 5,837 | -50% | 1 | 1 | 0% | 2,046 | 1,845 | -10% | 0 | 0 | — |
case-05 | fail→pass | 12,327 | 2,246 | -82% | 1 | 1 | 0% | 2,024 | 1,192 | -41% | 0 | 0 | — |
case-06 | fail→pass | 12,263 | 2,035 | -83% | 1 | 1 | 0% | 1,911 | 1,170 | -39% | 0 | 0 | — |
case-11 | fail→pass | 11,514 | 2,373 | -79% | 1 | 1 | 0% | 1,781 | 1,178 | -34% | 0 | 0 | — |
case-01 | fail→pass | 8,716 | 1,878 | -78% | 1 | 1 | 0% | 1,389 | 1,131 | -19% | 0 | 0 | — |
case-02 | fail→pass | 16,307 | 2,038 | -88% | 1 | 1 | 0% | 2,584 | 1,173 | -55% | 0 | 0 | — |
case-03 | fail→pass | 11,436 | 4,605 | -60% | 1 | 1 | 0% | 1,972 | 1,684 | -15% | 0 | 0 | — |
case-04 | fail→pass | 9,672 | 3,021 | -69% | 1 | 1 | 0% | 1,580 | 1,357 | -14% | 0 | 0 | — |
case-07 | fail→pass | 6,917 | 1,746 | -75% | 1 | 1 | 0% | 1,019 | 1,101 | +8% | 0 | 0 | — |
case-08 | fail→pass | 6,747 | 1,810 | -73% | 1 | 1 | 0% | 989 | 1,107 | +12% | 0 | 0 | — |
case-09 | fail→pass | 9,896 | 1,631 | -84% | 1 | 1 | 0% | 1,377 | 1,087 | -21% | 0 | 0 | — |
case-10 | fail→pass | 7,851 | 1,997 | -75% | 1 | 1 | 0% | 1,225 | 1,138 | -7% | 0 | 0 | — |
case-12 | fail→pass | 8,887 | 2,519 | -72% | 1 | 1 | 0% | 1,716 | 1,305 | -24% | 0 | 0 | — |
case-13 | pass→pass | 3,468 | 2,761 | -20% | 1 | 1 | 0% | 491 | 1,268 | +158% | 0 | 0 | — |
case-14 | pass→pass | 8,203 | 2,271 | -72% | 1 | 1 | 0% | 1,219 | 1,212 | -1% | 0 | 0 | — |
case-15 | fail→pass | 9,105 | 2,232 | -75% | 1 | 1 | 0% | 1,425 | 1,181 | -17% | 0 | 0 | — |
case-16 | fail→pass | 10,404 | 3,180 | -69% | 1 | 1 | 0% | 1,719 | 1,387 | -19% | 0 | 0 | — |
case-21 | pass→pass | 8,313 | 7,306 | -12% | 1 | 1 | 0% | 1,456 | 2,166 | +49% | 0 | 0 | — |
case-17 | fail→pass | 7,661 | 3,349 | -56% | 1 | 1 | 0% | 1,281 | 1,478 | +15% | 0 | 0 | — |
case-18 | pass→pass | 15,119 | 6,028 | -60% | 1 | 1 | 0% | 2,421 | 1,813 | -25% | 0 | 0 | — |
case-19 | pass→pass | 16,099 | 3,312 | -79% | 1 | 1 | 0% | 2,394 | 1,293 | -46% | 0 | 0 | — |
case-20 | fail→pass | 9,484 | 3,086 | -67% | 1 | 1 | 0% | 1,527 | 1,308 | -14% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +73 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.