Running GNU Go on KGS using kgsGtp – or how to play with your own bot
I am now reading Learn to Play Go by Janice Kim i Soo-hyun Jeong. Really nice lecture I must say. However, I was lacking a sparing partner to test some of the concepts presented in the book. This is why I have decided to setup my own, personal Go bot. Note that this tutorial covers macOS only.
What do you need to run your personal Go bot
1. Create a KGS account for your bot: KGS registration
2. Download kgsGtp.jar: download
3. Build GNU Go
4. Prepare ini file
5. Run everything
2. Getting kgsGtp
Make sure to prepare a place for your installation and download kgsGtp
mkdir $HOME/opt/kgs-gpt/3.5.23 cd $HOME/opt/kgs-gpt/3.5.23 curl -O http://files.gokgs.com/javaBin/kgsGtp-3.5.23.tar.gz tar zxf kgsGtp-3.5.23.tar.gz mv kgsGtp-3.5.23/kgsGtp.jar . rm -rf kgsGtp-3.5.23 kgsGtp-3.5.23.tar.gz
You are almost ready :) Now, to the GNU Go
3. Getting GNU Go
mkdir $HOME/opt/src cd $HOME/opt/src curl -O https://ftp.gnu.org/gnu/gnugo/gnugo-3.8.tar.gz tar zxf gnugo-3.8.tar.gz cd gnugo-3.8 ./configure --prefix=$HOME/opt/usr/local/gnugo/3.8 make make install
You are now even closer to having your own, personal, GNU Go bot :)
4. Prepare ini file
Make sure to get back to your kgs-gtp location and prepare dedicated ini file.
engine=$HOME/opt/usr/local/gnugo/3.8/bin/gnugo --mode gtp --quiet --cache-size 32 name=this_is_a_user_name_from_step_1 password=this_is_a_password_from_step_1 room=Computer Go mode=custom opponent=you_can_put_your_user_name_here automatch.speed=blitz,medium automatch.rank=11k reconnect=true talk=I'm a computer. Cannot understand English yet. gameNotes=I can not play :( Waiting for my master.
If you will add opponent settings, your bot will wait for you and will reject games initiated by other users.
5. Running everything
Now, you are really ready to go :)
java -jar kgsGtp.jar config.ini
All that left is to connect to KGS (either via: https://shin.gokgs.com/ or using dedicated client – CGoban 3) and play with your bot. It will wait for you inside Computer Go room. You can always make it wait somewhere else by altering config.ini.

If you want to learn how to customise your bot, simply run kgsGtp.jar with a --help argument like so
> java -jar kgsGtp.jar --help
Usage: gtpClient <properties file> [prop1=val1 [prop2=val2 ...]]
Properties:
logFile=<file> - Log to file, -nn.log will be appended
verbose=t|f - Verbose output
engine=<command> - Execute the command to start the engine and use engine's stdin/stdout to communicate
gtp.in=<filename> - Read named pipe for data from engine
gtp.out=<filename> - Write named pipe for data to engine
engine.port=<port> - Listen at the specified TCP port for connections from the engine
server.host=<host> - Set host or IP address of KGS
server.port=<port> - Set TCP port of KGS
name=<name> - Set user name (required)
password=<value> - Set password (required)
room=<room name> - Join this room on startup
mode=auto - Set up automatch game (default)
automatch.speed= One or more of blitz,fast,medium - select acceptable speeds for automatch pairing (blitz,fast,medium is default)
automatch.rank=[30k..1k] - Select estimated rank for automatch pairing (Required if robot is unranked)
mode=custom - Set up custom open game
rules=(japanese|chinese|aga|newzealand) - Set rule system to use
rules.boardSize=<size> - Set board size
rules.time=<0|m:ss|m:ss+nxm:ss|m:ss+n/m:ss> - Set time system
mode=tournament - Play in tournament games only
mode=wait - Wait for opponent to create custom game
opponent=<name> - Play against this player only
mode=both - Both automatch and custom open games at the same time
talk=<text> - Set message we give to anybody who tries to talk to us.
gameNotes=<text> - Set game notes that appear
hint.cleanup=<text> - Set notes to opponent about cleanup mode
hint.noArguing=<text> - Set message to opponent when the game can't be scored
due to disagreement over dead stones
-help, -usage - Show this information.