| groq_api_key | Groq API key for AI generation | yes | — |
| tag_name | Tag name for the release | yes | — |
| release_name | Name of the release (defaults to tag_name) | no | — |
| draft | Create as draft release | no | false |
| prerelease | Create as prerelease | no | false |
| model | Groq model to use (default: openai/gpt-oss-120b) | no | openai/gpt-oss-120b |
| previous_tag | Previous tag to compare against (defaults to latest tag) | no | — |
| files | Comma-separated list of files to attach to release | no | — |
| body_template | Optional template for release notes structure | no | — |
| max_tokens | Max AI completion tokens (default 8000). Prevents output truncation. | no | 8000 |
| diff_limit | Max diff lines sent to AI (default 120). Higher = more depth but may exceed Groq token limits. | no | 120 |
| commits_limit | Max commit messages sent to AI (default 60). Higher = more context. | no | 60 |
| detail_level | Shortcut for depth: brief, standard, or detailed | no | standard |
| compatibility | Optional. e.g. "Node 18+, Python 3.10+". Placed in Compatibility field. | no | — |
| show_diff_section | Append diff section at bottom of release notes (default false) | no | false |
| diff_section_limit | Max lines of inline diff in release body (default 500) | no | 500 |
| summarizer_model | Model for per-file summarization in two-stage mode. If empty, uses same as model. | no | — |
| two_stage_char_limit | Use two-stage summarization when diff is under this size in chars (default 40000). Set 0 to disable. | no | 40000 |
| prompt_append | Optional text appended to the user prompt. Use for custom instructions (e.g. tone, audience, extra context). | no | — |
| system_append | Optional text appended to the system prompt. Use for custom behavior or constraints. | no | — |
| notes_style | Release notes format: github (default) or desqta (emoji headers, categorized sections) | no | github |
| product_name | Product name for DesQTA-style title (defaults to repo name) | no | — |
| plain_language | Use simple, jargon-free language that the average person can understand (default false) | no | false |