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 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) · [Registry](https://registry.opena2a.org)
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
  [![npm version](https://img.shields.io/npm/v/secretless-ai.svg)](https://www.npmjs.com/package/secretless-ai)
6
6
  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
7
+ [![Tests](https://img.shields.io/badge/tests-738-brightgreen)](https://github.com/opena2a-org/secretless-ai)
7
8
 
8
- Every AI coding assistant in your terminal 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
+ 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
- One command to keep secrets out of AI LLMs. Works with Claude Code, Cursor, Copilot, Windsurf, Cline, and Aider.
11
+ Works with Claude Code, Cursor, Copilot, Windsurf, Cline, and Aider.
11
12
 
12
- ```bash
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
- ## Secret Storage Backends
15
+ ## Get Started in 30 Seconds
21
16
 
22
- Secretless stores secrets in your choice of backend. 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.
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
- npx secretless-ai backend # Show available backends
33
- npx secretless-ai backend set 1password # Switch to 1Password
34
- npx secretless-ai backend set keychain # Switch to OS keychain
35
- npx secretless-ai migrate --from local --to 1password # Migrate existing secrets
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
- ### 1Password Backend
27
+ That's it. No config files, no setup, no flags needed.
39
28
 
40
- Stores secrets in a dedicated "Secretless" vault using the [`op` CLI](https://developer.1password.com/docs/cli). Secrets never touch disk.
29
+ **What happens when you run it?**
41
30
 
42
- **Setup:**
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
- 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).
50
-
51
- ```bash
52
- npx secretless-ai backend set 1password # Switch backend
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
- **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).
58
+ ![Secretless AI Demo](docs/secretless-ai-demo.gif)
56
59
 
57
- **CI/CD:** Set `OP_SERVICE_ACCOUNT_TOKEN` same secrets, no code changes. No desktop app needed.
60
+ > See all demos at [opena2a.org/demos](https://opena2a.org/demos)
58
61
 
59
- ### HashiCorp Vault Backend
62
+ ## Installation
60
63
 
61
- Stores secrets in a Vault KV v2 engine using the HTTP API. Zero SDK dependency — raw `fetch` calls.
64
+ ```bash
65
+ # Run without installing (recommended to start)
66
+ npx secretless-ai init
62
67
 
63
- **Setup:**
68
+ # Install globally
69
+ npm install -g secretless-ai
64
70
 
65
- ```bash
66
- brew install vault # Install Vault CLI
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
- ```bash
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
- Supports custom mount paths via backend config. Default mount: `secret`.
77
+ ## Using with opena2a-cli (Recommended)
78
78
 
79
- ## Credential Scope Discovery
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
- 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.
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
- npx secretless-ai scope discover MY_CREDENTIAL # Discover current permissions, save baseline
85
- npx secretless-ai scope check MY_CREDENTIAL # Compare to baseline, report drift
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
- ### Supported Providers
96
+ ## How It Works
91
97
 
92
- | Provider | Detection | API Used | Permissions Needed |
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
- ### How It Works
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
- 1. Auto-detects the provider from credential format
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
- ### Broker Integration
111
+ ## Commands
106
112
 
107
- Add `scopeCheck: true` to any broker policy rule. The broker will block credential access if the credential's scope has expanded beyond its baseline.
113
+ ### Core
108
114
 
109
- ## Secret Management
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
- Store, list, and inject secrets without exposing them to AI tools.
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
- ### Running Commands with Secrets
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
- ### AI-Safe by Design
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
- ### Import from .env Files
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
- ### Project Manifests
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
- ## Backend Inspection
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
- ## MCP Secret Protection
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 1Password)
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
- ```bash
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 init
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
- **Step 3: Verify**
290
-
291
- ```bash
292
- npx secretless-ai verify
293
- ```
302
+ #### Supported Providers
294
303
 
295
- ```
296
- Env vars available (usable by tools):
297
- + ANTHROPIC_API_KEY
298
- + OPENAI_API_KEY
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
- AI context files: clean (no credentials found)
310
+ #### Broker Integration
301
311
 
302
- PASS: Secrets are accessible via env vars but hidden from AI context.
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
- ## Session Management
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
- ### Auto-Start on Login (macOS)
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
- ### Claude Code Integration
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
- ### Secret Cache
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. This ensures that only authorized agents with valid identities can access secrets.
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
- opena2a broker start # Start the credential broker daemon
497
- opena2a broker status # Check broker daemon status and connected agents
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** -- define rules in `~/.secretless-ai/broker-policies.json`:
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. `opena2a broker start` -- starts the broker daemon on a local socket
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
- opena2a dlp scan # Scan AI tool transcripts for leaked credentials
544
- opena2a dlp report # Generate a DLP report with findings and remediation steps
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
- **Example output from `opena2a dlp scan`:**
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
- Scanning 3 transcript(s)...
470
+ ### Moving Keys from AI Context to Env Vars
553
471
 
554
- ! claude-code/2026-03-01-project-setup.jsonl
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
- ! cursor/composer-history.json
559
- Line 89: GitHub PAT (ghp_...) — ghp_A1b2C3ExampleToken
474
+ **Step 1: Move keys to the correct shell profile**
560
475
 
561
- 3 leaked credential(s) found in 2 transcript(s).
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
- Rotate these credentials immediately they have been sent to
564
- an external API as part of the AI conversation context.
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
- Each finding shows the transcript file, line number, credential type, and a truncated value preview. The `opena2a dlp report` command generates a structured report with remediation steps for each finding.
484
+ **Step 2: Run secretless init**
568
485
 
569
- ### Cross-Product Integration
486
+ ```bash
487
+ npx secretless-ai init
488
+ ```
570
489
 
571
- Secretless connects to the wider OpenA2A ecosystem at multiple levels:
490
+ **Step 3: Verify**
572
491
 
573
- | Entry Point | Command | What It Does |
574
- |-------------|---------|--------------|
575
- | Standalone | `npx secretless-ai init` | Protect AI tool context, manage secrets, encrypt MCP configs |
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
- Each layer builds on the previous one. Start with `secretless-ai init` for immediate protection, then add drift detection, brokering, and DLP as your agent deployment grows.
496
+ ```
497
+ Env vars available (usable by tools):
498
+ + ANTHROPIC_API_KEY
499
+ + OPENAI_API_KEY
581
500
 
582
- ### When to Use Which Interface
501
+ AI context files: clean (no credentials found)
583
502
 
584
- | Use Case | Command |
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
- | [**Registry**](https://registry.opena2a.org) | Trust registry -- agent discovery, trust scores, supply chain verification | `registry.opena2a.org` |
627
+ | **Registry** | Trust registry -- agent discovery, trust scores, supply chain verification | Coming soon |
639
628
 
640
629
  ## License
641
630