secretless-ai 0.11.4 → 0.11.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +296 -307
- package/dist/backends/config.d.ts +1 -1
- package/dist/backends/config.d.ts.map +1 -1
- package/dist/backends/config.js +2 -2
- package/dist/backends/config.js.map +1 -1
- package/dist/backends/factory.d.ts +1 -1
- package/dist/backends/factory.d.ts.map +1 -1
- package/dist/backends/factory.js +15 -1
- package/dist/backends/factory.js.map +1 -1
- package/dist/backends/gcp-sm.d.ts +94 -0
- package/dist/backends/gcp-sm.d.ts.map +1 -0
- package/dist/backends/gcp-sm.js +509 -0
- package/dist/backends/gcp-sm.js.map +1 -0
- package/dist/backends/index.d.ts +1 -0
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +4 -1
- package/dist/backends/index.js.map +1 -1
- package/dist/backends/local.d.ts.map +1 -1
- package/dist/backends/local.js +12 -4
- package/dist/backends/local.js.map +1 -1
- package/dist/backends/types.d.ts +1 -1
- package/dist/backends/types.d.ts.map +1 -1
- package/dist/cli.js +37 -8
- package/dist/cli.js.map +1 -1
- package/dist/init.js +74 -4
- package/dist/init.js.map +1 -1
- package/dist/mcp/discover.d.ts +1 -1
- package/dist/mcp/discover.d.ts.map +1 -1
- package/dist/mcp/discover.js +7 -0
- package/dist/mcp/discover.js.map +1 -1
- package/dist/mcp-wrapper.js +2 -2
- package/dist/mcp-wrapper.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +7 -0
- package/dist/run.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,114 +1,128 @@
|
|
|
1
|
-
> **[OpenA2A](https://github.com/opena2a-org)**: [CLI](https://github.com/opena2a-org/opena2a) · [HackMyAgent](https://github.com/opena2a-org/hackmyagent) · [AIM](https://github.com/opena2a-org/agent-identity-management) · [Browser Guard](https://github.com/opena2a-org/AI-BrowserGuard) · [DVAA](https://github.com/opena2a-org/damn-vulnerable-ai-agent) ·
|
|
1
|
+
> **[OpenA2A](https://github.com/opena2a-org/opena2a)**: [CLI](https://github.com/opena2a-org/opena2a) · [HackMyAgent](https://github.com/opena2a-org/hackmyagent) · **Secretless AI** · [AIM](https://github.com/opena2a-org/agent-identity-management) · [Browser Guard](https://github.com/opena2a-org/AI-BrowserGuard) · [DVAA](https://github.com/opena2a-org/damn-vulnerable-ai-agent) · Registry (coming soon)
|
|
2
2
|
|
|
3
3
|
# Secretless AI
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/secretless-ai)
|
|
6
6
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
7
|
+
[](https://github.com/opena2a-org/secretless-ai)
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
AI coding tools can read `~/.aws/credentials`, `echo $OPENAI_API_KEY`, and access any secret on your machine. Secretless makes secrets invisible to AI context without changing your workflow.
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
Works with Claude Code, Cursor, Copilot, Windsurf, Cline, and Aider.
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
npx secretless-ai init
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
<p align="center">
|
|
17
|
-
<img src="docs/secretless-ai-demo.gif" alt="Secretless AI scanning and protecting credentials" width="700" />
|
|
18
|
-
</p>
|
|
13
|
+
[Website](https://opena2a.org) | [Demos](https://opena2a.org/demos) | [OpenA2A CLI](https://github.com/opena2a-org/opena2a) | [Discord](https://discord.gg/opena2a)
|
|
19
14
|
|
|
20
|
-
##
|
|
15
|
+
## Get Started in 30 Seconds
|
|
21
16
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
| Backend | Storage | Sync | Auth | Best For |
|
|
25
|
-
|---------|---------|------|------|----------|
|
|
26
|
-
| `local` | AES-256-GCM encrypted file | None (single machine) | Filesystem | Quick start, simple setups |
|
|
27
|
-
| `keychain` | macOS Keychain / Linux Secret Service | Device-local | OS login | Native OS integration |
|
|
28
|
-
| `1password` | 1Password vault | Cross-device | Biometric (Touch ID) / Service Account | Teams, CI/CD, multi-device |
|
|
29
|
-
| `vault` | HashiCorp Vault KV v2 | Cross-device / cluster | Vault token | Enterprise, self-hosted, team secrets |
|
|
17
|
+
The recommended way to use Secretless AI is through [opena2a-cli](https://github.com/opena2a-org/opena2a) — the unified CLI for all OpenA2A security tools. It runs Secretless under the hood along with security scanning, config integrity, and more.
|
|
30
18
|
|
|
31
19
|
```bash
|
|
32
|
-
|
|
33
|
-
npx
|
|
34
|
-
|
|
35
|
-
|
|
20
|
+
# Recommended: full security review via opena2a-cli
|
|
21
|
+
npx opena2a-cli review
|
|
22
|
+
|
|
23
|
+
# Or use Secretless AI directly
|
|
24
|
+
npx secretless-ai init
|
|
36
25
|
```
|
|
37
26
|
|
|
38
|
-
|
|
27
|
+
That's it. No config files, no setup, no flags needed.
|
|
39
28
|
|
|
40
|
-
|
|
29
|
+
**What happens when you run it?**
|
|
41
30
|
|
|
42
|
-
|
|
31
|
+
Detects which AI coding tools you use, installs the right protections for each, and blocks secrets from ever entering an AI context window.
|
|
43
32
|
|
|
44
|
-
```bash
|
|
45
|
-
brew install --cask 1password # Install 1Password desktop app
|
|
46
|
-
brew install --cask 1password-cli # Install op CLI
|
|
47
33
|
```
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
34
|
+
┌──────────────────────────────────────────────────┐
|
|
35
|
+
│ Secretless v0.11.4 │
|
|
36
|
+
│ Keeping secrets out of AI │
|
|
37
|
+
│ │
|
|
38
|
+
│ Detected: │
|
|
39
|
+
│ + Claude Code │
|
|
40
|
+
│ + Cursor │
|
|
41
|
+
│ │
|
|
42
|
+
│ Configured: │
|
|
43
|
+
│ * Claude Code │
|
|
44
|
+
│ * Cursor │
|
|
45
|
+
│ │
|
|
46
|
+
│ Created: │
|
|
47
|
+
│ + .claude/hooks/secretless-guard.sh │
|
|
48
|
+
│ + CLAUDE.md │
|
|
49
|
+
│ │
|
|
50
|
+
│ Modified: │
|
|
51
|
+
│ ~ .claude/settings.json │
|
|
52
|
+
│ ~ .cursorrules │
|
|
53
|
+
│ │
|
|
54
|
+
│ Done. Secrets are now blocked from AI context. │
|
|
55
|
+
└──────────────────────────────────────────────────┘
|
|
53
56
|
```
|
|
54
57
|
|
|
55
|
-
|
|
58
|
+

|
|
56
59
|
|
|
57
|
-
|
|
60
|
+
> See all demos at [opena2a.org/demos](https://opena2a.org/demos)
|
|
58
61
|
|
|
59
|
-
|
|
62
|
+
## Installation
|
|
60
63
|
|
|
61
|
-
|
|
64
|
+
```bash
|
|
65
|
+
# Run without installing (recommended to start)
|
|
66
|
+
npx secretless-ai init
|
|
62
67
|
|
|
63
|
-
|
|
68
|
+
# Install globally
|
|
69
|
+
npm install -g secretless-ai
|
|
64
70
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
vault server -dev # Start dev server (for testing)
|
|
71
|
+
# Add to your project
|
|
72
|
+
npm install --save-dev secretless-ai
|
|
68
73
|
```
|
|
69
74
|
|
|
70
|
-
|
|
71
|
-
export VAULT_ADDR=http://127.0.0.1:8200
|
|
72
|
-
export VAULT_TOKEN=<your-token>
|
|
73
|
-
npx secretless-ai backend set vault # Switch backend
|
|
74
|
-
npx secretless-ai secret set DB_PASSWORD=... # Stored in Vault KV v2
|
|
75
|
-
```
|
|
75
|
+
Requirements: Node.js 18+. Zero runtime dependencies.
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
## Using with opena2a-cli (Recommended)
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
[opena2a-cli](https://github.com/opena2a-org/opena2a) is the main CLI that unifies all OpenA2A security tools. Secretless AI powers the credential management commands:
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
| opena2a-cli command | What it runs | Description |
|
|
82
|
+
|---------------------|-------------|-------------|
|
|
83
|
+
| `opena2a review` | All tools | Full security dashboard (HTML) |
|
|
84
|
+
| `opena2a protect` | HackMyAgent + Secretless | Auto-fix findings + credential protection |
|
|
85
|
+
| `opena2a secrets init` | Secretless AI | Initialize secretless protection |
|
|
86
|
+
| `opena2a secrets verify` | Secretless AI | Verify secrets are hidden from AI |
|
|
87
|
+
| `opena2a broker start` | Secretless AI | Identity-aware credential brokering |
|
|
88
|
+
| `opena2a dlp scan` | Secretless AI | Scan transcripts for leaked credentials |
|
|
89
|
+
| `opena2a shield init` | All tools | Full security setup in one command |
|
|
82
90
|
|
|
83
91
|
```bash
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
npx secretless-ai scope list # Show all baselines
|
|
87
|
-
npx secretless-ai scope reset MY_CREDENTIAL # Clear baseline
|
|
92
|
+
npm install -g opena2a-cli
|
|
93
|
+
opena2a review # best place to start
|
|
88
94
|
```
|
|
89
95
|
|
|
90
|
-
|
|
96
|
+
## How It Works
|
|
91
97
|
|
|
92
|
-
|
|
93
|
-
|----------|-----------|----------|-------------------|
|
|
94
|
-
| **GCP** | Service account key JSON | `testIamPermissions` (Cloud Resource Manager) | None (self-inspection) |
|
|
95
|
-
| **Vault** | Token prefix (`hvs.`, `s.`) | `capabilities-self` (Sys) | None (self-inspection) |
|
|
96
|
-
| **AWS** | Access key prefix (`AKIA`) | STS `GetCallerIdentity` + IAM policy introspection | None (self-inspection) |
|
|
98
|
+
Secretless auto-detects which AI tools you use and installs the right protections for each one:
|
|
97
99
|
|
|
98
|
-
|
|
100
|
+
| Tool | Protection Method |
|
|
101
|
+
|------|------------------|
|
|
102
|
+
| **Claude Code** | PreToolUse hook (blocks file reads before they happen) + deny rules + CLAUDE.md instructions |
|
|
103
|
+
| **Cursor** | `.cursorrules` instructions |
|
|
104
|
+
| **GitHub Copilot** | `.github/copilot-instructions.md` instructions |
|
|
105
|
+
| **Windsurf** | `.windsurfrules` instructions |
|
|
106
|
+
| **Cline** | `.clinerules` instructions |
|
|
107
|
+
| **Aider** | `.aiderignore` file patterns |
|
|
99
108
|
|
|
100
|
-
|
|
101
|
-
2. Calls the provider's self-inspection API to discover current permissions
|
|
102
|
-
3. Compares against the stored baseline (`~/.secretless-ai/scope-baselines.json`)
|
|
103
|
-
4. Reports added/removed permissions and flags scope expansion
|
|
109
|
+
Claude Code gets the strongest protection because it supports [hooks](https://docs.anthropic.com/en/docs/claude-code/hooks) — a shell script runs *before* every file read and blocks access to secret files at the tool level. Other tools get instruction-based protection.
|
|
104
110
|
|
|
105
|
-
|
|
111
|
+
## Commands
|
|
106
112
|
|
|
107
|
-
|
|
113
|
+
### Core
|
|
108
114
|
|
|
109
|
-
|
|
115
|
+
| Command | What It Does |
|
|
116
|
+
|---------|-------------|
|
|
117
|
+
| `init` | Set up protections for your AI tools |
|
|
118
|
+
| `scan` | Scan for hardcoded secrets (49 patterns) |
|
|
119
|
+
| `status` | Show protection status (session, broker, transcripts) |
|
|
120
|
+
| `verify` | Verify keys are usable but hidden from AI |
|
|
121
|
+
| `doctor [--fix]` | Diagnose and auto-fix shell profile issues |
|
|
122
|
+
| `clean [--dry-run] [--path P]` | Scan and redact credentials in transcripts |
|
|
123
|
+
| `watch` | Monitor transcripts in real-time |
|
|
110
124
|
|
|
111
|
-
|
|
125
|
+
### Secret Management
|
|
112
126
|
|
|
113
127
|
```bash
|
|
114
128
|
npx secretless-ai secret set STRIPE_KEY=sk_live_... # Store a secret
|
|
@@ -117,7 +131,7 @@ npx secretless-ai secret list # List secret names (neve
|
|
|
117
131
|
npx secretless-ai secret rm STRIPE_KEY # Remove a secret
|
|
118
132
|
```
|
|
119
133
|
|
|
120
|
-
|
|
134
|
+
#### Running Commands with Secrets
|
|
121
135
|
|
|
122
136
|
Inject secrets as environment variables into any command. The AI tool sees the command output but never the secret values.
|
|
123
137
|
|
|
@@ -127,7 +141,7 @@ npx secretless-ai run --only STRIPE_KEY -- curl -u "$STRIPE_KEY:" https://api.st
|
|
|
127
141
|
npx secretless-ai run --only DATABASE_URL -- npm run migrate # Inject specific key
|
|
128
142
|
```
|
|
129
143
|
|
|
130
|
-
|
|
144
|
+
#### AI-Safe by Design
|
|
131
145
|
|
|
132
146
|
When an AI tool tries to read a secret value, secretless blocks it:
|
|
133
147
|
|
|
@@ -143,14 +157,14 @@ $ npx secretless-ai secret get STRIPE_KEY # (run by AI tool)
|
|
|
143
157
|
|
|
144
158
|
Direct terminal access (human) works normally. The guard detects non-interactive execution (how AI tools run commands) and refuses to output.
|
|
145
159
|
|
|
146
|
-
|
|
160
|
+
#### Import from .env Files
|
|
147
161
|
|
|
148
162
|
```bash
|
|
149
163
|
npx secretless-ai import .env # Import from specific file
|
|
150
164
|
npx secretless-ai import --detect # Auto-find and import all .env files
|
|
151
165
|
```
|
|
152
166
|
|
|
153
|
-
|
|
167
|
+
#### Project Manifests
|
|
154
168
|
|
|
155
169
|
Define required secrets in a `.secretless` file at the project root:
|
|
156
170
|
|
|
@@ -165,7 +179,68 @@ npx secretless-ai setup # Interactive setup for missing se
|
|
|
165
179
|
npx secretless-ai setup --check # CI: fail if required secrets are missing
|
|
166
180
|
```
|
|
167
181
|
|
|
168
|
-
|
|
182
|
+
### Secret Storage Backends
|
|
183
|
+
|
|
184
|
+
Secrets are never in environment variables, shell profiles, or config files — they exist only in the backend and get injected into process memory at runtime.
|
|
185
|
+
|
|
186
|
+
| Backend | Storage | Sync | Auth | Best For |
|
|
187
|
+
|---------|---------|------|------|----------|
|
|
188
|
+
| `local` | AES-256-GCM encrypted file | None (single machine) | Filesystem | Quick start, simple setups |
|
|
189
|
+
| `keychain` | macOS Keychain / Linux Secret Service | Device-local | OS login | Native OS integration |
|
|
190
|
+
| `1password` | 1Password vault | Cross-device | Biometric (Touch ID) / Service Account | Teams, CI/CD, multi-device |
|
|
191
|
+
| `vault` | HashiCorp Vault KV v2 | Cross-device / cluster | Vault token | Enterprise, self-hosted, team secrets |
|
|
192
|
+
| `gcp-sm` | GCP Secret Manager | Cross-device / cloud | ADC / Service Account | GCP-native, Cloud Run, GKE |
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
npx secretless-ai backend # Show available backends
|
|
196
|
+
npx secretless-ai backend set 1password # Switch to 1Password
|
|
197
|
+
npx secretless-ai backend set keychain # Switch to OS keychain
|
|
198
|
+
npx secretless-ai backend set gcp-sm # Switch to GCP Secret Manager
|
|
199
|
+
npx secretless-ai migrate --from local --to 1password # Migrate existing secrets
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
#### 1Password Backend
|
|
203
|
+
|
|
204
|
+
Stores secrets in a dedicated "Secretless" vault using the [`op` CLI](https://developer.1password.com/docs/cli). Secrets never touch disk.
|
|
205
|
+
|
|
206
|
+
**Setup:**
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
brew install --cask 1password # Install 1Password desktop app
|
|
210
|
+
brew install --cask 1password-cli # Install op CLI
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Then enable CLI integration: **1Password > Settings > Developer > "Integrate with 1Password CLI"**. This allows the CLI to authenticate through the desktop app with biometric unlock (Touch ID / Windows Hello).
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
npx secretless-ai backend set 1password # Switch backend
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Prevent repeated popups:** Run `npx secretless-ai warm --ttl 1h` before starting an AI coding session. This pre-loads all secrets into the encrypted cache so no `op` CLI calls (and no biometric popups) happen during the session. See [Session Management](#session-management).
|
|
220
|
+
|
|
221
|
+
**CI/CD:** Set `OP_SERVICE_ACCOUNT_TOKEN` — same secrets, no code changes. No desktop app needed.
|
|
222
|
+
|
|
223
|
+
#### HashiCorp Vault Backend
|
|
224
|
+
|
|
225
|
+
Stores secrets in a Vault KV v2 engine using the HTTP API. Zero SDK dependency — raw `fetch` calls.
|
|
226
|
+
|
|
227
|
+
**Setup:**
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
brew install vault # Install Vault CLI
|
|
231
|
+
vault server -dev # Start dev server (for testing)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
export VAULT_ADDR=http://127.0.0.1:8200
|
|
236
|
+
export VAULT_TOKEN=<your-token>
|
|
237
|
+
npx secretless-ai backend set vault # Switch backend
|
|
238
|
+
npx secretless-ai secret set DB_PASSWORD=... # Stored in Vault KV v2
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Supports custom mount paths via backend config. Default mount: `secret`.
|
|
242
|
+
|
|
243
|
+
#### Backend Inspection
|
|
169
244
|
|
|
170
245
|
```bash
|
|
171
246
|
npx secretless-ai backend list # Show all entries grouped by prefix
|
|
@@ -174,7 +249,7 @@ npx secretless-ai backend purge --yes # Delete all entries
|
|
|
174
249
|
npx secretless-ai backend purge --prefix mcp --yes # Delete only mcp/ entries
|
|
175
250
|
```
|
|
176
251
|
|
|
177
|
-
|
|
252
|
+
### MCP Secret Protection
|
|
178
253
|
|
|
179
254
|
Every MCP server config has plaintext API keys sitting in JSON files on your laptop. The LLM sees them. Secretless encrypts them.
|
|
180
255
|
|
|
@@ -203,7 +278,7 @@ npx secretless-ai protect-mcp
|
|
|
203
278
|
|
|
204
279
|
1. Scans MCP configs across Claude Desktop, Cursor, Claude Code, VS Code, and Windsurf
|
|
205
280
|
2. Identifies which env vars are secrets (key name patterns + value regex matching)
|
|
206
|
-
3. Stores secrets in your configured backend (local, keychain, or
|
|
281
|
+
3. Stores secrets in your configured backend (local, keychain, 1Password, Vault, or GCP Secret Manager)
|
|
207
282
|
4. Rewrites configs to use the `secretless-mcp` wrapper — decrypts at runtime, injects as env vars
|
|
208
283
|
5. Non-secret env vars (URLs, org names, regions) stay in the config untouched
|
|
209
284
|
|
|
@@ -213,96 +288,30 @@ npx secretless-ai mcp-status # Show which servers are prot
|
|
|
213
288
|
npx secretless-ai mcp-unprotect # Restore original configs from backup
|
|
214
289
|
```
|
|
215
290
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
## AI Context Protection
|
|
219
|
-
|
|
220
|
-
AI coding tools read your files to provide context. That includes `.env` files, API keys in config, SSH keys, and cloud credentials. Once a secret enters an AI context window, it's sent to a remote API — and you can't take it back.
|
|
221
|
-
|
|
222
|
-
## How It Works
|
|
223
|
-
|
|
224
|
-
Secretless auto-detects which AI tools you use and installs the right protections for each one:
|
|
225
|
-
|
|
226
|
-
| Tool | Protection Method |
|
|
227
|
-
|------|------------------|
|
|
228
|
-
| **Claude Code** | PreToolUse hook (blocks file reads before they happen) + deny rules + CLAUDE.md instructions |
|
|
229
|
-
| **Cursor** | `.cursorrules` instructions |
|
|
230
|
-
| **GitHub Copilot** | `.github/copilot-instructions.md` instructions |
|
|
231
|
-
| **Windsurf** | `.windsurfrules` instructions |
|
|
232
|
-
| **Cline** | `.clinerules` instructions |
|
|
233
|
-
| **Aider** | `.aiderignore` file patterns |
|
|
234
|
-
|
|
235
|
-
Claude Code gets the strongest protection because it supports [hooks](https://docs.anthropic.com/en/docs/claude-code/hooks) — a shell script runs *before* every file read and blocks access to secret files at the tool level. Other tools get instruction-based protection.
|
|
236
|
-
|
|
237
|
-
## Quick Start
|
|
291
|
+
### Credential Scope Discovery
|
|
238
292
|
|
|
239
|
-
|
|
240
|
-
# In any project directory
|
|
241
|
-
npx secretless-ai init
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
Output:
|
|
245
|
-
|
|
246
|
-
```
|
|
247
|
-
Secretless v0.10.2
|
|
248
|
-
Keeping secrets out of AI
|
|
249
|
-
|
|
250
|
-
Detected:
|
|
251
|
-
+ Claude Code
|
|
252
|
-
+ Cursor
|
|
253
|
-
|
|
254
|
-
Configured:
|
|
255
|
-
* Claude Code
|
|
256
|
-
* Cursor
|
|
257
|
-
|
|
258
|
-
Created:
|
|
259
|
-
+ .claude/hooks/secretless-guard.sh
|
|
260
|
-
+ CLAUDE.md
|
|
261
|
-
|
|
262
|
-
Modified:
|
|
263
|
-
~ .claude/settings.json
|
|
264
|
-
~ .cursorrules
|
|
265
|
-
|
|
266
|
-
Done. Secrets are now blocked from AI context.
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
## Moving Keys from AI Context to Env Vars
|
|
270
|
-
|
|
271
|
-
The safest setup: keys live in environment variables, AI tools reference them by name.
|
|
272
|
-
|
|
273
|
-
**Step 1: Move keys to the correct shell profile**
|
|
274
|
-
|
|
275
|
-
Non-interactive subprocesses (Claude Code's Bash tool, CI/CD, Docker) don't source interactive-only profiles. Use the right file for your platform:
|
|
276
|
-
|
|
277
|
-
| Platform | Shell | Correct File | Why |
|
|
278
|
-
|----------|-------|-------------|-----|
|
|
279
|
-
| macOS | zsh | `~/.zshenv` | Sourced by ALL shells (interactive + non-interactive) |
|
|
280
|
-
| Linux | bash | `~/.bashrc` | Sourced by interactive bash; most tools source it explicitly |
|
|
281
|
-
| Windows | — | System Environment Variables | Use `setx` or Settings > System > Environment Variables |
|
|
282
|
-
|
|
283
|
-
**Step 2: Run secretless init**
|
|
293
|
+
Credentials are not static — their effective permissions change when platforms evolve. Secretless detects when a credential's scope expands beyond its baseline, catching privilege escalation before it becomes a breach.
|
|
284
294
|
|
|
285
295
|
```bash
|
|
286
|
-
npx secretless-ai
|
|
296
|
+
npx secretless-ai scope discover MY_CREDENTIAL # Discover current permissions, save baseline
|
|
297
|
+
npx secretless-ai scope check MY_CREDENTIAL # Compare to baseline, report drift
|
|
298
|
+
npx secretless-ai scope list # Show all baselines
|
|
299
|
+
npx secretless-ai scope reset MY_CREDENTIAL # Clear baseline
|
|
287
300
|
```
|
|
288
301
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
```bash
|
|
292
|
-
npx secretless-ai verify
|
|
293
|
-
```
|
|
302
|
+
#### Supported Providers
|
|
294
303
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
304
|
+
| Provider | Detection | API Used | Permissions Needed |
|
|
305
|
+
|----------|-----------|----------|-------------------|
|
|
306
|
+
| **GCP** | Service account key JSON | `testIamPermissions` (Cloud Resource Manager) | None (self-inspection) |
|
|
307
|
+
| **Vault** | Token prefix (`hvs.`, `s.`) | `capabilities-self` (Sys) | None (self-inspection) |
|
|
308
|
+
| **AWS** | Access key prefix (`AKIA`) | STS `GetCallerIdentity` + IAM policy introspection | None (self-inspection) |
|
|
299
309
|
|
|
300
|
-
|
|
310
|
+
#### Broker Integration
|
|
301
311
|
|
|
302
|
-
|
|
303
|
-
```
|
|
312
|
+
Add `scopeCheck: true` to any broker policy rule. The broker will block credential access if the credential's scope has expanded beyond its baseline.
|
|
304
313
|
|
|
305
|
-
|
|
314
|
+
### Session Management
|
|
306
315
|
|
|
307
316
|
If you use 1Password or OS keychain as your backend, every secret access triggers a biometric prompt (Touch ID, 1Password popup). During an AI coding session, these fire repeatedly and interrupt your workflow.
|
|
308
317
|
|
|
@@ -340,7 +349,7 @@ $ npx secretless-ai warm --ttl 1h
|
|
|
340
349
|
You can now use AI tools without repeated auth prompts.
|
|
341
350
|
```
|
|
342
351
|
|
|
343
|
-
|
|
352
|
+
#### Auto-Start on Login (macOS)
|
|
344
353
|
|
|
345
354
|
Install as a macOS LaunchAgent so the broker starts automatically:
|
|
346
355
|
|
|
@@ -350,7 +359,7 @@ npx secretless-ai install status # Check installation status
|
|
|
350
359
|
npx secretless-ai install uninstall # Remove LaunchAgent
|
|
351
360
|
```
|
|
352
361
|
|
|
353
|
-
|
|
362
|
+
#### Claude Code Integration
|
|
354
363
|
|
|
355
364
|
Add a session gate to Claude Code so it blocks tool calls when your session has expired:
|
|
356
365
|
|
|
@@ -380,7 +389,7 @@ Secretless session expired. Run: secretless-ai warm
|
|
|
380
389
|
|
|
381
390
|
If secretless has never been set up (no session file exists), the hook passes — it won't block users who haven't opted in.
|
|
382
391
|
|
|
383
|
-
|
|
392
|
+
#### Secret Cache
|
|
384
393
|
|
|
385
394
|
The cache reduces OS authentication prompts for keychain and 1Password backends by storing resolved secrets in an AES-256-GCM encrypted file. The `warm` command pre-populates the cache automatically.
|
|
386
395
|
|
|
@@ -390,114 +399,17 @@ npx secretless-ai cache ttl 1h # Set cache TTL (5m, 1h, 1d, off)
|
|
|
390
399
|
npx secretless-ai cache clear # Clear cached secrets
|
|
391
400
|
```
|
|
392
401
|
|
|
393
|
-
## Git Protection
|
|
394
|
-
|
|
395
|
-
Prevent secrets from being committed:
|
|
396
|
-
|
|
397
|
-
```bash
|
|
398
|
-
npx secretless-ai hook install # Install pre-commit secret scanner
|
|
399
|
-
npx secretless-ai hook status # Check hook installation status
|
|
400
|
-
npx secretless-ai hook uninstall # Remove pre-commit hook
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
## Shell History Protection
|
|
404
|
-
|
|
405
|
-
Scan and clean credentials that leaked into shell history files:
|
|
406
|
-
|
|
407
|
-
```bash
|
|
408
|
-
npx secretless-ai scan --history # Scan shell history for credentials
|
|
409
|
-
npx secretless-ai clean-history # Redact credentials in shell history
|
|
410
|
-
npx secretless-ai clean-history --dry-run # Preview without modifying
|
|
411
|
-
```
|
|
412
|
-
|
|
413
|
-
## All Commands
|
|
414
|
-
|
|
415
|
-
| Command | Description |
|
|
416
|
-
|---------|-------------|
|
|
417
|
-
| `init` | Set up protections for your AI tools |
|
|
418
|
-
| `scan` | Scan for hardcoded secrets (49 patterns) |
|
|
419
|
-
| `status` | Show protection status (session, broker, transcripts) |
|
|
420
|
-
| `verify` | Verify keys are usable but hidden from AI |
|
|
421
|
-
| `doctor [--fix]` | Diagnose and auto-fix shell profile issues |
|
|
422
|
-
| `clean [--dry-run] [--path P]` | Scan and redact credentials in transcripts |
|
|
423
|
-
| `watch` | Monitor transcripts in real-time |
|
|
424
|
-
| **Session Management** | |
|
|
425
|
-
| `warm` | Warm biometric session and pre-load secrets into cache |
|
|
426
|
-
| `warm --ttl 10m` | Set session TTL (accepts seconds, 5m, 1h, 1d) |
|
|
427
|
-
| `warm --no-broker` | Skip auto-starting the broker daemon |
|
|
428
|
-
| `install` | Install broker as macOS login daemon (LaunchAgent) |
|
|
429
|
-
| `install uninstall` | Remove LaunchAgent |
|
|
430
|
-
| `install status` | Check daemon installation status |
|
|
431
|
-
| `hook --check-only` | Session gate for Claude Code PreToolUse hooks |
|
|
432
|
-
| **Secret Management** | |
|
|
433
|
-
| `secret set <NAME[=VALUE]>` | Store a secret |
|
|
434
|
-
| `secret list` | List stored secret names |
|
|
435
|
-
| `secret get <NAME>` | Retrieve a secret value (blocked in non-interactive contexts) |
|
|
436
|
-
| `secret rm <NAME>` | Remove a secret |
|
|
437
|
-
| `run [--only K1,K2] -- <cmd>` | Run command with secrets injected as env vars |
|
|
438
|
-
| `import <file>` | Import secrets from .env file |
|
|
439
|
-
| `import --detect` | Auto-find and import .env files |
|
|
440
|
-
| **Project Setup** | |
|
|
441
|
-
| `setup` | Interactive setup from `.secretless` manifest |
|
|
442
|
-
| `setup --check` | CI: fail if required secrets are missing |
|
|
443
|
-
| **Git Protection** | |
|
|
444
|
-
| `hook install` | Install pre-commit secret scanner |
|
|
445
|
-
| `hook uninstall` | Remove pre-commit hook |
|
|
446
|
-
| `hook status` | Check hook installation status |
|
|
447
|
-
| **Shell History** | |
|
|
448
|
-
| `scan --history` | Scan shell history for credentials |
|
|
449
|
-
| `clean-history` | Redact credentials in shell history |
|
|
450
|
-
| `clean-history --dry-run` | Preview redaction without modifying |
|
|
451
|
-
| **MCP Protection** | |
|
|
452
|
-
| `protect-mcp [--backend TYPE]` | Encrypt MCP server secrets |
|
|
453
|
-
| `mcp-status` | Show MCP protection status |
|
|
454
|
-
| `mcp-unprotect` | Restore original MCP configs |
|
|
455
|
-
| **Backend Management** | |
|
|
456
|
-
| `backend` | Show current backend status |
|
|
457
|
-
| `backend set <TYPE>` | Set backend (local, keychain, 1password, vault) |
|
|
458
|
-
| `backend list` | List all stored entries |
|
|
459
|
-
| `backend purge [--prefix] [--yes]` | Delete entries from backend |
|
|
460
|
-
| `migrate --from TYPE --to TYPE` | Migrate secrets between backends |
|
|
461
|
-
| **Scope Discovery** | |
|
|
462
|
-
| `scope discover <NAME>` | Discover credential permissions and save baseline |
|
|
463
|
-
| `scope check <NAME>` | Compare current permissions to baseline |
|
|
464
|
-
| `scope list` | Show all scope baselines |
|
|
465
|
-
| `scope reset <NAME>` | Clear a scope baseline |
|
|
466
|
-
| **Shell Integration** | |
|
|
467
|
-
| `env [--only K1,K2]` | Output export statements for stored secrets (use with `eval`) |
|
|
468
|
-
| `scan-staged` | Scan git staged files for secrets (used by pre-commit hook) |
|
|
469
|
-
| **Cache Management** | |
|
|
470
|
-
| `cache` | Show cache status (backend, TTL, entries) |
|
|
471
|
-
| `cache clear` | Clear the encrypted secret cache |
|
|
472
|
-
| `cache ttl [DURATION]` | Show or set cache TTL (e.g., `5m`, `1h`, `off`) |
|
|
473
|
-
| **Credential Broker** | |
|
|
474
|
-
| `broker start` | Start the credential broker daemon |
|
|
475
|
-
| `broker stop` | Stop the broker daemon |
|
|
476
|
-
| `broker status` | Show broker status, uptime, and request count |
|
|
477
|
-
|
|
478
|
-
## Usage via OpenA2A CLI
|
|
479
|
-
|
|
480
|
-
Secretless capabilities are also available through the [OpenA2A CLI](https://github.com/opena2a-org/opena2a), which provides a unified interface across the entire OpenA2A security ecosystem. The CLI delegates to Secretless under the hood via adapter commands.
|
|
481
|
-
|
|
482
|
-
### Secrets Management
|
|
483
|
-
|
|
484
|
-
```bash
|
|
485
|
-
opena2a secrets init # Initialize secretless protection for the current project
|
|
486
|
-
opena2a secrets verify # Verify that secrets are accessible via env vars but hidden from AI context
|
|
487
|
-
```
|
|
488
|
-
|
|
489
|
-
These commands map to `secretless-ai init` and `secretless-ai verify` respectively, with the same behavior and output.
|
|
490
|
-
|
|
491
402
|
### Identity-Aware Credential Broker
|
|
492
403
|
|
|
493
|
-
The broker is a daemon that provides identity-aware credential brokering for AI agents. Instead of giving agents direct access to secrets, the broker requires agents to authenticate (via AIM identity tokens) before credentials are injected into their process environment.
|
|
404
|
+
The broker is a daemon that provides identity-aware credential brokering for AI agents. Instead of giving agents direct access to secrets, the broker requires agents to authenticate (via AIM identity tokens) before credentials are injected into their process environment.
|
|
494
405
|
|
|
495
406
|
```bash
|
|
496
|
-
|
|
497
|
-
|
|
407
|
+
npx secretless-ai broker start # Start the credential broker daemon
|
|
408
|
+
npx secretless-ai broker stop # Stop the broker daemon
|
|
409
|
+
npx secretless-ai broker status # Show broker status, uptime, and request count
|
|
498
410
|
```
|
|
499
411
|
|
|
500
|
-
**Policy example**
|
|
412
|
+
**Policy example** — define rules in `~/.secretless-ai/broker-policies.json`:
|
|
501
413
|
|
|
502
414
|
```json
|
|
503
415
|
{
|
|
@@ -528,7 +440,7 @@ The policy engine is default-deny: deny rules are evaluated first, then allow ru
|
|
|
528
440
|
|
|
529
441
|
**Request flow:**
|
|
530
442
|
|
|
531
|
-
1. `
|
|
443
|
+
1. `broker start` — starts the broker daemon on a local socket
|
|
532
444
|
2. An agent requests a credential (e.g., `GITHUB_TOKEN`)
|
|
533
445
|
3. The broker verifies the agent's AIM identity token
|
|
534
446
|
4. The policy engine evaluates the request against loaded rules
|
|
@@ -540,53 +452,56 @@ The policy engine is default-deny: deny rules are evaluated first, then allow ru
|
|
|
540
452
|
DLP commands scan AI tool transcripts (conversation logs, shell history, tool output) for accidentally leaked credentials. If an API key, token, or connection string appears in a transcript, DLP flags it so you can rotate the exposed credential.
|
|
541
453
|
|
|
542
454
|
```bash
|
|
543
|
-
|
|
544
|
-
|
|
455
|
+
npx secretless-ai scan --history # Scan shell history for credentials
|
|
456
|
+
npx secretless-ai clean-history # Redact credentials in shell history
|
|
457
|
+
npx secretless-ai clean-history --dry-run # Preview without modifying
|
|
545
458
|
```
|
|
546
459
|
|
|
547
|
-
|
|
460
|
+
### Git Protection
|
|
461
|
+
|
|
462
|
+
Prevent secrets from being committed:
|
|
548
463
|
|
|
464
|
+
```bash
|
|
465
|
+
npx secretless-ai hook install # Install pre-commit secret scanner
|
|
466
|
+
npx secretless-ai hook status # Check hook installation status
|
|
467
|
+
npx secretless-ai hook uninstall # Remove pre-commit hook
|
|
549
468
|
```
|
|
550
|
-
DLP Transcript Scan
|
|
551
469
|
|
|
552
|
-
|
|
470
|
+
### Moving Keys from AI Context to Env Vars
|
|
553
471
|
|
|
554
|
-
|
|
555
|
-
Line 142: AWS Access Key (AKIA...) — AKIA2EXAMPLE7XRQWZ
|
|
556
|
-
Line 307: Stripe Secret Key (sk_live_...) — sk_live_51J3Example
|
|
472
|
+
The safest setup: keys live in environment variables, AI tools reference them by name.
|
|
557
473
|
|
|
558
|
-
|
|
559
|
-
Line 89: GitHub PAT (ghp_...) — ghp_A1b2C3ExampleToken
|
|
474
|
+
**Step 1: Move keys to the correct shell profile**
|
|
560
475
|
|
|
561
|
-
|
|
476
|
+
Non-interactive subprocesses (Claude Code's Bash tool, CI/CD, Docker) don't source interactive-only profiles. Use the right file for your platform:
|
|
562
477
|
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
478
|
+
| Platform | Shell | Correct File | Why |
|
|
479
|
+
|----------|-------|-------------|-----|
|
|
480
|
+
| macOS | zsh | `~/.zshenv` | Sourced by ALL shells (interactive + non-interactive) |
|
|
481
|
+
| Linux | bash | `~/.bashrc` | Sourced by interactive bash; most tools source it explicitly |
|
|
482
|
+
| Windows | — | System Environment Variables | Use `setx` or Settings > System > Environment Variables |
|
|
566
483
|
|
|
567
|
-
|
|
484
|
+
**Step 2: Run secretless init**
|
|
568
485
|
|
|
569
|
-
|
|
486
|
+
```bash
|
|
487
|
+
npx secretless-ai init
|
|
488
|
+
```
|
|
570
489
|
|
|
571
|
-
|
|
490
|
+
**Step 3: Verify**
|
|
572
491
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
| Credential drift | `opena2a protect` | Detect when credential scopes expand beyond their baselines |
|
|
577
|
-
| Credential brokering | `opena2a broker start` | Identity-aware secret injection for AI agents via AIM tokens |
|
|
578
|
-
| Leak detection | `opena2a dlp scan` | Scan transcripts and shell history for exposed credentials |
|
|
492
|
+
```bash
|
|
493
|
+
npx secretless-ai verify
|
|
494
|
+
```
|
|
579
495
|
|
|
580
|
-
|
|
496
|
+
```
|
|
497
|
+
Env vars available (usable by tools):
|
|
498
|
+
+ ANTHROPIC_API_KEY
|
|
499
|
+
+ OPENAI_API_KEY
|
|
581
500
|
|
|
582
|
-
|
|
501
|
+
AI context files: clean (no credentials found)
|
|
583
502
|
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
| Quick project setup | `npx secretless-ai init` |
|
|
587
|
-
| Standalone secret management | `npx secretless-ai secret set`, `run`, `verify` |
|
|
588
|
-
| Unified workflow across OpenA2A tools | `opena2a secrets`, `opena2a broker`, `opena2a dlp` |
|
|
589
|
-
| CI/CD pipelines with multiple OpenA2A checks | `opena2a` (single binary, all tools) |
|
|
503
|
+
PASS: Secrets are accessible via env vars but hidden from AI context.
|
|
504
|
+
```
|
|
590
505
|
|
|
591
506
|
## What Gets Blocked
|
|
592
507
|
|
|
@@ -606,6 +521,91 @@ Commands that dump secret files (`cat .env`, `head *.key`) and commands that ech
|
|
|
606
521
|
|
|
607
522
|
For Claude Code, Secretless installs a PreToolUse hook that intercepts every `Read`, `Grep`, `Glob`, `Bash`, `Write`, and `Edit` tool call. The hook runs *before* the tool executes, so secrets never enter the AI context window.
|
|
608
523
|
|
|
524
|
+
## CI/CD Integration
|
|
525
|
+
|
|
526
|
+
All commands support `--json` and `--ci` flags.
|
|
527
|
+
|
|
528
|
+
```yaml
|
|
529
|
+
# GitHub Actions
|
|
530
|
+
name: Credential Check
|
|
531
|
+
on: [push, pull_request]
|
|
532
|
+
jobs:
|
|
533
|
+
secrets:
|
|
534
|
+
runs-on: ubuntu-latest
|
|
535
|
+
steps:
|
|
536
|
+
- uses: actions/checkout@v4
|
|
537
|
+
- uses: actions/setup-node@v4
|
|
538
|
+
with: { node-version: '20' }
|
|
539
|
+
- run: npx secretless-ai scan --json > scan-report.json
|
|
540
|
+
- run: npx secretless-ai setup --check
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
## All Commands
|
|
544
|
+
|
|
545
|
+
| Command | Description |
|
|
546
|
+
|---------|-------------|
|
|
547
|
+
| **Core** | |
|
|
548
|
+
| `init` | Set up protections for your AI tools |
|
|
549
|
+
| `scan` | Scan for hardcoded secrets (49 patterns) |
|
|
550
|
+
| `status` | Show protection status (session, broker, transcripts) |
|
|
551
|
+
| `verify` | Verify keys are usable but hidden from AI |
|
|
552
|
+
| `doctor [--fix]` | Diagnose and auto-fix shell profile issues |
|
|
553
|
+
| `clean [--dry-run] [--path P]` | Scan and redact credentials in transcripts |
|
|
554
|
+
| `watch` | Monitor transcripts in real-time |
|
|
555
|
+
| **Session Management** | |
|
|
556
|
+
| `warm` | Warm biometric session and pre-load secrets into cache |
|
|
557
|
+
| `warm --ttl 10m` | Set session TTL (accepts seconds, 5m, 1h, 1d) |
|
|
558
|
+
| `warm --no-broker` | Skip auto-starting the broker daemon |
|
|
559
|
+
| `install` | Install broker as macOS login daemon (LaunchAgent) |
|
|
560
|
+
| `install uninstall` | Remove LaunchAgent |
|
|
561
|
+
| `install status` | Check daemon installation status |
|
|
562
|
+
| `hook --check-only` | Session gate for Claude Code PreToolUse hooks |
|
|
563
|
+
| **Secret Management** | |
|
|
564
|
+
| `secret set <NAME[=VALUE]>` | Store a secret |
|
|
565
|
+
| `secret list` | List stored secret names |
|
|
566
|
+
| `secret get <NAME>` | Retrieve a secret value (blocked in non-interactive contexts) |
|
|
567
|
+
| `secret rm <NAME>` | Remove a secret |
|
|
568
|
+
| `run [--only K1,K2] -- <cmd>` | Run command with secrets injected as env vars |
|
|
569
|
+
| `import <file>` | Import secrets from .env file |
|
|
570
|
+
| `import --detect` | Auto-find and import .env files |
|
|
571
|
+
| **Project Setup** | |
|
|
572
|
+
| `setup` | Interactive setup from `.secretless` manifest |
|
|
573
|
+
| `setup --check` | CI: fail if required secrets are missing |
|
|
574
|
+
| **Git Protection** | |
|
|
575
|
+
| `hook install` | Install pre-commit secret scanner |
|
|
576
|
+
| `hook uninstall` | Remove pre-commit hook |
|
|
577
|
+
| `hook status` | Check hook installation status |
|
|
578
|
+
| **Shell History** | |
|
|
579
|
+
| `scan --history` | Scan shell history for credentials |
|
|
580
|
+
| `clean-history` | Redact credentials in shell history |
|
|
581
|
+
| `clean-history --dry-run` | Preview redaction without modifying |
|
|
582
|
+
| **MCP Protection** | |
|
|
583
|
+
| `protect-mcp [--backend TYPE]` | Encrypt MCP server secrets |
|
|
584
|
+
| `mcp-status` | Show MCP protection status |
|
|
585
|
+
| `mcp-unprotect` | Restore original MCP configs |
|
|
586
|
+
| **Backend Management** | |
|
|
587
|
+
| `backend` | Show current backend status |
|
|
588
|
+
| `backend set <TYPE>` | Set backend (local, keychain, 1password, vault, gcp-sm) |
|
|
589
|
+
| `backend list` | List all stored entries |
|
|
590
|
+
| `backend purge [--prefix] [--yes]` | Delete entries from backend |
|
|
591
|
+
| `migrate --from TYPE --to TYPE` | Migrate secrets between backends |
|
|
592
|
+
| **Scope Discovery** | |
|
|
593
|
+
| `scope discover <NAME>` | Discover credential permissions and save baseline |
|
|
594
|
+
| `scope check <NAME>` | Compare current permissions to baseline |
|
|
595
|
+
| `scope list` | Show all scope baselines |
|
|
596
|
+
| `scope reset <NAME>` | Clear a scope baseline |
|
|
597
|
+
| **Shell Integration** | |
|
|
598
|
+
| `env [--only K1,K2]` | Output export statements for stored secrets (use with `eval`) |
|
|
599
|
+
| `scan-staged` | Scan git staged files for secrets (used by pre-commit hook) |
|
|
600
|
+
| **Cache Management** | |
|
|
601
|
+
| `cache` | Show cache status (backend, TTL, entries) |
|
|
602
|
+
| `cache clear` | Clear the encrypted secret cache |
|
|
603
|
+
| `cache ttl [DURATION]` | Show or set cache TTL (e.g., `5m`, `1h`, `off`) |
|
|
604
|
+
| **Credential Broker** | |
|
|
605
|
+
| `broker start` | Start the credential broker daemon |
|
|
606
|
+
| `broker stop` | Stop the broker daemon |
|
|
607
|
+
| `broker status` | Show broker status, uptime, and request count |
|
|
608
|
+
|
|
609
609
|
## Development
|
|
610
610
|
|
|
611
611
|
```bash
|
|
@@ -615,17 +615,6 @@ npm run dev # Watch mode — recompile on file changes
|
|
|
615
615
|
npm run clean # Remove dist/ directory
|
|
616
616
|
```
|
|
617
617
|
|
|
618
|
-
## Requirements
|
|
619
|
-
|
|
620
|
-
- Node.js 18+
|
|
621
|
-
- A project directory with at least one AI tool configured (or Secretless defaults to Claude Code)
|
|
622
|
-
- **Optional:** 1Password CLI (`op`) for 1Password backend
|
|
623
|
-
- **Optional:** macOS Keychain or `secret-tool` (Linux) for keychain backend
|
|
624
|
-
|
|
625
|
-
## Zero Dependencies
|
|
626
|
-
|
|
627
|
-
Secretless has zero runtime dependencies.
|
|
628
|
-
|
|
629
618
|
## OpenA2A Ecosystem
|
|
630
619
|
|
|
631
620
|
| Project | Description | Install |
|
|
@@ -635,7 +624,7 @@ Secretless has zero runtime dependencies.
|
|
|
635
624
|
| [**AIM**](https://github.com/opena2a-org/agent-identity-management) | Agent Identity Management -- identity, access control, and trust scoring for AI agents | Self-hosted |
|
|
636
625
|
| [**AI Browser Guard**](https://github.com/opena2a-org/AI-BrowserGuard) | Browser agent detection and control -- 4-layer detection, delegation engine | Chrome Web Store |
|
|
637
626
|
| [**DVAA**](https://github.com/opena2a-org/damn-vulnerable-ai-agent) | Damn Vulnerable AI Agent -- security training target | `docker pull opena2a/dvaa` |
|
|
638
|
-
|
|
|
627
|
+
| **Registry** | Trust registry -- agent discovery, trust scores, supply chain verification | Coming soon |
|
|
639
628
|
|
|
640
629
|
## License
|
|
641
630
|
|