CS2 Bot Commands: Add, Kick and Remove Bots for Good
How to remove bots in CS2 so they stay gone, plus bot_add, bot_kick, bot_quota modes, difficulty, weapon limits and cheat-only bot commands.
The CS2 bot commands most people are looking for are the ones that remove bots, and the commands that remove bots are also the ones people get wrong. Run bot_kick on its own and the bots tend to come back, at the latest on the next map, because a separate setting, bot_quota, tells the server how many bots it should keep, and the game mode's config sets it again every map. This guide covers adding, kicking and removing bots for good, then the quota modes, the difficulty and weapon controls, and the cheat-only commands for freezing or placing bots.
Every command here was checked against the current CS2 build (1.41.8.5, 25 September 2026). All of them run from the server console: the Console tab in your GSK panel, or your game console with an rcon prefix. None of the add, kick or quota commands need sv_cheats.
How to Remove All Bots in CS2
Run these two lines in the Console tab, in this order:
bot_quota 0
bot_kick bot_quota 0 tells the server to stop keeping bots, and bot_kick removes the ones already there. Setting the quota first means nothing is left to top the bots back up.
The quota comes back when the map changes, because the gamemode config runs again. Your server starts in whatever mode the Gamemode and Gametype variables in the Startup tab select, and each of Valve's gamemode configs sets its own bot quota:
| Mode (panel values) | Valve config | bot_quota |
bot_quota_mode |
bot_difficulty |
|---|---|---|---|---|
Competitive (game_mode 1, game_type 0, the egg default) |
gamemode_competitive.cfg |
1 |
competitive |
2 |
Casual (0, 0) |
gamemode_casual.cfg |
10 |
fill |
1 |
Deathmatch (2, 1) |
gamemode_deathmatch.cfg |
10 |
fill_with_minimum |
2 |
So a casual server fills up to ten players with bots every map. To keep a server bot-free, put the two lines in a small config such as game/csgo/cfg/nobots.cfg and run exec nobots after a map change. If you use a match plugin, put bot_quota 0 in its config instead. MatchZy's practice config, for example, already sets bot_quota 0.
Adding Bots
| Command | What it does |
|---|---|
bot_add |
Add one bot to whichever team needs it |
bot_add_t / bot_add_ct |
Add one bot to a specific side |
bot_add <t|ct> <type> <difficulty> <name> |
Full syntax. Every argument is optional |
bot_difficulty <0-3> |
Skill of bots that join after you set it: 0 easy, 1 normal, 2 hard, 3 expert |
Set the difficulty first, then add:
bot_difficulty 3
bot_add_ct
bot_add_ct
bot_add_t bot_difficulty doesn't change bots that are already in the game. To change them, kick them and add them again.
Bots also take player slots. The Max Players value in your Startup tab caps humans and bots together. With bot_auto_vacate on (its default), a bot leaves when a human needs its slot.
Kicking Specific Bots
bot_kick takes the same filters as bot_add:
| Command | Removes |
|---|---|
bot_kick or bot_kick all |
Every bot |
bot_kick t / bot_kick ct |
Every bot on one side |
bot_kick <name> |
One bot by name, as shown in status |
Check the quota first, as in the section above. If bot_quota is still above what you want, the quota system can add bots back.
Bot Quota Modes
bot_quota is a target, and bot_quota_mode sets how the server counts toward it:
bot_quota_mode |
Behaviour |
|---|---|
normal |
Keeps bot_quota bots in the game regardless of humans |
fill |
Keeps the total number of players at bot_quota. Each human who joins pushes a bot out |
match |
Keeps a 1:N ratio of humans to bots, where N is bot_quota |
Valve's own configs also use competitive and fill_with_minimum, which the convar's built-in help does not describe.
For a community casual server, fill is usually what you want. For example, bot_quota 10 with bot_quota_mode fill keeps a 5v5 going, and the bots drop out as people join. Two more convars affect when bots appear:
| Convar | Default | Effect |
|---|---|---|
bot_join_after_player |
true |
Bots wait until a human joins. An empty server stays empty, then bots appear the moment you connect |
bot_join_team |
any |
T or CT puts every bot on one side |
mp_humanteam |
any |
T or CT locks humans to one side. Combine it with bot_join_team for humans-versus-bots |
bot_auto_vacate |
true |
Bots leave to make room for humans |
Weapons, Difficulty and Behaviour (No Cheats)
| Command / convar | Effect |
|---|---|
bot_knives_only |
Bots use knives only |
bot_pistols_only |
Pistols only |
bot_snipers_only |
Sniper rifles only |
bot_all_weapons |
Remove the restriction again |
bot_allow_rifles, bot_allow_snipers, bot_allow_pistols, bot_allow_shotguns, bot_allow_sub_machine_guns, bot_allow_machine_guns, bot_allow_grenades |
Fine-grained weapon allow-list, all true by default |
bot_chatter off |
Silence radio chatter. Other values are radio, minimal and normal |
bot_walk 1 |
Bots walk only, never run |
bot_prefix "<text>" |
Text put before every bot's name |
bot_eco_limit <n> |
Bots won't buy when their money is below this (default 2000) |
sv_auto_adjust_bot_difficulty |
On by default: "Adjust the difficulty of bots each round based on contribution score." Turn it off (0) if you want a fixed bot_difficulty |
Cheat-Only Bot Commands
These need sv_cheats 1 on the server. They are useful for practice and aim training, but they turn cheats on for everyone connected.
| Command | Effect |
|---|---|
bot_stop <1|all|t|ct|not_bomber> |
Stop bots in place. bot_stop 0 releases them |
bot_freeze 1 |
Freeze bots where they stand |
bot_dont_shoot 1 |
Bots never fire |
bot_zombie 1 |
Bots stay idle and never attack |
bot_ignore_players 1 |
Bots can't see human players |
bot_crouch 1 |
Bots stay crouched |
bot_mimic <player index> |
Bots copy that player's inputs |
bot_kill |
Kill bots but leave them in the game. Takes the same filters as bot_kick |
bot_place |
Place a bot where "the local player" is aiming |
bot_place is written for a local game, where the person at the console is also a player. On a dedicated server the Console tab has no player behind it, so use the MatchZy practice commands .bot and .crouchbot to place bots where you stand.
Bots on Workshop Maps
Bots need a navigation mesh to move. Official maps ship with one. The retail CS2 server has no nav_generate command (CS:GO had one), so the server can't build a mesh itself. The mesh has to come with the map. If bots on a Workshop map stand still at spawn, the author probably published it without one, and nothing on the server side can fix that.
FAQ
What is the command to remove bots in CS2?
bot_quota 0 followed by bot_kick. After a map change the game mode's config sets the quota again, so run both again, or keep them in a config you exec.
How do I kick bots from one team only?
bot_kick t or bot_kick ct. To stop them rejoining that team, set bot_join_team to the other side, or lower bot_quota.
How do I make bots harder?
bot_difficulty 3, then kick and re-add the bots, because difficulty applies only to bots that join afterwards. Turn off sv_auto_adjust_bot_difficulty if you want the difficulty to stay where you set it.
Why do bots appear only when I join?
bot_join_after_player is on by default, so the server waits for a human before adding bots. Set it to 0 to have them spawn on an empty server.
Do bot commands need sv_cheats?
Adding, kicking, the quota, difficulty and weapon restrictions don't. Freezing, stopping, killing, placing and mimicking do.
What to Read Next
- Counter-Strike 2 server commands: RCON setup, kick and ban commands, and the wider convar list
- Getting started with your Counter-Strike 2 server: game modes, maps and first boot
- How to run 5v5 competitive matches: MatchZy for scrims and pugs
Made with 💜 by GameServerKings

Need a Counter-Strike 2 server?
Deploy an instantly-provisioned Counter-Strike 2 server on high-clock hardware — DDoS protected, no contracts, cancel anytime.
From $11.50 /month