Skip to main content

cursor-agent

Use the Cursor CLI agent mode for IDE-integrated coding with project rules and repo-aware edits

Source facts

Repository
markus-global/markus
Last source activity
August 1, 2026 at 06:15
Detected SKILL.md language
English
Stars
201
Forks
15

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
cursor-agent
description
Use the Cursor CLI agent mode for IDE-integrated coding with project rules and repo-aware edits
# Cursor Agent Cursor Agent (`cursor` binary) runs the Cursor IDE's agent mode from the command line. Markus invokes it via `invoke_coding_tool({ tool: "cursor-agent", ... })`. Use it when the project has Cursor-specific configuration (`.cursor/rules`) or when IDE-integrated, project-aware editing is the best fit. ## Installation Install Cursor from [https://cursor.sh](https://cursor.sh), then enable the shell command: 1. Open Cursor → Command Palette → "Install 'cursor' command in PATH" 2. Verify: `cursor --version` Check availability with `markus doctor`. Requires authentication via `cursor agent login` (browser-based) or `CURSOR_API_KEY` env var. ## How Markus Invokes Cursor Agent Markus runs Cursor in CLI agent mode: ```bash cursor agent --print --output-format stream-json --workspace <workdir> --trust --force "<prompt>" ``` | Flag | Purpose | |---|---| | `--print` | Non-interactive mode | | `--output-format stream-json` | Emits structured JSON events for progress parsing | | `--workspace <workdir>` | Specifies the repo root for project context | | `--trust --force` | Auto-trusts the workspace without interactive prompts | Additional args can be configured via `CodingToolConfig.defaultArgs`. ## .cursor/rules Context Files Cursor projects use **`.cursor/rules/`** for persistent agent instructions. Rule files (`.mdc` or `.md`) define: - Coding standards and naming conventions - Architecture decisions and patterns to follow - Test requirements and deployment procedures - Files or areas agents should not modify Cursor Agent reads these rules automatically when operating in a project directory. Well-maintained rules significantly improve output quality. ### Markus Task Context Injection When you pass `task_id` to `invoke_coding_tool`, Markus writes task-specific context to: ``` .cursor/rules/markus-task.mdc ``` This file contains the full Markus task context (title, description, subtasks, dependencies, progress-reporting CLI commands). It sits alongside your project's permanent rules and takes effect for the coding session. **Important:** - Markus creates the `.cursor/rules/` directory if it doesn't exist - The `markus-task.mdc` file is regenerated each invocation — do not store permanent rules there - Keep long-lived project rules in separate files (e.g., `coding-standards.mdc`, `architecture.mdc`) ### Example Project Rules Structure ``` .cursor/rules/ ├── coding-standards.mdc # permanent — naming, formatting, test requirements ├── architecture.mdc # permanent — module boundaries, patterns └── markus-task.mdc # ephemeral — injected by Markus per task ``` ## Working Directory Considerations The `workdir` parameter is critical for Cursor Agent: ### Use the Repository Root Always pass the **absolute path to the git repository root** as `workdir`: ``` workdir: "/Users/agent/projects/my-app" ``` Cursor Agent resolves `.cursor/rules/` relative to this directory. Pointing at a subdirectory may cause rules to be missed. ### Multi-Repo Projects If the task spans multiple repositories, invoke Cursor Agent **once per repository** with repo-specific prompts: ``` invoke_coding_tool({ tool: "cursor-agent", prompt: "Implement the API client changes described in the task context.", workdir: "/path/to/backend-repo", task_id: "task-789" }) ``` ### Git State Ensure the working directory is a clean git checkout (or at least understand existing uncommitted changes). Cursor Agent edits files in-place. Review with `git status` and `git diff` before applying. ### Environment Variables Markus injects these env vars during context injection: | Variable | Purpose | |---|---| | `MARKUS_API_URL` | API server for task operations | | `MARKUS_TASK_ID` | Current task ID | | `MARKUS_CLI` | Path to the markus CLI binary | Cursor Agent subprocesses can use these if the injected context references CLI commands for progress reporting. ## Usage Patterns ### Rule-Driven Feature Implementation ``` invoke_coding_tool({ tool: "cursor-agent", prompt: "Implement the user settings page following the patterns in .cursor/rules/frontend.mdc. Use existing component library imports. Add unit tests.", workdir: "/path/to/frontend-repo", task_id: "task-789" }) ``` ### Convention-Heavy Refactor ``` invoke_coding_tool({ tool: "cursor-agent", prompt: "Migrate all API routes in src/routes/ to the new error-handling pattern defined in .cursor/rules/api-conventions.mdc. Update tests accordingly.", workdir: "/path/to/repo", task_id: "task-789" }) ``` ### Monorepo Package Work ``` invoke_coding_tool({ tool: "cursor-agent", prompt: "Add the coding-tools skill templates under templates/skills/. Follow the existing skill.json + SKILL.md pattern from templates/skills/Learning Habits/.", workdir: "/path/to/markus-monorepo", task_id: "task-789" }) ``` ## Model and Mode Selection Cursor Agent supports per-invocation model and mode overrides: ``` invoke_coding_tool({ tool: "cursor-agent", prompt: "...", model: "auto", // optional: CLI-specific model (auto, composer-2.5, etc.) mode: "plan", // optional: plan | ask }) ``` ### Important: CLI Model Limitations The Cursor `agent` CLI only accepts a limited set of CLI-specific model identifiers: `auto`, `composer-2.5`, etc. **Cursor Cloud API models** (Claude, GPT families) **are not available via the CLI** — they only work via the REST API. The Settings UI only shows CLI-compatible models to prevent selection errors. ### Critical cost fact: Auto Mode vs Max Mode **Not specifying `--model` uses Auto mode** — this is unlimited on paid Cursor plans and very cheap (or free). The moment you specify a model name, Cursor enters **Max Mode**, which bills per-token from the monthly credit pool. | Mode | Cost | When to use | |---|---|---| | Auto (no `--model`) | Free / unlimited on paid plans | Default for most tasks | | Max Mode (explicit `--model`) | Per-token billing, varies by model | Only when task needs specific model capabilities | **Warning:** Opus in Max Mode consumes credits approximately 20x faster than Auto mode. **Only specify `--model` when the task genuinely needs a specific model's capabilities.** For most tasks, Auto mode is the correct and cost-effective choice. ### Mode guidance - `plan` — Analyze architecture first, don't make changes yet. Good as a first step for complex tasks. - `ask` — Answer questions about the codebase without making changes. - Default (no mode) — Full agent mode, makes edits. Use for implementation. ### Mode chaining pattern For complex tasks: 1. `mode: "plan"` — "Analyze the codebase and propose an implementation plan for..." 2. Default agent mode — "Implement the plan: [paste plan from step 1]" 3. `mode: "ask"` — "Review the changes and identify any issues" ### Cost strategy - **Default to no model override** (Auto mode) — it handles most tasks well and is free/cheap - Only specify a model when Auto mode produces poor results or the task clearly needs specific capabilities - **Voluntarily call `request_user_approval` before specifying expensive models** (Opus) since it enables Max Mode billing ## When to Choose Cursor Agent | Choose Cursor Agent | Choose something else | |---|---| | Project has rich `.cursor/rules/` | No Cursor config, generic repo → `claude-code` | | Team standardized on Cursor conventions | Need stream-json cost tracking → `claude-code` | | IDE-style project-aware edits | Quick one-file fix → `codex` | | Frontend/UI work with component rules | Deep backend exploration → `claude-code` | ## Error Handling Cursor Agent may include some token data in result events. Evaluate results by: 1. `result.success` and `result.summary` 2. `result.modifiedFiles` — do they match expected scope? 3. `result.testResult` from quality verification 4. Manual `git diff` review in `workdir` If Cursor Agent ignores project rules, verify: - `workdir` points to the repo root (where `.cursor/rules/` lives) - Rule files use correct `.mdc` format and are not empty - The prompt explicitly references relevant rule files If output quality is poor after 2 attempts, switch to `claude-code` with equivalent prompt and CLAUDE.md context. ## Best Practices - Maintain `.cursor/rules/` with clear, actionable project conventions - Always pass absolute repo root as `workdir` - Pass `task_id` so `markus-task.mdc` carries task context - Reference specific rule files in prompts when multiple rules exist - Review diffs carefully — Cursor Agent may interpret rules differently than expected - **Default to Auto mode (no model override) for cost-effectiveness** - Only specify models when Auto mode is insufficient ## Mode Chaining for Quality Use Cursor Agent modes strategically: 1. **Plan mode**: `invoke_coding_tool({ tool: "cursor-agent", mode: "plan", prompt: "..." })` — analyze before implementing 2. **Agent mode** (default): Full implementation 3. **Ask mode**: `invoke_coding_tool({ tool: "cursor-agent", mode: "ask", prompt: "..." })` — targeted questions about the codebase For complex tasks, always plan first. Review the plan before proceeding to implementation. ## Project Rules Integration Cursor Agent reads `.cursor/rules/` automatically. When `task_id` is provided, Markus injects task context into `.cursor/rules/markus-task.mdc`. This means Cursor Agent automatically understands: - Task requirements and acceptance criteria - Project conventions and constraints - Upstream/downstream dependencies ## Rules - **DO** use when the project has Cursor rules configured - **DO** pass the repository root as `workdir` - **DO** keep permanent rules separate from `markus-task.mdc` - **DO** default to Auto mode (no `--model`) for cost savings - **DO** request approval before using expensive models in Max Mode - **DO NOT** store permanent instructions in `markus-task.mdc` - **DO NOT** use for repos with no Cursor configuration unless other tools are unavailable - **DO NOT** apply changes without reviewing diffs against project rules - **DO NOT** specify `--model` by default — it triggers Max Mode billing
View on GitHub