The secret manager your AI agents can actually use.
Local-first · MCP-native · Zero cloud dependency
Quick Start • Screenshots • Why Achilles • AI Integration • Chrome Extension • API • Contributing
You're building with AI. Your stack looks like this:
Claude Code -> deploys to Vercel -> trains on HuggingFace -> calls OpenAI -> pushes to GitHub
Each platform needs a token. You have 20+ API keys scattered across .env files, sticky notes, and browser bookmarks. Every time your AI agent needs one, you stop what you're doing and paste it manually.
Some developers paste keys directly into prompts. That's a security incident waiting to happen.
Achilles Vault is an open-source, local-first secret manager purpose-built for AI-powered development workflows.
Store your secrets once. Your AI agents fetch them securely via MCP (Model Context Protocol) — no manual copy-paste, no plaintext in prompts, no cloud dependency.
# Before Achilles
You: "Deploy my app to Vercel"
Claude: "I need your VERCEL_TOKEN"
You: *opens browser, navigates to dashboard, copies token, pastes into chat*
# After Achilles
You: "Deploy my app to Vercel"
Claude: *calls achilles.get_secret("VERCEL_TOKEN") via MCP*
Done.
Your secrets never leave your machine. Not to Achilles servers. Not to anyone.
| All data stays on your machine. SQLite-only. Zero cloud calls, zero external dependencies. You own your data. | Built-in MCP server lets Claude Code, Claude Desktop, and any MCP-compatible agent retrieve secrets natively — no custom glue code. | AES-256-GCM with per-secret random salt and nonce. Master key derived via scrypt and never stored on disk. |
| Create a project and get 388 pre-configured secret keys across AWS, OpenAI, Stripe, GitHub, and 127 more platforms — properly categorized and ready to fill. | 30+ detection rules scan pages in real time. See a token on GitHub? One click to vault it — encrypted, tagged, and organized. | Immutable log of every vault operation. Know who accessed what, when, from where. Configurable severity levels. |
| Feature | Achilles Vault | Doppler | Infisical | 1Password |
|---|---|---|---|---|
| Open Source | MIT | No | MIT | No |
| Local-First | Yes | SaaS | Self-host | SaaS |
| AI / MCP Native | Yes | No | Partial | No |
| Chrome Secret Detection | Yes | No | No | No |
| Platform Presets (131) | Yes | No | No | No |
run Command (env injection) |
Yes | Yes | Yes | No |
| Zero Config | SQLite | SaaS | Postgres + Redis | SaaS |
| Cost | Free | Paid | Free tier | Paid |
- Python 3.11+
- Node.js 18+ (optional, for desktop app)
- Rust (optional, for desktop build)
git clone https://github.com/tao-shen/Achilles.git
cd Achilles
pip install -e .
achilles serve # API on :8900, MCP on :8901achilles register -U admin -P your-password
achilles login -U admin -P your-password
achilles create-project my-ai-project
achilles set <project-id> OPENAI_API_KEY sk-xxx --env production
achilles set <project-id> HF_TOKEN hf_xxx --env production
achilles set <project-id> GITHUB_TOKEN ghp_xxx --env production# Fetch secrets in any AI pipeline
import httpx
secrets = httpx.post(
"http://localhost:8900/api/v1/ai/secrets",
headers={"X-API-Key": "av_your_api_key"},
json={
"project": "my-ai-project",
"environment": "production",
"keys": ["OPENAI_API_KEY", "HF_TOKEN", "GITHUB_TOKEN"]
}
).json()["secrets"]# Or inject as environment variables
achilles run <project-id> --env production -- python train.py- Open
chrome://extensionsand enable Developer mode - Click Load unpacked and select the
chrome-extension/directory - Browse to GitHub, HuggingFace, or Vercel — Achilles auto-detects tokens and offers to vault them
cd frontend && npm install && npx tauri devOr download a pre-built binary from Releases.
Achilles runs a Model Context Protocol server on port 8901. Configure once — your AI agent discovers and retrieves secrets natively.
// Claude Desktop / Claude Code — mcp config
{
"mcpServers": {
"achilles": {
"url": "http://localhost:8901"
}
}
}Available MCP tools: get_secret, list_projects, list_secrets, and more — callable directly within the conversation.
Auto-generated schemas at /api/v1/ai/openai/functions — drop into any OpenAI-compatible agent with zero configuration.
achilles run my-project --env production -- python train.py
achilles run my-project --env staging -- docker-compose up
achilles run my-project --env production -- node server.js
# Or export to .env
achilles export my-project --env production > .envNo code changes. No secrets in source control. Works with any tool or script.
The Chrome extension scans pages for 30+ secret patterns in real time:
- A badge appears on the Achilles icon when a secret is detected
- Click Vault — the token is stored encrypted with full metadata
- Auto-fill it back into any supported platform's token field later
| Platform | Token Types |
|---|---|
| GitHub | PAT (classic, fine-grained), OAuth, App |
| HuggingFace | User Access Token |
| OpenAI | API Key, Project-scoped Key |
| Anthropic | API Key |
| AWS | Access Key ID + Secret Access Key |
| Stripe | Live, Test, Publishable |
| Vercel, Supabase, Slack | API Token, Service Key, Bot Token |
| Google, GitLab, Discord | API Key, PAT, Bot Token |
| Groq, Replicate, NPM, PyPI, Firebase | Various |
All rules live in chrome-extension/rules/rules.json — human-readable, editable, extensible.
| Feature | Description |
|---|---|
| AES-256-GCM Encryption | All secrets encrypted at rest with per-secret random salt and nonce |
| Project / Environment Hierarchy | Organize by project with development, staging, production environments |
| 6 Secret Categories | API Keys, Tokens, Passwords, Certificates, Env Variables, Identifiers |
| 131 Platform Presets | Pre-configured keys for AWS, GCP, Azure, OpenAI, Stripe, and 126 more |
| Secret Versioning | Full version history with one-click rollback |
| Audit Logging | Immutable record of every operation — who, what, when, with severity levels |
| JWT + API Key Auth | JWT for interactive sessions, API keys for agents and CI/CD |
| Soft Delete & Recovery | Deleted secrets go to trash — recoverable until permanently purged |
| Zero External Dependencies | SQLite only. No PostgreSQL, no Redis, no cloud services |
| Layer | Implementation |
|---|---|
| Encryption | AES-256-GCM with authenticated encryption |
| Key Derivation | scrypt (memory-hard KDF) |
| Salt & Nonce | Per-secret random values — no reuse |
| Master Key | Never stored on disk — derived at runtime |
| Authentication | JWT (configurable expiry) + scoped API keys |
| Rate Limiting | 5 registrations/min, 10 logins/min on auth endpoints |
| Audit Trail | Immutable, append-only log of every vault operation |
| Local-Only | All data stays on your machine. Zero cloud calls |
Base URL: http://localhost:8900
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/v1/auth/register |
Register new user |
POST |
/api/v1/auth/login |
Get JWT token |
POST |
/api/v1/auth/api-keys |
Create API key |
GET |
/api/v1/projects |
List projects |
POST |
/api/v1/projects |
Create project |
GET |
/api/v1/projects/{id}/environments/{env}/secrets |
List secrets (metadata) |
PUT |
/api/v1/projects/{id}/environments/{env}/secrets/{key} |
Create or update secret |
GET |
/api/v1/projects/{id}/environments/{env}/secrets/{key} |
Get decrypted value |
DELETE |
/api/v1/projects/{id}/environments/{env}/secrets/{key} |
Soft delete secret |
POST |
/api/v1/ai/secrets |
Batch fetch secrets (for AI agents) |
GET |
/api/v1/ai/mcp/tools |
List MCP tools |
POST |
/api/v1/ai/mcp/call |
Execute MCP tool call |
GET |
/api/v1/ai/openai/functions |
OpenAI function calling schemas |
achilles/
├── achilles/ # Python backend (FastAPI + Uvicorn)
│ ├── main.py # Server entry (API :8900, MCP :8901)
│ ├── crypto.py # AES-256-GCM encryption engine
│ ├── database.py # Async SQLite with connection pooling
│ ├── auth.py # JWT + API key authentication
│ ├── mcp_server.py # MCP protocol server
│ ├── platforms/ # 131 platform preset definitions
│ ├── routers/
│ │ ├── secrets_router.py # Secret CRUD operations
│ │ ├── projects_router.py # Project & environment management
│ │ ├── platforms_router.py # Platform preset catalog
│ │ ├── ai_router.py # MCP + OpenAI function calling
│ │ ├── auth_router.py # Registration & login
│ │ ├── audit_router.py # Audit log with severity filtering
│ │ └── trash_router.py # Soft delete & recovery
│ └── cli/
│ └── main.py # Typer CLI (serve, set, run, export)
│
├── frontend/ # React 19 + Vite + Tauri v2
│ ├── src/
│ │ ├── pages/ # Dashboard, Vault, Projects, Settings
│ │ ├── components/ # Layout, shadcn/ui component library
│ │ ├── store/ # Zustand state management
│ │ ├── lib/ # Shared constants & utilities
│ │ └── api/ # Type-safe API client
│ └── src-tauri/ # Tauri Rust backend & native config
│
└── chrome-extension/ # Manifest V3 Chrome Extension
├── rules/rules.json # 30+ secret detection rules
├── content/detector.js # Real-time page scanning
├── background/service-worker.js
└── popup/ # Extension popup UI
docker build -t achilles-vault .
docker run -p 8900:8900 \
-v achilles-data:/root/.achilles \
-e ACHILLES_MASTER_KEY=your-master-key \
achilles-vault| Variable | Default | Description |
|---|---|---|
ACHILLES_MASTER_KEY |
random | Master encryption key |
ACHILLES_JWT_SECRET |
random | JWT signing secret |
ACHILLES_HOST |
127.0.0.1 |
Server bind address |
ACHILLES_PORT |
8900 |
Server port |
- VS Code extension
- Firefox & Edge support
- Team sharing with encrypted key exchange
- Secret rotation policies & expiry alerts
-
achilles injectfor Dockerfile / docker-compose - RBAC with fine-grained permissions
- Biometric unlock (Touch ID / Windows Hello)
git clone https://github.com/tao-shen/Achilles.git
cd Achilles
# Backend
pip install -e ".[dev]"
pytest
# Frontend
cd frontend && npm install && npm run dev
# Lint
ruff check achilles/PRs are welcome. Please open an issue first for large changes.
MIT — free for personal and commercial use.




