This document lists the commands currently implemented by BitBishop's text interface (UCI + project-specific extensions).
The engine reads one command per line from stdin and writes responses to
stdout.
Example interactive session:
uci
isready
position startpos moves e2e4 e7e5
go depth 4
quit
- Commands are tokenized using whitespace splitting.
- Extra spaces/tabs/carriage returns are tolerated.
- Empty lines are ignored.
- Commands are case-sensitive (
uciworks,UCIdoes not). - A command is only processed when a newline is received.
- Unknown commands are ignored silently.
When the loop starts, BitBishop prints a startup banner:
BitBishop <version> by <authors>.
This line is an engine banner, not a standard UCI response.
Initial UCI handshake.
Syntax:
uci
Response:
id name BitBishop
id author Hardcode (Baptiste Penot)
uciok
Readiness probe.
Syntax:
isready
Response:
readyok
Resets internal board state to the standard starting position.
Syntax:
ucinewgame
Response: none
Sets the current board state.
Syntax:
position startpos [moves <move1> <move2> ...]
position fen <piece-placement> <side-to-move> <castling> <en-passant> <halfmove> <fullmove> [moves <move1> <move2> ...]
Examples:
position startpos
position startpos moves e2e4 e7e5 g1f3
position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Behavior notes:
- If
startposorfenis missing/invalid at parse level, the command is ignored. - After
moves, moves are applied left-to-right. - If one move is invalid, processing stops at that move (earlier moves stay applied).
- No explicit success/error output is emitted.
Starts search on the current position.
Syntax:
go [depth <n>] [movetime <ms>] [wtime <ms>] [btime <ms>] [winc <ms>] [binc <ms>] [infinite]
Implemented behavior (current state):
-
depth <n>: fixed-depth search. -
infinite: iterative deepening untilstop. -
movetime <ms>: iterative deepening search limited by a per-move budget in milliseconds. -
Non-positive
movetimevalues are clamped to1ms. -
movetimetakes precedence overwtime/btime/winc/binc. -
infinitetakes precedence over every other limit, includingmovetimeanddepth. -
If both
depthand a time-based limit are provided, the current implementation runs the timed search path. -
When
movetimeis not provided, time is estimated from the side-to-move clock: roughly remaining time divided across future moves, with increment added and a safety reserve kept aside. -
If no argument is provided behind
go, search defaults to infinite mode. -
If
depthis not provided and no time control is provided either, search defaults to infinite mode.
Response when search ends:
bestmove <uci-move>
Requests the current search to stop.
Syntax:
stop
Behavior:
- If a search is running, the worker is stopped and returns
bestmove .... - If no search is running, nothing is printed.
Stops search (if any) and exits the engine loop.
Syntax:
quit
Response: none
Displays board diagnostics for the current position.
Syntax:
d
Output includes:
- ASCII board
- FEN notation
- Zobrist hash
Prints a project help/about message.
Syntax:
help
Response: multiline informational text.
Runs a benchmark search on the current position (non-UCI extension).
Syntax:
bench [depth <n>] [movetime <ms>] [wtime <ms>] [btime <ms>] [winc <ms>] [binc <ms>] [infinite]
Implemented behavior (current state):
- Uses the same limit parser as
go. depth <n>runs a fixed-depth benchmark.movetime <ms>runs a time-limited benchmark using the same semantics asgo.- If
infiniteis provided, benchmark mode internally converts todepth 10. - A bare
benchcommand (no limits) is parsed asinfinite, then converted internally todepth 10. stopcan still interrupt a running benchmark early.
Response when benchmark ends:
bench nodes <total> negamax_nodes <negamax> quiescence_nodes <quiescence> time(s) <seconds>s nps <nps>
Not implemented yet.
- The engine currently does not expose configurable UCI options.
- No
option name ...lines are emitted inuciresponse.