Umiejętności agenta, MCP czy pliki reguł: co wybrać?
Porównanie trzech metod dostarczania kontekstu dla agentów programistycznych. Analiza kosztów tokenów, narzutu na sesję oraz optymalnego wyboru dla konkretnych zadań.
Umiejętności agenta, serwery MCP i pliki reguł: krótka odpowiedź
Umiejętności agenta, serwery MCP oraz pliki reguł dostarczają wiedzę agentowi programistycznemu. Wybór zależy od przeznaczenia tej wiedzy. MCP (Model Context Protocol) służy do danych, które mogą ulec zmianie przy kolejnym odczycie. Umiejętność (skill) dotyczy procedury, którą można opisać dzisiaj i która pozostanie poprawna za sześć tygodni. Plik reguł (rules file) przeznaczony jest dla kilku faktów, które muszą być prawdziwe w każdej sesji.
Ten wybór wiąże się z kosztem, a jest nim kontekst. Każdy token zużyty na instrukcję, której agent nie potrzebował, to token niedostępny dla analizowanego kodu. Jest to również token, za który płaci się ponownie w każdej turze, ponieważ całe okno kontekstowe jest przesyłane przy każdym żądaniu. Zatem istotne pytanie nie brzmi, który mechanizm może wykonać zadanie. W większości przypadków wszystkie trzy są w stanie to zrobić. Pytanie brzmi, który z nich generuje najniższy koszt, gdy pozostaje nieaktywny.
Koszt poszczególnych elementów przed ich użyciem
Trzy wymienione mechanizmy ładują się w różnych momentach, a różnica w czasie ładowania stanowi o ich odmienności.
Plik reguł ładuje się w całości podczas uruchamiania, w każdej sesji, niezależnie od tego, czy jest istotny. Claude Code odczytuje CLAUDE.md na początku każdej konwersji i ładuje go w całości, bez względu na długość. Dokumentowany cel to poniżej 200 linii na plik, ponieważ dłuższy plik zużywa więcej kontekstu oraz jest mniej skutecznie przestrzegany. Oba te efekty działają w tym samym kierunku, dlatego 900-liniowy plik reguł jest gorszy niż bezużyteczny.
Umiejętność (skill) ładuje się w dwóch etapach. Podczas uruchamiania do kontekstu trafia tylko linia description z frontmattera każdego SKILL.md, dzięki czemu model wie, że umiejętność istnieje i w przybliżeniu wie, kiedy ją zastosować. Treść ładuje się w momencie wywołania umiejętności. 400-liniowy dokument referencyjny nie kosztuje zatem niemal nic, aż do momentu, gdy stanie się potrzebny.
Serwer MCP był dawniej kosztowny i to właśnie w tym obszarze większość czytanych porównań jest już nieaktualna. W obecnym Claude Code wyszukiwanie narzędzi (tool search) jest domyślnie włączone. Na początku sesji ładowane są tylko nazwy narzędzi oraz pole instrukcji serwera, natomiast pełne schematy JSON (JavaScript object notation) są odraczane do momentu, gdy Claude zacznie ich szukać. Dodanie serwera nie kosztuje już tysięcy tokenów na starcie. Nadal wiąże się to z pewnym kosztem, a w konfiguracjach z wyłączonym wyszukiwaniem narzędzi koszt ten jest ponoszony w całości na początku.
The data behind this chart
[
{
"label": "Rules file, 200 lines",
"at_startup": "2,500",
"after_use": "2,500"
},
{
"label": "Skill, 12 KB body",
"at_startup": 40,
"after_use": "3,000"
},
{
"label": "MCP server, tool search on",
"at_startup": 500,
"after_use": "3,200"
},
{
"label": "MCP server, tool search off",
"at_startup": "4,500",
"after_use": "4,500"
}
]Są to szacunki, a nie pomiary z Twojej maszyny. Wynikają one z rozmiaru tekstu ładowanego przez każdy mechanizm, przy założeniu około czterech znaków na token: 200-liniowy plik reguł to około 10 KB markdownu, opis umiejętności to około 160 znaków, a serwer udostępniający dwanaście narzędzi niesie ze sobą około 18 KB schematu oraz 2 KB bloku instrukcji. Claude Code przycina każdy opis narzędzia i każde pole instrukcji serwera do 2 KB, więc ta część ma górny limit. Kolejna sekcja pokazuje, jak odczytać własne, rzeczywiste wartości.
Odczytaj pierwsze dwa wiersze łącznie. Plik reguł kosztuje 2,500 tokenów w sesji, w której nikt go nie potrzebował. Umiejętność kosztuje 40 tokenów w tej samej sesji oraz 3,000 w jednej na dziesięć sesji, w których zostaje uruchomiona. Ostatnie dwa wiersze dotyczą tego samego serwera w dwóch wariantach, z włączonym i wyłączonym wyszukiwaniem narzędzi: 500 tokenów kontra 4,500. Ta różnica jest powodem, dla którego stare porady dotyczące przeładowania kontekstu MCP nadal krążą w obiegu.
Wyszukiwanie narzędzi wymaga modelu obsługującego bloki tool_reference, co na sierpień 2026 oznacza Claude Sonnet 4.5, Haiku 4.5, Opus 4.5 i nowsze. Claude Code wyłącza tę funkcję, gdy ANTHROPIC_BASE_URL wskazuje na hosta innego niż własny (first party), ponieważ większość proxy nie przekazuje tych bloków. Ustaw ENABLE_TOOL_SEARCH, aby kontrolować to zachowanie: false ładuje każdy schemat na początku, true odracza je wszystkie, a auto ładuje je na początku tylko wtedy, gdy mieszczą się w 10% okna kontekstowego.
# Load schemas up front only if they fit in 5% of the window
ENABLE_TOOL_SEARCH=auto:5 claudeKluczowe pytanie: czy dane zmieniają się pomiędzy wywołaniami?
Należy zadać to pytanie w pierwszej kolejności, ponieważ pozwala ono od razu wykluczyć jedną z opcji. Jeśli agent musi odczytać lub zapisać coś, co może ulec zmianie przy kolejnym sprawdzeniu, wymagany jest serwer. System śledzenia zgłoszeń, baza danych, pulpit nawigacyjny monitoringu, własne wewnętrzne API (application programming interface). Zapisanie danych nie rozwiązuje problemu, ponieważ zapisana informacja staje się nieaktualna w momencie, gdy ktoś inny edytuje rekord.
Jeśli odpowiedź pozostanie poprawna za sześć tygodni, nawet bez żadnej konserwacji, należy stworzyć umiejętność (skill). Lista kontrolna wydania (release checklist). Procedura migracji. Format odpowiedzi o błędach. Sposób pisania testów w danym repozytorium. Umiejętność to plik w git. Nie posiada portu, procesu ani trybu awarii poza byciem błędnym, co można wykryć podczas przeglądu kodu (code review).
Jeśli jest to pojedynczy fakt, który musi mieć zastosowanie do zadań, o których jeszcze nie pomyślano, należy umieścić go w pliku reguł. Run make lint before committing. Never push to main. Handlers live in src/api/handlers/. Po jednej linii na wpis. W momencie, gdy wpis rozrasta się do postaci kroków, przestaje być faktem, a staje się procedurą i powinien zostać przeniesiony do umiejętności.
Kiedy plik reguł jest wystarczający
Pliki reguł są wczytywane z kilku lokalizacji, od najbardziej ogólnych do najbardziej szczegółowych: zarządzanego pliku polityki, osobistego ~/.claude/CLAUDE.md, pliku ./CLAUDE.md lub ./.claude/CLAUDE.md projektu oraz ignorowanego przez git pliku ./CLAUDE.local.md. Wszystkie wykryte pliki są łączone, a nie nadpisywane, przy czym pliki znajdujące się najbliżej katalogu roboczego są odczytywane jako ostatnie.
Claude Code odczytuje CLAUDE.md, a nie AGENTS.md. Jeśli repozytorium zawiera już AGENTS.md dla innych narzędzi, nie należy utrzymywać dwóch kopii, które z czasem zaczną się różnić.
ln -s AGENTS.md CLAUDE.mdDowiązanie symboliczne nie zwraca żadnego komunikatu w przypadku powodzenia. Rozpocznij sesję, uruchom /context i potwierdź, że CLAUDE.md pojawia się w sekcji Memory files. Jeśli nie ma go na liście, agent nigdy go nie wykrył i żadna zmiana sformułowań nie pomoże. Jeśli wymagane są również linie specyficzne dla Claude, należy użyć formy importu i umieścić je poniżej instrukcji importu.
@AGENTS.md
## Claude Code
Use plan mode for changes under `src/billing/`.Istnieje tutaj pewna pułapka. Importy @path nie zapisują kontekstu. Importowany plik jest rozwijany i ładowany podczas uruchamiania wraz z plikiem, który się do niego odwołuje, do czterech poziomów zagłębienia. Podzielenie 600-liniowego pliku reguł na sześć importów porządkuje go dla ludzi, ale nie zmienia kosztu tokenów nawet w najmniejszym stopniu. Warto zapoznać się z konwencjami dotyczącymi AGENTS.md i jego odpowiednika dla ludzi przed ustaleniem układu plików.
Tym, co faktycznie redukuje koszty, jest .claude/rules/ z polem paths. Plik reguł zawierający frontmatter paths ładuje się tylko wtedy, gdy agent uzyskuje dostęp do pliku pasującego do jednego ze wzorców.
---
paths:
- "src/api/**/*.ts"
---
# API rules
- Every endpoint validates its input.
- Use the standard error response shape.Reguła bez pola paths ładuje się podczas uruchamiania z tym samym priorytetem co .claude/CLAUDE.md. Dlatego sprawdzonym schematem pracy jest stosowanie krótkich, bezwarunkowych reguł oraz listy paths dla wszystkiego, co ma znaczenie tylko w obrębie jednego katalogu.
Gdy potrzebujesz umiejętności
Umiejętność to katalog zawierający plik SKILL.md. Umiejętności osobiste znajdują się w ~/.claude/skills/<name>/SKILL.md i dotyczą każdego projektu na maszynie. Umiejętności projektowe znajdują się w .claude/skills/<name>/SKILL.md, są przenoszone wraz z repozytorium i mogą być weryfikowane w pull requestach, podobnie jak każdy inny plik.
mkdir -p ~/.claude/skills/summarize-changes---
name: summarize-changes
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---
Run `git status` and `git diff` against the merge base.
Group the changes by intent, not by file.
Call out anything touching auth, migrations or deletions.Sekcja description to jedyna część pliku dostępna w kontekście przed uruchomieniem umiejętności, dlatego pełni dwie funkcje. Określa, co robi umiejętność oraz kiedy należy z niej skorzystać. Opis o treści "Pomaga przy wdrożeniach" nie dostarcza modelowi żadnych danych do dopasowania żądania, przez co umiejętność nigdy nie zostanie wywołana, a użytkownik błędnie uzna, że mechanizm nie działa.
Nazwa katalogu staje się poleceniem, więc powyższy przykład daje /summarize-changes. W umiejętnościach osobistych lub projektowych nagłówek name ustawia jedynie etykietę wyświetlaną na listach.
Po wywołaniu umiejętności jej wyrenderowana treść trafia do konwersacji jako pojedyncza wiadomość i pozostaje w niej do końca sesji. Claude Code nie odczytuje ponownie pliku w kolejnych turach. Należy pisać instrukcje stałe zamiast kroków jednorazowych i dbać o zwięzłość treści, ponieważ od tego momentu każda linia stanowi stały koszt przy każdym żądaniu. Po automatycznej kompresji Claude Code ponownie dołącza ostatnie wywołanie każdej umiejętności, utrzymując pierwsze 5000 tokenów każdej z nich w ramach łącznego limitu 25000 tokenów. Wywołanie kilku dużych umiejętności w jednej sesji spowoduje całkowite usunięcie najstarszych z nich, dlatego po długiej konwersacji umiejętność może przestać działać. Ponowne wywołanie przywraca jej aktywność. Gdy ta sama procedura ma zastosowanie do więcej niż jednej bazy kodu, udostępnij jedną umiejętność w wielu repozytoriach zamiast kopiować plik.
Kiedy potrzebny jest serwer MCP
Dodanie serwera sprowadza się do wykonania jednego polecenia, a jego forma zależy od wybranego transportu.
# Remote HTTP server
claude mcp add --transport http notion https://mcp.notion.com/mcp
# Remote HTTP server behind a bearer token
claude mcp add --transport http secure-api https://api.example.com/mcp \
--header "Authorization: Bearer your-token"
# Local stdio server: everything after -- is passed through untouched
claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \
-- npx -y airtable-mcp-serverKluczowe znaczenie ma --. W przypadku serwera stdio oddziela on opcje Claude Code od wiersza poleceń uruchamiającego serwer. Pominięcie tego separatora sprawi, że --port 8080 przeznaczony dla serwera zostanie zinterpretowany jako opcja dla claude mcp add, co spowoduje błąd parsowania.
claude mcp list
claude mcp get notionclaude mcp add potwierdza operację za pomocą linii Added ..., co oznacza jedynie, że konfiguracja została zapisana na dysku. claude mcp list to polecenie, które pozwala zweryfikować stan faktyczny, ponieważ wyświetla status zdrowia obok każdego serwera: ✔ Connected, ! Needs authentication lub ✘ Failed to connect. Status błędu oznacza, że Claude Code nie mógł nawiązać połączenia z serwerem, a nie że polecenie list nie działa. Wewnątrz sesji /mcp udostępnia ten sam widok dla każdego serwera wraz z liczbą dostępnych narzędzi.
Każde wywołanie serwera MCP jest niezależne i zawiera wszystkie niezbędne dane, co wyjaśnia, dlaczego serwer MCP nie przechowuje informacji o poprzednim żądaniu. Jest to założenie projektowe, które niesie ze sobą określone konsekwencje: każdy stan wymagający utrwalenia musi być przechowywany po stronie serwera, w bazie danych lub pliku, co staje się elementem infrastruktury zarządzanej przez użytkownika.
Serwer MCP to proces, który należy uruchomić
Oto koszt, który porównania dostawców pomijają. Skill to plik. Serwer MCP to oprogramowanie działające w określonym miejscu, a gdy tym miejscem jest Twój VPS (virtual private server), odpowiadasz za jego dostępność.
Serwer stdio to wariant niskokosztowy. Claude Code uruchamia go jako proces potomny w momencie rozpoczęcia sesji, a proces ten kończy się wraz z jej zakończeniem. Nie ma tu nic do monitorowania ani samodzielnego aktualizowania. Zdalny serwer HTTP to usługa długotrwała, która wymaga wszystkiego, czego wymaga każda inna usługa tego typu.
[Unit]
Description=Notes MCP server
After=network-online.target
Wants=network-online.target
[Service]
User=mcp
WorkingDirectory=/srv/notes-mcp
ExecStart=/usr/bin/node /srv/notes-mcp/dist/server.js
Environment=PORT=8931
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now notes-mcp
systemctl is-active notes-mcp
journalctl -u notes-mcp -n 50 --no-pagersystemctl is-active powinien wypisać active. Jeśli wypisuje failed, przyczynę znajdziesz w dzienniku systemowym; przy pierwszym uruchomieniu jest to niemal zawsze brakująca zmienna środowiskowa lub port zajęty przez inny proces. Restart=on-failure nie jest tutaj opcjonalne, ponieważ awaria serwera MCP nie jest sygnalizowana w sposób automatyczny. Dowiesz się o niej dopiero wtedy, gdy agent zgłosi brak możliwości odczytu danych z systemu śledzenia zadań.
Powiąż proces z 127.0.0.1 i umieść przed nim reverse proxy z obsługą TLS (transport layer security). Serwer MCP, który ma dostęp do Twojej bazy danych i nasłuchuje na publicznym porcie bez uwierzytelniania, jest równoznaczny z upublicznieniem tej bazy. Uruchamianie serwera MCP na VPS szczegółowo omawia kwestie proxy, certyfikatów oraz firewalla.
Następnie uczciwie oceń nakład powtarzalnej pracy. Usługa wymaga aktualizacji bezpieczeństwa zgodnie z własnym harmonogramem, niezależnie od agenta, który się z nią komunikuje. Token OAuth wygasa, a claude mcp list zaczyna wypisywać ! Needs authentication w najmniej odpowiednim momencie. Dane uwierzytelniające znajdują się w pliku konfiguracyjnym lub nagłówku Authorization, więc wymagają takiej samej ochrony jak każdy inny sekret, co stanowi osobne zagadnienie: ochrona sekretów przed dostępem agenta AI. W przypadku skilla ten nakład pracy nie istnieje.
Przed rozpoczęciem budowy rozważ alternatywy. Jeśli dane obsługiwane przez proponowany serwer zmieniają się mniej więcej raz na kwartał, skill informujący agenta, gdzie szukać danych i co oznaczają poszczególne pola, jest tańszy w utrzymaniu niż usługa, którą musisz stale monitorować.
Jak zmierzyć koszt własnego kontekstu
Zakończ szacowanie i uruchom /context wewnątrz sesji. Wyświetli to zestawienie startowe: prompt systemowy, pliki pamięci, narzędzia oraz serwery MCP wraz z wagą tokenów dla każdego z nich.
Sprawdź dwie kwestie. W sekcji Memory files potwierdź, czy wymieniony jest każdy oczekiwany plik reguł. Brakujący plik jest niewidoczny dla agenta, więc jest to pierwsza rzecz do wykluczenia, gdy instrukcje są ignorowane. Następnie sprawdź koszt serwerów. Jeśli serwer używany dwa razy w miesiącu znajduje się w czołówce listy, wyłącz go w /mcp i włącz ponownie tylko dla sesji, które go wymagają. Konfiguracja zostaje zachowana w obu przypadkach.
Serwer zdalny może również zgłosić status taki jak cached 2h ago · connects on first use · 5 tools. Oznacza to, że Claude Code odczytał listę narzędzi z poprzedniej sesji zamiast łączyć się podczas startu; połączenie zostanie nawiązane przy pierwszym wywołaniu narzędzia. Narzędzia są dostępne od pierwszej wiadomości, więc nie ma nic do naprawy. Ustaw MCP_DISCOVERY_CACHE=0, jeśli wolisz, aby każdy serwer łączył się podczas startu. Aby uzyskać szerszy obraz, zarządzanie oknem kontekstu Claude Code omawia dane przetrwające kompresję, a ile te tokeny faktycznie kosztują przekłada liczby na realne koszty.
Dlaczego moja umiejętność nigdy się nie uruchamia?
Typową przyczyną jest description. Jest to jedyny tekst w kontekście przed uruchomieniem umiejętności, więc jeśli nie określa on sytuacji, nic do niego nie pasuje. Należy wpisać wyzwalacz w zdaniu: "Użyj, gdy użytkownik pyta, co się zmieniło, chce uzyskać komunikat commitu lub prosi o przejrzenie diffa". Niejasne opisy zawodzą bezgłośnie, co utrudnia ich wykrycie.
Drugą przyczyną jest literówka w sekcji frontmatter, a ten błąd jest wyraźnie sygnalizowany. Nieznany klucz jest odrzucany natychmiast:
Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, nameTrzecią przyczyną jest lokalizacja. Umiejętności projektowe są ładowane z .claude/skills/ w katalogu roboczym oraz w każdym katalogu nadrzędnym aż do głównego katalogu repozytorium. Umiejętności w zagnieżdżonych katalogach poniżej miejsca uruchomienia nie są ładowane przy starcie. Pojawiają się one dopiero wtedy, gdy agent odczyta lub edytuje plik wewnątrz tego podkatalogu, więc do tego momentu nie są dostępne w autouzupełnianiu i nie można ich wywołać po nazwie.
Odpowiednikiem tego cichego błędu w MCP jest wpis .mcp.json z url i brakiem type. Claude Code odczytuje każdy wpis bez type jako serwer stdio, więc pomija wpis i zgłasza:
MCP server "notes" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entryŁączne wykorzystanie wszystkich trzech mechanizmów
Te mechanizmy nie konkurują o to samo miejsce. Poprawna konfiguracja wykorzystuje każdy z nich tam, gdzie jest to najbardziej efektywne. Plik reguł zawiera kilka linii, które są prawdziwe w każdym przypadku. Umiejętności (skills) przechowują procedury i są ładowane tylko wtedy, gdy mają zastosowanie. Jeden serwer MCP, rzadziej dwa, łączy systemy, których zawartości nie można przewidzieć z wyprzedzeniem. Jeśli budujesz dopiero swój model pojęciowy pierwszego z nich, czym w rzeczywistości jest umiejętność agenta szczegółowo omawia ten format.
Jeden test rozstrzyga większość sporów dotyczących tego, gdzie dany element powinien się znajdować. Usuń go, uruchom nową sesję i zleć agentowi zadanie. Jeśli agent działa jedynie wolniej, oznacza to, że powinien być częścią umiejętności. Jeśli agent jest pewny siebie, ale się myli, powinien znajdować się w pliku reguł. Jeśli agent w ogóle nie może uzyskać informacji, potrzebny był serwer, a teraz potrzebny jest również plan utrzymania tego serwera w działaniu.
FAQ
Czy powinienem napisać umiejętność (skill), czy uruchomić serwer MCP?
Decyzja zależy od tego, czy informacje zmieniają się pomiędzy kolejnymi wywołaniami. Jeśli agent musi odczytywać bieżący stan, który może być modyfikowany przez inne osoby, taki jak system śledzenia zgłoszeń, baza danych lub pulpit nawigacyjny, wymagany jest serwer MCP. Każda zapisana informacja staje się nieaktualna w momencie zmiany rekordu. Jeśli odpowiedź można zapisać raz i pozostanie ona poprawna za sześć tygodni, należy napisać umiejętność. Umiejętność jest plikiem w git, który nie wymaga procesu, otwierania portów ani harmonogramu aktualizacji, dlatego jest tańszym rozwiązaniem, gdy tylko jest to możliwe.
Czy serwery MCP nadal zapełniają okno kontekstowe?
Znacznie mniej niż wcześniej. Wyszukiwanie narzędzi jest domyślnie włączone w bieżącej wersji Claude Code, więc przy rozpoczęciu sesji ładowane są tylko nazwy narzędzi oraz pole instrukcji serwera, a pełne schematy są pobierane dopiero wtedy, gdy Claude ich szuka. Ładowanie wstępne nadal występuje, gdy wyszukiwanie narzędzi jest wyłączone: przy użyciu ENABLE_TOOL_SEARCH=false, gdy ANTHROPIC_BASE_URL wskazuje na proxy inne niż własne, lub w przypadku modelu starszego niż generacja Claude 4.5. Uruchom /context, aby sprawdzić bieżący stan, ponieważ liczby w starszych porównaniach zakładają ładowanie wstępne.
Czy Claude Code odczytuje plik AGENTS.md?
Nie. Claude Code odczytuje CLAUDE.md. Jeśli w repozytorium istnieje już AGENTS.md dla innych agentów, należy wskazać jeden na drugi, zamiast utrzymywać dwie kopie. Uruchom ln -s AGENTS.md CLAUDE.md, aby utworzyć zwykłe dowiązanie symboliczne, lub umieść @AGENTS.md w pierwszej linii pliku CLAUDE.md i dodaj poniżej instrukcje specyficzne dla Claude. Następnie rozpocznij sesję i uruchom /context, aby potwierdzić, że CLAUDE.md pojawia się w plikach pamięci (Memory files).
Dlaczego moja umiejętność przestała działać w połowie sesji?
Zazwyczaj przyczyną jest automatyczna kompresja (auto-compaction). Gdy konwersacja jest podsumowywana, Claude Code ponownie dołącza najnowsze wywołanie każdej umiejętności, zachowując pierwsze 5000 tokenów każdej z nich, w ramach łącznego limitu 25000 tokenów dla wszystkich umiejętności. Limit ten jest wypełniany począwszy od ostatnio wywołanej umiejętności, więc w przypadku wywołania kilku dużych umiejętności, te starsze są całkowicie usuwane. Wywołaj umiejętność ponownie, aby przywrócić jej pełną zawartość.
Jak zapobiec ładowaniu długiego pliku reguł w każdej sesji?
Przenieś części, które są istotne tylko czasami, do plików .claude/rules/ z polem paths w sekcji frontmatter. Dzięki temu każdy z nich załaduje się tylko wtedy, gdy agent uzyska dostęp do pasującego pliku. Podział pliku na importy @path nie pomaga, ponieważ importowane pliki są rozwijane i ładowane przy starcie wraz z plikiem, który się do nich odwołuje. Wszystko, co jest procedurą wieloetapową, a nie stałym faktem, powinno stać się umiejętnością, ponieważ treść umiejętności nie generuje kosztów, dopóki nie zostanie wywołana.