SpyBara
Go Premium

agent-sdk/claude-code-features.md 2026-09-13 21:00 UTC to 2026-09-14 22:58 UTC

This page contains 0 additions and 2 deletions.

2026
Wed 9 22:58 Sat 12 03:02 Mon 14 22:58 Fri 18 23:58 Tue 22 23:59

Gunakan fitur Claude Code di SDK

Muat instruksi proyek, skills, hooks, dan fitur Claude Code lainnya ke dalam agen SDK Anda.

Agent SDK dibangun di atas fondasi yang sama dengan Claude Code, yang berarti agen SDK Anda memiliki akses ke fitur berbasis filesystem yang sama: instruksi proyek (CLAUDE.md dan rules), skills, hooks, dan lainnya.

Ketika Anda menghilangkan settingSources, query() membaca pengaturan filesystem yang sama dengan Claude Code CLI: pengaturan pengguna, proyek, dan lokal, file CLAUDE.md, dan skills, agen, dan perintah di .claude/. Untuk menjalankan tanpa ini, teruskan settingSources: [], yang membatasi agen hanya pada apa yang Anda konfigurasi secara terprogram. Pengaturan kebijakan terkelola dan konfigurasi global ~/.claude.json dibaca terlepas dari opsi ini. Lihat Apa yang tidak dikontrol settingSources.

Kontrol pengaturan filesystem dengan settingSources

Opsi sumber pengaturan (setting_sources di Python, settingSources di TypeScript) mengontrol pengaturan berbasis filesystem mana yang dimuat SDK. Teruskan daftar eksplisit untuk memilih sumber tertentu, atau teruskan array kosong untuk menonaktifkan pengaturan pengguna, proyek, dan lokal.

Contoh ini memuat pengaturan tingkat pengguna dan tingkat proyek dengan menetapkan settingSources ke ["user", "project"]:

from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage
import asyncio


async def main():
async for message in query(
prompt="Help me refactor the auth module",
options=ClaudeAgentOptions(
# "user" loads from ~/.claude/, "project" loads from ./.claude/ in cwd.
# Together they give the agent access to CLAUDE.md, skills, hooks, and
# permissions from both locations.
setting_sources=["user", "project"],
allowed_tools=["Read", "Edit", "Bash"],
),
):
if isinstance(message, AssistantMessage):
for block in message.content:
if hasattr(block, "text"):
print(block.text)
if isinstance(message, ResultMessage) and message.subtype == "success":
print(f"\nResult: {message.result}")


asyncio.run(main())

Ketika ini berjalan, respons asisten mencetak ke stdout, diikuti oleh baris hasil akhir setelah run selesai.

Setiap sumber memuat pengaturan dari lokasi tertentu, di mana <cwd> adalah direktori kerja yang Anda teruskan melalui opsi cwd, atau direktori saat ini proses jika tidak diatur. Untuk definisi tipe lengkap, lihat SettingSource (TypeScript) atau SettingSource (Python).

