Przejdź do głównej zawartości

Automatyzacja skryptów

Masz workflow Claude Code, który działa za każdym razem: przekieruj diff z git, poproś o wpis do changelogu, sformatuj go, dodaj do CHANGELOG.md. Uruchamiasz go przed każdym wydaniem. Ale wymaga pięciu ręcznych kroków i za każdym razem zapominasz dokładnego promptu. Skryptowanie zamienia to z ręcznego workflow w pojedynczą komendę.

  • Wzorce trybu print do skryptowania Claude Code w pipeline’ach
  • Hooki pre-commit uruchamiające Claude Code przed każdym commitem
  • Zadania cron do zaplanowanej konserwacji bazy kodu
  • Wzorce obsługi błędów i ponawiania prób dla skryptów produkcyjnych

Flaga -p sprawia, że Claude Code staje się skryptowalny. Przyjmuje prompt, przetwarza go, drukuje wynik i kończy:

Okno terminala
# Basic usage
claude -p "What does this project do?"
# With piped input
cat error.log | claude -p "What caused this error?"
# With output format
claude -p "List all TODO comments in the codebase" --output-format json
# With budget limits
claude -p "Refactor src/utils.ts" --max-turns 5 --max-budget-usd 1.00
FormatPrzypadek użyciaPrzykład
text (domyślny)Wyjście czytelne dla człowieka--output-format text
jsonKonsumpcja przez skrypty--output-format json
stream-jsonStrumieniowanie w czasie rzeczywistym--output-format stream-json

Uruchom Claude Code jako sprawdzenie pre-commit. To wyłapuje problemy zanim kod trafi do repozytorium:

.git/hooks/pre-commit
#!/bin/bash
# Quick review of staged changes
STAGED_DIFF=$(git diff --cached --no-color)
if [ -z "$STAGED_DIFF" ]; then
exit 0
fi
RESULT=$(echo "$STAGED_DIFF" | claude -p "Review this diff for critical issues only: \
security vulnerabilities, obvious bugs, and broken error handling. \
If you find CRITICAL issues, output 'BLOCK: [reason]'. \
If the code looks safe, output 'PASS'." \
--max-turns 3 --output-format text 2>&1)
if echo "$RESULT" | grep -q "BLOCK:"; then
echo "Pre-commit review found issues:"
echo "$RESULT"
exit 1
fi
exit 0
#!/bin/bash
# cron-health-check.sh -- Run daily at 6 AM
# Crontab: 0 6 * * * /path/to/cron-health-check.sh
cd /path/to/project
REPORT=$(claude -p "Run a health check on this project: \
1. Check for TypeScript errors: npx tsc --noEmit \
2. Run the linter: npm run lint \
3. Check for outdated dependencies: npm outdated \
4. Summarize findings in a brief report" \
--max-turns 10 \
--dangerously-skip-permissions \
--output-format text 2>&1)
# Send via notification (adjust for your team's channel)
echo "$REPORT" | mail -s "Daily Code Health: $(date +%Y-%m-%d)" team@company.com
weekly-audit.sh
#!/bin/bash
cd /path/to/project
claude -p "Run npm audit and analyze the results. \
For each vulnerability: \
1. Assess if it affects us (check if the vulnerable code path is used) \
2. Check if an upgrade is available \
3. Note any breaking changes in the upgrade \
Output a prioritized action list." \
--max-turns 8 \
--dangerously-skip-permissions \
--output-format text > /tmp/audit-report.txt
# Only notify if there are actionable findings
if grep -q "CRITICAL\|HIGH" /tmp/audit-report.txt; then
cat /tmp/audit-report.txt # Send to your notification system
fi
#!/bin/bash
set -euo pipefail
MAX_RETRIES=3
RETRY_DELAY=5
run_claude() {
local prompt="$1"
local retries=0
while [ $retries -lt $MAX_RETRIES ]; do
result=$(claude -p "$prompt" --max-turns 5 --output-format text 2>&1)
exit_code=$?
if [ $exit_code -eq 0 ]; then
echo "$result"
return 0
fi
retries=$((retries + 1))
echo "Attempt $retries failed. Retrying in ${RETRY_DELAY}s..." >&2
sleep $RETRY_DELAY
done
echo "Failed after $MAX_RETRIES attempts" >&2
return 1
}
# Usage
run_claude "Analyze the test coverage report and identify untested code paths"

Skrypt zawiesza się czekając na uprawnienia: W trybie print Claude Code zatrzymuje się, gdy potrzebuje pozwolenia na niebezpieczną operację. Użyj --dangerously-skip-permissions dla zaufanych środowisk lub --allowedTools, aby wcześniej zatwierdzić określone operacje.

Niespójność formatu wyjścia: Tekstowe wyjście Claude Code może się różnić między uruchomieniami. Przy programistycznym parsowaniu wyjścia użyj --output-format json i parsuj za pomocą jq. Nie polegaj na konkretnym formatowaniu tekstu.

Przekroczenie budżetu w trakcie zadania: Flaga --max-budget-usd zatrzymuje wykonanie po osiągnięciu budżetu. Dla krytycznych zadań ustaw hojny budżet i monitoruj koszty przez /cost lub OpenTelemetry.

Środowisko zadania cron różni się od shell: Zadania cron działają z minimalnym środowiskiem. Upewnij się, że twój PATH zawiera node i claude, oraz że wszystkie wymagane zmienne środowiskowe (klucze API, ustawienia proxy) są ustawione w crontabie.