Mam komendę /aktualizacja. Uruchamia 5 równoległych agentów-specjalistów od wyszukiwania, każdy zajmuje się innym obszarem badań z AI engineering, i spędzają kilka minut na skanowaniu świeżych artykułów, postów i changelogów. Potem wracają z wynikami, każdy oceniony pod kątem przydatności w moim aktualnym setupie.

Odpaliłem ją w zeszłym tygodniu. Oto co się wydarzyło.

Setup, w skrócie

Post o całym setupie ma szczegóły, ale krótka wersja: używam Claude Code (Opus 4.6, kontekst 1M) z dużą warstwą konfiguracyjną. Sześć automatycznie ładowanych skills, 31 definicji agentów, 26 plików reguł, 45 slash commands i 11 hooków. Około 60 skills siedzi na poziomie użytkownika (~/.claude/skills/). To dużo plików. Większość działa cicho w tle.

Problem z setupem tej wielkości jest taki, że ewoluuje szybciej niż jakakolwiek pojedyncza rozmowa. Rzeczy się dodają, rzeczy się starzeją. Proces audytu istnieje po to, żeby łapać jedno i drugie.

Pięciu agentów, pięć kątów

Agenci-wyszukiwarki zajęli się:

  1. Zmianami w ekosystemie Claude Code (nowe hooki, aktualizacje systemu skills, integracje MCP)
  2. Przepływami pracy z AI coding (wzorce spec-first, badania produktywności deweloperów)
  3. Bezpieczeństwem agentów AI (prompt injection, podatności MCP, guardrails)
  4. Prompt engineeringiem i rozumowaniem (schematy ARQ, meta-prompting, wierność CoT)
  5. Serwerami MCP i orkiestracją multi-agent (protokół A2A, nowe frameworki)

Każdy agent zwrócił krótką listę znalezisk z oceną istotności. Wszystko poniżej 3/5 zostało pominięte. Większość tego, co wróciło, była już pokryta. Zespoły agentów: zaliczone. Równoległe agenty w tle: zaliczone. Kontekst 1M: zaliczone. Auto-ładowanie skills z warunkami wyzwalaczy: zaliczone. Weryfikacja hash TOFU dla opisów narzędzi MCP: zaliczone.

Trzy znaleziska były nowe i wymagały działania.

Co zostało wdrożone

Obrona przed MCP line jumping

Jedno znalezisko od agenta ds. bezpieczeństwa dotyczyło writeupa Trail of Bits o klasie ataków nazywanych “line jumping”. Mechanizm: złośliwy serwer MCP osadza znaki nowej linii (\x0a, \x0d) lub sekwencje ucieczki ANSI (\x1b) w opisach swoich narzędzi, wstrzykując nowe instrukcje do kontekstu modelu w sposób omijający widoczny system prompt. Wariant z sekwencjami ANSI może też nadpisywać wyjście terminala, żeby ukryć co się dzieje.

Mój istniejący hook TOFU łapie zmiany opisów narzędzi po początkowej rejestracji. Nie łapie opisów, które były złośliwe od pierwszego uścisku dłoni. To jest ta luka.

Nowy hook: ~/.claude/hooks/mcp-line-jumping.sh, podpięty do PreToolUse dla wszystkich wywołań narzędzi z prefiksem mcp__. Skanuje pełny payload wejściowy pod kątem znaków sterujących i znanych wzorców phrase injection, takich jak “ignore previous instructions”. Jeśli coś pasuje, wywołanie narzędzia jest blokowane, a alert trafia do logu.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# uproszczony rdzeń sprawdzania
INPUT=$(cat)
if echo "$INPUT" | python3 -c "
import sys, json, re
data = json.load(sys.stdin)
payload = json.dumps(data)
patterns = [
    r'[\x0a\x0d].*?system',
    r'\x1b\[',
    r'ignore previous instructions',
    r'you are now',
]
for p in patterns:
    if re.search(p, payload, re.IGNORECASE):
        sys.exit(1)
" 2>/dev/null; then
  exit 0
else
  echo "BLOCKED: MCP line jumping pattern detected" >&2
  exit 2
fi

Nie spodziewam się, że będę na to trafiał często. Nie dodaję serwerów MCP losowo. Ale koszt sprawdzenia jest niski, a hook łapie realną klasę ataków, której hash-based TOFU nie widzi.

Aktualizacja reguły context engineering

Drugie znalezisko pochodzi od agenta badającego rozumowanie. Dwa artykuły z ICLR 2026 (arXiv 2603.05488 i 2603.22582) zmierzyły wierność Chain-of-Thought w produkcyjnych modelach. Wynik: 35-45%. Ta liczba oznacza, że widoczny ślad rozumowania jest post-hoc racjonalizacją mniej więcej przez połowę czasu. Model generuje decyzję, a potem konstruuje brzmiące sensownie wyjaśnienie, nie na odwrót.

