user24253: I'm looking for some reference for the number of lookahead steps typically used by chess agents (Stockfish / Leela Chess Zero / others?)
From a quick search I found that:
the answer depends on:

complexity of position,
computer hardware/processor speed,
efficiency of software/graphics interface,
time given to the chess engine.

with somewhat mediocre hardware a depth around 15 ply's in one second is typical.
the NPS value for the Stockfish engine: 49,473 kN/s (calculating 49,473,000 positions (nodes) per second).
source:

https://www.quora.com/What-is-Stockfishs-depth-when-analysing-a-chess-position
https://chessify.me/blog/nps-what-are-the-nodes-per-second-in-chess-engine-analysis


user33999: Up to date reference is practically impossible to give, since engines and hardware change on yearly basis.
You identified most important conditions, but I would like to add two more:

Presence of tablebases (vastly improves evaluation depth in late endgames);
NNUE (slower) or hand-tuned evaluation function (faster).

Introduction of NNUE techniques vastly improved accuracy of evaluation function, but also made it slower. If you compare stockfish versions before NNUE and after you will see in same time frame difference of as many as 10-20 ply. Newest stockfish is still stronger than older, because it gains more in evaluation accuracy than loses in depth (in most positions! in some endgames this tradeoff is not so good).
From my experience (running time 1-2 minutes):

SF before NNUE in middlegame on reasonably strong computer: 30-40 ply
SF with NNUE in middlegame on reasonably strong computer: 20 ply
SF with NNUE in middlegame with 64 cores and 128gb ram: 30-40 ply
SF with 6 piece tablebases in endgame with ~8 pieces: 60+ ply or (more often) forced win/draw found.

Note that in early openings engines are very unreliable, no matter the (contemporarily achievable) depth.

As @Polytropos pointed out in comment, meaning of depth depends on choice of tree search algorithm. Possible moves and possible replies to them (and replies to them ...) can be arrayed into tree structure, so question of finding the best move is question of finding route to victory. Since this tree is too big to cover entirely we need to cheat - stop searching before we find the goal, evaluate positions and calculate approximate scores.
Additionaly chess is a zero sum game - this means, that your position can only be as good for you as it is bad for your opponent (and vice versa). This means that minimax search can be used.
Detailed explanation of tree search algorithms is out of scope for this answer. If interested, consult pages for minimax, Alpha-Beta pruning and Monte-Carlo tree search (MCTS). I will focus on practical consequences of choice of algorithm. Theoretically given infinite time they all lead to optimal solution.
Minimax in pure form cannot be used practically, since it's too time intensive. So in practice it's optimized by Alpha-Beta pruning. This way of searching is used by Stockfish, currently strongest publically available engine. Depth here means number of plys before reaching evaluation, with some moves ignored at each ply based on preliminary evaluations. Practically it optimizes for greater depth by sacrificing some breadth.
Consequence is that it may miss some good moves, which look bad to preliminary evaluation. Consequently human skill still matters in engine-assisted correspondence chess, since humans can force engine to consider moves that it would disregard to early (most commonly sacrifices with long-term positional compensation). It also leads to engines being weaker in (at least quiet) openings compared to (at least forcing) middlegames, since breadth is larger in openings, so more of it has to be pruned.
MCTS is used most notably by AlphaZero and Lc0. It's based on probabilistic methods. Practically it leads to lower search depths but better breadth than minimax with Alpha-Beta pruning.
Consequently play of these engines is slightly better in openings, but slightly worse in endgames (but this may also be attributed to evaluation function).
Depth for Lc0 is average depth reached for move, based on considered sample.
In short, don't compare depths reached by one engine to depths reached by different engine. Depth is inaccurate heuristic for accuracy, as such it can only tell you, that if same engine reaches depth 20 and depth 40, evaluation at depth 40 is most probably more accurate.

More pedantically Lc0 uses PUCT not MCTS, since pure MCTS uses random playouts for evaluation, while Lc0 uses neural network based evaluation function. For pure MCTS depth has not a lot of meaning, since better heuristic for accuracy is number of random playouts.
Another thing that makes comparision between Lc0 and Stockfish harder is difference in hardware. Lc0 runs on GPU, Stockfish on CPU.

24253: <p>I'm looking for some <strong>reference</strong> for the number of lookahead steps typically used by chess agents (Stockfish / Leela Chess Zero / others?)</p>
<p>From a quick search I found that:
the answer depends on:</p>
<ol>
<li>complexity of position,</li>
<li>computer hardware/processor speed,</li>
<li>efficiency of software/graphics interface,</li>
<li>time given to the chess engine.</li>
</ol>
<p>with somewhat mediocre hardware a <strong>depth around 15 ply's in one second</strong> is typical.</p>
<p>the NPS value for the Stockfish engine: 49,473 kN/s (calculating 49,473,000 positions (nodes) per second).</p>
<p>source:</p>
<ol>
<li><a href="https://www.quora.com/What-is-Stockfishs-depth-when-analysing-a-chess-position" rel="nofollow noreferrer">https://www.quora.com/What-is-Stockfishs-depth-when-analysing-a-chess-position</a></li>
<li><a href="https://chessify.me/blog/nps-what-are-the-nodes-per-second-in-chess-engine-analysis" rel="nofollow noreferrer">https://chessify.me/blog/nps-what-are-the-nodes-per-second-in-chess-engine-analysis</a></li>
</ol>
 33999: <p>Up to date reference is practically impossible to give, since engines and hardware change on yearly basis.</p>
