From Quake Wiki
The Grunt is the first enemy you will encounter in Quake, alongside the Rottweiler. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.
Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the Enforcer.
The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.
As one of the weakest enemies in Quake, Grunts do not pose any real threat to a player alone, but due to their hitscan attack, they can be a nuisance to players have not noticed the Grunt's presence. In groups, especially when scattered around an area and attacking from many angles at once, Grunts can slowly wear down the health of players who do not keep moving.
A good example of a stage where Grunts do actually cause quite a lot of trouble is e4m1, where the Grunts can easily snipe at the player from afar before the player has really had chance to notice them. This situation occurs quite frequently in custom maps, but less so in the stock Quake maps.
Grunts are extremely easy to deal with once the player is aware of them, with just about any weapon providing more than enough fire power to despatch them quickly. Grenades and rockets are great for taking down groups of Grunts, and also pack enough of a punch to take down any Enforcer unlucky enough to get caught in the blast.
monster_army is the entity for placing Grunts in a level.
The Grunt is a monster entity normally associated with the Base themed setting although it has also been used in Quake to populate the early part of levels that the player has entered from a base themed level (see the start of e1m2 for an example of this).
Being a low health monster entity it's best usage is probably while the player still has minimal armor and weaponry which can allow for some overwhelming by sheer numbers in the harder skill settings.
|targetname||The targetname of the Grunt. When triggered, the Grunt will wake up if inactive.|
|target||The targetname of the entity to be triggered when the Grunt dies.|
|killtarget||The targetname of the entity to be removed when the Grunt dies.|
The monster_army entity supports the following spawnflags:
|1||Ambush||The Grunt will not wake up from seeing other monsters wake up or hearing sounds.|
It also supports the standard spawnflags for difficulty and deathmatch presence.
|256||Not on Easy||The Grunt will not spawn on Easy difficulty.|
|512||Not on Normal||The Grunt will not spawn on Normal difficulty.|
|1024||Not on Hard||The Grunt will not spawn on Hard difficulty.|
|2048||Not in Deathmatch||The Grunt will not spawn in Deathmatch mode.|
This is the format used by TrenchBroom and Worldcraft. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(":progs/solider.mdl") = monster_army : "Grunt" 
This is the definition format used for most old Quake editors, including the original QuakeEd.
/*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush */