Lewati ke isi

Referensi: Pola DevOps & Otomatisasi

agy tanpa keterlibatan manusia. Referensi mendalam untuk pipeline --print non-interaktif, integrasi CI/CD, ruang kerja multi-repositori, dan eksekusi sandbox. Perintah-perintah penting ditautkan dari Lembar Contekan.


DevOps 1 — Mode Print: Inti Non-Interaktif 5 min

--print (singkatan: -p) adalah mode headless dari agy. Ini menjalankan satu prompt, mencetak respons, dan keluar. Tidak ada sesi interaktif, tidak ada prompt.

# Basic usage
agy --print "Summarize the top-level README of this project."

# Set a timeout (default: 5 minutes)
agy --print "Generate a full test suite for auth.js" --print-timeout 10m

# Short form
agy -p "What does this project do?"

Output dikirim ke stdout — lakukan pipe, alihkan, simpan.

# Pipe into a file
agy -p "Generate API documentation for all endpoints" > docs/api.md

# Pipe into another command
agy -p "List all TODO comments in this codebase as JSON" | jq '.[] | .file'

DevOps 2 — Pipeline Shell 10 menit

Pola: agy sebagai perintah Unix — gabungkan dengan alat shell standar.

Pola: Pipe Kode ke agy

# Review a specific file
cat src/auth.js | agy -p "Review this file for security vulnerabilities."

# Review staged changes before commit
git diff --cached | agy -p "Review these changes. Flag bugs, security issues, or missing tests."

# Analyze a log file
tail -n 200 app.log | agy -p "Identify patterns in these errors. Group by root cause."

Pola: Merangkai Panggilan agy

# Step 1: Generate a plan
agy -p "Create a migration plan for moving this project from CommonJS to ESM. Output as JSON with steps array." > migration-plan.json

# Step 2: Execute step by step
cat migration-plan.json | agy -p "Execute step 1 of this migration plan."

Pola: Pemrosesan Batch

# Process multiple files
for f in src/**/*.js; do
  out="/tmp/review_$(basename $f .js).md"
  agy -p "Review $(basename $f) for issues" \
      --add-dir "$(dirname "$f")" \
      --print-timeout 2m > "$out"
  echo "=== $f ==="
  cat "$out"
done

DevOps 3 — Ruang Kerja Multi-Direktori dengan --add-dir 10 min

Pola: Konteks Lintas-Repo — memberikan agy visibilitas ke beberapa basis kode secara bersamaan.

Secara default, agy mengindeks repo git yang berisi direktori Anda saat ini. --add-dir memperluasnya ke direktori tambahan.

# Give agy access to both your app and its shared library
agy --add-dir ../shared-lib "How does the app use shared-lib? Identify any API mismatches."

# Add multiple directories
agy --add-dir ../api --add-dir ../frontend "Generate an integration test that covers the API-to-frontend data flow."

# Use in print mode
agy -p "Compare the error handling patterns in app/ vs api/" --add-dir ../api

Kasus Penggunaan Dunia Nyata: Tinjauan Monorepo

# From the root of a monorepo, review cross-package dependencies
agy --add-dir packages/core --add-dir packages/api --add-dir packages/ui \
    -p "Map the dependency graph between these three packages and flag any circular dependencies."

Flag yang dapat diulang

--add-dir dapat diulang — tambahkan sebanyak mungkin direktori yang Anda butuhkan. agy mengindeks semuanya bersama repo git utama.


DevOps 4 — Integrasi CI/CD 10 min

Pola: agy di dalam Pipeline — tinjauan dan analisis kode otomatis pada setiap PR.

Contoh GitHub Actions

# .github/workflows/agy-review.yml
name: agy Code Review
on: [pull_request]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install agy-cli
        run: |
          curl -fsSL https://antigravity.google/cli/install.sh | bash

      - name: Review PR changes
        run: |
          git diff origin/main...HEAD | \
          agy --dangerously-skip-permissions \
              --print "Review these changes for: (1) correctness, (2) security, (3) missing tests. Output as markdown." \
              --print-timeout 5m > review.md

      - name: Post review as comment
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const review = fs.readFileSync('review.md', 'utf8');
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: review
            });

--dangerously-skip-permissions di CI

Selalu gunakan --dangerously-skip-permissions di CI — tidak ada manusia yang akan mengklik "setujui". Pasangkan dengan mode sandbox untuk membatasi apa yang dapat diakses oleh agy.

