Sjef is a tool for playing matches between chess engines. It is similar to Cute Chess cli, but simpler and more focussed on playing different chess variants.

Currently, Sjef only understands the Chess Engine Communication (X/WinBoard) protocol. Engines that communicate through the UCI protocol will need an in-between program, such as Polyglot. Most variant engines "speak" the XBoard protocol.

Running Sjef

Sjef is a commandline program, and so it needs to run from the terminal. The commandline (with options) looks like

sjef -fcp engine1 -scp engine2 -mg n [-referee engine3] [-variant name] [[-finit 'string'][...]\
   [[-sinit 'string'][...]] [-tc (time|moves/time+inc)] [-inc time]\
   [-mps moves] [-mtpm time] [-sgf filename] [-log [logfile]] [-memory size]

The commands have the following meaning:

  • -fcp engine1 Specifies the first engine (playing white in the first game).
  • -scp engine2 Specifies the second engine (playing black in the first game).
  • -referee engine3 Specifies the third engine, which acts as a referee. The referee engine is responsible for verifying that moves are valid, and for adjudicating games. If no referee engine is specified, Sjef looks for sjaakii in the path.
  • -mg n Play n games between the two engines, with alternating colours.
  • -variant name Play the named variant. Obviously, the referee and the two engines must all be able to play this.
  • -finit 'string' The quoted string is sent to the first engine at startup. You can pass multiple strings this way, which will be sent to the engine one after the other.
  • -sinit 'string' The quoted string is sent to the second engine at startup. You can pass multiple strings this way, which will be sent to the engine one after the other.
  • -tc string Specifies the time control. There are two possible formats for the time control string: either the total time per session (as either seconds or minutes:seconds) or specifying the number of moves, the time per session and the time increment in one go (as "moves/time+inc"). Defaults to 40 moves in 10 seconds with no increment.
  • -mps moves Sets the number of moves per session for the time control. Pass 0 to disable the time increment after each session. Defaults to 40.
  • -inc time Sets the time increment after each move (Fischer clock), in milliseconds.
  • -mtpm time Sets the minimum time per move, in milliseconds. No matter how low on time the engine is, it is always allowed to think this long for each move. This is mainly intended to maintain some quality for very rapid games. Defaults to 0.
  • -sgf filename Saves completed games in the specified file, in .pgn format.
  • -log logfile Store all engine communication in the specified log file. If no name is specifed the name defaults to sjef.log.
  • -memory size Specify the amount of memory programs are allowed to use (as per the CECP "memory" command), in MB.