Ma to praktyczne konsekwencje dla tego, jak piszę prompty dla agentów. Miałem kilka miejsc, gdzie wprost prosiłem agentów o rozumowanie krok po kroku. Ta instrukcja jest zbędna na aktualnych modelach, modele rozumowania uruchamiają CoT automatycznie, a dodawanie jej ręcznie na frontier models faktycznie pogarsza jakość wyjścia (efekt “guardrail-to-handcuff”, który wcześniej udokumentowałem).

Zaktualizowałem context-engineering.md, dodając:

  • Liczby dotyczące wierności z cytowaniami
  • Że reasoning_effort (low/medium/high) to właściwa dźwignia do strojenia jakości rozumowania, nie sformułowanie promptu
  • Że explicit CoT prompting szkodzi na Claude 4.x i podobnych frontier models
  • Że strukturalna walidacja przez schematy ARQ JSON jest bardziej niezawodna niż rozumowanie w formie prozy w promptach agentów, bo strukturę trudniej racjonalizować

Nic z tego nie wymagało przepisywania promptów agentów. Plik reguł jest ładowany przez wszystkich agentów automatycznie. Zmiana się propaguje.

Hook elicitation do automatycznego wstrzykiwania poświadczeń z Vault

Trzecie znalezisko dotyczyło funkcji Claude Code v2.1.76+, której jeszcze nie podłączyłem: MCP Elicitation. To protokół, w którym serwer MCP może żądać ustrukturyzowanego wejścia w trakcie zadania. Zamierzony przypadek użycia to coś w stylu “proszę podaj hasło do bazy danych, żeby kontynuować.”

Problem bez obsługi polega na tym, że staje się to albo ręczną przerwą, albo dziurą bezpieczeństwa. Nie chcę, żeby poświadczenia pojawiały się w rozmowie. Nie chcę ich wpisywać ręcznie. I zdecydowanie nie chcę ich zakodowanych na stałe.

Nowy hook: ~/.claude/hooks/elicitation-vault.sh. Przechwytuje zdarzenia MCPElicitation, odczytuje pole requestedInput z payloadu, dopasowuje żądanie do znanych wzorców (poświadczenia bazy danych, klucze API dla konkretnych serwisów, token bota Telegram) i wstrzykuje wartość z HashiCorp Vault. Odpowiedź wraca do Claude bez pojawienia się wartości w rozmowie.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# fragment dopasowania wzorców
case "$REQUEST_FIELD" in
  *"database"*"password"*|*"db_password"*)
    SECRET_PATH="secret/services/multimodal-rag-db"
    SECRET_KEY="password"
    ;;
  *"tavily"*|*"TAVILY_API_KEY"*)
    SECRET_PATH="secret/mcp/tavily"
    SECRET_KEY="api_key"
    ;;
  # więcej wzorców...
esac

Hook działa cicho, gdy wzorce pasują. Nierozpoznane żądania trafiają do ręcznej obsługi. Żadnych zakodowanych poświadczeń nigdzie w samym pliku hooka.

Reszta sesji

Audyt był głównym punktem programu, ale jak już masz otwarty terminal i jesteś w trybie sprzątania, inne rzeczy wychodzą na wierzch.

Monitorowanie procesów złapało dwa zombie bun z pluginu Telegram. Łączne użycie CPU: 160%. Działały od poprzedniej sesji i nie miały żadnej użytecznej roboty. Zabite. Znalazłem też 36 przestarzałych procesów Playwright chrome-headless-shell, pozostałości po zadaniu przeglądarki, które nie posprzątało po sobie.

Usunąłem serwis systemd Trigger.dev, który siedział wyłączony od dwóch miesięcy. Sama platforma nadal działa w Dockerze, ale jednostka serwisu była pozostałością po starszym wzorcu wdrożenia. Nie było powodu, żeby ją trzymać.

Stop hook pewnego pluginu do automatyzacji miał brakujące uprawnienia do wykonania, co oznaczało, że się uruchamiał, ale nic nie robił. Naprawione przez chmod +x.

Sprawdzenie bazy wiedzy RAG wyszło czysto: 258 dokumentów, baza 12 MB, codzienne snapshoty na NAS i zaszyfrowane uploady na Google Drive. Nic do naprawienia.

Co audyt znalazł, czego nie znalazł

Ocena większości znalezisk brzmiała “już pokryte.” Zespoły agentów z pętlami code review, hooki do skanowania bezpieczeństwa, agenty w tle żeby główny kontekst był czysty, strategie rozumowania per agent, obsługa niezaufanego wyjścia, hook TOFU do weryfikacji MCP. Wszystko było na miejscu.

To nie jest samozadowolenie. Właśnie dlatego warto to robić regularnie. Chcesz potwierdzić pokrycie, nie tylko gonić za nowościami. Dwa hooki bezpieczeństwa i aktualizacja context engineering to sensowne dodatki. To, że reszta jest “już obsłużona,” też jest użyteczną informacją.

Setup jest wystarczająco dobrze udokumentowany, żeby agenci mogli go dokładnie ocenić. O tę pętlę zwrotną chodzi.