본관은 광산(光山). 아버지는 광성군(光城君) 김정(金鼎)이다.
고려 공민왕 때 문과에 급제하였으며, 성품이 강직하여 권세가를 두려워하지 않았다.
우왕 때 좌사의(左司議)로 조반(趙胖)의 옥사를 다스리는 데 참여하였는데, 염흥방(廉興邦)이 기필코 조반을 무복(誣服: 강제를 당하여 없는 죄를 있다고 자복하고 형벌을 받음)시키려고 참혹하게 다스리자, 홀로 불가하다고 주장하여 마침내 조반을 석방하게 하였다.
염흥방은 그 뒤 죽음을 당하여 조야가 모두 통쾌하게 여겼다. 1388년(우왕 14) 이성계의 위화도회군 때, 지신사(知申事)로 이에 항거하였다 하여 외방에 유배되었다.
1400년(정종 2) 문하부좌산기(門下府左散騎)로 있을 때에는 훈친(勳親)들에게 사병을 허여하는 제도를 없애고, 병권을 모두 중앙에 집중시키자고 역설하여 단행하게 하였다. 그 뒤 대사헌을 지내고, 1404년 충청도도관찰사가 되었다.