vault-secrets

Seal, read, and rotate credentials through a single owner-bound envelope encryption vault.

49|11|Updated Jul 31, 2026
One-click install
npx skills add https://github.com/vstorm-co/agenticos --skill vault-secrets-vstorm-co
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: vault-secrets
Source: https://github.com/vstorm-co/agenticos/tree/main/.claude/skills/vault-secrets
Command: npx skills add https://github.com/vstorm-co/agenticos --skill vault-secrets-vstorm-co

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Credentials scattered across multiple encryption mechanisms can leak into logs, API responses, or cross-tenant rows. This Skill enforces one vault mechanism where every secret is cryptographically bound to its owning organization or member, so copied ciphertexts fail to unwrap. ## Core Features & Use Cases - Envelope encryption with owner binding: Each secret is sealed with its own data key, which is sealed by a key derived from the master key and the owner's scope, making tenant isolation cryptographic rather than a WHERE clause. - Typed secret kinds: Supports api_key, azure_openai, aws_credentials, gcp_service_account, and none, with validation on input so malformed credentials fail at save time instead of hours later. - Leak prevention invariants: No API response, log line, audit entry, or exported spec ever carries a plaintext secret; tests/api/test_no_secret_escapes.py pins these guarantees. - Use Case: When adding a new provider credential type, follow the Skill to add a model in secret_kinds.py, a branch in model_resolver._build_provider, a Builder form field, and a migration only if the stored shape changes. ## Quick Start Use the vault-secrets skill to add a new secret kind for a third-party service key and wire it through the provider resolver.

Frequently Asked Questions about vault-secrets

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I store a provider API key securely in AgenticOS?▼

Seal the key through app/core/vault.py, which encrypts it with a random data key bound to the owning organization or member scope. There is no second encryption mechanism, and the vault refuses to seal empty values.

How do I add a new secret kind to the vault?▼

Add a new model in app/core/secret_kinds.py, a branch in model_resolver._build_provider if a provider needs it, a Builder form field, and a migration only if the stored shape changes. Validate input on the way in.

Can a ciphertext be copied between organizations?▼

No. Each data key is sealed with a key derived from the master key and the owner's scope, so a row copied from one organization to another fails to unwrap. Tenant isolation is cryptographic, not query-based.

Why does a run refuse instead of degrade when a secret is deleted after publish?▼

A capability whose job is calling an authenticated API cannot do half of it without its credential. A run that quietly dropped the call would answer as if the API had said no, so the run refuses outright.

How are plaintext secrets kept out of logs and API responses?▼

Every secret-bearing field is a SecretStr, so carrying dataclasses mask themselves in reprs, and no endpoint returns plaintext. The test suite tests/api/test_no_secret_escapes.py pins these invariants.