张公谨早年曾效力于王世充,任洧州长史。618年(武德元年),张公谨与洧州刺史崔枢投降唐朝,被任命为邹州别驾,累迁至右武侯长史。
621年(武德四年),徐圆朗反叛,攻陷楚丘(今河南滑县),欲围攻虞城。河南道安抚大使任瑰命崔枢、张公谨率领各州豪强作质子的子弟一百多人去守卫虞城。副使柳浚道:“崔枢和张公谨原来都是王世充的部下,各州人质的父兄也都反叛了,这一去恐怕会叛变。”任瑰没有理会。在张公谨二人的坚守下,叛军难以攻破虞城,撤军而去。
后来,张公谨在徐世勣、尉迟恭的引荐下,被秦王李世民召入秦王府。当时,李世民与太子李建成、齐王李元吉不和,向张公谨求取自保之策。张公谨的回答很合李世民的心意,从此逐渐受到器重。
626年(武德九年),李世民欲诛杀李建成、李元吉,但又犹豫不决,便命人占卜以测吉凶。此时,张公谨从外而入,将占卜的龟壳扔在地上,并道:“占卜是为决定疑难之事,现在事情并无疑难,还占卜什么?如果占卜的结果不吉,难道能够停止行动吗?”李世民深表赞同。
六月四日,张公谨与长孙无忌等九人埋伏在玄武门外,发动了玄武门之变。李建成、李元吉死后,其党羽冯立、薛万彻、谢叔方等人率军赶到玄武门,欲为太子和齐王报仇。张公谨勇力过人,独自关闭大门,将冯立等人挡在门外,冯立等人最终溃散。七月,张公谨升为左武侯将军,封定远郡公。
627年(贞观元年),张公谨出任代州(今山西代县)都督,并上表朝廷请求实行屯田。此后,张公谨对时政得失多次进言,都得到唐太宗李世民的采纳。
629年(贞观三年),张公谨上奏朝廷,认为可以讨伐东突厥,并列举六条理由:“颉利可汗奢华残暴,诛杀忠良,亲近奸佞,此其一;薛延陀等部落均已叛离,此其二;突利、拓设、欲谷设均得罪颉利,无地自容,此其三;塞北地区经历霜冻干旱,粮食匿乏,此其四;颉利疏离族人,委重任于外族,胡人反复无常,大唐军队一到,必然内部纷乱,此其五;汉人早年到北方避乱,至此时人数较多,近来听说他们召聚武装,占据险要之地,大军出塞,自然内部响应,此其六。”唐太宗遂任命兵部尚书李靖为行军总管,讨伐东突厥,张公谨为副总管。
630年(贞观四年),颉利兵败,遣使请降,唐太宗命鸿胪寺卿唐俭前去抚慰。李靖与李勣(即徐世勣)在白道会军,打算出兵偷袭东突厥。张公谨得知后,反对道:“皇帝已接受他们投降,而且唐俭还在突厥,怎能出兵进攻?”李靖不听,发兵出击,终于平定了东突厥。
东突厥平定后,张公谨进封邹国公,改任襄州都督。
632年(贞观六年),张公谨病逝于任上,年仅三十九岁,追赠左骁卫大将军,谥号为襄。
639年(贞观十三年),唐太宗追思张公谨旧功,改封他为郯国公。
654年(永徽五年),唐高宗又追赠张公谨为荆州都督。
《全唐文》收录有其文一篇:《条突厥可取状》
李世民:司徒赵国公无忌、……故左骁卫大将军郯襄公张公谨、……故徐州都督胡壮公秦叔宝等:或材推栋梁,谋猷经远,纲纪帷帐,经纶霸图;或学综经籍,德范光炜,隐犯同致,忠谠日闻;或竭力义旗,委质藩邸,一心表节,百战标奇;或受命庙堂,辟土方面,重氛载朗,王略遐宣。并契阔屯夷。劬劳师旅,赞景业於草昧,翼淳化於隆平。
刘昫:敬德夺槊陷阵,鼓勇王师,却赂报恩,竭忠霸主。然而奋拳负气,非自全之道;文皇告诫之言,可为功臣药石。叔宝善用马槊,拔贼垒则以寡敌众,可谓勇矣。知节志平国难,拜隼篽则致命辅君,可谓忠矣。而并晓世充之猜贰,识唐代之霸图,可谓见几君子矣。志玄中镝不言,竟安师旅。公谨投龟定议,志助储君。皆所谓猛将谋臣,知机识变。有唐之盛,斯实赖焉。
王夫之:无左吴、赵贤,则淮南不能谋逆;无宇文述、杨素,则杨广不能夺嫡;无张公谨、尉迟敬德,则太宗不能杀兄;天下之乱,酿成于徼幸功名者之从臾者类然也。