* Add Cursor Cloud Agent Docker environment * Fix Cloud Agent enterprise and Docker access * Fix Cloud Agent Go path setup * Use Cursor multi-repo enterprise checkout * Use sibling enterprise checkout layout * Add tmux to Cloud Agent image * Document Mattermost cloud startup flow Co-authored-by: nick.misasi <[email protected]> * Document Mattermost license behavior in cloud Co-authored-by: nick.misasi <[email protected]> --------- Co-authored-by: Hanzo Dev <[email protected]>
4.2 KiB
Cursor Cloud Agent Instructions
These instructions apply to Cursor Cloud Agents after .cursor/scripts/cloud-agent-start.sh materializes this file as .cursor/AGENTS.md.
Environment
- Docker must be available. If
docker infofails, inspect/tmp/docker-service-start.logand/tmp/dockerd.log; do not assume a snapshot will provide Docker. - The image includes Go, Node/npm, Docker Compose, AWS CLI v2, and
agent-browser. - Cursor should provide
mattermost/enterprisethrough the multi-repo environment. The expected layout is sibling repositories, such as/agent/repos/mattermostand/agent/repos/enterprise; this matchesserver/Makefile's default../../enterprisepath.
Running Mattermost
-
Start dependencies:
cd server make start-docker -
Start the server:
cd server make run-server -
Start the web app in another terminal when UI work needs live verification:
cd webapp make run
The Mattermost server is expected at http://localhost:8065. The webapp dev server commonly uses http://localhost:9005.
Known-good Cloud flow
-
In this multi-repo Cloud environment,
mattermostandenterpriseare expected to start frommaster, so sibling checkout skew should not need extra handling. -
server/Makefile'sruntarget only reachesrun-clientif the server is backgrounded. In Cloud, the reliable combined startup is:cd server ENABLED_DOCKER_SERVICES='postgres redis' RUN_SERVER_IN_BACKGROUND=true make run -
If you want split terminals instead, use:
cd server ENABLED_DOCKER_SERVICES='postgres redis' make run-serverand then:
cd webapp make run -
When the server starts and
MM_LICENSEis present in the environment, the server applies that license automatically. IfMM_LICENSEis not set, starting the server automatically applies an Entry license, which provides nearly all functionality needed for development. -
ENABLED_DOCKER_SERVICES='postgres redis'avoids optional local-dev services such as Prometheus, Grafana, Loki, Minio, Azurite, and OpenLDAP. This is useful in Cloud when Docker Hub rate limits block the defaultmake start-dockerdependency set. -
If the first-user signup UI is flaky but the server is already healthy, seed local state with
mmctland then log in through the browser:cd server ./bin/mmctl --local user create --email [email protected] --username cursoradmin --password Password123! --system-admin --email-verified --disable-welcome-email ./bin/mmctl --local team create --name cursorteam --display-name "Cursor Team" --email [email protected] -
A healthy server responds at:
curl http://127.0.0.1:8065/api/v4/system/ping
Tests And Setup
- Backend workspace setup is handled by
cd server && make setup-go-work; never rungo mod tidydirectly. - Webapp dependencies are installed with
cd webapp && make node_modules. - Playwright dependencies are installed with
cd e2e-tests/playwright && npm ci. - For full Playwright compose flows, use the existing
e2e-testsMakefile and scripts. Docker Compose is available in the Cloud Agent image.
Browser Screenshots
Use agent-browser for browser automation and screenshots. If the CLI is missing or browsers are unavailable, run:
npm install -g [email protected]
agent-browser install
- Chrome is available in the Cloud image, and
agent-browser skills get core --fullis a quick check that the CLI and bundled skills are working. Prefer verifying UI changes against the running local Mattermost instance before opening or updating a PR.
AWS And PR Artifacts
AWS CLI v2 is installed for uploading screenshots or reports. Cloud Agents should receive AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_S3_BUCKET_NAME as environment variables.
Before uploading, verify credentials with:
aws sts get-caller-identity
- If the configured S3 bucket is public, upload with
aws s3 cpand share the plain object URLhttps://$AWS_S3_BUCKET_NAME.s3.amazonaws.com/<key>instead of generating a presigned URL. Do not hardcode AWS credentials or bucket secrets in the repository.