Przejdź do głównej zawartości

Zaawansowane techniki Claude Code

Używasz już Claude Code codziennie, ale podejrzewasz, że zostawiasz część możliwości niewykorzystaną. Model wydaje się “myśleć mocniej” przy jednych promptach niż przy innych i nie jesteś pewien dlaczego. Słyszałeś, że serwery MCP mogą dać Claude bezpośredni dostęp do bazy danych i GitHuba, ale fragmenty konfiguracji skopiowane z jakiegoś wpisu na blogu po cichu się nie wczytały. I wciąż uruchamiasz jedno zadanie naraz, gdy masz cztery niezależne rzeczy do wydania.

Ten przewodnik obejmuje techniki, które oddzielają zwykłego użytkownika Claude Code od kogoś, kto prowadzi go jak profesjonalne narzędzie: kontrolowanie głębokości rozumowania, podłączanie zewnętrznych narzędzi przez MCP, pisanie własnego narzędzia MCP, automatyzowanie przeglądów w CI i prowadzenie naprawdę izolowanych sesji równoległych.

  • Poprawny model myślowy rozszerzonego myślenia i jak faktycznie kontrolować jego głębokość (poziomy wysiłku, nie magiczne słowa kluczowe)
  • Działający .mcp.json, który wczytuje się za pierwszym razem, plus aktualny sposób dodania serwera GitHub MCP
  • Minimalny, prawdziwy własny serwer MCP używający oficjalnego SDK — gotowy do skopiowania i uruchomienia
  • Workflow GitHub Actions, który uruchamia Claude na każdym PR, wyzwalany wzmiankami @claude
  • Wzorzec oparty na worktrees do prawdziwej pracy równoległej z zerowym krzyżowym skażeniem

Rozszerzone myślenie jest domyślnie włączone. Trwałą kontrolą jest poziom effort, ale Claude Code rozpoznaje też jedną specjalną wskazówkę na pojedynczą turę: umieść ultrathink w prompcie, aby poprosić o głębsze rozumowanie w tej turze. Dodaje to instrukcję w kontekście i nie zmienia poziomu effort wysyłanego do API. Frazy takie jak “think”, “think hard” i “think more” pozostają zwykłym tekstem promptu.

Jak głębokość jest faktycznie kontrolowana, zależy od modelu:

  • Fable 5, Sonnet 5 oraz Opus 4.7 i nowsze zawsze używają adaptacyjnego rozumowania. Obsługują low, medium, high, xhigh i max; domyślny jest high, z wyjątkiem Opus 4.7, gdzie domyślny jest xhigh. Ustaw poziom przez /effort, suwak w /model, --effort lub CLAUDE_CODE_EFFORT_LEVEL.
  • Opus 4.6 i Sonnet 4.6 również udostępniają poziomy effort, lecz mogą wrócić do starego stałego budżetu po ustawieniu CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1. Dopiero wtedy dodatnia wartość MAX_THINKING_TOKENS ogranicza stały budżet.
  • Wyłączanie działa inaczej na Fable. W natywnym API Anthropic MAX_THINKING_TOKENS=0 wyłącza myślenie na obsługiwanych modelach z wyjątkiem Fable 5. Adaptacyjne myślenie Fable jest zawsze włączone; przełącznik sesji ani ustawienie zera go nie wyłączają.

Czyli dźwignią jest poziom wysiłku albo limit tokenów — nie brzmienie Twojego promptu.

Okno terminala
# Wewnątrz REPL, podnieś głębokość rozumowania dla trudnego zadania
/model
# Albo ustaw effort sesji przed uruchomieniem:
export CLAUDE_CODE_EFFORT_LEVEL=high
claude

Tym, co faktycznie kontrolujesz swoim promptem, jest struktura rozumowania. Poproszenie Claude o przepracowanie problemu w wyraźnych etapach niezawodnie daje lepsze rezultaty niż jednolinijkowa prośba, niezależnie od poziomu wysiłku.

Serwery Model Context Protocol (MCP) dają Claude bezpośredni, ustrukturyzowany dostęp do zewnętrznych systemów — GitHuba, bazy danych, przeglądarki — zamiast kopiowania i wklejania kontekstu przez Ciebie. Konfiguracja, która gryzie ludzi, to format pliku konfiguracyjnego i wskazywanie na zarchiwizowane pakiety referencyjne.

Serwer GitHub MCP jest teraz zdalnym serwerem HTTP, a nie globalną instalacją npm. Dodaj go jednym poleceniem:

Okno terminala
claude mcp add --transport http github https://api.githubcopilot.com/mcp/

