Aider - Kompletny Przewodnik po AI Pair Programming w Terminalu
Czym jest Aider?
Aider to open source'owe narzędzie CLI stworzone przez Paula Gauthier, które umożliwia programowanie w parze z AI bezpośrednio w terminalu. W przeciwieństwie do IDE z wbudowanym AI, Aider działa niezależnie od edytora, co czyni go idealnym wyborem dla programistów preferujących Vim, Emacs, terminal, lub po prostu lubiących pracować z linii poleceń.
Aider wyróżnia się głęboką integracją z Git - każda zmiana wprowadzona przez AI jest automatycznie commitowana z sensownym opisem, co pozwala na łatwe śledzenie i cofanie zmian. Aider może bezpośrednio edytować pliki w Twoim repozytorium, uruchamiać testy i naprawiać błędy - wszystko przez naturalną konwersację.
Aider współpracuje z najlepszymi modelami AI, w tym Claude (Anthropic) i GPT-4 (OpenAI), pozwalając wybrać model najlepiej dopasowany do Twojego workflow.
Dlaczego Aider?
Kluczowe zalety Aider
- Terminal-native - Pracuj z AI bez opuszczania terminala
- Git integration - Automatyczne commity z sensownymi opisami
- Multi-model support - Claude, GPT-4, Ollama, lokalne modele
- Repo-aware - Rozumie strukturę całego projektu
- Open source - MIT license, aktywny development
- Lightweight - Brak ciężkiego IDE, minimalne zużycie zasobów
- Editor-agnostic - Działa z każdym edytorem
Aider vs inne narzędzia AI
| Aspekt | Aider | Claude Code | GitHub Copilot | Cursor |
|---|---|---|---|---|
| Interface | Terminal | Terminal | IDE plugin | IDE |
| Git integration | Automatyczna | Manualna | Brak | Manualna |
| Open source | Tak | Nie | Nie | Nie |
| Multi-model | Tak | Tylko Claude | Tylko Copilot | Tak |
| Cena | Free + API | API cost | $10-19/mo | $20/mo |
| Offline | Z lokalnymi modelami | Nie | Nie | Nie |
Instalacja
pip (standardowa)
# Instalacja z pip
pip install aider-chat
# Weryfikacja
aider --versionpipx (zalecane - izolowane środowisko)
# Instalacja pipx jeśli nie masz
pip install pipx
pipx ensurepath
# Instalacja aider
pipx install aider-chat
# Upgrade
pipx upgrade aider-chatHomebrew (macOS)
brew install aiderDocker
# Uruchom aider w kontenerze
docker run -it --rm \
-v $(pwd):/app \
-e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
paulgauthier/aiderKonfiguracja kluczy API
# Claude (Anthropic) - zalecany
export ANTHROPIC_API_KEY=sk-ant-...
# OpenAI GPT-4
export OPENAI_API_KEY=sk-...
# Azure OpenAI
export AZURE_API_KEY=...
export AZURE_API_BASE=https://your-resource.openai.azure.com
export AZURE_API_VERSION=2024-02-01
# Ollama (lokalne modele)
# Nie wymaga klucza API - automatyczne wykrywanieDodaj do ~/.bashrc lub ~/.zshrc:
# Aider configuration
export ANTHROPIC_API_KEY="sk-ant-your-key"
export AIDER_MODEL="claude-3-5-sonnet-20241022"
export AIDER_AUTO_COMMITS=truePodstawowe Użycie
Rozpoczęcie sesji
# Domyślny model (GPT-4 Turbo)
aider
# Z Claude Sonnet (zalecany)
aider --model claude-3-5-sonnet-20241022
# Z konkretnymi plikami w kontekście
aider src/app.ts src/utils.ts
# Cały katalog
aider src/
# Z glob patterns
aider "src/**/*.ts"Przykładowa sesja
$ aider src/api/users.ts
Aider v0.50.0
Model: claude-3-5-sonnet-20241022 with diff edit format
Git repo: .git with 142 files
Repo-map: using 1024 tokens
Added src/api/users.ts to the chat.
> Dodaj walidację email w funkcji createUser
I'll add email validation to the createUser function using a regex pattern.
src/api/users.ts
<<<<<<< SEARCH
export async function createUser(data: CreateUserInput) {
const user = await db.user.create({
data: {
email: data.email,
name: data.name,
},
});
return user;
}
=======
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
export async function createUser(data: CreateUserInput) {
if (!EMAIL_REGEX.test(data.email)) {
throw new Error('Invalid email format');
}
const user = await db.user.create({
data: {
email: data.email.toLowerCase().trim(),
name: data.name,
},
});
return user;
}
>>>>>>> REPLACE
Applied edit to src/api/users.ts
Commit 8f3a2b1 feat: add email validation to createUser
> Dodaj też sprawdzanie czy email nie jest już zajęty
I'll add a check for existing email before creating the user.
src/api/users.ts
<<<<<<< SEARCH
export async function createUser(data: CreateUserInput) {
if (!EMAIL_REGEX.test(data.email)) {
throw new Error('Invalid email format');
}
const user = await db.user.create({
=======
export async function createUser(data: CreateUserInput) {
if (!EMAIL_REGEX.test(data.email)) {
throw new Error('Invalid email format');
}
const normalizedEmail = data.email.toLowerCase().trim();
const existingUser = await db.user.findUnique({
where: { email: normalizedEmail },
});
if (existingUser) {
throw new Error('Email already exists');
}
const user = await db.user.create({
>>>>>>> REPLACE
Applied edit to src/api/users.ts
Commit 2d4f6a9 feat: check for duplicate email before creating userKomendy Aider
Zarządzanie plikami
/add <file> # Dodaj plik do kontekstu czatu
/drop <file> # Usuń plik z kontekstu
/ls # Pokaż pliki w kontekście
/clear # Wyczyść kontekst (zacznij od nowa)
# Przykłady:
> /add src/components/Button.tsx
> /add src/hooks/*.ts
> /drop src/utils.tsGit i historia
/diff # Pokaż niezcommitowane zmiany
/undo # Cofnij ostatnią zmianę AI (git reset)
/commit # Commituj bieżące zmiany
/git <cmd> # Uruchom dowolną komendę git
# Przykłady:
> /diff
> /undo
> /git status
> /git log --oneline -5Uruchamianie kodu
/run <cmd> # Uruchom komendę shell
/test # Uruchom testy (konfigurowalny)
/lint # Uruchom linter
# Przykłady:
> /run npm test
> /run python -m pytest tests/
> /testKontrola sesji
/help # Pokaż wszystkie komendy
/quit # Zakończ sesję
/voice # Włącz tryb głosowy
/tokens # Pokaż zużycie tokenów
/model <name> # Zmień model w trakcie sesji
/settings # Pokaż bieżące ustawienia
# Przykłady:
> /model gpt-4-turbo
> /tokens
> /settingsPraca z kodem
/architect # Tryb architektury (planowanie)
/ask # Zadaj pytanie bez edycji
/code # Powrót do trybu edycji
# Przykłady:
> /architect Jak najlepiej zorganizować ten projekt?
> /ask Co robi ta funkcja?Tryby Edycji
Diff Mode (domyślny)
# Aider pokazuje zmiany w formacie diff
# Najlepszy dla precyzyjnych, małych zmian
src/utils.ts
<<<<<<< SEARCH
function formatDate(date: Date): string {
return date.toISOString();
}
=======
function formatDate(date: Date, format: string = 'ISO'): string {
switch (format) {
case 'ISO':
return date.toISOString();
case 'locale':
return date.toLocaleDateString();
case 'relative':
return formatRelative(date);
default:
return date.toISOString();
}
}
>>>>>>> REPLACEWhole File Mode
# Dla mniejszych plików - AI przepisuje cały plik
aider --edit-format whole
# Lub ustaw w .aider.conf.yml
edit-format: wholeUnified Diff Mode
# Format podobny do git diff
aider --edit-format udiff
# Przykład output:
--- src/app.ts
+++ src/app.ts
@@ -10,6 +10,10 @@
function main() {
+ // Initialize logging
+ setupLogger();
+
startServer();
}Ask Mode (bez edycji)
# Tylko pytania, bez modyfikacji plików
aider --ask
# W sesji:
> /ask Wyjaśnij jak działa ten algorytm
> /ask Jakie są potencjalne problemy z tym kodem?Praca z Git
Automatyczne commity
# Domyślnie włączone - każda zmiana = commit
# Wyłączenie:
aider --no-auto-commits
# Lub ręczne commitowanie:
> /commit "moja wiadomość"Sensowne commit messages
$ aider src/auth.ts
> Dodaj obsługę JWT token refresh
Applied edit to src/auth.ts
Commit a3f8d21 feat(auth): implement JWT token refresh mechanism
> Napraw błąd z wygaśniętym tokenem
Applied edit to src/auth.ts
Commit 7b2c4e9 fix(auth): handle expired token edge case
# Aider automatycznie generuje sensowne commit messages
# w formacie conventional commitsCofanie zmian
# Cofnij ostatnią zmianę AI
> /undo
Undoing: feat(auth): implement JWT token refresh mechanism
HEAD is now at previous commit
# Cofnij kilka zmian
> /git reset --soft HEAD~3Praca z branchami
# Utwórz feature branch przed pracą
git checkout -b feature/new-auth
# Pracuj z aider
aider src/auth/
> Zaimplementuj OAuth2 flow
# Po zakończeniu
git push -u origin feature/new-authWybór Modelu
Claude (Anthropic) - Zalecany
# Claude 3.5 Sonnet - najlepszy balans
aider --model claude-3-5-sonnet-20241022
# Claude 3 Opus - najbardziej zaawansowany
aider --model claude-3-opus-20240229
# Claude 3 Haiku - najszybszy/najtańszy
aider --model claude-3-haiku-20240307OpenAI GPT
# GPT-4 Turbo
aider --model gpt-4-turbo
# GPT-4o - szybszy
aider --model gpt-4o
# GPT-4o-mini - ekonomiczny
aider --model gpt-4o-miniLokalne modele (Ollama)
# Zainstaluj Ollama
curl -fsSL https://ollama.ai/install.sh | sh
# Pobierz model
ollama pull codellama:34b
ollama pull deepseek-coder:33b
# Użyj z aider
aider --model ollama/codellama:34b
aider --model ollama/deepseek-coder:33b
# Dla lepszych wyników - większy context
aider --model ollama/codellama:34b --map-tokens 4096Porównanie modeli
| Model | Jakość kodu | Szybkość | Koszt | Uwagi |
|---|---|---|---|---|
| claude-3-5-sonnet | ⭐⭐⭐⭐⭐ | Szybki | $$ | Najlepszy wybór |
| claude-3-opus | ⭐⭐⭐⭐⭐ | Wolny | $$$$ | Kompleksowe zadania |
| gpt-4-turbo | ⭐⭐⭐⭐ | Szybki | $$$ | Dobra alternatywa |
| gpt-4o | ⭐⭐⭐⭐ | Bardzo szybki | $$ | Szybszy GPT-4 |
| ollama/codellama | ⭐⭐⭐ | Zależy od GPU | Free | Offline, prywatność |
| deepseek-coder | ⭐⭐⭐⭐ | Średni | $ | Dobry stosunek jakość/cena |
Konfiguracja
Plik konfiguracyjny
# ~/.aider.conf.yml (globalny)
# lub .aider.conf.yml (projektowy)
# Model domyślny
model: claude-3-5-sonnet-20241022
# Automatyczne commity
auto-commits: true
dirty-commits: true
# Format edycji
edit-format: diff
# Kolorowanie
dark-mode: true
pretty: true
# Git
attribute-author: true
attribute-committer: false
# Kontekst
map-tokens: 1024
max-chat-history-tokens: 4000
# Ignorowane pliki (dodatkowo do .gitignore)
aiderignore:
- "*.log"
- "node_modules/"
- "dist/"
# Automatyczne dodawanie plików
auto-add: true
# Voice (jeśli używasz)
voice-language: plZmienne środowiskowe
# ~/.bashrc lub ~/.zshrc
# API Keys
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
# Domyślne ustawienia
export AIDER_MODEL="claude-3-5-sonnet-20241022"
export AIDER_AUTO_COMMITS="true"
export AIDER_DARK_MODE="true"
export AIDER_PRETTY="true"
# Edytor dla dłuższych wiadomości
export AIDER_EDITOR="vim"
export AIDER_EDITOR_MODEL="claude-3-5-sonnet-20241022".aiderignore
# .aiderignore - pliki ignorowane przez aider
# (dodatkowo do .gitignore)
# Duże pliki binarne
*.bin
*.exe
*.dll
# Generowane pliki
dist/
build/
*.min.js
# Pliki z sekretami
.env*
*credentials*
*.pem
*.key
# Testy (jeśli nie chcesz ich edytować)
__tests__/
*.test.ts
*.spec.ts
# Dokumentacja
docs/
*.mdZaawansowane Użycie
Architect Mode
# Tryb planowania - AI proponuje architekturę bez edycji
aider --architect
> /architect Jak zorganizować system autentykacji dla tej aplikacji?
Based on your codebase, I recommend:
1. **Structure**:
- src/auth/
- providers/ (OAuth, JWT, etc.)
- middleware/
- utils/
- types.ts
2. **Flow**:
- Login → Validate → Generate tokens → Store session
- Middleware checks token on protected routes
3. **Security considerations**:
- Use httpOnly cookies for refresh tokens
- Implement rate limiting
- Add CSRF protection
Should I implement this structure?
> Tak, zaimplementuj
# Aider przechodzi do trybu edycji i implementuje planMulti-file refactoring
# Dodaj wiele plików do kontekstu
aider src/api/*.ts src/models/*.ts src/utils/*.ts
> Zmień wszystkie endpointy API na async/await zamiast .then()
I'll refactor the API endpoints to use async/await.
[Aider modyfikuje wiele plików jednocześnie]
Applied edits to:
- src/api/users.ts
- src/api/posts.ts
- src/api/comments.ts
Commits:
- refactor(api): convert users endpoints to async/await
- refactor(api): convert posts endpoints to async/await
- refactor(api): convert comments endpoints to async/awaitTestowanie i debugging
# Uruchom testy po każdej zmianie
> /run npm test
# Jeśli testy failują
> Napraw failing testy
# Aider widzi output testów i naprawia kod
Applied edit to src/utils.ts
Commit fix: correct date formatting in utils
> /run npm test
All tests passed!Voice Mode
# Włącz tryb głosowy
aider --voice
# Lub w sesji
> /voice
Listening... (say 'stop' to end)
[Mów do mikrofonu]
"Dodaj funkcję do walidacji numeru telefonu"
I'll add a phone number validation function...Watch Mode
# Automatyczne reagowanie na zmiany w plikach
aider --watch
# Aider obserwuje pliki i reaguje na komentarze typu:
// AI: dodaj obsługę błędów tutaj
// AIDER: zrefaktoruj tę funkcjęIntegracja z Workflow
VS Code + Aider
// .vscode/tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "Aider: Start Session",
"type": "shell",
"command": "aider --model claude-3-5-sonnet-20241022 ${file}",
"presentation": {
"reveal": "always",
"panel": "new"
}
},
{
"label": "Aider: Ask About File",
"type": "shell",
"command": "aider --ask ${file}",
"presentation": {
"reveal": "always"
}
}
]
}Neovim + Aider
-- lua/plugins/aider.lua
return {
"joshuavial/aider.nvim",
config = function()
require("aider").setup({
auto_manage_context = true,
default_bindings = true,
})
-- Keybindings
vim.keymap.set("n", "<leader>ao", "<cmd>AiderOpen<cr>", { desc = "Open Aider" })
vim.keymap.set("n", "<leader>as", "<cmd>AiderSend<cr>", { desc = "Send to Aider" })
vim.keymap.set("v", "<leader>as", "<cmd>AiderSend<cr>", { desc = "Send selection to Aider" })
vim.keymap.set("n", "<leader>ac", "<cmd>AiderComplete<cr>", { desc = "Complete with Aider" })
end
}tmux + Aider
# ~/.tmux.conf
# Otwórz aider w nowym pane
bind-key a split-window -h "aider"
bind-key A split-window -v -l 40% "aider --ask"
# Session script
#!/bin/bash
# dev-session.sh
tmux new-session -d -s dev -n code
tmux send-keys -t dev:code 'nvim .' Enter
tmux split-window -h -t dev:code
tmux send-keys -t dev:code 'aider' Enter
tmux select-pane -t dev:code.0
tmux attach -t devGit hooks z Aider
#!/bin/bash
# .git/hooks/pre-commit
# Sprawdź czy są TODO/FIXME i zaproponuj naprawę
if git diff --cached | grep -E "(TODO|FIXME):" > /dev/null; then
echo "Found TODO/FIXME comments in staged changes."
echo "Consider running: aider --ask 'Review TODOs and suggest fixes'"
fi
# Uruchom linter przed commitem
npm run lint || exit 1Best Practices
Efektywne prompty
# ❌ Zbyt ogólne
> Napraw błędy
# ✅ Konkretne
> Napraw błąd TypeError w funkcji processUser na linii 45 -
> zmienna 'user' może być undefined
# ❌ Bez kontekstu
> Dodaj walidację
# ✅ Z kontekstem
> Dodaj walidację inputu dla formularza rejestracji:
> - email: prawidłowy format
> - hasło: min 8 znaków, 1 cyfra, 1 wielka litera
> - imię: 2-50 znaków, tylko literyOrganizacja sesji
# 1. Zacznij od małego kontekstu
aider src/api/users.ts
# 2. Dodawaj pliki w miarę potrzeby
> /add src/types/user.ts
> /add src/utils/validation.ts
# 3. Usuwaj niepotrzebne
> /drop src/utils/validation.ts
# 4. Regularnie sprawdzaj kontekst
> /ls
> /tokensPraca z dużymi projektami
# .aider.conf.yml dla dużych projektów
# Zwiększ limit mapy repozytorium
map-tokens: 2048
# Automatycznie dodawaj powiązane pliki
auto-add: true
# Ignoruj duże/niepotrzebne pliki
aiderignore:
- "node_modules/"
- "dist/"
- "*.min.js"
- "package-lock.json"Rozwiązywanie Problemów
Duże zużycie tokenów
# Sprawdź zużycie
> /tokens
# Zmniejsz kontekst
> /drop <niepotrzebne-pliki>
# Użyj mniejszej mapy repozytorium
aider --map-tokens 512
# Lub wyłącz mapę
aider --no-mapModel odmawia edycji
# 1. Sprawdź czy plik jest w kontekście
> /ls
# 2. Jawnie dodaj plik
> /add plik-do-edycji.ts
# 3. Sprawdź uprawnienia
ls -la plik-do-edycji.ts
# 4. Upewnij się, że plik nie jest ignorowany
cat .aiderignoreGit problemy
# Jeśli aider nie commituje
> /git status
# Sprawdź czy repo jest zainicjalizowane
git status
# Napraw dirty state
git stash
# lub
git add -A && git commit -m "WIP"Wolne odpowiedzi
# Użyj szybszego modelu
aider --model gpt-4o-mini
aider --model claude-3-haiku-20240307
# Zmniejsz kontekst
> /clear
> /add tylko-potrzebny-plik.ts
# Sprawdź połączenie
curl -I https://api.anthropic.comPorównanie kosztów
Przykładowa sesja kodowania
Typowa sesja: 1 godzina, ~50 interakcji
| Model | Input tokens | Output tokens | Koszt |
|-------|-------------|---------------|-------|
| claude-3-5-sonnet | ~100k | ~50k | ~$0.90 |
| claude-3-opus | ~100k | ~50k | ~$4.50 |
| gpt-4-turbo | ~100k | ~50k | ~$2.00 |
| gpt-4o-mini | ~100k | ~50k | ~$0.15 |
| ollama/codellama | ~100k | ~50k | $0.00 |Miesięczne koszty (aktywny developer)
40 godzin/miesiąc programowania z AI:
claude-3-5-sonnet: ~$36/miesiąc
gpt-4-turbo: ~$80/miesiąc
gpt-4o-mini: ~$6/miesiąc
ollama: $0 (+ koszt GPU)FAQ
Czy aider jest bezpieczny dla mojego kodu?
Tak. Aider nie wysyła kodu nigdzie poza wybranym API (Anthropic/OpenAI). Dla maksymalnej prywatności użyj lokalnych modeli przez Ollama.
Czy mogę używać aider offline?
Tak, z lokalnymi modelami przez Ollama. Potrzebujesz GPU dla sensownej wydajności.
Jak aider różni się od Claude Code?
- Aider: Open source, multi-model, głęboka integracja z Git
- Claude Code: Zamknięte źródło, tylko Claude, prostsze użycie
Czy aider nadpisuje moje pliki bez pytania?
Aider pokazuje proponowane zmiany w formacie diff i czeka na potwierdzenie (lub automatycznie stosuje z --yes). Zawsze możesz cofnąć z /undo.
Jaki model wybrać?
- Claude 3.5 Sonnet: Najlepszy ogólny wybór
- GPT-4o-mini: Budżetowa opcja
- Ollama: Maksymalna prywatność, offline
Podsumowanie
Aider to potężne narzędzie dla programistów preferujących terminal i linię poleceń. Dzięki głębokiej integracji z Git, wsparciu dla wielu modeli AI i open source'owemu podejściu, Aider oferuje elastyczność i kontrolę, której brakuje w IDE-based solutions.
Kluczowe zalety Aider:
- Terminal-native - Idealne dla Vim/Emacs/CLI users
- Git-first - Automatyczne commity, łatwe cofanie
- Multi-model - Claude, GPT-4, lokalne modele
- Open source - Pełna transparentność, MIT license
- Ekonomiczne - Płać tylko za API, bez subskrypcji
Jeśli cenisz terminal workflow i chcesz zachować pełną kontrolę nad swoim środowiskiem, Aider jest doskonałym wyborem do AI pair programming.