Here's who stood out on Day 7 of 49ers training camp.
1. Defensive end Arik Armstead.
Stopped running back Trey Sermon for no gain on the second play of practice, then beat Mike McGlinchey to sack Jimmy Garoppolo on the third play. Armstead has been the 49ers best defensive lineman in camp, mostly because he has been the healthiest one.
2. Defensive tackle Kevin Givens.
Broke into the backfield and stopped Sermon for a three-yard loss on the fourth play of practice when the starters were facing the starters. Givens is a starting-caliber player in the NFL, and a good one.
3. Defensive tackle Maurice Hurst.
Stopped running back JaMycal Hasty for a three-yard loss, then stopped Trey Lance for a three-yard loss on a zone read. Hurst already looks much better than former 49ers first-round pick Solomon Thomas, who's now on the Raiders.
4. Strong safety Tavon Wilson.
Has started every practice at strong safety and played well. Today, he broke up a pass intended for George Kittle during 1-on-1 drills in the red zone, then nearly intercepted a pass from Jimmy Garoppolo during 11 on 11s. If Jaquiski Tartt never recovers from his turf toe injury, Wilson will replace him in the starting lineup. He made two nice stops against the run yesterday.
5. Tight end Ross Dwelley.
Made a safety fall on his face during 1 on 1s, and caught a 45-yard pass from Trey Lance during 11 on 11s. The 49ers defense can't stop Dwelley. No exaggeration.
6. Tight end Jordan Matthews.
Caught a 10-yard touchdown pass in the red zone, then made a key block on a 10-yard touchdown run by Wayne Gallman. Matthews looks like a natural tight end. He played wide receiver until this year.
7. Quarterback Nate Sudfeld.
Completed both of his passes -- a 15-yarder to Trent Sherfield running a dig route, and another 15-yarder to Brandon Aiyuk running the same route. Sudfeld looks like a quality backup.
THE NOT SO GOOD
1. Defensive tackle Javon Kinlaw.
Removed himself from a pass-rushing drill and spent 10 minutes squatting down and staring at grass while the rest of his teammates worked on their craft. Bizarre. Then Kinlaw didn't participate in 11 on 11s, either -- he just watched from the sideline. Kinlaw was supposed take a big leap forward this offseason, but he can't take a leap if he doesn't work.
2. Defensive end Nick Bosa.
Missed practice with his second "maintenance day" of camp. So in one week, he has taken two days completely off even though he hasn't participated in any physical competition -- no 1 on 1s, no 11 on 11s. Which suggests the little physical activity he's doing is causing soreness in his surgically-repaired knee. Not great.
3. Defensive end Samson Ebukam.
Missed yet another practice with what the 49ers are calling "soreness" in his legs. Sounds like it's worse than soreness.
4. Offensive tackle Mike McGlinchey.
Gave up a sack to Armstead, who's not an edge rusher. He's an interior rusher. McGlinchey can't block any type of rusher on pass plays. He's a run-blocking specialist who will struggle in pass protection no matter what he weighs. Not his fault -- that's who he is. It's the 49ers fault for drafting him with a top-10 pick.
5. Wide receiver Deebo Samuel.
Returned to practice after missing Tuesday with groin tightness and dropped a pass. Also committed a holding penalty.
6. Guard Aaron Banks.
Still hasn't played with starters. Today, Colton McKivitz was the starting right guard, and McKivitz stinks, which shows you what the 49ers currently think of Banks. He committed a false start with the second stringers during 11 on 11s.
7. Quarterback Josh Rosen.
Completed one of three pass attempts. His body language does not express confidence. He looks like wants to be somewhere else. He better step it up or he'll spend the rest of his 20s playing tennis in a country club.