Free-agent pitcher Jake Peavy has reached an agreement on a two-year, $24 million contract with the San Francisco Giants, a baseball source told ESPN.com.