root ::= "<think>\n" [A-Za-z0-9 ,.;:]{10,80} "\n</think>\n\n" answer
answer ::= [^\x00-\x08\x0B\x0C\x0E-\x1F]+
root ::= thought answer
thought ::= "<think>\n" plan approach edge "</think>\n\n"
plan ::= "Plan: " shortline "\n"
approach ::= "Approach: " shortline "\n"
edge ::= "Edge cases: " shortline "\n"
shortline ::= [A-Za-z0-9 ,.;:/_()'"+=-]{1,120} "\n"
answer ::= [^\x00-\x08\x0B\x0C\x0E-\x1F]+
came across your tweet - and grok suggested these 2 -
min-thinking.gbnf
structured-think.gbnf
https://gist.github.com/johndpope/a77b179c4f0013adb2a50e13e56b7929