Lokalne serwery stdio (baza danych, przeglądarka) konfigurujesz w .mcp.json w katalogu głównym projektu. Klucz najwyższego poziomu to mcpServers — nie servers. Z niewłaściwym kluczem plik jest po cichu ignorowany.

{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "${DATABASE_URL}"]
},
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}

Kilka rzeczy wartych wiedzy, które fragmenty znajdowane online zwykle podają błędnie:

  • Serwery MCP stdio działają przez npx (lub uvx dla serwerów tylko w Pythonie). Nie ma kroku npm install -gnpx pobiera je i uruchamia na żądanie.
  • @modelcontextprotocol/server-postgres to starszy serwer referencyjny. Wciąż rozwiązuje się w npm, ale traktuj go jako punkt wyjścia; wiele zespołów przechodzi na utrzymywany serwer dostawcy.
  • Do automatyzacji przeglądarki użyj @playwright/mcp, a nie zarchiwizowanego server-puppeteer.

Gdy serwer jest wczytany, przestajesz opisywać kontekst, a zaczynasz prosić o rezultaty:

# Z serwerem GitHub MCP
Open an issue for the login 500s, tag it "bug" and "auth", and link the
three most recent commits that touched src/auth/.
# Z serwerem Postgres MCP
Show me the schema for the users table, then find accounts with no login
in the last 30 days.

Gdy żaden gotowy serwer nie pasuje — chcesz, aby Claude uruchamiał Twój skrypt wdrożeniowy, odpytywał wewnętrzne API lub uruchamiał własnościowe narzędzie — napisz mały. Użyj oficjalnego SDK, @modelcontextprotocol/sdk. API to McpServer z registerTool, połączone przez transport.

deploy-mcp-server.ts
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
const server = new McpServer({ name: 'project-tools', version: '1.0.0' });
server.registerTool(
'deploy-staging',
{
description: 'Deploy the given branch to the staging environment',
inputSchema: { branch: z.string() },
},
async ({ branch }) => {
// Call your real deploy pipeline here.
const url = `https://staging.example.com/${branch}`;
return { content: [{ type: 'text', text: `Deployed ${branch} -> ${url}` }] };
}
);
await server.connect(new StdioServerTransport());

Zarejestruj go w .mcp.json jak każdy inny serwer stdio, a następnie poproś Claude o wdrożenie gałęzi po nazwie. Własne serwery błyszczą przy automatyzacji wdrożeń, dostępie do wewnętrznego API i każdym workflow, który dotyka narzędzi posiadanych tylko przez Twój zespół.

Możesz sprawić, by Claude automatycznie przeglądał każdy pull request. Działa to przez GitHub Actions i anthropics/claude-code-action, a nie przez plik konfiguracyjny YAML w .github/claude-code-review.yml (ta ścieżka nie istnieje).

  1. Zainstaluj aplikację GitHub

    Uruchom to wewnątrz REPL Claude Code. Przeprowadzi Cię przez instalację aplikacji i dodanie wymaganych sekretów:

    /install-github-app
  2. Dodaj plik workflow

    Skopiuj przykładowy workflow do .github/workflows/claude.yml. Minimalny automatyczny przegląd wygląda tak:

    .github/workflows/claude.yml
    name: Claude Review
    on:
    pull_request:
    types: [opened, synchronize]
    jobs:
    review:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v5
    - uses: anthropics/claude-code-action@v1
    with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    prompt: |
    Review this PR. Report only real issues, grouped by:
    security, correctness, missing error handling.
    Be concise. Skip style nits.

    Instrukcja trafia do inputu prompt. (direct_prompt to przestarzała nazwa z v0.x — użyj prompt na @v1.)

  3. Wyzwalaj go na żądanie z komentarza

    Gdy akcja jest zainstalowana, wspomnij @claude w dowolnym komentarzu PR lub issue, a odpowie:

    @claude review this PR for security issues
    @claude suggest improvements to the error handling in src/api/

Wzorzec, który dobrze sprawdza się w praktyce: pozwól Action opublikować automatyczne pierwsze przejście na każdym PR i zarezerwuj wzmianki @claude na ukierunkowane follow-upy (“wyjaśnij to rozwiązanie”, “sprawdź migrację pod kątem kompatybilności wstecznej”). Claude wychwytuje mechaniczne problemy, dzięki czemu ludzcy recenzenci mogą skupić się na projekcie i intencji.

