Automation and tasks
Kancalar
Hooks, Gateway içinde bir şey olduğunda çalışan küçük betiklerdir. Dizinlerden keşfedilebilir ve openclaw hooks ile incelenebilirler. Gateway, dahili hook'ları yalnızca hook'ları etkinleştirdikten veya en az bir hook girdisi, hook paketi, eski işleyici ya da ek hook dizini yapılandırdıktan sonra yükler.
OpenClaw'da iki tür hook vardır:
- Dahili hook'lar (bu sayfa):
/new,/reset,/stopveya yaşam döngüsü olayları gibi ajan olayları tetiklendiğinde Gateway içinde çalışır. - Webhook'lar: diğer sistemlerin OpenClaw'da iş tetiklemesini sağlayan harici HTTP uç noktalarıdır. Bkz. Webhook'lar.
Hook'lar ayrıca plugin'lerin içinde paketlenebilir. openclaw hooks list, hem bağımsız hook'ları hem de plugin tarafından yönetilen hook'ları gösterir.
Hızlı başlangıç
# List available hooks
openclaw hooks list
# Enable a hook
openclaw hooks enable session-memory
# Check hook status
openclaw hooks check
# Get detailed information
openclaw hooks info session-memory
Olay türleri
| Olay | Ne zaman tetiklenir |
|---|---|
command:new |
/new komutu verildiğinde |
command:reset |
/reset komutu verildiğinde |
command:stop |
/stop komutu verildiğinde |
command |
Herhangi bir komut olayı (genel dinleyici) |
session:compact:before |
Compaction geçmişi özetlemeden önce |
session:compact:after |
Compaction tamamlandıktan sonra |
session:patch |
Oturum özellikleri değiştirildiğinde |
agent:bootstrap |
Çalışma alanı bootstrap dosyaları enjekte edilmeden önce |
gateway:startup |
Kanallar başladıktan ve hook'lar yüklendikten sonra |
gateway:shutdown |
Gateway kapatma işlemi başladığında |
gateway:pre-restart |
Beklenen bir Gateway yeniden başlatmasından önce |
message:received |
Herhangi bir kanaldan gelen mesaj |
message:transcribed |
Ses transkripsiyonu tamamlandıktan sonra |
message:preprocessed |
Medya ve bağlantı ön işleme tamamlandıktan veya atlandıktan sonra |
message:sent |
Giden mesaj teslim edildiğinde |
Hook yazma
Hook yapısı
Her hook, iki dosya içeren bir dizindir:
my-hook/
├── HOOK.md # Metadata + documentation
└── handler.ts # Handler implementation
HOOK.md biçimi
---
name: my-hook
description: "Short description of what this hook does"
metadata:
{ "openclaw": { "emoji": "🔗", "events": ["command:new"], "requires": { "bins": ["node"] } } }
---
# My Hook
Detailed documentation goes here.
Metadata alanları (metadata.openclaw):
| Alan | Açıklama |
|---|---|
emoji |
CLI için görüntülenecek emoji |
events |
Dinlenecek olaylar dizisi |
export |
Kullanılacak adlandırılmış dışa aktarım (varsayılan "default") |
os |
Gerekli platformlar (örn. ["darwin", "linux"]) |
requires |
Gerekli bins, anyBins, env veya config yolları |
always |
Uygunluk kontrollerini atla (boolean) |
install |
Kurulum yöntemleri |
İşleyici uygulaması
const handler = async (event) => {
if (event.type !== "command" || event.action !== "new") {
return;
}
console.log(`[my-hook] New command triggered`);
// Your logic here
// Optionally send message to user
event.messages.push("Hook executed!");
};
export default handler;
Her olay şunları içerir: type, action, sessionKey, timestamp, messages (kullanıcıya göndermek için push yapın) ve context (olaya özgü veri). Ajan ve araç plugin hook bağlamları ayrıca, plugin'lerin OTEL korelasyonu için yapılandırılmış günlüklere aktarabileceği salt okunur W3C uyumlu tanılama izleme bağlamı olan trace içerebilir.
Olay bağlamı öne çıkanları
Komut olayları (command:new, command:reset): context.sessionEntry, context.previousSessionEntry, context.commandSource, context.workspaceDir, context.cfg.
Mesaj olayları (message:received): context.from, context.content, context.channelId, context.metadata (senderId, senderName, guildId dahil sağlayıcıya özgü veriler). context.content, komut benzeri mesajlar için boş olmayan bir komut gövdesini tercih eder, ardından ham gelen gövdeye ve genel gövdeye geri döner; iş parçacığı geçmişi veya bağlantı özetleri gibi yalnızca ajana özgü zenginleştirmeleri içermez.
Mesaj olayları (message:sent): context.to, context.content, context.success, context.channelId.
Mesaj olayları (message:transcribed): context.transcript, context.from, context.channelId, context.mediaPath.
Mesaj olayları (message:preprocessed): context.bodyForAgent (son zenginleştirilmiş gövde), context.from, context.channelId.
Bootstrap olayları (agent:bootstrap): context.bootstrapFiles (değiştirilebilir dizi), context.agentId.
Oturum patch olayları (session:patch): context.sessionEntry, context.patch (yalnızca değişen alanlar), context.cfg. Patch olaylarını yalnızca ayrıcalıklı istemciler tetikleyebilir.
Compaction olayları: session:compact:before, messageCount, tokenCount içerir. session:compact:after; compactedCount, summaryLength, tokensBefore, tokensAfter ekler.
command:stop, kullanıcının /stop vermesini gözlemler; bu, iptal/komut
yaşam döngüsüdür, ajan sonlandırma kapısı değildir. Doğal bir son yanıtı incelemesi
ve ajandan bir geçiş daha istemesi gereken plugin'ler bunun yerine tipli
plugin hook'u before_agent_finalize kullanmalıdır. Bkz. Plugin hook'ları.
Gateway yaşam döngüsü olayları: gateway:shutdown, reason ve restartExpectedMs içerir ve Gateway kapatma işlemi başladığında tetiklenir. gateway:pre-restart aynı bağlamı içerir ancak yalnızca kapatma beklenen bir yeniden başlatmanın parçası olduğunda ve sonlu bir restartExpectedMs değeri sağlandığında tetiklenir. Kapatma sırasında, her yaşam döngüsü hook beklemesi en iyi çaba esaslıdır ve sınırlıdır; böylece bir işleyici takılırsa kapatma devam eder.
Hook keşfi
Hook'lar, artan geçersiz kılma önceliği sırasına göre şu dizinlerden keşfedilir:
- Paketlenmiş hook'lar: OpenClaw ile gönderilir
- Plugin hook'ları: yüklü plugin'lerin içinde paketlenmiş hook'lar
- Yönetilen hook'lar:
~/.openclaw/hooks/(kullanıcı tarafından yüklenmiş, çalışma alanları arasında paylaşılan).hooks.internal.load.extraDirsiçindeki ek dizinler bu önceliği paylaşır. - Çalışma alanı hook'ları:
<workspace>/hooks/(ajan başına, açıkça etkinleştirilene kadar varsayılan olarak devre dışı)
Çalışma alanı hook'ları yeni hook adları ekleyebilir ancak aynı ada sahip paketlenmiş, yönetilen veya plugin tarafından sağlanan hook'ları geçersiz kılamaz.
Gateway, dahili hook'lar yapılandırılana kadar başlangıçta dahili hook keşfini atlar. Paketlenmiş veya yönetilen bir hook'u openclaw hooks enable <name> ile etkinleştirin, bir hook paketi yükleyin ya da katılmak için hooks.internal.enabled=true ayarlayın. Bir adlandırılmış hook'u etkinleştirdiğinizde Gateway yalnızca o hook'un işleyicisini yükler; hooks.internal.enabled=true, ek hook dizinleri ve eski işleyiciler geniş keşfe katılır.
Hook paketleri
Kanca paketleri, package.json içindeki openclaw.hooks aracılığıyla kancalar dışa aktaran npm paketleridir. Şununla kurun:
openclaw plugins install <path-or-spec>
Npm belirtimleri yalnızca kayıt defteri içindir (paket adı + isteğe bağlı tam sürüm veya dist-tag). Git/URL/dosya belirtimleri ve semver aralıkları reddedilir.
Birlikte gelen kancalar
| Kanca | Olaylar | Ne yapar |
|---|---|---|
| session-memory | command:new, command:reset |
Oturum bağlamını <workspace>/memory/ konumuna kaydeder |
| bootstrap-extra-files | agent:bootstrap |
Glob desenlerinden ek bootstrap dosyaları enjekte eder |
| command-logger | command |
Tüm komutları ~/.openclaw/logs/commands.log konumuna kaydeder |
| compaction-notifier | session:compact:before, session:compact:after |
Oturum Compaction başlarken/biterken görünür sohbet bildirimleri gönderir |
| boot-md | gateway:startup |
Gateway başladığında BOOT.md çalıştırır |
Birlikte gelen herhangi bir kancayı etkinleştirin:
openclaw hooks enable <hook-name>
session-memory ayrıntıları
Son 15 kullanıcı/asistan iletisini çıkarır ve ana makinenin yerel tarihini kullanarak <workspace>/memory/YYYY-MM-DD-HHMM.md konumuna kaydeder. Bellek yakalama arka planda çalışır; böylece /new ve /reset onayları transkript okumaları veya isteğe bağlı slug oluşturma nedeniyle gecikmez. Yapılandırılmış modelle açıklayıcı dosya adı slug'ları oluşturmak için hooks.internal.entries.session-memory.llmSlug: true ayarlayın. workspace.dir yapılandırılmış olmalıdır.
bootstrap-extra-files yapılandırması
{
"hooks": {
"internal": {
"entries": {
"bootstrap-extra-files": {
"enabled": true,
"paths": ["packages/*/AGENTS.md", "packages/*/TOOLS.md"]
}
}
}
}
}
Yollar çalışma alanına göre çözümlenir. Yalnızca tanınan bootstrap temel adları yüklenir (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md, MEMORY.md).
command-logger ayrıntıları
Her slash komutunu ~/.openclaw/logs/commands.log konumuna kaydeder.
compaction-notifier ayrıntıları
OpenClaw oturum transkriptini sıkıştırmaya başladığında ve bitirdiğinde geçerli konuşmaya kısa durum iletileri gönderir. Bu, sohbet yüzeylerinde uzun dönüşleri daha az kafa karıştırıcı hale getirir; çünkü kullanıcı asistanın bağlamı özetlediğini ve Compaction sonrasında devam edeceğini görebilir.
boot-md ayrıntıları
Gateway başladığında etkin çalışma alanından BOOT.md çalıştırır.
Plugin kancaları
Plugin'ler, daha derin tümleştirme için Plugin SDK üzerinden türlendirilmiş kancalar kaydedebilir:
araç çağrılarını kesme, istemleri değiştirme, ileti akışını denetleme ve daha fazlası.
before_tool_call, before_agent_reply, before_install veya diğer işlem içi yaşam döngüsü kancalarına ihtiyacınız olduğunda Plugin kancalarını kullanın.
Eksiksiz Plugin kancası başvurusu için bkz. Plugin kancaları.
Yapılandırma
{
"hooks": {
"internal": {
"enabled": true,
"entries": {
"session-memory": { "enabled": true },
"command-logger": { "enabled": false }
}
}
}
}
Kanca başına ortam değişkenleri:
{
"hooks": {
"internal": {
"entries": {
"my-hook": {
"enabled": true,
"env": { "MY_CUSTOM_VAR": "value" }
}
}
}
}
}
Ek kanca dizinleri:
{
"hooks": {
"internal": {
"load": {
"extraDirs": ["/path/to/more/hooks"]
}
}
}
}
CLI başvurusu
# List all hooks (add --eligible, --verbose, or --json)
openclaw hooks list
# Show detailed info about a hook
openclaw hooks info <hook-name>
# Show eligibility summary
openclaw hooks check
# Enable/disable
openclaw hooks enable <hook-name>
openclaw hooks disable <hook-name>
En iyi uygulamalar
- İşleyicileri hızlı tutun. Hook'lar komut işleme sırasında çalışır. Ağır işleri
void processInBackground(event)ile başlatıp beklemeden bırakın. - Hataları zarif biçimde ele alın. Riskli işlemleri try/catch içine alın; diğer işleyicilerin çalışabilmesi için hata fırlatmayın.
- Olayları erken filtreleyin. Olay türü/eylemi ilgili değilse hemen dönün.
- Belirli olay anahtarları kullanın. Ek yükü azaltmak için
"events": ["command"]yerine"events": ["command:new"]tercih edin.
Sorun giderme
Hook keşfedilmiyor
# Verify directory structure
ls -la ~/.openclaw/hooks/my-hook/
# Should show: HOOK.md, handler.ts
# List all discovered hooks
openclaw hooks list
Hook uygun değil
openclaw hooks info my-hook
Eksik ikili dosyaları (PATH), ortam değişkenlerini, yapılandırma değerlerini veya işletim sistemi uyumluluğunu kontrol edin.
Hook yürütülmüyor
- Hook'un etkin olduğunu doğrulayın:
openclaw hooks list - Hook'ların yeniden yüklenmesi için gateway sürecinizi yeniden başlatın.
- Gateway günlüklerini kontrol edin:
./scripts/clawlog.sh | grep hook
İlgili
- CLI Referansı: hook'lar
- Webhook'lar
- Plugin hook'ları — süreç içi Plugin yaşam döngüsü hook'ları
- Yapılandırma