I have been casually working on a bot for the past couple of months in the minimal spare time I have.
Here's a short clip of it playing a 3 "player" ffa on dm4:
Currently the bot supports any maps that don't have buttons or fancy lift things. This will obviously change as the bot is in its infancy. It currently has no concept of ledges (and therefore no avoidance of them) or jumping ai aside from a node being flagged to say 'jump' when the bot reaches it.
The bot is as close to a real client as you can get currently. No rankings stuff in qc, physics stuff is handled in the engine like real clients (no physics present in qc, aside from being in DP atm so it has sv_user.qc).
Node files for levels are external .node files that are loaded in on map load.
Bot personality files are external .bot files that contain a large amount of personality information for each individual bot made with my quick little app I have thrown together (viewable here - : requires .NET framework to use)
Both the app and the bots are a work in progress, and currently the bots have ridiculously good aim so aren't in a playable state by humans, although they have good fun against each other

At the moment the bots only use the name/shirt/pants/sensitivity information from the .bot file, but as i add features to the bot, obviously they will be making use of more and more values, until they're all being used. Hopefully it should greatly assist in making them a lot more human-like, as well as varying each bots playing abilities and styles drastically.