Skip to content

plugins: decide tool-restriction behavior in Cursor, which ignores disallowed-tools and agent tool lists #12483

Open

Description

@kyle-sexton

Parent

Refs #7556 (probe result).

Problem

Cursor does not enforce our tool restrictions. In Cursor a skill or plugin agent that Claude Code limits can still use the tools it was meant to be denied.

  • Probe, Cursor CLI 2026.10.19-6bbf2c4, 2026-11-02, paired runs:
    • A skill with disallowed-tools: Bash ran a shell command, just like the control skill without the key.
    • A plugin agent with disallowedTools: "Bash" also ran a shell command.
    • Both calls were recorded by a PreToolUse hook.
  • Docs, not probed:

Affected on main today:

  • disallowed-tools in 3 skills: harness-config audit-instructions, audit-pass and audit-prompting-postures.
  • disallowedTools in 2 agents: discovery researcher and intent-tracer.
  • tools: allowlists in 31 agents, among them the read-only reviewers in review, planning, testing, multi-agent and discovery.

Outcome

Decide what a Cursor user may rely on, and record it where the day-job rollout reads it. Options include:

  • treating tool limits as Claude Code-only and documenting that;
  • backing the read-only cases with a hook, since Cursor runs our PreToolUse hooks;
  • using Cursor's readonly agent field, though that would be a Cursor-specific key and is out of scope unless the owner allows it.

Per-job disallowed-tools use (Q561) depends on this answer.

Out of scope

Cursor-specific files or a forked plugin.

Done when