<p>You identified most important conditions, but I would like to add two more:</p>
<ol>
<li>Presence of tablebases (vastly improves evaluation depth in late endgames);</li>
<li><a href="https://www.chessprogramming.org/NNUE" rel="nofollow noreferrer">NNUE</a> (slower) or hand-tuned evaluation function (faster).</li>
</ol>
<p>Introduction of NNUE techniques vastly improved accuracy of evaluation function, but also made it slower. If you compare stockfish versions before NNUE and after you will see in same time frame difference of as many as 10-20 ply. Newest stockfish is still stronger than older, because it gains more in evaluation accuracy than loses in depth (in most positions! in some endgames this tradeoff is not so good).</p>
<p>From my experience (running time 1-2 minutes):</p>
<ul>
<li>SF before NNUE in middlegame on reasonably strong computer: 30-40 ply</li>
<li>SF with NNUE in middlegame on reasonably strong computer: 20 ply</li>
<li>SF with NNUE in middlegame with 64 cores and 128gb ram: 30-40 ply</li>
<li>SF with 6 piece tablebases in endgame with ~8 pieces: 60+ ply or (more often) forced win/draw found.</li>
</ul>
<p>Note that in early openings engines are very unreliable, no matter the (contemporarily achievable) depth.</p>
<hr />
<p>As <a href="https://chess.stackexchange.com/users/27564/polytropos">@Polytropos</a> pointed out in comment, meaning of depth depends on choice of tree search algorithm. Possible moves and possible replies to them (and replies to them ...) can be arrayed into tree structure, so question of finding the best move is question of finding route to victory. Since this tree is too big to cover entirely we need to cheat - stop searching before we find the goal, evaluate positions and calculate approximate scores.</p>
<p>Additionaly chess is a zero sum game - this means, that your position can only be as good for you as it is bad for your opponent (and vice versa). This means that <a href="https://www.chessprogramming.org/Alpha-Beta" rel="nofollow noreferrer">minimax</a> search can be used.</p>
<p>Detailed explanation of tree search algorithms is out of scope for this answer. If interested, consult pages for <a href="https://www.chessprogramming.org/Alpha-Beta" rel="nofollow noreferrer">minimax</a>, <a href="https://www.chessprogramming.org/Alpha-Beta" rel="nofollow noreferrer">Alpha-Beta pruning</a> and <a href="https://www.chessprogramming.org/Monte-Carlo_Tree_Search" rel="nofollow noreferrer">Monte-Carlo tree search (MCTS)</a>. I will focus on practical consequences of choice of algorithm. Theoretically given infinite time they all lead to optimal solution.</p>
<p>Minimax in pure form cannot be used practically, since it's too time intensive. So in practice it's optimized by Alpha-Beta pruning. This way of searching is used by <a href="https://stockfishchess.org/" rel="nofollow noreferrer">Stockfish</a>, currently strongest publically available engine. <strong>Depth here means number of plys before reaching evaluation, with some moves ignored at each ply based on preliminary evaluations.</strong> Practically it optimizes for greater depth by sacrificing some breadth.</p>
<p>Consequence is that it may miss some good moves, which look bad to preliminary evaluation. Consequently human skill still matters in engine-assisted correspondence chess, since humans can force engine to consider moves that it would disregard to early (most commonly sacrifices with long-term positional compensation). It also leads to engines being weaker in (at least quiet) openings compared to (at least forcing) middlegames, since breadth is larger in openings, so more of it has to be pruned.</p>
<p>MCTS is used most notably by AlphaZero and <a href="https://lczero.org/" rel="nofollow noreferrer">Lc0</a>. It's based on probabilistic methods. Practically it leads to lower search depths but better breadth than minimax with Alpha-Beta pruning.</p>
<p>Consequently play of these engines is slightly better in openings, but slightly worse in endgames (but this may also be attributed to evaluation function).</p>
<p><strong>Depth for Lc0 is average depth reached for move,</strong> based on considered sample.</p>
<p><strong>In short, don't compare depths reached by one engine to depths reached by different engine. Depth is inaccurate heuristic for accuracy, as such it can only tell you, that if same engine reaches depth 20 and depth 40, evaluation at depth 40 is most probably more accurate.</strong></p>
<hr />
<p>More pedantically Lc0 uses <a href="https://lczero.org/dev/wiki/technical-explanation-of-leela-chess-zero/" rel="nofollow noreferrer">PUCT</a> not MCTS, since pure MCTS uses random playouts for evaluation, while Lc0 uses neural network based evaluation function. For pure MCTS depth has not a lot of meaning, since better heuristic for accuracy is number of random playouts.</p>
<p>Another thing that makes comparision between Lc0 and Stockfish harder is difference in hardware. Lc0 runs on GPU, Stockfish on CPU.</p>
