feat: add push_to_default_branch and agent_timeout inputs

Playground repos can push directly to the default branch instead of opening PRs; agent runtime is configurable (default 5m).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Frank Schwenk
2026-07-05 15:54:43 +02:00
parent 893d7bec1e
commit 239e110b72
4 changed files with 61 additions and 12 deletions
+16
View File
@@ -39,10 +39,24 @@ jobs:
gitea_token: ${{ secrets.CURSOR_BOT_TOKEN }} gitea_token: ${{ secrets.CURSOR_BOT_TOKEN }}
gitea_base_url: https://gitea.schwenk.online gitea_base_url: https://gitea.schwenk.online
ai_model: composer-2.5 ai_model: composer-2.5
# push_to_default_branch: "false" # optional — push to default branch instead of opening a PR
# agent_timeout: 5m # optional — max agent runtime (default 5m)
``` ```
`ai_model` is optional — it defaults to `composer-2.5` when omitted. `ai_model` is optional — it defaults to `composer-2.5` when omitted.
For playground repos that commit directly to the default branch (no PR workflow):
```yaml
- uses: https://gitea.schwenk.online/froxxxy/cursor-gitea-agent@main
with:
cursor_api_key: ${{ secrets.CURSOR_API_KEY }}
gitea_token: ${{ secrets.CURSOR_BOT_TOKEN }}
gitea_base_url: https://gitea.schwenk.online
push_to_default_branch: "true"
agent_timeout: 10m
```
## Action inputs ## Action inputs
| Input | Required | Default | Description | | Input | Required | Default | Description |
@@ -51,6 +65,8 @@ jobs:
| `gitea_token` | yes | — | Gitea token for the `cursor` bot user | | `gitea_token` | yes | — | Gitea token for the `cursor` bot user |
| `gitea_base_url` | yes | — | Gitea instance URL | | `gitea_base_url` | yes | — | Gitea instance URL |
| `ai_model` | no | `composer-2.5` | Cursor model id | | `ai_model` | no | `composer-2.5` | Cursor model id |
| `push_to_default_branch` | no | `false` | When `"true"`, agent commits and pushes to the default branch instead of opening a PR |
| `agent_timeout` | no | `5m` | Maximum runtime for the Cursor agent (`timeout` duration, e.g. `5m`, `30m`) |
## How it works ## How it works
+2
View File
@@ -53,3 +53,5 @@ Fränky and repos on gitea.schwenk.online where the `cursor` bot user is a colla
- Parse event context from `GITHUB_EVENT_PATH` with `jq` — do not rely on undocumented `gitea.event.*` template fields in shell scripts. - Parse event context from `GITHUB_EVENT_PATH` with `jq` — do not rely on undocumented `gitea.event.*` template fields in shell scripts.
- Install Cursor CLI and gitea-mcp only when `@cursor` fires and only if not already present on the runner. - Install Cursor CLI and gitea-mcp only when `@cursor` fires and only if not already present on the runner.
- Gitea secret names cannot start with `GITEA_` or `GITHUB_` — use `CURSOR_BOT_TOKEN` for the bot token, not `GITEA_TOKEN`. - Gitea secret names cannot start with `GITEA_` or `GITHUB_` — use `CURSOR_BOT_TOKEN` for the bot token, not `GITEA_TOKEN`.
- `push_to_default_branch` (`"true"` / `"false"`, default `"false"`): playground repos may push directly to the default branch; production repos keep PR-only behavior.
- `agent_timeout` (default `5m`): caps Cursor agent runtime via `timeout`; raise for long tasks (e.g. `30m`).
+10
View File
@@ -14,6 +14,14 @@ inputs:
description: Cursor model id description: Cursor model id
required: false required: false
default: composer-2.5 default: composer-2.5
push_to_default_branch:
description: When true, commit and push directly to the default branch instead of opening a PR
required: false
default: "false"
agent_timeout:
description: Maximum runtime for the Cursor agent (timeout duration, e.g. 5m, 30m)
required: false
default: 5m
runs: runs:
using: composite using: composite
@@ -39,5 +47,7 @@ runs:
GITEA_ACCESS_TOKEN: ${{ inputs.gitea_token }} GITEA_ACCESS_TOKEN: ${{ inputs.gitea_token }}
GITEA_BASE_URL: ${{ inputs.gitea_base_url }} GITEA_BASE_URL: ${{ inputs.gitea_base_url }}
AI_MODEL: ${{ inputs.ai_model }} AI_MODEL: ${{ inputs.ai_model }}
PUSH_TO_DEFAULT_BRANCH: ${{ inputs.push_to_default_branch }}
AGENT_TIMEOUT: ${{ inputs.agent_timeout }}
run: | run: |
"$GITHUB_ACTION_PATH/scripts/run-cursor.sh" "$GITHUB_ACTION_PATH/scripts/run-cursor.sh"
+33 -12
View File
@@ -53,6 +53,36 @@ jq -n \
git config user.name "cursor" git config user.name "cursor"
git config user.email "cursor@users.noreply.gitea.schwenk.online" git config user.email "cursor@users.noreply.gitea.schwenk.online"
AGENT_TIMEOUT="${AGENT_TIMEOUT:-5m}"
if [ "${PUSH_TO_DEFAULT_BRANCH:-false}" = "true" ]; then
TAKE_ACTION_SECTION='3. **Take Action:**
- If implementing code: commit changes directly to the default branch and push (do not open a pull request)
- If reviewing code: post a structured review in the pull request
- If answering questions: provide helpful, accurate information
- If the request is not feasible or safe: explain why and suggest alternatives
- Do not create a pull request for implementation work — push to the default branch instead'
SAFETY_RULES_SECTION='## SAFETY RULES
- Commit and push implementation changes directly to the default branch — do not create a pull request
- Always use MCP tools for Gitea interactions
- Be minimal, precise, and safe in your actions'
else
TAKE_ACTION_SECTION='3. **Take Action:**
- If implementing code: create a feature branch and open a pull request
- If reviewing code: post a structured review in the pull request
- If answering questions: provide helpful, accurate information
- If the request is not feasible or safe: explain why and suggest alternatives
- Use the MCP tool to create a Pull Request if needed'
SAFETY_RULES_SECTION='## SAFETY RULES
- NEVER push directly to protected branches (main, master, etc.)
- Always use MCP tools for Gitea interactions
- Be minimal, precise, and safe in your actions'
fi
PROMPT="You are an autonomous software engineering agent called cursor for repository: ${REPO_FULL_NAME} PROMPT="You are an autonomous software engineering agent called cursor for repository: ${REPO_FULL_NAME}
## CONTEXT INFORMATION ## CONTEXT INFORMATION
@@ -84,25 +114,16 @@ You have full access to Gitea via MCP tools. Use them to:
- Consider the context of the ${ISSUE_TYPE} and previous discussion - Consider the context of the ${ISSUE_TYPE} and previous discussion
- If the request is unclear, ask for clarification via a comment - If the request is unclear, ask for clarification via a comment
3. **Take Action:** ${TAKE_ACTION_SECTION}
- If implementing code: create a feature branch and open a pull request
- If reviewing code: post a structured review in the pull request
- If answering questions: provide helpful, accurate information
- If the request is not feasible or safe: explain why and suggest alternatives
- Use the MCP tool to create a Pull Request if needed
4. **Let the user know you've completed the request** 4. **Let the user know you've completed the request**
- Post your response as a comment on the ${ISSUE_TYPE} - Post your response as a comment on the ${ISSUE_TYPE}
- If the request is not feasible or safe: explain why and suggest alternatives - If the request is not feasible or safe: explain why and suggest alternatives
## SAFETY RULES ${SAFETY_RULES_SECTION}"
- NEVER push directly to protected branches (main, master, etc.)
- Always use MCP tools for Gitea interactions
- Be minimal, precise, and safe in your actions"
echo "Running Cursor agent for ${REPO_FULL_NAME} ${ISSUE_TYPE} #${ISSUE_NUMBER} (model: ${AI_MODEL})" echo "Running Cursor agent for ${REPO_FULL_NAME} ${ISSUE_TYPE} #${ISSUE_NUMBER} (model: ${AI_MODEL})"
timeout 30m agent -p "$PROMPT" --force --model "${AI_MODEL}" --output-format=text timeout "${AGENT_TIMEOUT}" agent -p "$PROMPT" --force --model "${AI_MODEL}" --output-format=text
echo "Cursor agent completed." echo "Cursor agent completed."