Skip to main content

A wrapper for cursor-agent with formatted output support

Project description

Cursor CLI

A Python wrapper for cursor-agent with enhanced output formatting support.

Installation

From PyPI

pip install cursor-cli

From source

cd cursor_cli
pip install -e .

Or run directly as a module

python -m cursor_cli [args...]

Features

  • Real-time Output Streaming: Outputs cursor-agent results in real-time as they arrive (default mode)
  • Formatted Stream-JSON Output: The output is parsed and formatted for better readability
  • Color-coded Output: Different message types (system, user, thinking, assistant, tool_call) are displayed in different colors
  • Aggregated Output: Messages of the same type are aggregated together instead of being displayed on separate lines
  • Extended Permissions Setup: --danger flag for setting up cursor-agent permissions

Usage

Quick Start (推荐)

# 默认流式输出模式
cursor-cli "Analyze this project"

# 等效于:
cursor-cli --output-format stream-json --stream-partial-output -p "Analyze this project"

Text Mode

# 使用 --text 切换到文本输出模式
cursor-cli --text "Analyze this project"

# 等效于:
cursor-cli --output-format text -p "Analyze this project"

Danger Mode (Extended Permissions)

Setup extended permissions for cursor-agent in .cursor/cli-config.json:

# 在用户 home 目录下创建 ~/.cursor/cli-config.json
cursor-cli --danger

# 在指定目录下创建 .cursor/cli-config.json
cursor-cli --danger /path/to/project

This will create/update the config file with these permissions:

{
  "permissions": {
    "allow": [
      "Shell(*)",
      "Read(*)",
      "Write(**/agents/**/*)",
      "Write(**/.agents/**/*)"
    ],
    "deny": []
  }
}

Runner-specific Options

# 默认流式模式(推荐)
cursor-cli "Your prompt here"

# 文本输出模式
cursor-cli --text "Your prompt here"

# 禁用颜色
cursor-cli --no-color "Your prompt"

# 禁用格式化输出(原始 JSON)
cursor-cli --no-format "Your prompt"

# Show runner help
cursor-cli --runner-help

Programmatic Usage

from cursor_cli import CursorCLIRunner, cursor_cli

# Simple function call
result = cursor_cli("Hello, what can you do?")
print(result)

# Streaming output
for line in cursor_cli("Explain Python", stream=True):
    print(line)

# JSON output
result = cursor_cli("Analyze this", json=True)
print(result)

# Using the runner class
runner = CursorCLIRunner(use_colors=True)
exit_code = runner.run(["-p", "your prompt", "--output-format", "stream-json", "--stream-partial-output"])

Using the Formatter Directly

from cursor_cli import StreamJsonFormatter
import sys

# Create formatter
formatter = StreamJsonFormatter(output=sys.stdout, use_colors=True)

# Process JSON lines
formatter.process_line('{"type":"system","subtype":"init","model":"Composer 1"}')
formatter.process_line('{"type":"user","message":{"role":"user","content":[{"type":"text","text":"Hello"}]}}')

# Finalize when done
formatter.finalize()

Output Format

When formatting is enabled, the output is displayed as:

[SYSTEM:init] Model: Composer 1 | CWD: /path/to/dir | Permission: default | Session: abc12345...

[USER] your prompt text here

[THINKING] (thinking content if any)

[ASSISTANT] Response from the assistant...

[TOOL_CALL:started] 🔧 Tool #1: $ command to execute

[TOOL_CALL:completed]    ✓ Success

[TOOL_CALL:started] 📝 Tool #2: Creating analysis.txt

[TOOL_CALL:completed]    ✓ Created 15 lines (1234 bytes)

[RESULT] 🎯 Completed in 2.5s | 📊 Stats: 2 tools, 350 chars generated

Color Scheme

  • SYSTEM: Cyan
  • USER: Green
  • THINKING: Dim gray
  • ASSISTANT: Yellow
  • TOOL_CALL: Magenta
  • RESULT: Bold Green

CLI Options

Option Description
"prompt" Default streaming mode with formatted output
--text "prompt" Text output mode
--danger [path] Setup extended permissions (default: ~/.cursor)
--no-color Disable colored output
--no-format Disable output formatting (raw JSON)
--runner-help Show help message

API Reference

cursor_cli() Function

cursor_cli(
    prompt: str,
    model: str = "composer-1",
    stream: bool = False,
    json: bool = False,
    **extra_args
) -> Union[str, dict, Iterator[str]]
参数 类型 默认值 说明
prompt str 必填 发送给 cursor-agent 的提示
model str "composer-1" 使用的模型
stream bool False 是否使用流式输出
json bool False 是否返回 JSON 格式
**extra_args - - 额外的命令行参数

返回值:

  • stream=False, json=False: 返回 str 文本输出
  • stream=False, json=True: 返回 dict 解析后的 JSON
  • stream=True: 返回 Iterator[str] 生成器,逐行输出 JSON

Message Types

The formatter handles the following message types from cursor-agent's stream-json output:

Type Description
system System initialization and configuration
user User input/prompt
thinking AI thinking process (streaming deltas)
assistant AI response
tool_call Tool invocations (shell commands, file operations, etc.)
result Task completion with duration and statistics

Supported Tool Types

Tool Icon Description
shellToolCall 🔧 Shell command execution
writeToolCall 📝 File creation
readToolCall 📖 File reading
editToolCall ✏️ File editing
listToolCall 📂 Directory listing
searchToolCall 🔍 Code search

Development

Release to PyPI

# Install build dependencies
pip install build twine

# Release to PyPI (will prompt for token)
python scripts/release.py

# Release to TestPyPI first
python scripts/release.py --test

Requirements

  • Python >= 3.8
  • cursor-agent must be installed and available in PATH

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cursor_cli-0.1.2.tar.gz (15.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cursor_cli-0.1.2-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file cursor_cli-0.1.2.tar.gz.

File metadata

  • Download URL: cursor_cli-0.1.2.tar.gz
  • Upload date:
  • Size: 15.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for cursor_cli-0.1.2.tar.gz
Algorithm Hash digest
SHA256 7598f0f62fb365508cb8c1ba8a1506a307ee137a103dd5a35125aeaaee52c1f1
MD5 f0eeea5e64e3a8ad4eb1034015393fc3
BLAKE2b-256 ab295e182599b76bd898170d917569f8c1dee3a3f2850116eb8720f918e72cc8

See more details on using hashes here.

File details

Details for the file cursor_cli-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: cursor_cli-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for cursor_cli-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 52db596c16bbdb236bad8d806cf03191c036e3694c446e8cdebd68f973890e03
MD5 caa912a389179a7fa959d683d3747bea
BLAKE2b-256 1cbbecfcae42e9335f28c3cee5fb0ade4b8b1ec9890efb72f9939015a6fc0052

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page