Quick answer: Complete only the current token (split the line, find the cursor token), match by prefix against commands then by the active argument's value set, and cycle matches on repeat Tab.

Your console autocomplete works on an empty line but breaks the moment you type part of a command or start an argument. The cause is completing the whole buffer instead of just the token the cursor is in.

How to fix it

1. Complete the token under the cursor

Tokenize the line and find which token the cursor sits in. Complete only that token: the command name if it is first, otherwise the argument for that position.

2. Match by prefix, not substring

Offer commands whose name starts with the typed prefix, sorted, so the closest matches surface first. Substring matching produces noisy, irrelevant suggestions.

3. Context-aware argument completion

For arguments, complete against the valid value set for that parameter (entity names, cvar names, file paths) so suggestions are meaningful, not just other command names.

4. Cycle and preview matches

On repeated Tab, cycle through candidates and show the list, so the user can pick among several matches instead of being stuck on the first.

Catching the ones you can't reproduce

The hardest version of this to fix is the one you can't reproduce — it only happens on a player's hardware, OS, driver, or save state, under conditions that simply aren't present on your machine. A report that says “it crashed” or “it froze” gives you nothing to act on, so the bug survives release after release while quietly costing you players.

Automatic error capture closes that gap. Each failure arrives with its full stack trace, the device and OS, the build number, and a breadcrumb trail of what the player did right before it broke, so even a failure you have never seen becomes a specific, reproducible issue. Fold identical failures into one signature ranked by how many players each hits, and your worklist sorts itself worst-first instead of arriving as a stream of vague complaints.

This is where a tool like Bugnet earns its place. Its SDK captures every error automatically with the full stack trace plus device, OS, memory, build, and game-state context, folds duplicates into one grouped issue with an occurrence count, and ties each to the build it first appeared on — so you fix the problem that hurts the most players first and confirm it is gone when its signature disappears from the next release.

A crash you can name from its stack trace is a crash you can usually fix in minutes.