The San Francisco 49ers held their eighth training camp practice on Friday, a nearly two-hour session that was possibly the longest so far.
Here are some key highlights from the 10:25 a.m. PT practice at the SAP Performance Facility, compiled from multiple media reports.
Several veterans—DE Nick Bosa, FB Kyle Juszczyk, RB Christian McCaffrey, and OT Trent Williams—returned after scheduled rest days.
Physically unable to perform (PUP)
Non-football injury (NFI)
Injured reserve (IR)
The 49ers activated LB Curtis Robinson (ACL) from the PUP list ahead of practice.
OT Austen Pleasants left practice early with an apparent injury and was replaced by Isaac Alarcón.
RT Colton McKivitz—who recently predicted a Pro Bowl season—held his own in one-on-one drills against All-Pro Nick Bosa, earning praise from Noah Furtado of the San Francisco Chronicle, who called it the most impressive O-line/D-line matchup of the day.
"Great get-off and held a strong base," Furtado noted.
However, Bosa made his presence felt in team drills, recording what appeared to be five would-be sacks, including three on one drive.
CBs Dallis Flowers and Tre Brown continue to get first-team reps on the outside with Deommodore Lenoir and Renardo Green sidelined. Darrell Luter Jr. also rotated in, while Upton Stout continued in the nickel role.
"That third corner spot is wide open," defensive coordinator Robert Saleh said after practice. "And I'm not talking nickel or anything. There's a different battle for that. But just the third guy, in the event one of them gets hurt, who's first up?"
The cornerback evaluation has led to coaches rotating players with the first-team unit.
With Ji'Ayir Brown resting, Richie Grant and Jason Pinnock worked with the first-team defense at safety.
Rookie DT C.J. West impressed again, winning all four of his one-on-one reps and seemingly recording a would-be sack in team drills.
"He's done a really nice job," Saleh said. "He's getting better every day. A lot of things he still has to clean up with footwork, hand placement, and all that, but he's one that we're excited [about]. He's going to continue to get better every single day, and he'll be part of the NFL for a while."
DT Alfred Collins is still shaking off rust from an offseason injury that kept him out of OTAs.
"He's behind the eight ball, but he's working hard," Saleh said. "Love the way he's approaching every day, and he'll catch up. He's a big body with good feet. Those are things you can't teach. It's just a matter of time before he gets his legs underneath him and he starts to make more of an impact."
WR Ricky Pearsall caught three passes on four targets as he continues to ramp up after opening camp on the PUP list.
RB Ameer Abdullah continues working into the offense and special teams as a returner.
Rookie RB Isaac Guerendo is emerging as a strong RB2 candidate behind Christian McCaffrey, drawing praise for his improved decisiveness.
"He's the clear RB2 from this vantage point, at least for right now," ESPN's Nick Wagoner wrote.
The battle for starting left guard continues between Aaron Banks and Nick Zakelj, who also took snaps at center with the third-team offense.
Brock Purdy and TE George Kittle appear to be in midseason form, connecting for a touchdown during red zone drills. Purdy also had a nice play to FB Kyle Juszczyk for a significant gain. Aside from one interception, Purdy had another solid day.
Newly signed QB Carter Bradley took his first team reps, completing passes to Mason Pline and Andy Isabella while rotating with Tanner Mordecai in the third-team unit. TE Jake Tonges dropped one target from Bradley.
The 49ers will hold their next practice on Saturday, August 2, at 10:25 a.m. PT.
It's not every day you see Nick Bosa get blocked on an island. Colton McKivitz with the most impressive OL/DL 1-on-1 rep of the day. Great get-off and held a strong base.Those two have regularly faced each other in that drill. Iron sharpens iron.
— Noah Furtado (@_noahfurtado) August 1, 2025
Ricky Pearsall had his busiest practice of training camp today, catching three of the four balls that went to him. No Jordan Watkins, Jauan Jennings or Jacob Cowing in the practice.— Matt Barrows (@mattbarrows) August 1, 2025
That may end up being the longest 49ers practice of the year, and their most game-like move-the-ball period closed it. Brock Purdy threw only incompletion in that stretch — good Pinnock coverage on CMC — and hit key passes to George Kittle and Kyle Juszczyk. The one to 44 was a…— David Lombardi (@LombardiHimself) August 1, 2025
New absences at #49ers practice Friday: WR Jordan Watkins and S Ji'Ayir Brown.— Noah Furtado (@_noahfurtado) August 1, 2025
49ers just completed 2-hour, fan-less practice
*Purdy to Kittle in midseason form, had a TD in red zone
*Only INT was early by Jason Pinnock
*No Jauan Jennings, Demo Lenoir, Renardo Green, Jacob Cowing, Jordan James
*Lot of good work by McCaffrey, TWilliams, Bosa after day off pic.twitter.com/vpKkglxopC— Cam Inman (@CamInman) August 1, 2025
#49ers camp notes11v11s:
- Bosa 2 sacks, pressure vs. McKivitz in move-the-ball
- CJ West a problem if not doubled
- Nick Martin pops when its clean ahead of him
- Really nice routes, catches by Pearsall
- Purdy 1 bad pick, otherwise dotted it up
- Upton Stout gets it(1/2)
— Jake Hutchinson (@hutchdiesel) August 1, 2025
(continued)OL vs. DL 1-on-1s:
— Jake Hutchinson (@hutchdiesel) August 1, 2025
- No DL spin moves worked: Bosa stoned by McKivitz + stopped by Trent (only 1 rep). Pleasants had a nice one too vs. Sam O
- CJ West is hilariously powerful. Always closing the pocket
- Alfred Collins is a real work in progress as a pass rusher
Notes and observations from #49ers practice No. 8:- Niners had what was probably their longest session of this camp, going for nearly two hours in full pads with 12 periods, including a lot of 11 vs. 11. No fans today or tomorrow because Morgan Wallen is playing Levi's the next…
— Nick Wagoner (@nwagoner) August 1, 2025
More from 49ers Webzone:
More must-reads:
Get the latest news and rumors, customized to your favorite sports and teams. Emailed daily. Always free!