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
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
tar zxf gnugo-3.8.tar.gz
cd gnugo-3.8
./configure --prefix=$HOME/opt/usr/local/gnugo/3.8
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
room=Computer Go
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: 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 ...]]
  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<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<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.