A practice session in Counter-Strike 2 is about fifteen console commands, and a private 5v5 is about ten more. For practice: sv_cheats 1, then infinite ammo, buying anywhere, a long round with no freeze time, grenade trajectories, and the bots kicked or frozen. For a private match: the round count, overtime, halftime and a restart, plus the two pause commands for when somebody's router gives up. Put each set in a .cfg file once and you type exec prac instead of fifteen lines every time.
Most of what people find when they search for "csgo practice server commands" still works, because CS2 kept the Source naming. Some of it does not, and a few of the numbers changed - the match length most of all. This post gives the CS2 versions, says where the old CS:GO ones differ, and explains where each command has to be typed, which is the part that trips people up on a dedicated server. The full server reference lives in CS2 server commands and cvars; the plugin-driven match night is in a CS2 competitive match server.
Where the commands run: your game or a server#
Every command below is typed into a console, but there are three consoles it could be, and they do not behave the same.
| Where | Who is the server | Who can set sv_ and mp_ cvars |
|---|---|---|
| Practice map from the menu | Your own game | You, in your console |
| Party on a workshop or practice map | The party leader's game | Only the leader |
| Dedicated server | A separate process | The server console or RCON |
The first case is the easy one. Play, choose Practice, pick a map, and your game starts a local server with you on it. Anything you type affects that server directly, because you are it.
The third case is where people get stuck. On a dedicated server, cvars beginning sv_, mp_, bot_ and ammo_ belong to the server. Typing sv_infinite_ammo 1 into your own client console while connected to someone else's server does nothing, and the console does not always say so. Those lines have to go in through the server's console - on a panel host, the console tab - or through rcon from your client. What a player can type for themselves is the small set of cheat commands that act on their own character: noclip, give, setpos. Those work only because the server has sv_cheats 1, which is why that one line comes first.
Turning on the console and sv_cheats#
The developer console is off by default. In CS2 it lives in Settings, Game, "Enable Developer Console (~)". Set it to Yes and the key to the left of 1 opens it. On some keyboard layouts that key sends a different character; if nothing happens, bind the console to another key in the keyboard settings rather than fighting it.
Then, on a map you are hosting:
sv_cheats 1sv_cheats is a server cvar, so on a dedicated server it goes into the server console. It does not survive a server restart and it is not set by any of Valve's mode configs, which is good: a practice server that restarts overnight comes back clean. If you load a new map with map, check it again with sv_cheats on its own, which prints the current value.
On a dedicated server the order matters for one more reason. Several practice cvars are flagged as cheats and are refused with a message about sv_cheats if you set them before it. When a config "half works", this is usually why.
The practice config, line by line#
Here is a complete practice config for solo or team grenade work. It runs the same on your own game and on a dedicated server.
sv_cheats 1mp_limitteams 0mp_autoteambalance 0mp_ignore_round_win_conditions 1mp_roundtime 60mp_roundtime_defuse 60mp_roundtime_hostage 60mp_freezetime 0mp_buy_anywhere 1mp_buytime 9999mp_maxmoney 60000mp_startmoney 60000mp_afterroundmoney 60000mp_respawn_on_death_t 1mp_respawn_on_death_ct 1sv_infinite_ammo 1ammo_grenade_limit_total 5sv_grenade_trajectory_prac_pipreview 1sv_grenade_trajectory_prac_trailtime 8sv_showimpacts 1sv_showimpacts_time 8bot_kickmp_warmup_endmp_restartgame 1What each group does:
| Cvar | Value | Why |
|---|---|---|
sv_cheats | 1 | Unlocks everything flagged as a cheat |
mp_ignore_round_win_conditions | 1 | Round never ends, even with nobody alive |
mp_roundtime and the two variants | 60 | Minutes. 60 is the ceiling |
mp_freezetime | 0 | No frozen start after a restart |
mp_buy_anywhere | 1 | Buy menu away from spawn |
mp_buytime | 9999 | Seconds. Effectively forever |
mp_maxmoney / mp_startmoney | 60000 | Never run out mid-session |
mp_respawn_on_death_* | 1 | Die, come straight back |
sv_infinite_ammo | 1 | No reload, grenades not used up |
ammo_grenade_limit_total | 5 | Carry one of each grenade type |
sv_showimpacts | 1 | Draw bullet impacts |
bot_kick | - | Remove every bot |
sv_infinite_ammo has two non-zero values and they are not the same. 1 means the magazine never empties and a thrown grenade stays in your hand, so you can throw the same smoke twenty times without rebuying. 2 means the reserve is infinite but you still reload, which is the setting for spray practice, because reloading is part of the spray.
mp_roundtime covers maps without a specific objective; mp_roundtime_defuse and mp_roundtime_hostage win on the map types they name. Set only the first and a defuse map still ends at the competitive time, which is the most common "my round keeps ending" question. With mp_ignore_round_win_conditions 1 as well, the round will not end on kills or a bomb either.
ammo_grenade_limit_total is the total grenades a player can carry. The competitive limit is four. With five you hold an HE, a flash, a smoke, a molotov or incendiary and a decoy at once. Flashbangs have their own limit of two per player in ammo_grenade_limit_flashbang, so practising a double flash does not need the total raised further.
mp_warmup_end and mp_restartgame 1 sit at the bottom on purpose. Warm-up on a fresh map has its own rules, and some cvars only take hold at the start of a round. Ending warm-up and restarting once makes the whole file apply in one go.
Grenade practice commands#
The four cvars above make the server forgiving. These are the ones that teach you something.
sv_grenade_trajectory_prac_pipreview 1 shows a small preview of where a grenade will land while you hold it, before you throw. It is a CS2 feature and it is the single most useful practice cvar the game has: you line up the throw, watch the preview settle on the right pixel, and only then release. It is a server setting, so on a dedicated server everyone gets it.
sv_grenade_trajectory_prac_trailtime 8 draws the path a thrown grenade took and leaves it on screen for that many seconds. With the preview showing where it will land and the trail showing where it went, you can see exactly how a jump-throw differs from a standing throw.
sv_showimpacts 1 marks bullet impacts, sv_showimpacts_time keeps them visible for that many seconds. The marks come in two colours, one from the client and one from the server, and the gap between them is your movement error at the moment you fired. 2 shows only the client marks and 3 only the server's.
Then the commands a player types in their own console:
sv_rethrow_last_grenadenoclipcl_showpos 1getpossetpos 1200 -560 64give weapon_smokegrenadebot_add_tbot_placebot_stop 1sv_rethrow_last_grenade throws your last grenade again from exactly where you threw it, without you moving. Bind it to a key and you can stand at the landing spot watching while the smoke repeats. noclip lets you fly; it is how you walk to the end of a smoke without being on the receiving end.
getpos prints a ready-made setpos ... ; setang ... line with your current position and view angle. Copy it into a config next to the name of the line-up and you have a teleport back to the spot you threw from. cl_showpos 1 shows the same coordinates live in the corner of the screen.
bot_add_t (or bot_add_ct) adds one bot, bot_place moves the most recently added bot to where you are looking, and bot_stop 1 stops all bots from moving or reacting. Together they put a target exactly where an enemy stands on a peek, which is how you check whether a flash actually blinds the angle or just looks impressive. bot_kick removes them all at the end.
Saving it as a .cfg and running it with exec#
A config is a plain text file of console lines, one per line, saved with a .cfg extension. Lines starting with // are comments.
For your own game, the folder is inside the Steam install, which still uses the old folder name:
Steam/steamapps/common/Counter-Strike Global Offensive/game/csgo/cfg/For a dedicated server it is the same relative path, game/csgo/cfg/, inside the server's directory. On a panel host you create the file in the file manager or upload it over SFTP. Then:
exec pracThe .cfg is optional. exec reads from the cfg folder; a subfolder works too, as exec practice/mirage.
Two habits make practice configs pleasant rather than tolerable. First, a matching prac_off.cfg that puts everything back, so ending a session is one command rather than a server restart:
sv_infinite_ammo 0sv_grenade_trajectory_prac_pipreview 0sv_showimpacts 0mp_ignore_round_win_conditions 0mp_buy_anywhere 0mp_respawn_on_death_t 0mp_respawn_on_death_ct 0sv_cheats 0mp_restartgame 1Second, binds for the commands you use with a grenade in your hand. These go in your client config, not the server's:
bind "mouse4" "sv_rethrow_last_grenade"bind "mouse5" "noclip"bind "kp_enter" "getpos"Whether CS2 runs autoexec.cfg on its own has been inconsistent across updates. The reliable route is to add +exec autoexec to the game's launch options in Steam, so it runs every time regardless. Line-up teleports can go in per-map files - exec lineups_mirage with a setpos line per smoke - which is the whole of what a lot of paid practice tools do.
Private 5v5 match commands#
For a private game between ten people, the defaults of the competitive mode are close to right already. What you set by hand is the length, the overtime and the halftime, and then you restart so it all applies.
sv_cheats 0mp_maxrounds 24mp_halftime 1mp_halftime_duration 15mp_overtime_enable 1mp_overtime_maxrounds 6mp_overtime_startmoney 12500mp_match_can_clinch 1mp_freezetime 15mp_roundtime_defuse 1.92mp_buytime 20mp_buy_anywhere 0mp_startmoney 800mp_maxmoney 16000mp_autoteambalance 0mp_limitteams 0mp_autokick 0mp_warmup_endmp_restartgame 3| Cvar | What it decides |
|---|---|
mp_maxrounds | Regulation length. 24 is MR12, first to 13 |
mp_halftime | Swap sides after half the rounds |
mp_halftime_duration | Seconds of the half-time break |
mp_overtime_enable | Play overtime at 12-12, or allow a draw |
mp_overtime_maxrounds | Rounds per overtime. 6 is MR3 |
mp_overtime_startmoney | Money at the start of each overtime half |
mp_match_can_clinch | End at 13 rather than playing out all 24 |
mp_autokick | 0 stops idle kicks during a long pause |
mp_match_can_clinch deserves a sentence because people turn it off by accident. With it on, a 13-3 match ends at 13-3. With it off, the server plays all 24 rounds, which is only what you want for a deliberate practice of the whole economy. mp_overtime_enable 0 lets a regulation match end 12-12, which is fine for a scrim and wrong for anything with a result.
mp_restartgame 3 restarts after three seconds; any number works, and 1 is fine. Exec the config first, restart second. Restarting first and then execing leaves the old money and round count in place for the first round, and the score is off before anyone notices.
Keep a few more by hand for the evening. mp_warmup_start puts the server back into warm-up, and mp_warmup_pausetimer 1 keeps warm-up running until you end it, which is how you wait for the tenth player without the clock deciding for you. mp_swapteams swaps everyone between sides and restarts the game, so it belongs before going live, not after. mp_teamname_1 and mp_teamname_2 set the names on the scoreboard. changelevel de_nuke moves to another map with everyone still connected; map de_nuke does the same but drops and reconnects every client.
Remember where these go on a dedicated server. A scrim.cfg that sets mp_ values is safe to exec live, but if you want the values to be the defaults every time the map loads, they belong in gamemode_competitive_server.cfg, because Valve's mode config runs after server.cfg on every map and overwrites it. CS2 server commands and cvars explains that order in full.
Pauses, timeouts and fixing a round#
Two commands stop a match:
mp_pause_matchmp_unpause_matchmp_pause_match does not freeze the game mid-gunfight. It pauses at the next freeze time, so the round in progress finishes and the next one waits on the buy screen. That is deliberate - a pause mid-round would change the outcome. mp_unpause_match resumes. Both are server commands, so in a private game the host or whoever holds RCON runs them.
Tactical timeouts are separate. mp_team_timeout_time sets their length in seconds and mp_team_timeout_max how many each team gets; players call them through the vote menu during freeze time. An admin can also start one for a team with timeout_terrorist_start or timeout_ct_start. If those two are not found on your build, find timeout lists what the current version calls them.
When a round has to be replayed - a crash during the buy, a player who disconnected at the worst time - the engine's round backups are the tool. mp_backup_round_auto 1 writes a small file per round, and mp_backup_restore_load_file loads one back with money and score intact. It only helps if it was on before the problem, so add it to the scrim config. The details, and how MatchZy wraps the same mechanism in a .stop command both teams have to agree to, are in the competitive match server post.
What changed from CS:GO#
Most CS:GO practice and match configs load in CS2 with a few lines failing. These are the ones worth knowing about.
| CS:GO | CS2 |
|---|---|
mp_maxrounds 30 (MR15) | mp_maxrounds 24 (MR12) |
Overtime money 10000 | mp_overtime_startmoney 12500 |
csgo/cfg/ | game/csgo/cfg/ |
cl_grenadepreview 1 | sv_grenade_trajectory_prac_pipreview 1 |
sv_grenade_trajectory 1 | sv_grenade_trajectory_prac_trailtime |
| 128 tick for practice | 64 tick with sub-tick input |
The match length is the change that bites hardest. A CS:GO scrim config sets mp_maxrounds 30, and CS2 happily plays thirty rounds with it - nothing errors, it is just a different game from the one everybody queues for. Change it to 24.
The grenade trajectory cvars were reworked rather than renamed one for one. Older guides use sv_grenade_trajectory 1 with sv_grenade_trajectory_time; the CS2 practice cvars carry _prac_ in their names. Run find grenade_trajectory on your build to see exactly which exist, because Valve has adjusted this group more than once. The client-side preview from CS:GO is gone; the in-hand preview is now the server's pipreview setting.
The 128 tick question changed shape too. In CS:GO, practising smokes on 64 tick could teach you line-ups that failed on 128 tick FACEIT servers, so everyone practised at 128. CS2 servers run 64 tick by default and evaluate input between ticks, which narrows the difference, but grenade physics are still simulated per tick. If you practise on a dedicated server, run it at the tick rate you will play on - what tick rate actually means explains why.
Unchanged and safe to copy across: sv_cheats, sv_infinite_ammo, sv_showimpacts, sv_rethrow_last_grenade, mp_buy_anywhere, mp_buytime, mp_roundtime and its variants, mp_freezetime, mp_warmup_end, mp_restartgame, mp_halftime, mp_match_can_clinch, mp_pause_match, bot_kick, bot_place, noclip, getpos and setpos. When a line in an old config fails, the console prints "Unknown command", and find with part of the name tells you whether it moved or went away.
Running practice on a server rather than your own game#
A local practice map is fine alone. It stops being fine when five people want to throw together: on a listen server the host's game is the server, so the host's frame rate and connection are everyone's, and the session ends when they quit.
A small dedicated server solves that. It holds the practice config while nobody is on, runs at the tick rate you choose, and lets the team join by address with a password. Ten players of practice or a 5v5 at 64 tick is a light load, around 1 GB of memory and one core for vanilla CS2, more with plugins or 128 tick. Setting one up from scratch, including the Steam game server token, is in setting up a Counter-Strike 2 server. A private server joined by address does not need the token at all; it only matters for the public browser.
On RE:NODE the practice and scrim configs go into game/csgo/cfg/ through the file manager, and the panel console takes exec prac or mp_pause_match directly, so nobody needs the RCON password. The panel console guide covers that screen. If the group wants practice and matches at the same time, that is two servers, because one has sv_cheats 1 and the other must not.
Troubleshooting#
The console refuses a command and mentions sv_cheats. It means what it says. Set sv_cheats 1 on the server first, then run the config again. On a dedicated server, setting it in your own client console does nothing.
Practice commands do nothing on a friend's or a dedicated server. You typed server cvars into your client console. Use the server console or prefix each line with rcon. Only noclip, give, setpos and similar act on your own player.
The round still ends after two minutes. mp_roundtime_defuse is not set, or mp_ignore_round_win_conditions is 0 and the round ended on the bomb or kills. Set both, then mp_restartgame 1.
`exec` says the file was not found. Wrong folder or a hidden .txt extension. Windows hides extensions by default, so prac.cfg is often prac.cfg.txt. The file must sit in game/csgo/cfg/, not the older csgo/cfg/.
Settings reset on map change. The mode config runs on every map load. Exec your config again after the map loads, or put the values in gamemode_competitive_server.cfg on a dedicated server.
The match ended at 16 wins, or never ended. A CS:GO config with mp_maxrounds 30, or mp_match_can_clinch 0. Set 24 and 1.
The pause did not happen. It did; it waits for the next freeze time. If it still does not take, check you sent it to the server rather than your client.
FAQ#
Do CS:GO practice commands work in CS2?
Most of them. sv_cheats, sv_infinite_ammo, sv_showimpacts, mp_buy_anywhere, noclip, bot_kick and the rest of the common set are unchanged. The grenade preview and trajectory cvars were reworked, and match length changed from 30 rounds to 24, so a CS:GO config needs those lines replaced.
Where do I put a practice config in CS2?
In game/csgo/cfg/ inside the Counter-Strike Global Offensive folder of your Steam library, or the same path inside a dedicated server's directory. Run it with exec and the file name, with or without .cfg.
How do I give myself infinite grenades in CS2?
sv_cheats 1, then sv_infinite_ammo 1. A thrown grenade stays in your hand, so you can throw the same smoke repeatedly. Add ammo_grenade_limit_total 5 to carry one of each type at once.
Can friends join my practice map?
Yes, as a party on the leader's game, but the leader's machine is the server for everyone and only the leader can change cvars. For regular team practice a dedicated server with a password is steadier and keeps running when the leader logs off.
How do I play a private 5v5 with real competitive rules?
Exec a config with mp_maxrounds 24, mp_halftime 1, mp_overtime_enable 1 and mp_overtime_maxrounds 6, then mp_warmup_end and mp_restartgame 1. Make sure sv_cheats is 0, and set sv_password so only the ten of you can join.
Why does mp_pause_match not pause straight away?
By design it pauses at the start of the next round's freeze time, so the round being played finishes normally. mp_unpause_match resumes play.


