Yes grep is your friend 
Whenever I don’t know where to start looking for something, I either grep for likely terms, or start at vmMain and work my way down.
Taking the time to get a feeling for the basic layout and Q3 API is also worthwhile.
the gamecode is devided into 3 VMs:
cgame/ <- client gamecode
game/ <- server gamecode ( except game/bg_* is linked to both game and cgame, for prediction or shared constants)
ui/ <- user interface
the bot stuff is dead, and so can be ignored.
Each of VMs api is defined in <vm>_public.h
Possible calls into the VM are defined by the <vm>Export_T enum. <vm>_main.c vmMain handles all of these.
Calls from the VM into the engine are defined by the <vm>Import_T enum. These are wrapped with functions in <vm>_syscalls.c
You’ll notice that cvars follow a similar naming convention
cg_ -> cgame
g_ -> game
cl_ -> client engine
sv_ -> server engine
r_ -> renderer
and so on. Of course, like any naming convention, there are exceptions and things that don’t fit nicely.