Detectar o agente que chamou um hook
sdk/hostdetect identifica o host que iniciou o hook, não os agentes instalados.
Sinais
DefaultRegistry() reconhece apenas Codex e Claude Code: turn_id no nível superior do JSON indica Codex; hook_event_name sem turn_id indica Claude. Payload inválido, maior que MaxPayloadBytes ou sem sinal resulta em PlatformUnknown.
A prioridade é Codex antes de Claude. O registro padrão não usa PLUGIN_ROOT nem CLAUDE_PLUGIN_ROOT porque Codex pode definir ambos. O JSON argv antigo do Codex notify com turn-id também não é reconhecido por esse detector stdin.
Exemplo
package main
import (
"fmt"
"github.com/777genius/plugin-kit-ai/sdk/hostdetect"
)
func main() {
payload := []byte(`{"hook_event_name":"Stop","session_id":"example"}`)
host, err := hostdetect.Detect(hostdetect.DefaultRegistry(), "", nil, payload)
if err != nil {
panic(err)
}
switch host {
case hostdetect.PlatformClaude:
fmt.Println("Claude hook")
case hostdetect.PlatformCodex:
fmt.Println("Codex hook")
default:
fmt.Println("Unknown; do not assume a default agent")
}
}Detect(registry, override, env, payload) considera primeiro override válido, depois variáveis do registro personalizado e por fim as chaves superiores do JSON. Override inválido é erro; sem correspondência retorna PlatformUnknown sem erro. Adicione Registry/Signal apenas com sinais confiáveis. Verifique que o módulo publicado no tag escolhido contém esse pacote.
Para encontrar clientes instalados e perfis, use discoverTargets via manage discover ou Engine.Discover para adaptadores registrados. Eles não fazem instalação.