Mengotomatiskan Alur Kerja Development dengan Claude Code
Otomatiskan Issue, review PR, maintenance, log, retry, rollback, dan approval dengan Claude Code.
Otomatisasi alur kerja dengan Claude Code bukan berarti membiarkan agen melakukan merge tanpa pengawasan. Pola yang aman justru lebih kecil: gunakan Claude Code untuk merangkum Issue, menyiapkan perubahan terarah, meninjau PR, membuat laporan maintenance, lalu berhenti saat keputusan manusia dibutuhkan.
Panduan ini berisi contoh yang bisa disalin dan dijalankan dengan gh, git, node, npm, dan claude. Kuncinya adalah memperlakukan otomatisasi sebagai kerangka kerja untuk agen: input dikontrol, aksi yang boleh dilakukan dibatasi, log disimpan, retry dirancang, rollback disiapkan, dan titik approval manusia ditulis jelas.
Tentukan batas otomatisasi dulu
| Tahap | Claude Code boleh melakukan | Manusia memutuskan |
|---|---|---|
| Triage | Merangkum Issue, diff, dan log gagal | Prioritas dan keputusan produk |
| Perubahan | Perbaikan kecil, test, dokumentasi | Perubahan scope dan rilis |
| Review | Bug, risiko keamanan, test yang kurang | Saran mana yang diterima |
| Operasi | Pemeriksaan terjadwal, TODO lama, dependency | Merge, penghapusan, release, dampak billing |
flowchart LR
A["Issue / PR"] --> B["Prompt kecil"]
B --> C["Claude Code"]
C --> D["Diff dan log"]
D --> E["Test"]
E --> F["Approval manusia"]
F --> G["PR / release"]
Untuk gambaran pipeline yang lebih lengkap, baca juga panduan CI/CD Claude Code dan panduan Hooks Claude Code.
Use case 1: membuat branch kerja aman dari Issue
Script ini membaca GitHub Issue, membuat atau memakai ulang branch deterministik, meminta Claude Code membuat perubahan terkecil yang berguna, menjalankan test, lalu membiarkan commit dilakukan manual.
Simpan sebagai scripts/claude-issue-work.sh.
#!/usr/bin/env bash
set -euo pipefail
ISSUE_NUMBER="${1:-}"
if [ -z "$ISSUE_NUMBER" ]; then
echo "Usage: ./scripts/claude-issue-work.sh <issue-number>"
exit 1
fi
for command_name in git gh claude npm; do
if ! command -v "$command_name" >/dev/null 2>&1; then
echo "Missing command: $command_name"
exit 1
fi
done
: "${ANTHROPIC_API_KEY:?Set ANTHROPIC_API_KEY before running this script}"
mkdir -p .claude-logs
ISSUE_FILE=".claude-logs/issue-${ISSUE_NUMBER}.md"
LOG_FILE=".claude-logs/issue-${ISSUE_NUMBER}-$(date +%Y%m%d-%H%M%S).log"
BRANCH="claude/issue-${ISSUE_NUMBER}"
gh issue view "$ISSUE_NUMBER" --json title,body,labels --jq '
"# " + .title + "\n\n" + (.body // "") + "\n\nLabels: " + ([.labels[].name] | join(", "))
' > "$ISSUE_FILE"
if git show-ref --verify --quiet "refs/heads/$BRANCH"; then
git switch "$BRANCH"
else
git switch -c "$BRANCH"
fi
PROMPT=$(cat <<PROMPT
Anda adalah asisten development untuk repository ini.
Baca Issue di bawah dan lakukan perubahan terkecil yang berguna.
Batasan:
- Periksa file terkait sebelum mengedit.
- Ikuti arsitektur, penamaan, dan gaya test yang sudah ada.
- Jika requirement ambigu, tinggalkan TODO atau pertanyaan, jangan membuat desain besar.
- Jangan menyentuh secret, file environment, atau artikel yang tidak terkait.
- Tinggalkan repository dalam kondisi siap menjalankan npm test.
- Jangan melakukan commit, push, membuat PR, atau merge.
Issue:
$(cat "$ISSUE_FILE")
PROMPT
)
claude -p "$PROMPT" \
--max-turns 8 \
--permission-mode acceptEdits \
--output-format text 2>&1 | tee "$LOG_FILE"
npm test 2>&1 | tee -a "$LOG_FILE"
git diff --stat | tee -a "$LOG_FILE"
echo "Review the diff, then commit manually if it is correct."
echo "Log: $LOG_FILE"
Guardrail-nya sederhana tetapi penting. Jika ANTHROPIC_API_KEY tidak ada, script berhenti di awal. Nama branch stabil, jadi rerun tidak membuat branch duplikat. Log disimpan di .claude-logs, sehingga prompt dan hasil test bisa ditelusuri lagi.
Use case 2: menambahkan review PR di GitHub Actions
Action resmi Claude Code untuk GitHub Actions bisa berjalan pada event PR. Workflow ini hanya meminta review; tidak mengizinkan edit kode, push, atau merge.
Simpan sebagai .github/workflows/claude-review.yml.
name: Claude Review Gate
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
issues: write
concurrency:
group: claude-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
Review Pull Request ini.
Fokus pada bug, keamanan, test yang kurang, kompatibilitas mundur, dan log operasional.
Tandai setiap temuan sebagai high, medium, atau low dan beri saran perbaikan yang konkret.
Jangan mengedit kode, push, atau merge.
claude_args: |
--max-turns 6
--permission-mode plan
Jaga permission tetap sempit. Untuk review PR, biasanya contents: read dan pull-requests: write menjadi inti. Tambahkan issues: write hanya jika workflow juga berkomentar di Issue.
Sebelum menyalin contoh lama, cek referensi resmi Claude Code CLI, dokumentasi resmi Claude Code GitHub Actions, dan sintaks workflow GitHub Actions. Contoh lama dengan @beta atau direct_prompt perlu diganti ke @v1 dan prompt.
Use case 3: membuat laporan maintenance dengan Node.js
Maintenance terjadwal tidak harus mengubah file. Laporan tentang test gagal, diff besar, TODO lama, log yang hilang, atau risiko rollback sudah cukup untuk mengurangi kerja ulang.
Simpan sebagai scripts/claude-maintenance.mjs.
#!/usr/bin/env node
import { spawnSync } from "node:child_process";
import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
import { join } from "node:path";
const logDir = ".claude-logs";
const lockFile = join(logDir, "maintenance.lock");
const stamp = new Date().toISOString().replace(/[:.]/g, "-");
const logFile = join(logDir, `maintenance-${stamp}.log`);
function fail(message) {
console.error(message);
process.exit(1);
}
function run(command, args, options = {}) {
const result = spawnSync(command, args, {
encoding: "utf8",
shell: process.platform === "win32",
...options,
});
const output = `${result.stdout || ""}${result.stderr || ""}`;
if (result.status !== 0) {
writeFileSync(logFile, output);
fail(`Command failed: ${command} ${args.join(" ")}. See ${logFile}`);
}
return output;
}
if (!process.env.ANTHROPIC_API_KEY) {
fail("Set ANTHROPIC_API_KEY before running this script.");
}
mkdirSync(logDir, { recursive: true });
if (existsSync(lockFile)) {
fail(`Another maintenance run is active: ${lockFile}`);
}
writeFileSync(lockFile, String(process.pid));
try {
const status = run("git", ["status", "--short"]);
const tests = run("npm", ["test", "--", "--runInBand"]);
const prompt = [
"Anda adalah reviewer maintenance untuk repository ini.",
"Baca git status dan output test, lalu rangkum risiko hari ini.",
"Jangan edit, hapus, commit, atau push apa pun.",
"Kelompokkan berdasarkan credentials / idempotency / retry / rollback / logs / human approval.",
"",
"git status:",
status || "(clean)",
"",
"test output:",
tests.slice(-12000),
].join("\n");
const review = run("claude", [
"-p",
prompt,
"--max-turns",
"5",
"--permission-mode",
"plan",
"--output-format",
"text",
]);
writeFileSync(logFile, review);
console.log(`Maintenance report written to ${logFile}`);
} finally {
rmSync(lockFile, { force: true });
}
Jika project tidak memakai Jest, ganti npm test -- --runInBand dengan command test yang biasa dipakai. Script hanya mengirim 12000 karakter terakhir agar prompt tidak terlalu panjang.
Use case 4: menjadwalkan dengan cron atau Task Scheduler
Di Linux dan macOS, gunakan cron. Di Windows, gunakan Task Scheduler. schedule di GitHub Actions juga bisa, tetapi eksekusi lokal sering lebih cocok jika butuh database lokal, VPN, atau credential internal.
# Jalankan pukul 08:15 pada hari kerja
15 8 * * 1-5 cd /path/to/repo && /usr/bin/node scripts/claude-maintenance.mjs >> .claude-logs/cron.log 2>&1
# Daftarkan task harian di Windows
schtasks /Create /TN "ClaudeMaintenance" /SC DAILY /ST 08:15 /F /TR "powershell -NoProfile -ExecutionPolicy Bypass -Command \"cd C:\path\to\repo; node scripts\claude-maintenance.mjs\""
Otomatisasi terjadwal harus idempotent. Artinya, menjalankan task yang sama dua kali tidak boleh membuat PR, komentar, atau branch duplikat. Gunakan lock file, nama branch stabil, pengecekan PR yang sudah ada, dan log.
Use case 5: tulis titik approval manusia di prompt
Prompt pendek tidak selalu lebih aman. Prompt workflow yang baik menjelaskan apa yang boleh dilakukan, apa yang dilarang, dan apa yang perlu approval manusia.
claude -p "
Tujuan:
Menerapkan feedback review pada PR #123.
Boleh:
- Mengedit file implementasi dan test yang terkait.
- Menjalankan npm test.
- Merangkum log yang gagal.
Dilarang:
- git push
- gh pr merge
- Menampilkan .env atau secret
- Refactor yang tidak terkait
Perlu approval manusia:
- Perubahan kompatibilitas response API
- Migrasi database
- Menghapus test yang sudah ada
Laporan akhir:
- File yang berubah
- Test yang dijalankan
- Risiko yang tersisa
- Langkah rollback
" --max-turns 6 --permission-mode acceptEdits
Untuk struktur review, lihat checklist review Claude Code dan workflow receipt verifikasi.
Failure mode yang perlu dirancang
| Failure mode | Dampak | Perbaikan praktis |
|---|---|---|
| Prompt terlalu panjang | Constraint tertimbun dan run lebih lambat | Kirim file relevan dan akhir log saja |
| Credential hilang | CI gagal pada ANTHROPIC_API_KEY atau GH_TOKEN | Validasi env var di awal |
| Tidak idempotent | PR, komentar, atau branch duplikat | Nama stabil, lock, dan cek state |
| Tidak ada log | Tidak jelas agen mencoba apa | Simpan .claude-logs atau GitHub artifacts |
| Retry naif | Error sementara menjadi write duplikat | Retry read, lalu cek state sebelum write |
| Tidak ada rollback | Commit besar sulit di-revert | PR kecil dan catatan rollback |
| Tanpa approval gate | Agen mengambil keputusan produk atau rilis | Kompatibilitas, data, billing, penghapusan, dan merge harus manusia |
Topik terkait: audit keamanan Claude Code, strategi testing Claude Code, dan otomatisasi alur Git.
CTA monetisasi dan AdSense
Konversi yang natural untuk topik ini adalah bantuan praktis. Developer solo bisa mulai dari cheatsheet Claude Code gratis. Tim yang butuh prompt khusus repository, review gate, kebijakan approval, dan training rollout bisa membuka halaman training dan konsultasi Claude Code. Untuk materi setup siap pakai, panduan setup Claude Code adalah shortcut berbayar.
Jangan menaruh iklan atau CTA di tengah urutan command. Untuk kualitas AdSense, artikel seperti ini perlu kode yang bisa dijalankan, failure mode konkret, link resmi, internal link, dan hasil uji langsung.
Kesimpulan
Otomatisasi workflow Claude Code menjadi andal saat titik berhentinya dirancang dulu. Mulai dari triage Issue dan review PR. Lanjutkan ke perubahan kecil. Setelah itu tambahkan maintenance terjadwal dan CI gate dengan approval manusia yang eksplisit.
Dari uji langsung Masa, manfaat terbesar bukan pembuatan PR otomatis penuh, melainkan log Issue yang berulang dan prompt review PR yang tetap. ANTHROPIC_API_KEY yang hilang, output test terlalu panjang, dan rerun pada branch yang sama masing-masing pernah membuat gagal; validasi env, pemotongan ekor log, dan nama branch deterministik membuat diagnosis berikutnya jauh lebih mudah.
PDF gratis: cheatsheet Claude Code
Masukkan email dan unduh satu halaman berisi command, kebiasaan review, dan workflow aman.
Kami menjaga datamu dan tidak mengirim spam.
Tentang penulis
Masa
Engineer yang berfokus pada workflow Claude Code praktis dan adopsi tim.
Artikel terkait
Workflow Obsidian ke CLAUDE.md untuk Claude Code
Ubah catatan kerja Obsidian menjadi operating note CLAUDE.md agar konteks tidak dijelaskan ulang.
Claude Code Revenue CTA Routing: dari artikel ke PDF, Gumroad, dan konsultasi
Workflow Claude Code untuk mengarahkan pembaca ke PDF gratis, Gumroad, atau konsultasi sesuai intent.
Aturan handoff tim Claude Code: bukti review, permission, rollback, dan jalur revenue
Format handoff Claude Code untuk tim: bukti, permission rule, rollback, PDF gratis, Gumroad, dan konsultasi.