Skip to content

Follow up Cursor upstream updates: .cursor/permissions.json (IDE auto-run surface) and .cursor/BUGBOT.md checks #2399

Description

@dyoshikawa

Summary

Cursor's IDE/Agent auto-run permission surface (.cursor/permissions.json) was materially expanded during 2026-05/06 by the Auto-review run mode and the SDK's local.autoReview routing, and Bugbot's .cursor/BUGBOT.md code-review instruction files remain an actively developed surface. rulesync supports neither: permissions covers only the CLI's .cursor/cli.json, and cursor is absent from the checks feature.

Recent Releases

Source: cursor.com/changelog (paginated at /changelog/page/N) plus the official docs.

  • Cursor Router — 2026-07-22 — changelog — model routing; dashboard-controlled, no repo config file.
  • v3.11 Side Chats & Conversation Search — 2026-07-10 — changelog — announces conversation-level hooks (beforeSubmitPrompt, afterAgentResponse, afterAgentThought, stop, subagentStart) for cloud agents.
  • v3.10 Team Marketplaces & MCPs — 2026-06-30 — changelog — team MCP servers distributed from the dashboard, not a repo file.
  • Bugbot update — 2026-06-10 — changelog page 2 — 3× faster reviews, /review, GitHub/GitLab sync. Bugbot remains actively developed.
  • SDK update — 2026-06-04 — changelog page 3local.autoReview routing configured through permissions.json with autoRun.allow_instructions / autoRun.block_instructions.
  • v3.6 Auto-review run mode — 2026-05-29 — changelog page 3 — new approval mode driven by a classifier, with custom classifier instructions.

Gaps

1. permissions — .cursor/permissions.json (IDE / Agent auto-run surface) unsupported

  • Upstream: ~/.cursor/permissions.json and <workspace>/.cursor/permissions.json with mcpAllowlist: string[], terminalAllowlist: string[], and autoRun: { allow_instructions: string[], block_instructions: string[] }. JSONC is supported; a key present in the file "replaces the corresponding IDE allowlist entirely", and per-user and per-repo arrays are concatenated. — permissions reference. Materially expanded in this research window by Auto-review run mode (v3.6, 2026-05-29) and the SDK update routing local.autoReview through permissions.json (2026-06-04).
  • rulesync: project + global for the CLI surface only. src/features/permissions/cursor-permissions.ts writes .cursor/cli.json / .cursor/cli-config.json with permissions.{allow,deny} Type(pattern) tokens plus a cursor override carrying approvalMode / sandbox. unsupported for .cursor/permissions.jsongrep -rn "permissions.json|autoRun|mcpAllowlist|terminalAllowlist" src/ returns no Cursor adapter, and the dry-run emits only .cursor/cli.json (project) and .cursor/cli-config.json (global).
  • History: Follow up Cursor upstream updates: IDE .cursor/permissions.json (mcpAllowlist, terminalAllowlist, autoRun) #1743 filed this and was closed on 2026-06-08 without implementation, explicitly noting it "can be refiled as a focused feature issue once the canonical shape for autoRun (and the allowlist mapping) is decided". Still absent from src/**; the upstream surface has grown since.

2. checks — .cursor/BUGBOT.md code-review instruction files unsupported

  • Upstream: "Create .cursor/BUGBOT.md files to provide project-specific context for reviews. Bugbot always includes the root .cursor/BUGBOT.md file and any additional files found while traversing upward from changed files." Nested per-directory BUGBOT.md files are supported. — Bugbot docs.
  • rulesync: unsupported. The checks feature registry toolCheckFactories (src/features/checks/checks-processor.ts) contains only amp and hermesagent, and getToolTargets derives from that map, so cursor is absent from the checks column. No occurrence of BUGBOT anywhere under src/.

Proposed Follow-up

  1. Add a CursorIdePermissions adapter emitting .cursor/permissions.json at project and global scope. Derive mcpAllowlist from canonical mcp allow rules and terminalAllowlist from canonical bash/shell allow rules; expose autoRun.allow_instructions / autoRun.block_instructions through a cursor-scoped override block in .rulesync/permissions.jsonc, since they are free-form natural-language hints with no canonical category → pattern → action equivalent. Because upstream treats a present key as fully replacing the IDE allowlist, the merge semantics need an explicit decision. This is a public-schema decision that needs maintainer sign-off before implementation.
  2. Add a CursorCheck adapter rendering .rulesync/checks/*.md into a project-scoped .cursor/BUGBOT.md, concatenating the checks since Bugbot takes one aggregated instruction file per directory rather than per-check files. Global scope does not apply — Bugbot reads repository files only. Canonical severity / tools frontmatter has no Bugbot equivalent and would be rendered as prose or dropped.

Dimensions verified as already current

  • hooksCURSOR_HOOK_EVENTS (src/types/hooks.ts) contains all 21 documented events (18 agent + 2 tab + workspaceOpen), matching the hooks docs exactly. Per-entry command / type / prompt / timeout / loop_limit / failClosed / matcher are all mapped in src/features/hooks/cursor-hooks.ts; project and global both emit .cursor/hooks.json.
  • rules — docs still document only description, globs, alwaysApply; src/features/rules/cursor-rule.ts matches. User/Team rules are dashboard-stored, not files.
  • skills — docs list name, description, paths, disable-model-invocation, metadata; src/features/skills/cursor-skill.ts matches.
  • subagents — docs list name, description, model, readonly, is_background; src/features/subagents/cursor-subagent.ts matches, both scopes.
  • mcp.cursor/mcp.json project + global; McpServerSchema is a looseObject and CursorMcp writes servers verbatim, so newer keys (envFile, auth) pass through. ${env:NAME} interpolation is handled.
  • permissions (CLI) — the approvalMode enum (src/types/permissions.ts) already includes the v3.6 auto-review value, plus sandbox passthrough.
  • ignore.cursorignore emitted; .cursorindexingignore is a recorded intentional non-goal (Follow up Cursor upstream updates: .cursorindexingignore (indexing-only ignore file) #1923).
  • plugins/marketplace — closed as out-of-scope wontfix by maintainer decision (Follow up Cursor upstream updates: Plugins/Marketplace packaging surface (Cursor 2.5) #1813, closed 2026-06-11).

Open questions / unconfirmed

  • https://cursor.com/changelog is SPA-rendered but WebFetch returned usable content, and paginated history is reachable at /changelog/page/N. Per-version slugs such as /changelog/3-11 return 404, so a few point-release pages could not be opened individually; the paginated index was used instead.
  • https://cursor.com/docs/rules.md, /docs/skills.md, /docs/bugbot.md, /docs/reference/permissions.md return 404; the HTML pages were used and are consistent where both were reachable.
  • Global ~/.cursor/commands support: no official docs page for custom slash commands could be retrieved, yet CursorCommand.getSettablePaths ignores global. This would be an over-claim in the support matrix rather than an upstream gap — worth a separate check.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    consideringenhancementNew feature or requestmaintainer-scrapRough notes for AI implementation. Not for human eyes.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions