{"version":"2.1.229","anchor":"self-hosted-runner-can-install-launcher-hooks-sent-by-the-se","canonical_anchor":"self-hosted-runner-can-install-launcher-hooks-sent-by-the-se","heading":"Self-hosted runner can install launcher hooks sent by the server","tier":"notice","area":"Self-Hosted Runner","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.229\/e\/self-hosted-runner-can-install-launcher-hooks-sent-by-the-se","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.229","markdown":"### Self-hosted runner can install launcher hooks sent by the server\n\nThe self-hosted runner writes server-supplied hook scripts for a session and deletes them afterwards.\n\n**What**\n\nWhen the server supplies hook scripts with a session, the runner validates and writes them under `hooks\/.ccr-launcher` alongside a `launcher-settings.json`, then deletes them when the session ends. Scripts must have known event names, match `^[a-zA-Z0-9][a-zA-Z0-9_-]{0,62}\\.(py|sh)$`, and stay under a per-script size cap. A `hooks` path that is not a directory is refused.\n\n**Details**\n\n- outcomes report through a new `self_hosted_launcher_hooks` telemetry family, including a distinct case where a repo settings file sets `disableAllHooks:true`\n- runner path only; nothing happens unless the server sends the hooks with the session\n\n**Evidence**\n\n`self_hosted_launcher_hooks_validation_failed`\n\n- Area: Self-Hosted Runner\n- Names: `launcher-settings.json`\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 3\/5"}