With a job registry composed, tool-bash and tool-pwsh now register every command with ctx.jobs as it starts and wait on the job with the registry's own bounded wait: a command that finishes in time returns the ordinary foreground result and its record is removed, one that outlives the timeout returns the same job id it already had, and a kill from outside the call is reported as `[stopped: <reason>]`. Nothing changes hands at the deadline, so the shell seam loses `onExpiry: 'offer'`, `ShellExecution.promotion`, and `ShellPromotionOffer`, and both local executors drop their offer arm. The registry stays optional: the tools register a foreground-only definition while no registry is composed and swap to the job-backed one inside a `ctx.inject(['jobs'])` fork, so a composition without jobs keeps a plain bash with no job tools in the model's schema. A refused registration at the start (admission, no controller) runs under the executor's deadline kill, and a wait that expires before the process spawned ends as the preparation timeout. JobRegistry gains `remove(id, caller?)` and the `settled` event reports `awaited`, so dsh-tool-jobs no longer keeps its own wait ledger; it withholds notices for awaited settlements and for kills the model requested. The tool catalog harvest composes the registry so the shipped schema stays documented, and the two compaction fixtures move their context window from 10000 to 10300 tokens because the branch's larger tool schemas pushed their condensed history over the old trigger, which requested a fourth scripted model call.
description, kind
| description | kind |
|---|---|
| The hooks group map: run existing Claude Code and Codex shell-hook configs during agent runs, for users and maintainers navigating the group. | package-group |
packages/hooks
English | 中文
Summary
The hooks group lets agent runs reuse shell hooks written for Claude Code or Codex. Point the matching integration at an existing hooks.json to run supported command hooks when sessions start, prompts arrive, tools run, or runs stop. These hooks can block prompts or tool calls with model-visible messages, add conversation context, or require the run to continue. Choose this group to preserve existing hook configurations; each integration supports only the command-hook subset documented by its source tool.
Table of Contents
Packages
| Package | Role | Shape |
|---|---|---|
hook-protocol |
Shared hook engine both bridges use; never configured directly | library |
hooks-claude-code |
Run your existing Claude Code hooks.json hooks during agent runs |
plugin |
hooks-codex |
Run your existing Codex hooks.json hooks during agent runs |
plugin |
Related documentation
- Interception extension-points Agent Note — the typed-Decision surface the bridges program against.
- Hook bridges Agent Note — the bridge design and its decision mapping.
- Hook protocol library Agent Note — what the shared library owns and why.
Dev Note
Working context for maintainers — click to expand
None.