Install
openclaw skills install use-cursorManage Cursor CLI tasks via tmux with security hardening
openclaw skills install use-cursorEnable OpenClaw to execute Cursor CLI for various software engineering tasks, supporting interactive mode, background tasks, CI/CD, and more.
Before installing, understand these security implications:
~/.cursor/cli-config.json to check auth status (email redacted in output)| Data Access | Purpose | Protection |
|---|---|---|
~/.cursor/cli-config.json | Check auth status | Email redacted (shows ***@domain.com) |
~/.cursor/credentials | Check auth status | Not read, only existence checked |
$CURSOR_API_KEY | Optional auth | Not logged or stored |
$PATH, $HOME, etc. | Inherited by child processes | Not modified or logged |
| tmux output | Return task results | May contain workspace data |
This skill sends user-provided strings into tmux panes via tmux send-keys.
How it works:
agent --print --trust 'TASK' in the paneRisk: 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:
| 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 |
-l flag) for all send-keys commands***@domain.com)always: false)| Scenario | Recommended Mode | Description |
|---|---|---|
| Quick tasks | Interactive | Direct agent "task description" |
| Long-running coding | Background | tmux-managed, no timeout |
| CI/CD automation | Non-interactive | agent -p + JSON output |
| Code review | Interactive/Background | With context analysis |
| Large refactoring | Background | Interruptible, resumable |
⚠️ 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:
tmux - Terminal multiplexer (required for background tasks)agent or cursor-agent - Cursor CLI (required)CURSOR_API_KEY - Optional, or use agent login for browser authagent login
# or set API key
export CURSOR_API_KEY=your_api_key_here
# Ubuntu/Debian
sudo apt install tmux
# macOS
brew install tmux
# CentOS/RHEL
sudo yum install tmux
| Tool | Description | Example |
|---|---|---|
use_cursor_spawn | Start background Cursor task (standard mode) | use_cursor_spawn "refactor this module" |
use_cursor_spawn_isolated | Start task with minimal environment | use_cursor_spawn_isolated "task" |
use_cursor_check | Check task status | use_cursor_check session-name |
use_cursor_send | Send additional instructions | use_cursor_send session-name "make it async" |
use_cursor_kill | End task | use_cursor_kill session-name |
use_cursor_list | List all tasks | use_cursor_list |
use_cursor_doctor | Diagnose environment | use_cursor_doctor |
| Mode | Script | Use Case |
|---|---|---|
| Standard | spawn.sh | Normal development, trusted tasks |
| Isolated | spawn-isolated.sh | Untrusted inputs, shared machines |
| Container | Docker/Podman | Maximum isolation (manual setup) |
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>
User: Write a unit test for me
→ Call: use_cursor_run "write unit tests for src/utils.ts"
→ Wait for completion, return result
# Start interactive session
agent
# Or with task directly
agent "fix this bug"
# Switch model
/models
# Add context
@src/api/
@src/models/
| Command | Description |
|---|---|
agent | Start interactive session |
agent "task" | Execute task directly |
agent -p "task" | Print mode (for scripts) |
agent --model <name> | Specify model |
agent --resume="<id>" | Resume session |
agent ls | List sessions |
agent resume | Resume most recent session |
agent models | List available models |
agent update | Update CLI |
| Command | Description |
|---|---|
/models | Switch models |
/compress | Compress session history |
/rules | Manage rules |
/commands | Manage custom commands |
/mcp enable <server> | Enable MCP server |
/mcp disable <server> | Disable MCP server |
| Shortcut | Description |
|---|---|
Shift+Enter | New line |
Ctrl+D | Exit (requires double-press) |
Ctrl+R | Review changes |
↑/↓ | History messages |
User (Discord/Feishu)
→ OpenClaw Agent
→ use_cursor_spawn tool
→ tmux session
→ Cursor CLI Agent
# 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
agent -p 'Review the changes in the current branch against main. Focus on security and performance.'
agent -p 'Refactor src/utils.ts to reduce complexity and improve type safety.'
agent -p 'Analyze the following error log and suggest a fix: [paste log here]'
agent -p 'Generate a commit message for the staged changes adhering to conventional commits.'
# 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
❌ 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
use_cursor_run directlyuse_cursor_kill to clean up completed tasksuse_cursor_doctor ChecklistQ: Task exits immediately after starting
Q: tmux session not found
use_cursor_list to check active sessionsQ: Garbled output
export LANG=en_US.UTF-8Q: Does this skill send my code to external servers?
Q: Can this skill access my Cursor API key?
$CURSOR_API_KEY is set, but doesn't log or transmit it.Q: Is my email address exposed?
***@domain.com in all outputs.Q: Can malicious input cause shell injection?
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
Version: 1.0.1 Merged from: cursor-agent (2.1.0) + openclaw-cursor-agent (1.0.0) Authors: Bruce + 凤雏 🦞 Skill Name: use-cursor
cd command now uses -l flag