It's known that for sheaves with values in modules, the inverse image sheaf functor $j^\ast$ for $j:U\subset X$ an inclusion of an open set has a left adjoint which is extension by zero.
Is there any way to carry this over to $\mathsf{Set}$-valued sheaves where no zero object is available?
Let $j : U \to X$ be the inclusion of an open subspace. Then $j^* : \mathbf{Sh} (X) \to \mathbf{Sh} (U)$ has a left adjoint $j_! : \mathbf{Sh} (U) \to \mathbf{Sh} (X)$: given a sheaf $F$ on $U$, $$j_! F (V) = \begin{cases} F (V) & \text{if } V \subseteq U \\ \emptyset & \text{otherwise} \end{cases}$$ the idea being that $(j_! F)_x = F_x$ for $x \in U$ and $(j_! F)_x = \emptyset$ for $x \notin U$.
The easiest way to see this is to use the espace étalé definition of "sheaf". Then $j_!$ is just postcomposition with $j : U \to X$, while $j^*$ is pullback along $j : U \to X$.