Latihan 7 — Penelusuran Migrasi¶
Modul: Lampiran — Panduan Migrasi Waktu: 20 menit Format: Individu atau berpasangan
Tujuan¶
Telusuri direktori proyek Gemini CLI yang sebenarnya dan migrasikan ke AGY CLI. Anda akan memperbarui lokasi file konfigurasi, definisi server MCP, nama peristiwa hook, dan konten AGENTS.md — kemudian memvalidasinya menggunakan sub-agen migration-validator.
Latar Belakang¶
Saat tim melakukan migrasi dari Gemini CLI ke AGY CLI, terdapat empat titik kerusakan umum:
| Apa yang rusak | Mengapa |
|---|---|
Peristiwa hook SessionStart, BeforeTool, AfterTool | Diubah namanya menjadi PreInvocation, PreToolUse, PostToolUse |
Kunci url MCP di settings.json | AGY menggunakan serverUrl dalam mcp.json yang terpisah |
Direktori konfigurasi proyek .gemini/ | AGY menggunakan .agents/ |
Berkas biner gemini dalam skrip | Harus diperbarui menjadi agy |
Pengaturan¶
Anda memerlukan contoh proyek Gemini CLI untuk dimigrasikan. Buat starter:
mkdir ~/gemini-migration-lab && cd ~/gemini-migration-lab
# Create a legacy Gemini CLI settings.json
mkdir -p .gemini/hooks
cat > .gemini/settings.json << 'EOF'
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "github-mcp-server"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "$GITHUB_TOKEN" }
}
},
"hooks": {
"SessionStart": [
{
"hooks": [{
"name": "session-context",
"type": "command",
"command": "$GEMINI_PROJECT_DIR/.gemini/hooks/session-context.sh",
"timeout": 3000
}]
}
],
"BeforeTool": [
{
"matcher": "write_file|replace_in_file",
"hooks": [{
"name": "secret-scanner",
"type": "command",
"command": "$GEMINI_PROJECT_DIR/.gemini/hooks/secret-scanner.sh",
"timeout": 2000
}]
}
]
}
}
EOF
# Create a legacy GEMINI.md
cat > .gemini/GEMINI.md << 'EOF'
# Project Context
This is a Node.js API service. Always run `npm test` after changes.
Use gemini for code reviews before merging PRs.
EOF
# Create a CI script that calls the old binary
mkdir -p .github/workflows
cat > scripts/review.sh << 'EOF'
#!/usr/bin/env bash
gemini -p "Review the diff: $(git diff HEAD~1)" > review.md
EOF
Bagian 1 — Migrasi Manual (10 menit)¶
Migrasikan proyek ini sendiri:
Langkah 1: Pindahkan konfigurasi ke direktori AGY¶
mkdir -p .agents/hooks
# AGY reads .agents/ instead of .gemini/ for project config
cp .gemini/GEMINI.md .agents/AGENTS.md
cp .gemini/settings.json .agents/settings.json
Langkah 2: Pisahkan konfigurasi MCP¶
# AGY uses mcp.json, not mcpServers in settings.json
cat > .agents/mcp.json << 'EOF'
{
"mcpServers": {
"github": {
"type": "stdio",
"command": "npx",
"args": ["-y", "github-mcp-server"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "$GITHUB_TOKEN" }
}
}
}
EOF
Langkah 3: Tulis ulang nama peristiwa hook di settings.json¶
{
"hooks": {
"PreInvocation": [
{
"hooks": [{
"name": "session-context",
"type": "command",
"command": "$AGY_PROJECT_DIR/.agents/hooks/session-context.sh",
"timeout": 3000
}]
}
],
"PreToolUse": [
{
"matcher": "write_file|edit",
"hooks": [{
"name": "secret-scanner",
"type": "command",
"command": "$AGY_PROJECT_DIR/.agents/hooks/secret-scanner.sh",
"timeout": 2000
}]
}
]
}
}
Langkah 4: Perbarui referensi berkas biner¶
Bagian 2 — Validasi dengan Agen Validator Migrasi (5 menit)¶
Mulai AGY CLI dan luncurkan validator migrasi:
Di dalam REPL AGY:
Use the migration-validator agent to check this project directory for any remaining Gemini CLI configuration.
Sub-agen migration-validator akan memeriksa:
- [ ] Nama peristiwa hook (tidak ada
SessionStart,BeforeTool,AfterTool) - [ ] Format MCP (
serverUrluntuk SSE, bidangtypeada) - [ ] Referensi berkas biner (
agybukangeminidalam skrip) - [ ] Jalur konfigurasi (
.agents/bukan.gemini/)
Bagian 3 — Diskusi (5 menit)¶
Pertanyaan refleksi:
- Apa yang akan rusak pertama kali di CI jika Anda lupa memperbarui nama peristiwa hook?
- Mengapa AGY memisahkan konfigurasi MCP ke dalam
mcp.jsonalih-alih menggabungkannya disettings.json? - Jika Anda memiliki monorepo dengan 10 proyek, seperti apa bentuk skrip migrasi Anda?
Tantangan Bonus¶
Tambahkan sebuah hook PreToolUse ke proyek yang dimigrasikan yang memblokir agen agar tidak memanggil git push tanpa konfirmasi. Gunakan pola hook decision: deny.
Lihat samples/hooks/secret-scanner.sh sebagai templat untuk pola keputusan tersebut.
Poin Penting¶
| Gemini CLI | AGY CLI |
|---|---|
SessionStart | PreInvocation |
BeforeTool | PreToolUse |
AfterTool | PostToolUse |
alat replace_in_file | alat edit |
direktori proyek .gemini/ | direktori proyek .agents/ |
GEMINI.md | AGENTS.md |
blok MCP settings.json | mcp.json dengan serverUrl |
url: untuk SSE | serverUrl: untuk SSE |
berkas biner gemini | berkas biner agy |