SecretCarousel

The secret vault your coding agents run themselves โ store, rotate, and hand off credentials from any agent, so they stop passing keys in plain text.
git for your code. sc for your agents' secrets.
Your agent touches credentials all day โ a database URL here, an API key there โ and the moment its context resets, those secrets end up pasted into a .env file in Slack, echoed into a log, or left in the transcript. You become the vault. SecretCarousel is the vault the agent runs itself: one command, and it stores secrets encrypted, rotates them on a schedule, and โ the part nothing else does โ hands a secret to another agent through a one-time, scoped, expiring claim token, even across companies. No plain-text value ever crosses the boundary.
Works with: Claude Code ยท Cursor ยท Cline ยท Windsurf ยท Aider ยท Codex ยท any MCP client
Install
npm install -g secretcarousel
The npm package is secretcarousel; the command is sc.
Or self-provision a vault in one command โ no email, no card:
npx secretcarousel signup my-project --local
Quick Start
sc signup my-project --local
sc secret "DATABASE_URL" "postgres://user:pass@host/db" -t database-credentials
sc secret show sec-abc123
sc secrets
sc search stripe
sc rotate sec-abc123
sc --help
Claim tokens โ how agents hand off secrets
This is the part nothing else does. One agent mints a one-time, scoped, expiring token; another agent โ different project, even different company โ redeems it exactly once; the token burns; the whole exchange is audit-logged. The plain-text value never crosses the boundary as a copy-pasteable string.
sc claim "<the-secret-value>" --to partner-tenant --contract CTR-ID
sc claim redeem CLM-TOKEN
sc claims
No more DMing a key and hoping the other side deletes it. The token is single-use, time-boxed, and revocable, and every mint/redeem lands in the audit trail.
Zero-knowledge mode โ even we can't read it
By default, secrets are encrypted at rest with AES-256-GCM. Flip on zero-knowledge mode and encryption happens on your machine, before the value ever reaches the server โ SecretCarousel stores only ciphertext and never holds the key to unlock it. A database breach leaks gibberish.
sc secret "SIGNING_KEY" "$(cat key.pem)" --e2e
sc secret show sec-def456
Multiple agents can share one zero-knowledge vault via an enrollment handshake โ the vault key is passed device-to-device, never to the server:
sc enroll init
sc enroll create --minutes 15
sc enroll redeem <token>
sc enroll status
Rotation โ set it and forget it
sc rotate sec-abc123
sc rotate set sec-abc123 --schedule "30d" --email ops@myproject.dev
Sharing โ time- and view-limited links for humans
sc share sec-abc123 --hours 1
sc shares
Environments โ .env in, .env out
sc env pull --env production > .env
sc env promote --from staging --to production
MCP Server
Prefer tools over a CLI? sc ships an MCP server. Point Claude Code (or any MCP client) at it and your agent gets the full toolset โ store, retrieve, list, search, rotate, share, and the claim-token handoff โ with structured JSON responses.
claude mcp add secretcarousel -- sc mcp-serve
For clients that use a JSON config (Cline, Cursor, Windsurf), pass your API key via the SC_API_KEY environment variable. The MCP server runs outside your project directory, so it will not pick up .sc/config.json:
{
"mcpServers": {
"secretcarousel": {
"command": "sc",
"args": ["mcp-serve"],
"env": { "SC_API_KEY": "sc_your_key_here" }
}
}
}
No key yet? Start it without one โ the server boots in onboarding mode with an sc_signup tool that provisions a vault instantly (48-hour activation window; the emailed $0 card check starts the 7-day free trial), then the full toolset unlocks in place.
Remote MCP โ zero install
No CLI at all? Claude Web, Claude Desktop, Raycast, or any hosted MCP client can connect straight to our remote server. Same toolset, same API key, nothing to install:
URL: https://mcp.secretcarousel.com/sse
Auth: Authorization: Bearer sc_YOUR_API_KEY
Connect without the header and it starts in onboarding mode โ call sc_signup to self-provision a vault mid-session (48-hour activation window, 7-day free trial via emailed $0 card check). Setup guide: Remote MCP quickstart.
Audit trail โ provable, exportable
Every store, retrieve, rotate, share, mint, and redeem lands in an immutable event log. Read it from the terminal or export it for compliance.
sc audit --limit 50
sc audit export --format csv > audit.csv
Features
- Secrets โ store, retrieve, update, delete; AES-256-GCM at rest; typed (database-credentials, api-key, certificate, and more)
- Zero-knowledge mode โ client-side encryption; the server only ever sees ciphertext, multi-device vaults via an enrollment handshake
- Claim tokens โ hand a secret to another agent/tenant via a one-time, scoped, expiring, audited token
- Rotation โ rotate now or on a schedule, with email alerts
- Sharing โ time- and view-limited links for humans
- Environments โ export as
.env, promote secrets between environments
- Scoped API keys โ read/write/admin per key, project-scoped
- MCP server โ local (
sc mcp-serve) or fully remote (mcp.secretcarousel.com): Claude Code, Claude Web, Cursor, Raycast, any MCP client
- Audit trail โ immutable event log, exportable as CSV or JSON
- Agent self-signup โ an agent provisions its own vault mid-session, no human in the loop
Pricing: 7-day free trial. Card required (secure Stripe checkout), nothing charged during the trial โ cancel before it ends and you pay nothing. After that, from $9/mo: Starter $9 ยท Pro $29 ยท Scale $99, each with included secrets plus low overage. Unlimited agents on every plan, no per-seat pricing. Details.
Per-Project Config
sc login --local --key YOUR_KEY
sc me
Config is per-project and auto-loaded from .sc/config.json. Add .sc/ to your .gitignore.
Agent Integration
Add to your CLAUDE.md, .cursorrules, .clinerules, .windsurfrules, or AGENTS.md:
## SecretCarousel
This project uses SecretCarousel as its secret vault.
Use the `sc` CLI. Config is in .sc/config.json (auto-loaded).
If not configured: sc login --local --key YOUR_KEY
Never paste a secret value into code, logs, or chat โ store it with
`sc secret "NAME" "VALUE"` and retrieve by id at the moment of use.
To hand a secret to another agent, mint a claim token โ never send the raw value.
Why this exists
Every coding agent handles credentials, and every one of them eventually leaks one โ into a .env committed by mistake, a log line, a Slack paste, a transcript that outlives the session. I wanted the agent to own its secrets the way it owns its code: a vault it runs itself, where the value is fetched only at the moment of use and handed off without ever becoming a copy-pasteable string. It's early and iterating fast โ if something's rough or missing, open an issue.
Documentation
License
Proprietary โ Tyga.Cloud Ltd. See LICENSE.