Skills use-cursor
Manage Cursor CLI tasks via tmux with security hardening
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/brucezhu888/use-cursor" ~/.claude/skills/openclaw-skills-use-cursor && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/brucezhu888/use-cursor" ~/.openclaw/skills/openclaw-skills-use-cursor && rm -rf "$T"
skills/brucezhu888/use-cursor/SKILL.mdUse Cursor - OpenClaw + Cursor CLI Integration
Enable OpenClaw to execute Cursor CLI for various software engineering tasks, supporting interactive mode, background tasks, CI/CD, and more.
🔒 Security Notes
Before installing, understand these security implications:
What This Skill Does
- ✅ Manages Cursor CLI tasks via tmux (stated purpose)
- ✅ Reads
to check auth status (email redacted in output)~/.cursor/cli-config.json - ✅ Captures tmux pane output (may contain workspace code/data)
- ✅ All shell arguments are escaped to prevent injection
- ✅ Does not download remote code at install time
Privacy Considerations
| Data Access | Purpose | Protection |
|---|---|---|
| Check auth status | Email redacted (shows ) |
| Check auth status | Not read, only existence checked |
| Optional auth | Not logged or stored |
, , etc. | Inherited by child processes | Not modified or logged |
| tmux output | Return task results | May contain workspace data |
⚠️ Critical: tmux Pane Execution Risk
This skill sends user-provided strings into tmux panes via
tmux send-keys.
How it works:
- Script creates tmux session
- Runs
in the paneagent --print --trust 'TASK' - Captures pane output and returns to agent
Risk: If the pane is running a shell, any text sent via
send-keys will be executed. While we escape arguments at the JavaScript level, special characters/control sequences could still affect the shell.
Mitigation:
- Use in isolated environments (container/VM) for untrusted tasks
- Don't run on production machines with live secrets
- Review task strings before sending
Recommendations
| Environment | Recommendation |
|---|---|
| Personal dev machine | ✅ Safe for normal projects |
| Open source work | ✅ Safe |
| Corporate environment | ⚠️ Review with security team first |
| Production server | ❌ Not recommended |
| Machine with high-value secrets | ❌ Use isolated container/VM |
Security Features (v1.0.0+)
- ✓ Shell argument escaping via single-quote method (prevents injection)
- ✓ tmux literal mode (
flag) for all send-keys commands-l - ✓ Email redaction (
)***@domain.com - ✓ API key/token redaction in output
- ✓ No autonomous execution (
)always: false - ✓ No remote code download
- ✓ Explicit permissions declared in manifest
- ✓ Isolated mode with minimal environment (hardcoded PATH)
🎯 Use Cases
| Scenario | Recommended Mode | Description |
|---|---|---|
| Quick tasks | Interactive | Direct |
| Long-running coding | Background | tmux-managed, no timeout |
| CI/CD automation | Non-interactive | + JSON output |
| Code review | Interactive/Background | With context analysis |
| Large refactoring | Background | Interruptible, resumable |
📦 Installation
1. Install Cursor CLI
⚠️ Security Note: The following install commands use remote scripts. Review them first or use your package manager when possible.
macOS:
# Recommended: use Homebrew (review formula first) brew install --cask cursor-cli # Alternative: official installer (review at https://cursor.com/install) # curl https://cursor.com/install -fsS | bash
Linux/WSL:
# Download and inspect the installer first curl -fsS https://cursor.com/install -o cursor-install.sh less cursor-install.sh # Review before running bash cursor-install.sh # Or check if available via your package manager
Verify installation:
agent --version # or cursor-agent --version
Required Dependencies:
- Terminal multiplexer (required for background tasks)tmux
oragent
- Cursor CLI (required)cursor-agent
- Optional, or useCURSOR_API_KEY
for browser authagent login
2. Authentication
agent login # or set API key export CURSOR_API_KEY=your_api_key_here
3. Install tmux (Required for background tasks)
# Ubuntu/Debian sudo apt install tmux # macOS brew install tmux # CentOS/RHEL sudo yum install tmux
🛠️ OpenClaw Tools
Tool List
| Tool | Description | Example |
|---|---|---|
| Start background Cursor task (standard mode) | |
| Start task with minimal environment | |
| Check task status | |
| Send additional instructions | |
| End task | |
| List all tasks | |
| Diagnose environment | |
Execution Modes
| Mode | Script | Use Case |
|---|---|---|
| Standard | | Normal development, trusted tasks |
| Isolated | | Untrusted inputs, shared machines |
| Container | Docker/Podman | Maximum isolation (manual setup) |
🚀 Usage
Method 1: Background Task Mode (Recommended for large jobs)
User: Help me refactor this module using Cursor in background → Call: use_cursor_spawn "refactor src/ directory for better performance" → Returns: Task ID + tmux session name
Follow-up operations:
User: Check the progress of that task → Call: use_cursor_check <session-name> User: Tell that task: change to TypeScript → Call: use_cursor_send <session-name> "implement in TypeScript" User: Stop that Cursor task → Call: use_cursor_kill <session-name>
Method 2: Direct Run Mode (Small tasks)
User: Write a unit test for me → Call: use_cursor_run "write unit tests for src/utils.ts" → Wait for completion, return result
Method 3: Interactive Mode (Local debugging)
# Start interactive session agent # Or with task directly agent "fix this bug" # Switch model /models # Add context @src/api/ @src/models/
📋 Cursor CLI Command Reference
Basic Commands
| Command | Description |
|---|---|
| Start interactive session |
| Execute task directly |
| Print mode (for scripts) |
| Specify model |
| Resume session |
| List sessions |
| Resume most recent session |
| List available models |
| Update CLI |
Slash Commands (Interactive Mode)
| Command | Description |
|---|---|
| Switch models |
| Compress session history |
| Manage rules |
| Manage custom commands |
| Enable MCP server |
| Disable MCP server |
Keyboard Shortcuts
| Shortcut | Description |
|---|---|
| New line |
| Exit (requires double-press) |
| Review changes |
| History messages |
🔧 Background Task Architecture
User (Discord/Feishu) → OpenClaw Agent → use_cursor_spawn tool → tmux session → Cursor CLI Agent
tmux Session Management
# Create session tmux new-session -d -s cursor-task-001 # Send command tmux send-keys -t cursor-task-001 "agent 'task description'" Enter # Capture output tmux capture-pane -t cursor-task-001 -p -S -100 # End session tmux kill-session -t cursor-task-001
📊 Workflows
Code Review
agent -p 'Review the changes in the current branch against main. Focus on security and performance.'
Refactoring
agent -p 'Refactor src/utils.ts to reduce complexity and improve type safety.'
Debugging
agent -p 'Analyze the following error log and suggest a fix: [paste log here]'
Git Integration
agent -p 'Generate a commit message for the staged changes adhering to conventional commits.'
CI/CD
# Security audit (JSON output) agent -p 'Audit this codebase for security vulnerabilities' --output-format json --force # Test coverage agent -p 'Run tests and generate coverage report' --output-format text
⚠️ Notes
TTY Issues
❌ These will hang:
agent "task" # No TTY agent -p "task" # No TTY subprocess.run(["agent", ...]) # No TTY
✅ Correct approach:
# Use tmux for pseudo-terminal tmux new-session -d -s cursor tmux send-keys -t cursor "agent 'task'" Enter
Timeout Protection
- Small tasks (<5 min): Use
directlyuse_cursor_run - Medium tasks (5-30 min): Background mode + periodic checks
- Large tasks (>30 min): Background mode +分段 execution
Resource Management
- Each tmux session uses ~50-100MB memory
- Recommend max 3-5 concurrent background tasks
- Use
to clean up completed tasksuse_cursor_kill
🏥 Troubleshooting
use_cursor_doctor
Checklist
use_cursor_doctor- ✅ tmux installed
- ✅ agent CLI executable
- ✅ Authentication status (CURSOR_API_KEY or login)
- ✅ Working directory permissions
- ✅ Network connectivity
Common Issues
Q: Task exits immediately after starting
- Check Cursor authentication status
- Ensure working directory has code
Q: tmux session not found
- Run
to check active sessionsuse_cursor_list - May have been killed or timed out
Q: Garbled output
- tmux encoding issue, try
export LANG=en_US.UTF-8
Security FAQs
Q: Does this skill send my code to external servers?
- A: No. Code stays on your machine. Cursor CLI may send to Anthropic/Claude API (that's how Cursor works).
Q: Can this skill access my Cursor API key?
- A: It can detect if
is set, but doesn't log or transmit it.$CURSOR_API_KEY
Q: Is my email address exposed?
- A: No. Email is redacted to
in all outputs.***@domain.com
Q: Can malicious input cause shell injection?
- A: v1.0.0+ escapes all shell arguments. Earlier versions had this risk.
📁 File Structure
use-cursor/ ├── SKILL.md # This document ├── scripts/ │ ├── spawn.sh # Start background task │ ├── check.sh # Check status │ ├── send.sh # Send instructions │ ├── kill.sh # End task │ └── doctor.sh # Diagnose environment ├── extensions/ │ └── use-cursor/ │ └── index.js # OpenClaw tool definitions └── examples/ └── openclaw.json # Configuration example
🔗 References
Version: 1.0.1 Merged from: cursor-agent (2.1.0) + openclaw-cursor-agent (1.0.0) Authors: Bruce + 凤雏 🦞 Skill Name: use-cursor
Changelog
v1.0.4 (2026-03-31)
- ✅ Fixed: Newline/control character injection vulnerability - now sanitized before escaping
- ✅ Added: Control char removal (/[\x00-\x1f\x7f]/g) to prevent all tmux control sequence attacks
- ✅ Updated: SECURITY.md with sanitization documentation
- ✅ Fixed: Documentation mismatch - changed "JSON.stringify()" to "single-quote method" in SECURITY.md
- ✅ Fixed: Repository/homepage URLs updated to openclaw/skills (no more placeholders)
- ✅ Fixed: Added source field to manifest.json for provenance tracking
- ✅ Enhanced: Detailed code comments explaining why child_process is safe
- ✅ Clarified: Static analysis flag (child_process) is FALSE POSITIVE for this use case
- ✅ Updated: manifest.json notes with child_process justification
v1.0.1 (2026-03-31)
- ✅ Fixed: spawn-isolated.sh
command now usescd
flag-l - ✅ Verified: ALL tmux send-keys use literal mode (-l)
- ✅ Updated: manifest.json with detailed security notes
- ✅ Clarified: Default mode inherits env, isolated mode uses env -i
v1.0.0 (2026-03-31)
- Initial release with security hardening