Hook Pre-Commit

#!/bin/bash
# .git/hooks/pre-commit
echo "🤖 Running agy pre-commit review..."
git diff --cached | agy --dangerously-skip-permissions \
    -p "Flag any obvious bugs or security issues in these staged changes. If none, output 'LGTM'." \
    --print-timeout 60s

# Optionally block commit if issues found
# (parse output for keywords)

DevOps 5 — Mode Sandbox 5 min

Pola: Eksekusi Terbatas — jalankan agy dengan isolasi terminal tingkat OS.

Mengaktifkan Sandbox

Sandbox dikonfigurasi melalui settings.json (baik proyek .agents/settings.json atau pengguna ~/.gemini/antigravity/settings.json):

{
  "enableTerminalSandbox": true
}

Saat diaktifkan, agy menggunakan isolasi OS native untuk membatasi eksekusi perintah terminal:

OS Teknologi Isolasi
Linux nsjail
macOS sandbox-exec
Windows AppContainer

Bypass Per-Perintah

Dengan sandbox diaktifkan, agy akan meminta persetujuan ketika sebuah perintah perlu keluar dari sandbox. Anda akan melihat prompt bypass per-perintah — yang memungkinkan eksekusi selektif tanpa menonaktifkan seluruh sandbox.

Kasus Penggunaan

  • Menjalankan agy pada kode yang tidak tepercaya
  • Mengaudit konten sensitif tanpa efek samping
  • Lingkungan yang sensitif terhadap tata kelola di mana setiap eksekusi memerlukan persetujuan

Menggabungkan dengan Izin

Untuk kontrol maksimum, pasangkan mode sandbox dengan model izin:

{
  "enableTerminalSandbox": true,
  "permissions": {
    "allow": ["read_file", "command(git)"],
    "deny": ["command(rm)", "unsandboxed"]
  }
}

📖 Detail lengkap: Dokumentasi Izin


DevOps 6 — Hook & Aturan 5 min

Pola: Pagar Pengaman & Otomatisasi — menegakkan standar dan memicu tindakan pada titik-titik siklus hidup utama.

Hook

Hook memungkinkan Anda menjalankan logika kustom pada 5 peristiwa siklus hidup:

Peristiwa Kapan ini terpicu
PreToolUse Sebelum agy memanggil alat apa pun (membaca file, menjalankan perintah, dll.)
PostToolUse Setelah pemanggilan alat selesai
PreInvocation Sebelum agy mulai memproses prompt
PostInvocation Setelah agy menyelesaikan respons
Stop Saat sesi berakhir

Konfigurasikan hook di hooks.json (di .agents/ untuk proyek atau ~/.gemini/config/ untuk global). Skrip hook menerima JSON pada stdin dan mengembalikan JSON pada stdout.

Contoh Hook (di samples/hooks/)

Skrip Peristiwa Tujuan
secret-scanner.sh PreToolUse Memblokir penulisan yang berisi kredensial yang di-hardcode
git-context-injector.sh PreToolUse Menyuntikkan riwayat git terbaru untuk file target sebelum penulisan
test-nudge.sh PostToolUse Mendorong agen untuk menjalankan pengujian setelah penulisan file
session-context.sh PreInvocation Menyuntikkan cabang, perubahan yang tertunda, dan dependensi pada awal sesi

📖 Detail lengkap: Dokumentasi Hook

Aturan

Aturan adalah file markdown yang disuntikkan ke dalam prompt sistem agy sebagai blok RULE — batasan keras yang harus diikuti oleh agy.

Cakupan Lokasi
Proyek .agents/rules.md atau .agents/rules/*.md
Global ~/.gemini/config/rules.md atau ~/.gemini/config/rules/*.md

Contoh .agents/rules.md:

- Never delete migration files
- Always use TypeScript strict mode
- Run `npm test` after any code change
- Do not modify files in the vendor/ directory

📖 Detail lengkap: Dokumentasi Aturan & Alur Kerja


Latihan

Latihan 3: Pipeline --print

Berkas: ex03_print_mode_pipeline.md Durasi: 20 menit Tujuan: Membangun pipeline shell multi-langkah menggunakan agy --print. Meninjau perubahan yang di-stage, menghasilkan dokumentasi, dan mengonfigurasi alur kerja GitHub Actions.


Modul Selanjutnya

Modul 4: Multi-Agen & Lanjutan — sub-agen, pengarahan di tengah tugas /btw, penjadwalan.