CI-də agent: headless rejim və avtomatlaşdırma
Claude Code interaktiv rejimdən başqa qeyri-interaktiv (headless) rejimdə də işləyir. Bu, skript və CI üçün nəzərdə tutulub:
-p "<prompt>"— qeyri-interaktiv icra.--output-format json— strukturlaşdırılmış çıxış (nəticə, sessiya ID, istifadə statistikası, xərc təxmini).--json-schema '<schema>'— çıxışın konkret JSON sxemasına uyğun olması.--allowedTools "Read,Edit,Bash"— icazə verilən alətlər.--permission-mode dontAsk— siyahıda olmayan hər şey rədd edilir.--bare— hook-ların, skill-lərin, plugin-lərin, MCP serverlərinin avtomatik kəşfini atlayır.
Çıxış kodu uğurda 0, uğursuzluqda sıfırdan fərqli olur — skript buna görə budaqlana bilər.
`--bare` CI üçün tövsiyə olunan rejimdir. Səbəbi təhlükəsizlikdir: onsuz -p sessiyası layihənin .claude/settings.json-dakı hook-larını işə salır və .mcp.json-dakı serverlərə qoşulur — üstəlik heç bir təsdiq dialoqu göstərmədən. Yəni etibar etmədiyiniz bir fork-un PR-ı sizin CI-nizdə kod icra edə bilər. --bare bunların heç birini oxumur.
| CI ssenarisi | Uyğunluq | Qeyd |
|---|---|---|
| PR-da avtomatik review şərhi | Yaxşı | Bloklayıcı olmasın — səs-küy komandanı yorur |
| Build xətasının izahı | Yaxşı | Log-u pipe ilə ötür — Bash icazəsi lazım olmur |
| Issue triage və etiketləmə | Yaxşı | Yazma icazəsi məhdud olsun |
| Release notes hazırlanması | Yaxşı | Nəşrdən əvvəl insan yoxlaması |
| Qırılan testin avtomatik düzəldilməsi | Riskli | Agent testi "keçirtmək" üçün dəyişə bilər |
| Avtomatik merge | Xeyr | İnsan qapısı ləğv edilməməlidir |
# GitHub Actions — a non-blocking review comment on a PR
name: AI review
on: pull_request
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Claude Code
run: curl -fsSL https://claude.ai/install.sh | bash
- name: Review diff
env:
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
run: |
git diff origin/${{ github.base_ref }}...HEAD -- '*.kt' > diff.txt
# Pipe the diff in: the agent needs no Bash permission
cat diff.txt | claude --bare -p \
"Review this Android diff. Report ONLY blocking and medium
severity problems: crash risk, resource leaks, forgotten
error cases, broken Compose state hoisting.
Do NOT write style notes. Format: [LEVEL] file:line - problem.
If there are no problems, say so; do not invent findings." \
--output-format json > review.json
- name: Post comment
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
jq -r '.result' review.json > body.md
gh pr comment ${{ github.event.pull_request.number }} --body-file body.mdDiqqət ediləcək üç nöqtə: `--bare` (təhlükəsizlik), diff-in pipe ilə ötürülməsi (Bash icazəsi lazım olmur) və nəticənin şərh kimi yazılması (bloklamır).
CI-də agent üçün təhlükəsizlik qaydaları:
- `--bare` işlət — repo-dakı hook və MCP konfiqurasiyası işə düşməsin.
- Minimum icazə —
--allowedToolsilə dar siyahı və ya--permission-mode dontAsk. - Token idarəsi — CI üçün uzunmüddətli token
claude setup-tokenilə yaradılır vəCLAUDE_CODE_OAUTH_TOKENkimi secret-də saxlanılır.--barerejimi bu dəyişəni oxumur, ona görə oradaANTHROPIC_API_KEYişlədilir. - Fork PR-larına diqqət — xarici fork-dan gələn PR-ın məzmunu etibarsızdır (prompt injection). Belə PR-larda agenti işə salmamaq və ya yalnız oxuma icazəsi ilə işə salmaq lazımdır.
- Xərcin izlənməsi —
--output-format jsonçıxışında sorğu üzrə xərc təxmini var; onu loglayın.
📚 Mənbələr və sənədlər
- Qeyri-interaktiv (headless) rejimrəsmicode.claude.com
`-p`, `--bare`, `--output-format`, `--json-schema` və CI tövsiyələri.
- GitHub Actionsrəsmicode.claude.com
- CLI istinadırəsmicode.claude.com