0180907fe8
Rebased onto current main, where the OpenRouter tool-use 404 is now handled natively (the bundled demo's exact reason to exist), so the demo plugin is removed per the standalone-repo policy and every test now uses a synthetic unclaimed error (fake provider, neutral message, no status code) that no present or future built-in rule can claim. classify_api_error is now explicitly Python-plugin-only: VALID_HOOKS doubles as the shell-hook allow-list, but the shell response parser has no channel for the classification directive, so shell registrations are refused at config parse with a warning instead of being silently ignored (new SHELL_UNSUPPORTED_HOOKS set + regression test). The hook is documented in the hooks reference as the third behavior-changing hook, with the full kwargs contract, return shape, and the Python-only note. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PnMCvi2vXqfs996AjVeF2F