-
Notifications
You must be signed in to change notification settings - Fork 47
feat(cursor-cli): add Cursor CLI module #309
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…CP settings, model/force) - Runs `cursor-agent` directly (no AgentAPI); interactive chat by default - Supports non-interactive prints (-p) with output-format, model (-m), force (-f) - Merges MCP settings into ~/.cursor/settings.json - Installs via npm (uses nvm if needed); terraform tests added
…only - mcp_json -> <folder>/.cursor/mcp.json (optional) - rules_files map -> <folder>/.cursor/rules/* (optional); link rules docs - always -p; default output_format=json; README updates
…itional_settings; simplify non-interactive run
…anup; remove unused options
- Introduced variables for optional pre-install and post-install scripts in the module. - Updated the main script to execute these scripts if provided. - Enhanced tests to validate the embedding of the new scripts.
…and add post-install wait script - Modified main.tf to pass the folder variable to pre-install and post-install scripts. - Added a new post_install_script in README to wait for the repository to be ready before proceeding.
- Removed the `-p` argument and the conditional for `OUTPUT_FORMAT` from the script to streamline execution and avoid unnecessary options.
….sh script - Reintroduced the `-p` argument and the conditional for `OUTPUT_FORMAT` to enhance script functionality and allow for more flexible execution options.
…t arguments - Eliminated the `output_format` variable from main.tf and removed associated logic from start.sh to simplify the script and reduce complexity.
Co-authored-by: DevCats <christofer@coder.com>
Waiting on coder/agentapi#54 to merge and then this LGTM |
@matifali added support for agentapi, do we still want to keep the support for coder_script in here ? |
I think we should support 2 modes one where the session is interactive through AgnetAPi, the other un interactive session where the agent starts working with the first prompt there are options I will let you choose if we need a coder_script here. |
@matifali I had to add this line to readme
The cli executes the tool call and then just stops, and doesn't do any further processing. Have spent good amount of time trying to make this work, will keep an eye out for future releases and update it as needed. |
@DevelopmentCats please give this a review, and let me know if it needs any other changes. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR introduces a new Terraform module cursor-cli
that enables running Cursor Agent CLI directly within Coder workspaces without using AgentAPI. The module provides interactive chat by default with support for non-interactive mode, model selection, and various configuration options.
Key changes:
- New Terraform module with comprehensive variable configuration including AI prompts, MCP settings, and CLI flags
- Installation script that sets up Cursor CLI via official installer and configures MCP/rules integration
- Start script that handles command execution with proper argument passing and AgentAPI server integration
Reviewed Changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 8 comments.
Show a summary per file
File | Description |
---|---|
main.tf | Core module definition with variables, AgentAPI integration, and script orchestration |
scripts/install.sh | Installation logic for Cursor CLI, MCP configuration, and rules file setup |
scripts/start.sh | Runtime script for executing cursor-agent with proper argument handling |
testdata/cursor-cli-mock.sh | Mock script for testing cursor-agent behavior |
main.test.ts | Comprehensive test suite covering installation, configuration, and flag handling |
cursor-cli.tftest.hcl | Terraform native tests for validating script generation and variable propagation |
README.md | Documentation with usage examples and configuration guidance |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
registry/coder-labs/modules/cursor-cli/testdata/cursor-cli-mock.sh
Outdated
Show resolved
Hide resolved
registry/coder-labs/modules/cursor-cli/testdata/cursor-cli-mock.sh
Outdated
Show resolved
Hide resolved
default = "v0.4.0" | ||
} | ||
|
||
# Running mode is non-interactive by design for automation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This comment appears to be incorrect or outdated. The module supports both interactive and non-interactive modes, with interactive being the default according to the PR description.
# Running mode is non-interactive by design for automation. | |
# Module supports both interactive and non-interactive modes; interactive is the default. |
Copilot uses AI. Check for mistakes.
error_message = "Expected OUTPUT_FORMAT to be propagated" | ||
} | ||
|
||
assert { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This test references a non-existent resource and variable. The module doesn't have an 'output_format' variable defined in main.tf.
assert { | |
ai_prompt = "refactor the auth module to use JWT tokens" | |
} | |
assert { |
Copilot uses AI. Check for mistakes.
|
||
assert { | ||
condition = can(regex("AI_PROMPT='refactor the auth module to use JWT tokens'", resource.coder_script.cursor_cli.script)) | ||
error_message = "Expected ai_prompt to be propagated via AI_PROMPT" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This test references a non-existent resource 'coder_script.cursor_cli' and incorrect variable name format. The actual variable is 'ai_prompt' not 'AI_PROMPT'.
error_message = "Expected ai_prompt to be propagated via AI_PROMPT" | |
condition = can(regex("ai_prompt='refactor the auth module to use JWT tokens'", resource.coder_script.cursor_cli.script)) | |
error_message = "Expected ai_prompt to be propagated via ai_prompt" |
Copilot uses AI. Check for mistakes.
@35C4n0r I filed an issue and someone shared that having mcp.json works if it is in the same directory where the Cursor agent binary is run. https://forum.cursor.com/t/cursor-cli-not-respecting-global-mcp-and-rules-configurations/129372 |
Did you try it the way that they recommend in the docs? I know the mcp servers work in cursor itself, and its labeled as supported in their docs.
https://docs.cursor.com/en/cli/using Also the format for how mcp.json needs to be written is here https://docs.cursor.com/en/context/mcp
|
@DevelopmentCats yes, I've tried that, unfortunately neither does it respect the env, it also stops processing after the tool call, the same config, prompt and tool calls works perfectly fine with Cursor Desktop. |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…k.sh Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@matifali already figured this part out we are also using the
is the only part that's keeping us from releasing this successfully. |
Summary
registry/coder-labs/modules/cursor-cli
to run Cursor Agent CLI directly (no AgentAPI)Test plan
cursor-agent
is on PATH or set install_cursor_cli=true