Gdy masz kilka niezależnych zadań — funkcjonalność, pilny hotfix, migrację — chcesz, aby każde było izolowane, tak by nie mogły wejść sobie w drogę. Prymitywem do tego są git worktrees, po jednym na zadanie. Częstym błędem jest sięganie po --add-dir: ta flaga dodaje dodatkowe katalogi do pojedynczej sesji dla kontekstu, nie tworzy izolowanych równoległych instancji.

Przydziel każdemu zadaniu własny worktree, a następnie uruchom osobną sesję Claude w każdym:

Najkrótsza droga to pozwolić Claude’owi utworzyć worktree za ciebie — --worktree (albo -w) z nazwą na zadanie, jeden terminal na każde:

Okno terminala
# Terminal 1
claude --worktree feature-notifications
# Terminal 2
claude --worktree hotfix-auth-timeout

Każdy worktree ląduje w .claude/worktrees/<nazwa>/ na nowej gałęzi worktree-<nazwa>, a przy wyjściu Claude proponuje jego usunięcie — automatycznie, gdy jest czysty i sesja nie była nazwana, z pytaniem, gdy jest w nim praca. Dodaj .claude/worktrees/ do .gitignore, a w katalogu repo plik .worktreeinclude (składnia .gitignore), żeby .env i spółka trafiały do każdego świeżego checkoutu.

Dwa gotcha. Interaktywne --worktree wymaga workspace trust, więc odpal najpierw raz zwykłe claude w repo. A claude -p --worktree pomija zarówno sprawdzanie trustu, jak i prompt przy wyjściu, więc nic nie sprząta — te usuwaj przez git worktree remove.

Po gita sięgaj wprost, gdy potrzebujesz konkretnej istniejącej gałęzi albo worktree w innym miejscu niż .claude/worktrees/:

Okno terminala
git worktree add ../app-hotfix hotfix/auth-timeout
cd ../app-hotfix && claude

Tak czy inaczej każda sesja widzi tylko pliki w swoim worktree, więc nie ma żadnego krzyżowego skażenia. Pełny workflow worktree znajdziesz w Kontroli Wersji; prowadzenie kilku takich sesji z jednego terminala opisuje tmux dla flot agentów.

Jeśli potrzebujesz tylko świeżej gałęzi z tego samego punktu startowego (a nie pełnej izolacji plików), claude --resume <id> --fork-session daje każdemu terminalowi czystą sesję bez drugiego katalogu roboczego.

Claude Code może pomóc zacieśnić sposób, w jaki używasz Claude Code. Najbardziej dźwigniowym ruchem jest pielęgnowanie Twojego CLAUDE.md, tak by model przestał powtarzać kontekst, który podajesz mu ręcznie.

Przy edycji wymagającej dużo nawigacji otwórz /config i ustaw Editor mode na Vim. Daje to ruch hjkl, obiekty tekstowe i . do powtórzenia ostatniej zmiany w edytorze wejścia; dawna komenda /vim została usunięta.

Rozumowanie pozostaje płytkie bez względu na to, co wpiszesz — Uruchom /effort lub użyj suwaka /model i wybierz high albo xhigh. Użyj ultrathink wyłącznie jako wskazówki na jedną turę; nie zmienia poziomu effort w API.

MAX_THINKING_TOKENS wydaje się ignorowane — Dodatnie wartości działają tylko w trybie stałego budżetu na Opus/Sonnet 4.6. Na modelach adaptacyjnych użyj effort. Wartość 0 wyłącza myślenie w natywnym API Anthropic z wyjątkiem Fable 5, na którym nie można go wyłączyć.

Serwer MCP się nie wczytuje — Sprawdź, czy klucz najwyższego poziomu w .mcp.json to mcpServers, a nie servers. Zweryfikuj, że serwer pojawia się przy claude mcp list, i uruchom claude --debug "mcp", aby zobaczyć błędy startowe. Dla serwerów stdio potwierdź, że polecenie npx/uvx uruchamia się samodzielnie w terminalu.

GitHub Action nie odpowiada na @claude — Potwierdź, że aplikacja jest zainstalowana (/install-github-app), że sekret ANTHROPIC_API_KEY istnieje i że workflow znajduje się w .github/workflows/claude.yml. Jeśli skopiowałeś starszy przykład, zastąp input direct_prompt przez prompt.

Sesje równoległe interferują — Prawdopodobnie współdzielisz katalog. Przydziel każdemu zadaniu własny worktree; --add-dir nie izoluje sesji, dodaje tylko ścieżki kontekstu do jednej sesji.

Mając te techniki w ręku, naucz się skalować je w całym zespole. Przejdź do Współpracy zespołowej po wzorce kolaboracyjnego rozwoju wspomaganego AI.