DEV Community

Cover image for Taming 380+ Agent Skills in Cursor: Selective Injection over Context Bloat
linweidao
linweidao

Posted on

Taming 380+ Agent Skills in Cursor: Selective Injection over Context Bloat

When experimenting with alirezarezvani/claude-skills—a massive catalog of 380+ agent skills covering architecture, debugging, and compliance—the immediate temptation is to wire the entire directory straight into your workspace.

Don't do it.

Bluntly dumping hundreds of skill definitions into .cursorrules or global system prompts wastes context tokens, degrades model instruction-following, and leads to retrieval interference. Claude Code and Codex handle large dynamic tool registries through progressive loading, but IDE-based agents like Cursor and VS Code require strict context pruning.

The Friction: Global Injection vs. Context Limits

Each skill file carries markdown frontmatter, execution scripts, and explicit guardrails. Loading even 40 skills simultaneously pushes 25k–40k tokens into every prompt turn before you even paste a stack trace.

To adopt alirezarezvani/claude-skills effectively in Cursor, we isolate only domain-relevant subtrees (e.g., engineering/ and code-review/) and map them directly into Cursor's modular .cursor/rules/ directory using targeted extraction.

The Deliverable: Selective Skill Compiler

Run this lightweight bash script in your project root to pull only the engineering rules and build a clean, scoped .cursor/rules/claude-skills.mdc file:

#!/usr/bin/env bash
set -euo pipefail

SKILLS_DIR=".claude-skills-cache"
TARGET_RULE=".cursor/rules/claude-skills.mdc"
mkdir -p .cursor/rules "$SKILLS_DIR"

# Sparse-checkout targeted domains only
if [ ! -d "$SKILLS_DIR/.git" ]; then
  git clone --depth 1 --filter=blob:none --no-checkout \
    https://github.com/alirezarezvani/claude-skills.git "$SKILLS_DIR"
  pushd "$SKILLS_DIR" > /dev/null
  git sparse-checkout set skills/engineering skills/software-development
  git checkout
  popd > /dev/null
fi

# Compile into a scoped Cursor rule
cat << 'EOF' > "$TARGET_RULE"
---
description: "Core Engineering Patterns from claude-skills"
globs: *.{ts,js,py,go,rs}
alwaysApply: false
---

# Selected Engineering Guardrails
EOF

find "$SKILLS_DIR/skills" -name "SKILL.md" -exec cat {} + >> "$TARGET_RULE"
echo "Compiled active skills into $TARGET_RULE"
Enter fullscreen mode Exit fullscreen mode

Setting alwaysApply: false ensures Cursor only pulls the skills when your prompt or file matching calls for them, keeping baseline conversation turns lightweight.

Managing Token Overhead in Heavy Sessions

Even with selective compilation, running deep architectural reviews alongside detailed rule files swells prefix tokens quickly. In our workflow, we route Cursor's custom OpenAI/Anthropic API calls through B-Lost's fast proxy endpoint, noting that native prompt caching cuts heavy multi-turn context costs by ~80-90% without losing chat history. When your system prefix remains stable across consecutive prompts, prompt caching turns an expensive 30k-token prompt into near-zero marginal inference overhead.

Final Takeaway

alirezarezvani/claude-skills is one of the most comprehensive skill repositories available for coding agents, but treating it as an all-in-one bundle breaks token economy. Filter by domain, enforce lazy invocation via .cursor/rules/, and let prompt caching handle the rest.

Top comments (1)

Collapse
 
reidmarlow profile image
Reid Marlow •

The sparse checkout is a solid cleanup, but putting globs on *.{ts,js,py,go,rs} has a sneaky trap in Cursor. Even with alwaysApply: false, Cursor evaluates the glob against any active editor tab or touched file. The moment you edit a python or typescript file, the entire concatenated rule dumps into the prompt anyway.

The bigger headache with concatenating forty markdown files into one document is rule collision. You get competing linter rules and contradictory testing instructions fighting in the same context window. Keeping the skill files separate and feeding the agent a compact two-tier index of names and trigger descriptions usually works better. The model reads the specific file only when the task actually calls for it, without context bloat.