Sumber Apa yang dimuat Lokasi
"project" settings.json proyek dan hooks; CLAUDE.md proyek dan .claude/rules/*.md; skills proyek, commands, dan subagents <cwd>/.claude/ untuk settings.json dan hooks; <cwd> dan setiap direktori induk untuk CLAUDE.md dan rules; <cwd> dan setiap direktori induk hingga akar repositori untuk skills, commands, dan subagents, ditambah folder .claude/skills/, .claude/commands/, dan .claude/agents/ dari setiap direktori yang Anda teruskan melalui opsi additionalDirectories atau add_dirs, yang SDK teruskan ke Claude Code sebagai --add-dir
"user" settings.json pengguna; CLAUDE.md pengguna dan ~/.claude/rules/*.md; skills pengguna, commands, dan subagents ~/.claude/ untuk settings.json, CLAUDE.md, dan rules; ~/.claude/skills/, ~/.claude/commands/, dan ~/.claude/agents/ untuk skills, commands, dan subagents
"local" CLAUDE.local.md, .claude/settings.local.json <cwd>/.claude/ untuk settings.local.json; <cwd> dan setiap direktori induk untuk CLAUDE.local.md

Menghilangkan settingSources setara dengan ["user", "project", "local"].

Opsi cwd menentukan di mana SDK mencari input tingkat proyek. settings.json proyek dan hooks dimuat hanya dari <cwd>/.claude/ tanpa fallback direktori induk.

Apa yang tidak dikontrol settingSources

settingSources mencakup pengaturan pengguna, proyek, dan lokal. Beberapa input dibaca terlepas dari nilainya:

Input Perilaku Untuk menonaktifkan
Pengaturan kebijakan terkelola Kebijakan yang dikelola endpoint, baik plist MDM, kebijakan registri, atau file pengaturan terkelola, dimuat dari host. Pengaturan yang dikelola server diambil pada konfigurasi yang memenuhi syarat ketika sesi melakukan autentikasi dengan kredensial yang memenuhi syarat, seperti login OAuth organisasi, kunci API yang dikonfigurasi secara langsung, atau profil Anthropic user_oauth Kebijakan endpoint: hapus file pengaturan terkelola, plist, atau kebijakan registri dari host. Pengaturan yang dikelola server: Owner di organisasi Claude Anda mengontrolnya; Anda tidak dapat menonaktifkannya dari SDK
Konfigurasi global ~/.claude.json Selalu dibaca Pindahkan dengan CLAUDE_CONFIG_DIR di env
Memori otomatis di ~/.claude/projects/<project>/memory/ Dimuat ke dalam system prompt pada awal sesi. Agen menulis memori baru di sana dengan tools Write dan Edit standar daripada tool memori khusus, jadi tools tersebut harus diaktifkan agar agen dapat menyimpan memori Atur autoMemoryEnabled: false di pengaturan, atau CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 di env
Konektor MCP dari claude.ai Dimuat ketika sesi melakukan autentikasi dengan login claude.ai Anda. Tidak dimuat ketika CLAUDE_CODE_OAUTH_TOKEN menyimpan token dari claude setup-token, yang hanya dapat membuat permintaan model. Melewatkan mcpServers: {} tidak menekannya Atur strictMcpConfig: true, disableClaudeAiConnectors: true di pengaturan, atau ENABLE_CLAUDEAI_MCP_SERVERS=false di env
sandbox.credentials entri deny dan entri mask file di ~/.claude/settings.json Ketika sandbox perintah berjalan, Claude Code menerapkan entri deny dan menjaga entri mask credentials.files sebagai pembatasan bahkan ketika settingSources mengecualikan pengaturan pengguna. Claude Code menggunakan entri ini hanya untuk mempersempit apa yang dapat diakses perintah sandboxed Hapus entri dari ~/.claude/settings.json

Instruksi proyek (CLAUDE.md dan rules)

File CLAUDE.md dan file .claude/rules/*.md memberikan agen Anda konteks persisten tentang proyek Anda: konvensi pengkodean, perintah build, keputusan arsitektur, dan instruksi. Ketika settingSources mencakup "project" (seperti dalam contoh di atas), SDK memuat file ini ke dalam konteks pada awal sesi. Agen kemudian mengikuti konvensi proyek Anda tanpa Anda mengulanginya di setiap prompt.

Lokasi pemuatan CLAUDE.md

Level Lokasi Kapan dimuat
Proyek (root) <cwd>/CLAUDE.md atau <cwd>/.claude/CLAUDE.md settingSources mencakup "project"
Rules proyek <cwd>/.claude/rules/*.md dan .claude/rules/*.md di setiap direktori induk settingSources mencakup "project"
Proyek (direktori induk) File CLAUDE.md di direktori di atas cwd settingSources mencakup "project", dimuat pada awal sesi
Proyek (direktori anak) File CLAUDE.md di subdirektori cwd settingSources mencakup "project", dimuat sesuai permintaan ketika agen membaca file di subtree itu
Lokal <cwd>/CLAUDE.local.md dan CLAUDE.local.md di setiap direktori induk settingSources mencakup "local"
Pengguna ~/.claude/CLAUDE.md settingSources mencakup "user"
Rules pengguna ~/.claude/rules/*.md settingSources mencakup "user"

Semua level bersifat aditif: jika file CLAUDE.md proyek dan pengguna keduanya ada, agen melihat keduanya. Tidak ada aturan preseden keras antara level; jika instruksi bertentangan, hasilnya tergantung pada bagaimana Claude menafsirkannya. Tulis aturan yang tidak bertentangan, atau nyatakan preseden secara eksplisit di file yang lebih spesifik ("Instruksi proyek ini menggantikan default tingkat pengguna yang bertentangan").

Untuk cara menyusun dan mengorganisir konten CLAUDE.md, lihat Kelola memori Claude.

Skills

Skills adalah file markdown yang memberikan agen Anda pengetahuan khusus dan alur kerja yang dapat dipanggil. Tidak seperti CLAUDE.md (yang dimuat setiap sesi), skills dimuat sesuai permintaan. Agen menerima deskripsi skill pada startup dan memuat konten lengkap ketika relevan.

Skills ditemukan dari filesystem melalui settingSources. Ketika opsi skills pada query() dihilangkan, skills pengguna dan proyek yang ditemukan diaktifkan dan tool Skill tersedia, sesuai dengan perilaku CLI. Untuk mengontrol skills mana yang diaktifkan, berikan skills sebagai "all", daftar nama skill, atau [] untuk menonaktifkan semua. Ketika skills diatur, SDK secara otomatis menambahkan tool Skill ke allowedTools. Jika Anda juga meneruskan daftar tools eksplisit, sertakan "Skill" dalam daftar tersebut sehingga Claude dapat memanggil skills.

from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
import asyncio


# Skills in .claude/skills/ are discovered automatically
# when settingSources includes "project"
async def main():
async for message in query(
prompt="Review this PR using our code review checklist",
options=ClaudeAgentOptions(
setting_sources=["user", "project"],
skills="all",
allowed_tools=["Read", "Grep", "Glob"],
),
):
if isinstance(message, ResultMessage) and message.subtype == "success":
print(message.result)


asyncio.run(main())

Hooks

SDK mendukung dua cara untuk mendefinisikan hooks, dan mereka berjalan beriringan:

  • Filesystem hooks: perintah shell yang didefinisikan di settings.json, dimuat ketika settingSources mencakup sumber yang relevan. Ini adalah hooks yang sama yang akan Anda konfigurasi untuk sesi Claude Code interaktif.
  • Programmatic hooks: fungsi callback yang diteruskan langsung ke query(). Ini berjalan dalam proses aplikasi Anda dan dapat mengembalikan keputusan terstruktur. Lihat Kontrol eksekusi dengan hooks.

Callback hook menerima input tool dan mengembalikan dict keputusan. Mengembalikan {} berarti izinkan tool untuk melanjutkan. Untuk memblokir eksekusi, kembalikan objek hookSpecificOutput dengan permissionDecision: "deny" dan permissionDecisionReason. Alasan dikirim ke Claude sebagai hasil tool. Lihat panduan hooks untuk tanda tangan callback lengkap dan tipe pengembalian.

from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher, ResultMessage
import asyncio


# PreToolUse hook callback. Positional args:
#   input_data: HookInput dict with tool_name, tool_input, hook_event_name
#   tool_use_id: str | None, the ID of the tool call being intercepted
#   context: HookContext, reserved for future abort-signal support
async def audit_bash(input_data, tool_use_id, context):
command = input_data.get("tool_input", {}).get("command", "")
if "rm -rf" in command:
return {
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "Destructive command blocked",
}
}
return {}  # Empty dict: allow the tool to proceed


# Filesystem hooks from .claude/settings.json run automatically
# when settingSources loads them. You can also add programmatic hooks:
async def main():
async for message in query(
prompt="Refactor the auth module",
options=ClaudeAgentOptions(
setting_sources=["project"],  # Loads hooks from .claude/settings.json
hooks={
"PreToolUse": [
HookMatcher(matcher="Bash", hooks=[audit_bash]),
]
},
),
):
if isinstance(message, ResultMessage) and message.subtype == "success":
print(message.result)


asyncio.run(main())

Kapan menggunakan tipe hook mana

Tipe hook Terbaik untuk
Filesystem (settings.json) Berbagi hooks antara sesi CLI dan SDK. Mendukung "command" (skrip shell), "http" (POST ke endpoint), "mcp_tool" (panggil tool server MCP yang terhubung), "prompt" (LLM mengevaluasi prompt), dan "agent" (menghasilkan agen verifier). Ini dijalankan di agen utama dan subagen apa pun yang dihasilkannya.
Programmatic (callbacks di query()) Logika khusus aplikasi, keputusan terstruktur, dan integrasi dalam proses. Ini juga dijalankan di dalam subagen. Input hook, argumen pertama callback, membawa bidang agent_id dan agent_type yang mengidentifikasi agen mana yang memicu hook.

Untuk detail lengkap tentang hooks terprogram, lihat Kontrol eksekusi dengan hooks. Untuk sintaks hook filesystem, lihat Hooks.

Pilih fitur yang tepat

Agent SDK memberi Anda akses ke beberapa cara untuk memperluas perilaku agen Anda. Jika Anda tidak yakin mana yang digunakan, tabel ini memetakan tujuan umum ke pendekatan yang tepat.

Anda ingin... Gunakan Permukaan SDK
Atur konvensi proyek yang selalu diikuti agen Anda CLAUDE.md settingSources: ["project"] memuat secara otomatis
Berikan agen materi referensi yang dimuat ketika relevan Skills settingSources + skills option
Jalankan alur kerja yang dapat digunakan kembali (deploy, review, release) User-invocable skills settingSources + skills option
Delegasikan subtask terisolasi ke konteks segar (research, review) Subagents Parameter agents + allowedTools: ["Agent"]
Koordinasikan beberapa instans Claude Code dengan daftar tugas bersama dan pesan inter-agen langsung Agent teams Tidak dikonfigurasi langsung melalui opsi SDK. Agent teams adalah fitur CLI di mana satu sesi bertindak sebagai pemimpin tim, mengoordinasikan pekerjaan di seluruh rekan kerja independen
Jalankan logika deterministik pada tool calls (audit, block, transform) Hooks Parameter hooks dengan callbacks, atau skrip shell dimuat melalui settingSources
Berikan Claude akses tool terstruktur ke layanan eksternal MCP Parameter mcpServers

Setiap fitur yang Anda aktifkan menambah jendela konteks agen Anda. Untuk biaya per-fitur dan bagaimana fitur ini berlapis bersama, lihat Perluas Claude Code.

  • Perluas Claude Code: Gambaran konseptual semua fitur ekstensi, dengan tabel perbandingan dan analisis biaya konteks
  • Skills di SDK: Panduan lengkap menggunakan skills secara terprogram
  • Subagents: Tentukan dan panggil subagents untuk subtask terisolasi
  • Hooks: Intersep dan kontrol perilaku agen di titik eksekusi kunci
  • Permissions: Kontrol akses tool dengan mode, rules, dan callbacks
  • System prompts: Suntikkan konteks tanpa file CLAUDE.md