I've seen in some books and notes that in order to define the tangent vector $v:C^\infty(p)\to\mathbb R$, the author defines $C^\infty(p)$ as the set of all real valued functions $f:M\to\mathbb R$ such that does there exist an open set $U\subseteq M$ containing $p$ and $f|_U$ is smooth and then defines a tangent vector as a map $v:C^\infty(p)\to\mathbb R$ such that for all $f,g\in C^\infty(p)$ and $a,b\in\mathbb R$,
$$v(af+bg)=av(f)+bv(g)\\ v(fg)=f(p)v(g)+v(f)g(p).$$
So why we really need to insert smooth functions which are agree on some smaller open set containing $p$ in an equivalence class and define $C^\infty(p)$ as the set of these equivalence classes? And then define a tangent vector as the map $v:C^\infty(p)\to\mathbb R$ such that for all $[f],[g]\in C^\infty(p)$and $a,b\in\mathbb R$,
$$v[af+bg]=av[f]+bv[g]\\ v[fg]=f(p)v[g]+v[f]g(p)?$$
What are differences between first and second $C^\infty(p)$? Is the first definition a standard definition?
As long as two function agree on an open set, they will have the same directional derivative. We've made the identification of the operators,
$$D_{e^j} = \frac{\partial}{\partial x^j}$$
where $D_v$ is the directional derivative. If function agree on an open set then they will have the same directional derivative. Recall, that for a smooth function $f: M \to \mathbb{R}$, we defined the action,
$$ \frac{\partial}{\partial x^j} \Bigr|_p \ f = \frac{\partial}{\partial r^j} \Bigr|_{\phi(p)} \ f \circ \phi^{-1}$$
where $(\phi, U) = (\phi, x^1,...,x^n)$ is a chart on $M$ and $r^1,...,r^n$ are the standard coordinate functions on $\mathbb{R}^n$. Hence, by this definition we are promoted to define an equivalence class on $C^{\infty}$ functions about $p$. This is the definition of a germ. Therefore there above definition becomes well-defined. Now with respect to your notation we have $\textbf{v}[f] = \textbf{v}[g]$ i.e your definition is well-defined.
$\textbf{In Sum}$: The left hand side makes sense for smooth functions on manifolds $M$ that are subsets of $\mathbb{R}^N$. We are coming up with an general definition which should mimic this special case since we want to study abstract manifolds. The term germ is just definition to categorize functions from $\mathbb{R}^n \to \mathbb{R}$ which agreed on some open set. The reason for singling such functions out was because their directional derivatives were equal. So now in our case where $M$ in not a subset of Euclidean space, we just call $\mathbb{R}$-valued functions which agree on an open set, germs. Hence, anytime you know a property $P$ to hold for functions $g,f: U \subset \mathbb{R}^n \to \mathbb{R}$, then in smooth manifold theory, we would refer to functions $g,f: U \subset M \to \mathbb{R}$ in which $f=g$, as germs.