[proofplan]
We prove the two inclusions in the path characterization of the tangent space. First, any differentiable path in $O(n)$ through $I_n$ satisfies $A(t)^\top A(t)=I_n$, and differentiating this identity at $t=0$ forces its velocity to be skew-symmetric. Conversely, given a skew-symmetric matrix $X$, the matrix exponential path $A(t)=\exp(tX)$ stays in $O(n)$ because transposition sends $\exp(tX)$ to $\exp(-tX)$. Its derivative at $0$ is $X$, so every element of $\mathfrak{so}(n)$ occurs as a tangent vector.
[/proofplan]
[step:Differentiate the orthogonality identity along an arbitrary path]
Let $\varepsilon>0$, and let
\begin{align*}
A:(-\varepsilon,\varepsilon)\to O(n)
\end{align*}
be differentiable with $A(0)=I_n$. Define $B:=A'(0)\in M_n(\mathbb{R})$. Since $A(t)\in O(n)$ for every $t\in(-\varepsilon,\varepsilon)$, we have
\begin{align*}
A(t)^\top A(t)=I_n
\end{align*}
for every $t\in(-\varepsilon,\varepsilon)$. Differentiating the matrix-valued identity at $t=0$ and using the product rule gives
\begin{align*}
(A'(0))^\top A(0)+A(0)^\top A'(0)=0.
\end{align*}
Substituting $A(0)=I_n$ yields
\begin{align*}
B^\top+B=0.
\end{align*}
Therefore $B\in\mathfrak{so}(n)$.
[guided]
We start with an arbitrary differentiable path through the identity matrix and extract the algebraic condition satisfied by its velocity. Let $\varepsilon>0$, and let
\begin{align*}
A:(-\varepsilon,\varepsilon)\to O(n)
\end{align*}
be differentiable with $A(0)=I_n$. Define $B:=A'(0)\in M_n(\mathbb{R})$.
The defining equation for membership in $O(n)$ is orthogonality:
\begin{align*}
A(t)^\top A(t)=I_n
\end{align*}
for every $t\in(-\varepsilon,\varepsilon)$. The tangent vector is obtained by differentiating this constraint at the point $t=0$. Since transposition is a linear operation on $M_n(\mathbb{R})$, the derivative of $t\mapsto A(t)^\top$ at $0$ is $(A'(0))^\top$. Applying the product rule for matrix-valued differentiable functions to the product $A(t)^\top A(t)$ gives
\begin{align*}
(A'(0))^\top A(0)+A(0)^\top A'(0)=0.
\end{align*}
Now use the assumption that the path passes through the identity matrix. Since $A(0)=I_n$ and $I_n^\top=I_n$, this becomes
\begin{align*}
(A'(0))^\top+A'(0)=0.
\end{align*}
With $B=A'(0)$, this is precisely
\begin{align*}
B^\top+B=0.
\end{align*}
By the definition
\begin{align*}
\mathfrak{so}(n)=\{X\in M_n(\mathbb{R}):X^\top+X=0\},
\end{align*}
we conclude that $A'(0)=B\in\mathfrak{so}(n)$.
[/guided]
[/step]
[step:Construct an orthogonal path from a skew-symmetric matrix]
Let $X\in\mathfrak{so}(n)$. Thus $X^\top=-X$. Define the matrix exponential path
\begin{align*}
A:\mathbb{R}\to M_n(\mathbb{R}),\qquad A(t)=\exp(tX):=\sum_{k=0}^{\infty}\frac{t^kX^k}{k!}.
\end{align*}
The series converges absolutely in any matrix norm on $M_n(\mathbb{R})$, so $A$ is differentiable and
\begin{align*}
A'(t)=X\exp(tX)
\end{align*}
for every $t\in\mathbb{R}$. In particular,
\begin{align*}
A(0)=I_n
\end{align*}
and
\begin{align*}
A'(0)=X.
\end{align*}
It remains to check that $A(t)\in O(n)$ for every $t\in\mathbb{R}$. Since transposition preserves products in reverse order and $(X^k)^\top=(X^\top)^k$ for every integer $k\ge 0$, absolute convergence of the exponential series gives
\begin{align*}
A(t)^\top=\exp(tX)^\top=\exp(tX^\top)=\exp(-tX).
\end{align*}
The matrices $tX$ and $-tX$ commute, so the Cauchy product of the exponential series gives
\begin{align*}
\exp(-tX)\exp(tX)=\exp(0)=I_n.
\end{align*}
Therefore
\begin{align*}
A(t)^\top A(t)=I_n
\end{align*}
for every $t\in\mathbb{R}$, hence $A(t)\in O(n)$ for every $t\in\mathbb{R}$.
[/step]
[step:Identify the tangent space with $\mathfrak{so}(n)$]
The first step proves that every velocity at $I_n$ of a differentiable path in $O(n)$ belongs to $\mathfrak{so}(n)$. The second step proves that every $X\in\mathfrak{so}(n)$ is the velocity at $0$ of the differentiable path
\begin{align*}
A:\mathbb{R}\to O(n),\qquad A(t)=\exp(tX),
\end{align*}
with $A(0)=I_n$ and $A'(0)=X$. Hence, under the path characterization of tangent vectors to the matrix group $O(n)$ at $I_n$,
\begin{align*}
T_{I_n}O(n)=\mathfrak{so}(n).
\end{align*}
[/step]