# Toggle (or allowlist) for Agent Skills roots — stop loading ~/.claude/skills and ~/.codex/skills when I only want .cursor / .agents

**URL:** <https://forum.cursor.com/t/toggle-or-allowlist-for-agent-skills-roots-stop-loading-claude-skills-and-codex-skills-when-i-only-want-cursor-agents/160199>\
**Category:** Feature Requests\
**Tags:** cli, skills\
**Created:** [May 10, 2026, 5:12am UTC](https://forum.cursor.com/t/toggle-or-allowlist-for-agent-skills-roots-stop-loading-claude-skills-and-codex-skills-when-i-only-want-cursor-agents/160199 "2026-05-10T05:12:08Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![jubi](https://sea3.discourse-cdn.com/cursor1/user_avatar/forum.cursor.com/jubi/32/108131_2.png) [@jubi](https://forum.cursor.com/u/jubi)\
**Post date:** [May 10, 2026, 5:12am UTC](https://forum.cursor.com/t/toggle-or-allowlist-for-agent-skills-roots-stop-loading-claude-skills-and-codex-skills-when-i-only-want-cursor-agents/160199/1 "2026-05-10T05:12:09Z")

</div>

### Feature request for product/service

Cursor CLI

### Describe the request

I use Claude Code and Codex with skills stored under the standard compatibility paths (~/.claude/skills/, ~/.codex/skills/, and project .claude/skills/ /  
.codex/skills/). I want to keep those directories for those tools.

Separately, I maintain Cursor-specific skills under ~/.cursor/skills/ and ~/.agents/skills/ (and project .cursor/skills/ / .agents/skills/).

Problem: Cursor’s docs say that for compatibility it also loads skills from the Claude and Codex directories. I don’t want Cursor’s Agent to discover or surface  
skills from those compatibility paths at all—I want Cursor to only use the .cursor / .agents skill roots unless I opt in.

Requested behavior: A setting (names are illustrative) such as:

• “Load Claude/Codex compatibility skill directories” — default on for backward compatibility, off for users who want isolation; or  
• cursor.agentSkills.roots allowlist / cursor.agentSkills.excludeRoots blocklist for filesystem roots.

Why this matters:

• Avoids duplicate or conflicting guidance when the same workflows exist for different ecosystems.  
• Keeps Cursor’s Agent context focused on Cursor-native skills I intentionally placed under .cursor / .agents.  
• Lets me share one machine with multiple agent CLIs without merging their skill namespaces.

Related: This overlaps with broader “too many skills loaded / duplication” concerns—for example: Critical Issue: Duplicate Skills Loading Causing Context Window  
Waste and Confusion ([Critical Issue: Duplicate Skills Loading Causing Context Window Waste and Confusion](https://forum.cursor.com/t/critical-issue-duplicate-skills-loading-causing-context-window-waste-and-confusion/150137)).

Docs reference: Agent Skills — Skill directories ([Agent Skills | Cursor Docs](https://cursor.com/docs/skills)) (compatibility loading from Claude and Codex paths).

Thanks for considering this—happy to beta-test or clarify expected UX (Settings → Rules vs JSON).

### Operating System (if it applies)

MacOS

---

<div class="post-metadata">

**Author:** ![eli.wavv](https://sea3.discourse-cdn.com/cursor1/user_avatar/forum.cursor.com/eli.wavv/32/83865_2.png) [@eli.wavv](https://forum.cursor.com/u/eli.wavv)\
**Post date:** [June 8, 2026, 8:51pm UTC](https://forum.cursor.com/t/toggle-or-allowlist-for-agent-skills-roots-stop-loading-claude-skills-and-codex-skills-when-i-only-want-cursor-agents/160199/4 "2026-06-08T20:51:29Z")

</div>

Please add this. Right now, even with only a couple of plugins installed, my agent has 50+ skills available. That is far more than I want and adds a lot of unnecessary prompt/context bloat.

A concrete example: I have the Sentry plugin installed, but I only need it for a few specific MCP tools exposed by the MCP server it configures. I do not need the skills it exports, and I already instruct my agent directly in my own prompts when I want it to use those MCP tools.

Currently, just having the Sentry plugin installed seems to automatically add around 30 skills, with no obvious way to disable them in Cursor settings. A per-plugin skills toggle, allowlist, or global “only enable selected skills” option would be very useful.

---

<div class="post-metadata">

**Author:** ![kevinn](https://sea3.discourse-cdn.com/cursor1/user_avatar/forum.cursor.com/kevinn/32/101206_2.png) [@kevinn](https://forum.cursor.com/u/kevinn)\
**Post date:** [June 8, 2026, 8:53pm UTC](https://forum.cursor.com/t/toggle-or-allowlist-for-agent-skills-roots-stop-loading-claude-skills-and-codex-skills-when-i-only-want-cursor-agents/160199/5 "2026-06-08T20:53:34Z")

</div>

Hi @here

> [@jubi](#):
>
> I don’t want Cursor’s Agent to discover or surface  
> skills from those compatibility paths at all—I want Cursor to only use the .cursor / .agents skill roots unless I opt in.

You can disable this today! Head to Cursor Settings and go to Rule, Skills and Subagents. Then toggle this off:

 ![Screenshot 2026-06-08 at 1.52.10 PM](https://us1.discourse-cdn.com/cursor1/original/3X/1/0/10aa019e384b55b615d86e221d10838886585535.png)

---

<div class="post-metadata">

**Author:** ![zar42stra](https://sea3.discourse-cdn.com/cursor1/user_avatar/forum.cursor.com/zar42stra/32/101397_2.png) [@zar42stra](https://forum.cursor.com/u/zar42stra)\
**Post date:** [June 19, 2026, 6:53pm UTC](https://forum.cursor.com/t/toggle-or-allowlist-for-agent-skills-roots-stop-loading-claude-skills-and-codex-skills-when-i-only-want-cursor-agents/160199/6 "2026-06-19T18:53:27Z")

</div>

This setting doesn’t apply to `cursor-cli`, though, which is what OP asked about. How do we do the equivalent for `cursor-cli`?

---

<div class="post-metadata">

**Author:** ![zar42stra](https://sea3.discourse-cdn.com/cursor1/user_avatar/forum.cursor.com/zar42stra/32/101397_2.png) [@zar42stra](https://forum.cursor.com/u/zar42stra)\
**Post date:** [June 20, 2026, 4:23am UTC](https://forum.cursor.com/t/toggle-or-allowlist-for-agent-skills-roots-stop-loading-claude-skills-and-codex-skills-when-i-only-want-cursor-agents/160199/7 "2026-06-20T04:23:33Z")

</div>

Composer 2.5 gave me the cursor-agent wrapper script below. I confirmed that it works on Linux. 😃 It also filters out Cursor’s built-ins by default.

```auto
#!/usr/bin/env bash
# cursor-agent-skill-filter — run cursor-agent with third-party skills hidden
#
# Problem: cursor-agent auto-discovers skills from many compatibility roots
# (~/.claude/skills, ~/.codex/skills, ~/.claude/plugins, ~/.cursor/plugins,
# ~/.cursor/skills-cursor, ~/.agents/skills, plus project .claude/.codex trees).
# The IDE toggle "Include third-party Plugins, Skills, and other configs" does
# NOT apply to the CLI — there is no cli-config.json equivalent.
#
# Solution: re-exec inside a private mount namespace (unshare) and bind-mount an
# empty directory over those paths. Only user/project Cursor skills remain
# visible (~/.cursor/skills/, .cursor/skills/). skills-cursor is mounted
# read-only so Cursor's managed-skills sync cannot repopulate it at runtime.
# Claude Code / Codex sessions in other terminals are unaffected.
#
# Usage:
# cursor-agent-skill-filter [cursor-agent args...]
# cursor-agent-skill-filter --cursor-skills # also show ~/.cursor/skills-cursor/
# cursor-agent-skill-filter --all-skills # no filtering (plain cursor-agent)
#
# Environment:
# CURSOR_AGENT_ALL_SKILLS=1 same as --all-skills
# CURSOR_AGENT_CURSOR_SKILLS=1 same as --cursor-skills
# CURSOR_AGENT_SKILL_FILTER_DEBUG=1 print mount diagnostics to stderr
#
# Requirements: Linux, util-linux (unshare), user namespaces enabled
#
set -uo pipefail

all_skills=0
cursor_skills=0
passthrough=()
while [[$# -gt 0]]; do
    case "$1" in
        --all-skills) all_skills=1; shift ;;
        --cursor-skills) cursor_skills=1; shift ;;
        *) passthrough+=("$1"); shift ;;
    esac
done
[["${CURSOR_AGENT_ALL_SKILLS:-}" == 1]] && all_skills=1
[["${CURSOR_AGENT_CURSOR_SKILLS:-}" == 1]] && cursor_skills=1

_ALL_HIDE_TARGETS=(
    "$HOME/.claude/skills"
    "$HOME/.codex/skills"
    "$HOME/.cursor/skills-cursor"
    "$HOME/.claude/plugins"
    "$HOME/.cursor/plugins"
    "$HOME/.agents/skills"
)

_debug() {
    [["${CURSOR_AGENT_SKILL_FILTER_DEBUG:-}" == 1]] || return 0
    echo "cursor-agent-skill-filter: $*" >&2
}

_cleanup_stale_mounts() {
    local target
    for target in "${_ALL_HIDE_TARGETS[@]}"; do
        while mountpoint -q "$target" 2>/dev/null; do
            _debug "cleaning stale mount on $target"
            umount "$target" 2>/dev/null || break
        done
    done
}

_skill_targets() {
    local targets=(
        "$HOME/.claude/skills"
        "$HOME/.codex/skills"
        "$HOME/.claude/plugins"
        "$HOME/.cursor/plugins"
        "$HOME/.agents/skills"
    )
    if [["$cursor_skills" -eq 0]]; then
        targets+=("$HOME/.cursor/skills-cursor")
    fi
    printf '%s\n' "${targets[@]}"
}

_empty_dir=""
_mounts=()

_teardown() {
    local target
    for target in "${_mounts[@]}"; do
        umount "$target" 2>/dev/null || true
    done
    if [[-n "$_empty_dir"]]; then
        rmdir "$_empty_dir" 2>/dev/null || true
    fi
}

_setup() {
    _empty_dir="$(mktemp -d)"
    local target
    while IFS= read -r target; do
        [[-n "$target"]] || continue
        mkdir -p "$target"
        if mount --bind "$_empty_dir" "$target"; then
            _mounts+=("$target")
            if [["$target" == "$HOME/.cursor/skills-cursor"]]; then
                mount -o remount,bind,ro "$target" 2>/dev/null \
                    && _debug "hid (ro) $target" \
                    || _debug "hid $target (ro remount failed)"
            else
                _debug "hid $target"
            fi
        else
            echo "cursor-agent-skill-filter: warning: failed to hide $target" >&2
        fi
    done < <(_skill_targets)
}

if [["$all_skills" -eq 0 && "${CURSOR_AGENT_UNSHARED:-}" != 1]]; then
    _cleanup_stale_mounts
    reexec_args=()
    [["$cursor_skills" -eq 1]] && reexec_args+=(--cursor-skills)
    reexec_args+=("${passthrough[@]}")
    exec unshare --user --mount --map-root-user -- \
        env CURSOR_AGENT_UNSHARED=1 "$0" "${reexec_args[@]}"
fi

if [["$all_skills" -eq 0]]; then
    trap _teardown EXIT INT TERM
    _setup
    _debug "skill isolation active (cursor_skills=$cursor_skills)"
fi

exec cursor-agent "${passthrough[@]}"

```

---

<div class="post-metadata">

**Author:** ![eli.wavv](https://sea3.discourse-cdn.com/cursor1/user_avatar/forum.cursor.com/eli.wavv/32/83865_2.png) [@eli.wavv](https://forum.cursor.com/u/eli.wavv)\
**Post date:** [June 25, 2026, 9:25pm UTC](https://forum.cursor.com/t/toggle-or-allowlist-for-agent-skills-roots-stop-loading-claude-skills-and-codex-skills-when-i-only-want-cursor-agents/160199/9 "2026-06-25T21:25:56Z")

</div>

Is there any way to selectively choose which third-party plugins/skills to enable? I love that it can read my Claude or Codex skills, but there are also some built-in ones to Claude which I would like to disable in Cursor while keeping most of the other detected third-party plugins/skills.

---

<div class="post-metadata">

**Author:** ![bigo](https://sea3.discourse-cdn.com/cursor1/user_avatar/forum.cursor.com/bigo/32/119808_2.png) [@bigo](https://forum.cursor.com/u/bigo)\
**Post date:** [September 3, 2026, 9:24pm UTC](https://forum.cursor.com/t/toggle-or-allowlist-for-agent-skills-roots-stop-loading-claude-skills-and-codex-skills-when-i-only-want-cursor-agents/160199/10 "2026-09-03T21:24:34Z")

</div>

I left the same note on this [basically-duplicate](https://forum.cursor.com/t/no-way-to-opt-out-of-third-party-claude-code-codex-config-loading-the-flag-is-hardcoded/166558/9) post, but: Cursor please, it’s crazy-making that a feature toggle for this was implemented for the IDE but not the agent. Automatically loading configuration from other tools is wildly user-hostile behavior for a coder’s tool in the first place; not allowing us to disable it is inexcusable.

---

<div class="post-metadata">

**Author:** ![Strike\_Vipe](https://avatars.discourse-cdn.com/v4/letter/s/dbc845/32.png) [@Strike\_Vipe](https://forum.cursor.com/u/Strike_Vipe)\
**Post date:** [November 3, 2026, 5:11am UTC](https://forum.cursor.com/t/toggle-or-allowlist-for-agent-skills-roots-stop-loading-claude-skills-and-codex-skills-when-i-only-want-cursor-agents/160199/12 "2026-11-03T05:11:12Z")

</div>

### Where does the bug appear (feature/product)?

Cursor IDE

### Describe the Bug

Cursor scans and injects the skill catalogs of other AI agents into every  
request. On my machine it reads ~/.claude/skills, ~/.claude/plugins/cache/\*\*,  
and ~/.codex/skills, and puts roughly 90 skill entries (~10-14K tokens) into  
the prompt before any user content is sent. There is no setting to turn this  
off, and no way for a user to say “these skills are not mine, they are not  
relevant to this workspace”.

Impact

- About 90 entries / 10-14K tokens of fixed prompt on every single request,  
unrelated to the task. On my setup that is roughly 35-45% of the whole  
prompt, paid on every turn.
- It is another tool’s configuration. My Codex setup silently changes Cursor’s  
behaviour and prompt size, and the reverse.
- The same skill is often present in several directories; which path wins is  
arbitrary and changes between requests.

Why this is a problem  
Skills are a good feature, but importing every other agent’s directory by  
default, with no switch and no visibility, takes control away from the user.  
The cost is invisible too: the UI shows neither which skills are loaded, nor  
where they come from, nor what they cost. Resurrecting a skill from a second  
directory when I remove it from the first means there is no supported way to  
opt out at all. A default-on, all-sources behaviour with no override is hard  
to defend.

### Steps to Reproduce

1. Have skills installed for Claude Code and Codex:  
~/.claude/skills/_/SKILL.md and ~/.codex/skills/_/SKILL.md
2. Open Cursor in any workspace. Every request now carries a catalog entry  
(absolute path + description) for each of those skills.
3. Try to opt out: move ~/.claude/skills/brainstorming out of that directory.  
On the next request the same skill is listed again, this time loaded from  
~/.codex/skills/brainstorming.
4. No setting, no per-source toggle and no per-skill switch changes this.

### Expected Behavior

Requests, in priority order

1. A global setting “Import skills from other agents’ directories”, default off.
2. Per-source toggles: ~/.claude/skills, ~/.claude/plugins/cache/\*\*,  
~/.codex/skills, project .agents/skills, each switchable on its own.
3. Per-skill enable/disable in the Skills panel, persisted and actually  
honoured: a disabled or deleted skill must not come back from another source.
4. Show the source path and the token cost next to each skill in the list.
5. A settings.json key or env var for the same thing, so it can be scripted.

### Operating System

Windows 10/11

### Version Information

Version: 3.27.22 (system setup)  
VS Code Extension API: 1.128.0  
Commit: b1aa50cb6db84fd3e8c808259cb172ea73425c10  
Date: 2026-10-27T00:33:02.045Z  
Layout: IDE  
Build Type: Stable  
Release Track: Default  
Electron: 42.11.16  
Chromium: 148.0.7778.280  
Node.js: 24.19.0  
V8: 14.8.178.38-electron.0  
xterm.js: 6.1.0-beta.291  
OS: Windows\_NT x64 10.0.26200

### Does this stop you from using Cursor

No - Cursor works, but with this issue
