{"id":34804,"date":"2026-09-18T05:00:00","date_gmt":"2026-09-18T03:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=34804"},"modified":"2026-09-17T13:54:14","modified_gmt":"2026-09-17T11:54:14","slug":"cursor-under-the-hood-mcp-skills-rules-and-plugins","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/en\/cursor-under-the-hood-mcp-skills-rules-and-plugins\/","title":{"rendered":"Cursor under the hood: MCP, Skills, Rules, and Plugins"},"content":{"rendered":"\n<p>Most people who hear about Cursor for the first time picture a &#8220;code editor with an AI chat on the side<del>&#8220;.<\/del><ins>.&#8221;<\/ins> That is a bit like calling an airplane a &#8220;car that flies&#8221;. Technically true, but it misses the point.<\/p>\n\n\n\n<p>Cursor does not just suggest the next line of code. It can read your whole project, open a terminal, run tests, fix a bug, pull a design from Figma, check a ticket in your task tracker, and open a Pull Request at the end. That whole &#8220;nervous system&#8221; sits on a few mechanisms most people have never heard of: MCP, Rules, Commands, Skills<ins>,<\/ins> and plugins. <ins><\/ins><\/p>\n\n\n\n<p>This article breaks them down without the fluff.<del><\/del><\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aad2e5d1e851&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aad2e5d1e851\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"683\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image1-2-1024x683.png\" alt=\"The Cursor AI Ecosystem\" class=\"wp-image-34789\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image1-2-1024x683.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image1-2-300x200.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image1-2-768x512.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image1-2.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 1 The Cursor AI Ecosystem<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>How it actually works under the hood<\/strong><\/strong><\/h2>\n\n\n\n<p>A regular AI chat works like a conversation through a window: you paste a code snippet, you get an answer, and it&#8217;s done. It does not see your project, it does not know your folder structure, and it has no idea you already have a function for the same thing.<\/p>\n\n\n\n<p>Cursor works differently, because it has two things a plain chat does not.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The first is <strong>code indexing<\/strong>. Cursor builds embeddings, mathematical &#8220;fingerprints&#8221; of every file in the project, so during a conversation, it can find the right file on its own instead of waiting for you to point at it. Your code stays on your disk. Only those vectors go to the cloud.<\/li>\n\n\n\n<li>The second is the <strong>agent loop<\/strong>. Instead of one answer, you get a cycle: the agent reads a file, edits code, runs a terminal command, checks the result, and if something failed, it tries again. On its own. Without you clicking &#8220;paste that again.&#8221;<\/li>\n<\/ol>\n\n\n\n<p><strong>Note:<\/strong> this autonomy does not mean the agent does whatever it wants without asking. By default, it always asks for approval before running terminal commands. You can loosen that, but do it carefully.<\/p>\n\n\n\n<p>That loop is exactly why MCP, Rules, Commands, and Skills matter at all. If the agent could not work through multi-step tasks on its own, the whole ecosystem would be useless.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>MCP, or when the agent leaves your codebase<\/strong><\/strong><\/h2>\n\n\n\n<p><strong>MCP (Model Context Protocol)<\/strong> is an open standard that lets the agent talk to tools outside your project: task systems, databases, Figma, GitHub, a browser, and many more. Without it, the agent only sees what sits in the project folder and what you type into the chat. With MCP, it can go out and check something externally on its own.<\/p>\n\n\n\n<p>The simplest analogy: <strong>MCP is like a USB socket for an AI agent<\/strong>. You do not need to invent a new cable for every device. You share one standard and plug in almost any &#8220;adapter&#8221;.<\/p>\n\n\n\n<p>The mechanics are simple. Cursor acts as the client, and each MCP server (a separate, isolated process) unlocks a specific service. You configure it in one file:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n\/\/ .cursor\/mcp.json\n{\n  &quot;mcpServers&quot;: {\n    &quot;github&quot;: {\n      &quot;command&quot;: &quot;npx&quot;,\n      &quot;args&quot;: &#x5B;&quot;-y&quot;, &quot;@modelcontextprotocol\/server-github&quot;],\n      &quot;env&quot;: { &quot;GITHUB_PERSONAL_ACCESS_TOKEN&quot;: &quot;${GITHUB_TOKEN}&quot; }\n    },\n    &quot;figma&quot;: {\n      &quot;url&quot;: &quot;https:\/\/mcp.figma.com\/mcp&quot;\n    }\n  }\n}\n<\/pre><\/div>\n\n\n<p>Then you just write what you want in plain language:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\nFetch GitHub issue #42, implement the fix, write tests, and open a Pull Request.\n<\/pre><\/div>\n\n\n<p>In one flow, the agent reads the issue, analyzes the code, applies changes, adds tests, commits, pushes, and finally returns a link to the finished PR. No jumping between five apps.<\/p>\n\n\n\n<p>The same pattern works with Figma (the agent pulls layout, colors, and spacing, then generates a component), with a database (the agent reads a table schema and writes a migration), or with test tools that can self-heal after a failed run.<\/p>\n\n\n\n<p><strong>Pro tip:<\/strong> only keep the MCP servers you actually use every day connected at the same time, two or three at most. Think GitHub for code, Figma for design, Jira for tickets. Everything else just sits there, making it harder for the agent to pick the right tool, so switch it on only when you actually need it.<\/p>\n\n\n\n<p><strong>Security note:<\/strong> keep tokens and API keys in environment variables. Never hardcode them in the config file. That file often ends up in the repository, and then everyone on the team can see your private token.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aad2e5d1f868&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aad2e5d1f868\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"254\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image2-2-1024x254.png\" alt=\"Uproszczony przep\u0142yw zadania z wykorzystaniem zewn\u0119trznego narz\u0119dzia\" class=\"wp-image-34791\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image2-2-1024x254.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image2-2-300x74.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image2-2-768x190.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image2-2-1536x380.png 1536w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image2-2.png 1640w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 2 Simplified task workflow using an external tool<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Rules, Commands, and Skills: the agent&#8217;s brain and hands<\/strong><\/strong><\/h2>\n\n\n\n<p>This is where it gets interesting, because people mix these three up most often. The difference is simple if you put it into one sentence.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Rules<\/strong> are guidelines that the agent should follow all the time, in the background, without being asked.<\/li>\n\n\n\n<li><strong>Commands<\/strong> are concrete actions you trigger yourself when you need them.<\/li>\n\n\n\n<li><strong>Skills<\/strong> are ready-made, more advanced &#8220;abilities&#8221; the agent can load and apply on its own when it decides the situation calls for it, even if nobody told it to.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Rules<\/strong><\/strong><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n---\ndescription: Standards for React components\nglobs: &#x5B;&quot;**\/*.tsx&quot;]\nalwaysApply: false\n---\nFunctional components only, no class components.\nMax 150 lines per component.\nExtract logic longer than 10 lines into a custom hook.\n\n<\/pre><\/div>\n\n\n<p>That rule loads itself only when you work with a .tsx file. Nobody has to remember it. It just works in the background, like editor style settings.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Commands<\/strong><\/strong><\/h3>\n\n\n\n<p>A command you run yourself by typing \/ in chat:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n# .cursor\/commands\/review.md\nReview the current file for:\n1. Unnecessary re-renders\n2. Missing keys in lists\n3. Accessibility issues (aria, focus)\n4. Components longer than 150 lines\nRate each finding as critical, warning, or suggestion.\n\n<\/pre><\/div>\n\n\n<p>You type \/review, and the agent already knows what to do, without you rewriting the checklist every time.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>More info<\/strong><\/strong><\/h3>\n\n\n\n<p><strong>Rule of thumb:<\/strong> if something should always be followed, it is a Rule. If you do it manually and repeatedly, it is a Command. If it is a more complex, self-contained process that the agent can use on its own when needed, it is a Skill.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>&nbsp;<\/td><td><strong>Rules<\/strong><\/td><td><strong>Commands<\/strong><\/td><td><strong>Skills<\/strong><\/td><\/tr><tr><td>Type<\/td><td>passive<\/td><td>active<\/td><td>semi-autonomous<\/td><\/tr><tr><td>Who triggers it<\/td><td>happens automatically<\/td><td>you, via \/<\/td><td>the agent, when it decides it is useful<\/td><\/tr><tr><td>Role<\/td><td>principles and conventions<\/td><td>one-shot actions<\/td><td>richer procedures<\/td><\/tr><tr><td>Example<\/td><td>&#8220;functional components only&#8221;<\/td><td>\/generate-tests<\/td><td>a multi-step code review procedure<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>None of these three live in isolation, though. The real payoff shows up when you stack them:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>a Rule keeps the code consistent in the background,<\/li>\n\n\n\n<li>a Command gives you a manual button to press,<\/li>\n\n\n\n<li>and a skill package to the whole workflow so the agent can run it on its own once it recognizes the situation.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n.cursor\/\n\u251c\u2500\u2500 rules\/\n\u2502   \u2514\u2500\u2500 react.mdc              # always-on conventions for .tsx files\n\u251c\u2500\u2500 commands\/\n\u2502   \u2514\u2500\u2500 review.md              # manual trigger: \/review\n\u2514\u2500\u2500 skills\/\n    \u2514\u2500\u2500 code-review\/\n        \u2514\u2500\u2500 SKILL.md            # full multi-step review workflow, agent can pick it up on its own\n\n<\/pre><\/div>\n\n\n<p>In practice: react.mdc keeps every component consistent without anyone thinking about it. \/review lets you run a quick manual check whenever you feel like it. And the code-review skill wraps a longer procedure (read the diff, check it against the rules, flag issues, suggest fixes) that the agent can decide to use by itself, without you typing a slash command, whenever it is working on something that looks like a pull request.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aad2e5d208f6&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aad2e5d208f6\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"683\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image3-2-1024x683.png\" alt=\"Wsp\u00f3\u0142dzia\u0142anie regu\u0142, komend i umiej\u0119tno\u015bci\" class=\"wp-image-34793\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image3-2-1024x683.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image3-2-300x200.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image3-2-768x512.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image3-2.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 3 The interplay of Rules, Commands, and Skills<\/figcaption><\/figure>\n\n\n\n<p>On top of that sits one more file, AGENTS.md, in the project root. Think of it as a &#8220;project user manual&#8221; for the agent: a short description of architecture, conventions, and how to think about the repository as a whole. No implementation details. Those belong in the rules.<\/p>\n\n\n\n<p><strong>Most common mistake:<\/strong> putting vague lines like &#8220;write clean code&#8221; into rules. The agent ignores them because there is nothing concrete to execute. A rule has to be measurable: &#8220;max 150 lines&#8221;, &#8220;use Zod for validation&#8221;, &#8220;tests with Testing Library&#8221;, not &#8220;be good&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Plugins, or integrations with zero config<\/strong><\/strong><\/h2>\n\n\n\n<p>If configuring MCP in a JSON file sounds like something you do not have time for, good news: some popular tools ship ready-made integrations as plugins with MCP built in. You connect them with one click, log into the service, and that is it. The agent gets access without writing a single line of config.<\/p>\n\n\n\n<p>That is the difference between &#8220;MCP as a protocol you can wire yourself&#8221; and &#8220;a plugin as a ready box&#8221; that hides the same mechanism under the hood, already assembled for you.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Inside the Cursor interface<\/strong><\/strong><\/h2>\n\n\n\n<p>A quick tour of what you are actually looking at once you open Cursor, because half of the ecosystem above only makes sense once you see where it lives on screen.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aad2e5d2136d&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aad2e5d2136d\" class=\"wp-block-image size-full wp-lightbox-container\"><img decoding=\"async\" width=\"207\" height=\"140\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image4-1.png\" alt=\"Operating modes available in the Cursor interface\" class=\"wp-image-34795\"\/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 4 Operating modes available in the Cursor interface<\/figcaption><\/figure>\n\n\n\n<p>The chat box has five modes, picked from a small dropdown next to the input field.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Agent<\/strong>, the default, full-autonomy mode. Reads, edits, runs terminal commands, and iterates until the task is done.<\/li>\n\n\n\n<li><strong>Plan<\/strong>, read-only planning. Breaks a request into a checklist of steps before touching a single file, so you can review the approach first.<\/li>\n\n\n\n<li><strong>Debug<\/strong>, specialized for tracking down errors. Feed it a stack trace or a failing test, and it hunts for the root cause.<\/li>\n\n\n\n<li><strong>Multitask<\/strong>, runs several requests side by side instead of making you wait for one agent to finish before starting the next.<\/li>\n\n\n\n<li><strong>Ask<\/strong>, pure read-only Q&amp;A. Never edits anything, ideal for exploring unfamiliar code safely.<\/li>\n<\/ul>\n\n\n\n<p><strong>Pro tip:<\/strong> start big or risky changes in Plan mode, and split the resulting checklist into smaller groups instead of shipping everything at once. Reviewing a plan before any file gets touched is much cheaper than untangling a half-finished refactor afterward.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>The context panel<\/strong><\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image5-2.png\"><img decoding=\"async\" width=\"688\" height=\"348\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image5-2.png\" alt=\"Panel wykorzystania bud\u017cetu kontekstu\" class=\"wp-image-34797\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image5-2.png 688w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image5-2-300x152.png 300w\" sizes=\"(max-width: 688px) 100vw, 688px\" \/><\/a><figcaption class=\"wp-element-caption\">Fig. 5 Context budget usage panel<\/figcaption><\/figure>\n\n\n\n<p>Every conversation has a token budget, and this panel shows exactly where it goes: the system prompt, tool definitions, your rules, skills, connected MCP tools, any subagents, and finally the conversation itself. <strong>In a long-running chat, that last category, the actual back-and-forth, tends to eat most of the budget<\/strong>.<\/p>\n\n\n\n<p>Once that bar creeps toward full, answers get slower, more expensive, and occasionally less sharp, because the model has to wade through a huge pile of history to find what matters. That is what the \/summarize command is for: it compresses everything so far into a compact summary, frees up most of that budget, and lets you keep working in the same thread instead of starting over with zero context.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Bonus: nobody asked, but you should know<\/strong><\/strong><\/h2>\n\n\n\n<p>Since we are already talking about extending the agent, a few things that rarely make the front page of tutorials, yet change day-to-day work a lot.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Choosing a model is really about budget management<\/strong><\/strong><\/h3>\n\n\n\n<p>The agent can pick the most efficient model for a given task on its own, or you can manually point it at a stronger model for harder problems. Billing works differently depending on what you pick. A regular premium model like Opus 4.6 typically counts as multiple standard requests, so it burns through your monthly quota faster per message. Max Mode changes the accounting entirely: instead of counting flat requests, it bills by tokens, so the price scales directly with how much context goes in and out.<\/p>\n\n\n\n<p>That is exactly why running Max Mode with a heavier model on a huge codebase can burn through a budget far quicker than the same task on a regular model. A rule that works in practice: routine work on the default setting, heavier and token-billed modes only when the regular model truly cannot cope.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>The agent can &#8220;see&#8221; your screen<\/strong><\/strong><\/h3>\n\n\n\n<p>An error screenshot, a browser console dump, a photo of a Figma mockup &#8211; paste the image into the chat, and the agent analyzes it the same way it analyzes text. Sometimes showing is faster than describing.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>External docs also enter the context<\/strong><\/strong><\/h3>\n\n\n\n<p>You can add a link to a library&#8217;s documentation, and Cursor indexes it. Then the agent uses the current API, not whatever it &#8220;remembered&#8221; from training, which can easily be a few versions out of date.<\/p>\n\n\n\n<p><strong>Fun fact:<\/strong> rules and commands written in English usually use about 30% fewer tokens than the same content written in Polish. At scale, that is a real cost difference, even if you still chat with the agent in your native language.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Pros and cons, no sugarcoating<\/strong><\/strong><\/h2>\n\n\n\n<p>None of this article matters without a sober look at where the ecosystem really helps, and where you need to stay careful.<\/p>\n\n\n\n<p><strong>On the plus side<\/strong>, speed wins. A task that used to mean jumping through five apps can now be described in one request. Rules and commands written once work for the whole team, not just for you, as long as they live in the repository. And MCP integrations really shorten the distance between &#8220;I have a ticket&#8221; and &#8220;I have production-ready code that fits this project,&#8221; instead of a generic template invented from thin air.<\/p>\n\n\n\n<p><strong>The downsides are concrete too<\/strong>. An agent with access to many tools at once can sometimes pick the wrong one or do things in an order that surprises you, especially if you configure too many servers at once. Badly written rules (too long, too vague, not split by file type) pollute the context and raise the cost of every conversation with no upside. And in the end, none of this automation removes the need for review. The agent can run for many steps on its own, but you still own what lands in production.<\/p>\n\n\n<div class=\"nsw-o-blogersii-banner\">\n            <picture>\n            <source srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Digital-Desktop_.jpg\" media=\"(min-width: 992px)\" >\n            <source srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Digital-Mob_.jpg\" media=\"(min-width: 300px)\" >            <img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Digital-Desktop_.jpg\" alt=\"\"  class=\"\"  >\n        <\/picture>\n        <div class=\"cnt\">\n                    <div class=\"nsw-m-title-block -h3 -invert  -has-title-margin-bottom-0 -has-title-font-weight-bold\">\n                                <h2 class=\"nsw-m-title-block__title\">Digital<\/h2>\n                <\/div>\n                            <p class=\"has-nsw-p-4-font-size has-invert-color\">\n                Grow your business and gain more satisfied customers with our services in software engineering, e-commerce, mobile and digital customer experience.\n            <\/p>\n                            <a  href=\"https:\/\/sii.pl\/en\/what-we-offer\/digital\/\" class=\"nsw-a-button -ghost -banner-button\"   >\n        <span>Digital offering<\/span>\n    <\/a>\n            <\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Wrap-up and what to set up in week one<\/strong><\/strong><\/h2>\n\n\n\n<p>On paper, this ecosystem sounds more complicated than it is day to day.<\/p>\n\n\n\n<p><strong>If you are starting from zero, a sensible order looks like this:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>One short &#8220;always&#8221; rule with the basics of your tech stack (a dozen lines, no more)<\/li>\n\n\n\n<li>One or two rules scoped to specific file types (components, tests)<\/li>\n\n\n\n<li>One MCP server, the one you use every day (usually version control)<\/li>\n\n\n\n<li>One command for your most repetitive action (code review or generating tests)<\/li>\n<\/ol>\n\n\n\n<p>Everything else added gradually, exactly when you notice the agent repeating the same mistake or you rewrite the same prompt for the third time<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6aad2e5d54d60&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6aad2e5d54d60\" class=\"wp-block-image size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"683\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image6-2-1024x683.png\" alt=\"Ewolucja roli programisty: od pisania kodu do projektowania i nadzorowania systemu\" class=\"wp-image-34799\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image6-2-1024x683.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image6-2-300x200.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image6-2-768x512.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/image6-2.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 6 The evolution of the developer&#8217;s role: from writing code to designing and overseeing systems<\/figcaption><\/figure>\n\n\n\n<p>The trend is fairly clear: less &#8220;the developer writes every line&#8221;, more &#8220;the developer designs a system of rules and integrations, and the agent executes it&#8221;. That is not the end of the profession. It is a shift of emphasis from writing to designing and supervising. And given how fast this ecosystem grows month by month, people who learn to steer it consciously now will have a solid edge once it becomes the default, not a curiosity.<\/p>\n\n\n\n<p><strong>Fun fact:<\/strong> an IT job market report from the turn of 2025\/2026 showed that 75% of companies treat AI\/ML skills as key in hiring, and IT architects were the only specialization whose senior B2B median crossed PLN 30,000 net. AI is not taking developers&#8217; jobs. It is raising the bar to enter the profession.<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;34804&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;1&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;2&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;Cursor under the hood: MCP, Skills, Rules, and Plugins&quot;,&quot;width&quot;:&quot;159&quot;,&quot;_legend&quot;:&quot;{score}\\\/5&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 159px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            5\/5    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Most people who hear about Cursor for the first time picture a &#8220;code editor with an AI chat on the &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/en\/cursor-under-the-hood-mcp-skills-rules-and-plugins\/\">Continued<\/a><\/p>\n","protected":false},"author":821,"featured_media":34802,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1320],"tags":[15523,15077,15055,2622,1639],"class_list":["post-34804","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hard-development","tag-cursor-en","tag-artificial-intelligence-en-2","tag-agentic-ai-en","tag-digital-en","tag-tools-en"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/09\/AI.jpg","category_names":["Hard development"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts\/34804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/users\/821"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/comments?post=34804"}],"version-history":[{"count":1,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts\/34804\/revisions"}],"predecessor-version":[{"id":34806,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts\/34804\/revisions\/34806"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/media\/34802"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/media?parent=34804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/categories?post=34804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/tags?post=34804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}