Decision: comment.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 2, 2026
  2. github-actions commented on Nov 2, 2026

    @github-actions
    Contributor

    Proposed work class: none

    Size: Medium
    Complexity: Medium
    Uncertainty: Knowable
    Flags: intent
    Blocked by: none

    Understood: Cursor ignores disallowed-tools on skills and disallowedTools/tools: on agents, so tool limits that Claude Code enforces do not hold there. You want a decision on what Cursor users can rely on, recorded where the rollout reads it. The issue lists three options and picks none, so this needs an owner choice.

    Related, not duplicates: #4 style Cursor decisions on hooks and when_to_use (see the open Cursor issues on hook events and trigger text).

    1. Which approach should we take? RECOMMENDED: document tool limits as Claude Code-only, and back the read-only reviewer agents with a PreToolUse hook only if a hook-based check proves reliable in Cursor. Basis: it keeps one plugin source, and the issue puts Cursor-specific keys and forks out of scope.
    2. Is Cursor's readonly agent field allowed? RECOMMENDED: no. Basis: it is a Cursor-specific key and the issue treats it as out of scope unless the owner allows it.

    To answer, post a comment that starts with this line:

    **Decision recorded.** <answer>
    

    Automated triage. A maintainer reviews it.

  3. melodic-automation-lanes commented on Nov 2, 2026

    @melodic-automation-lanes
    Contributor

    The triage verdict left this issue at status: needs-decision:

    • flagged: intent
    • held by status: needs-decision
    • no lanes App verdict comment shows whether an earlier verdict was flagged
  4. melodic-automation-lanes commented on Nov 2, 2026

    @melodic-automation-lanes
    Contributor

    Refinement. A read-only run explored this repository, searched its issues and pull requests, and read the allowed docs to draft what follows. On an issue a listed human filed, it counts as the issue's spec once posted, while unedited; it is still model text, so check it.

    Intended outcome: Tool limits (disallowed-tools, disallowedTools, agent tools:) are documented as Claude Code-only, with a hook-backed read-only check for the reviewer agents only if one is shown to hold in Cursor.

    Related work

    Open questions

    1. Which approach should Cursor users be told to rely on: treat tool limits as Claude Code-only and document that, back read-only cases with a PreToolUse hook, or both?
      RECOMMENDED: Document tool limits as Claude Code-only. Add hook backing for the read-only reviewer agents only after a probe shows a PreToolUse deny holds in Cursor. Basis: judgment
    2. Is Cursor's readonly agent field allowed, even though it is a Cursor-specific key?
      RECOMMENDED: No. Keep one plugin source and leave the field out. Basis: judgment
    3. Where should the decision be recorded for the day-job rollout to read it?
      RECOMMENDED: Add a Cursor section to docs/upstream/claude-code.md, or to the rollout doc if one exists. The issue does not name the file, so the owner should pick it. Basis: .base/docs/upstream/claude-code.md:39
    4. If the hook route is chosen, which agents count as read-only and must be hook-backed: all 31 agents with tools: allowlists, or only the reviewers in review, planning, testing, multi-agent and discovery?
      RECOMMENDED: Only the read-only reviewers, plus the two disallowedTools agents (researcher, intent-tracer). A hook for every allowlist is too broad. Basis: judgment
    5. Does per-job disallowed-tools use (Q561) proceed on the assumption that it holds only in Claude Code?
      RECOMMENDED: Yes. Q561 should state that it is Claude Code-enforced only. Basis: judgment

    Sources read

    • /home/runner/work/claude-code-plugins/claude-code-plugins/refine-data/context.json: the issue body gives the Cursor probe result, the affected skills and agents, and the three options. No **Decision recorded.** comment exists.
    • .base/docs/upstream/claude-code.md:39: the upstream-behavior table is the likely place for a recorded Cursor limitation.
    • .base/plugins/harness-config/CHANGELOG.md:305: audit-pass uses disallowed-tools as a narrowing aid, and the read-only contract is instruction-held.

    To answer, post a comment that starts with this line:

    **Decision recorded.** <answer>
    

    Automated refinement by the lanes App. Answer with a comment whose first line is **Decision recorded.**.

  5. kyle-sexton commented on Nov 2, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded. Accept the triage recommendations, with one placement choice. (1) Document tool limits (disallowed-tools, disallowedTools, agent tools:, skill allowed-tools) as enforced by Claude Code only. Add PreToolUse hook backing for read-only agents only after a probe shows a PreToolUse deny holds in Cursor. (2) No Cursor-specific readonly field: one plugin source. (3) Record it in one marketplace-level Cursor compatibility note, the same file #12484 creates (docs/cursor-compatibility.md), so Cursor facts have a single home. (4) If hook backing is later added, it covers the read-only reviewer agents plus researcher and intent-tracer, not all 31 allowlists. (5) Q561's per-job disallowed-tools states that only Claude Code enforces it. Basis: #7556 probe (paired runs showed both keys ignored). Decided under the owner's standing direction (decide from evidence; no intent, security or cost question here: these limits scope agent behavior and are not a secret or token boundary).

  6. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    status: needs-decisionAwaiting a human or maintainer judgment call.
    on Nov 2, 2026
  7. melodic-automation-lanes commented on Nov 2, 2026

    @melodic-automation-lanes
    Contributor

    This records a re-fire of an earlier refusal, not a new refusal. The lanes kill switch stopped run 41522469600, the work-resolve-issue run that agent-ready started, before it did any work; that run ended at 2026-11-02T20:52:24Z. work-unblock has now removed and added agent-ready back to start a fresh run. A kill-switch refusal is no fault in this issue or the lanes, so it never counts against later re-fires; after limits.limit-stops-per-issue of them since a person last added agent-ready or a run last reported, work-unblock waits longer before each one, up to 24 hours.

  8. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 2, 2026
  9. github-actions commented on Nov 2, 2026

    @github-actions
    Contributor
    No description provided.
  10. github-actions commented on Nov 2, 2026

    @github-actions
    Contributor
    No description provided.
  11. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 2, 2026
  12. melodic-automation-lanes commented on Nov 2, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue lane stopped partway through this issue and needs a person.

    Reason: security

    Why, in the run's own words:

    The run did not start: the issue's title or body changed after agent-ready was added, so the runner wrote no issue file for the skill and no model ran.

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41523578084

    To retry, remove needs-human and add agent-ready again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.priority: mediumReal value, no hard deadline; normal backlog flow.

    Type

    Fields

    Work status

    needs-owner-decision

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions