1A. DL Solomon Thomas. The No. 3 pick in the draft didn't start -- Tank Carradine did -- but made an impact on his first snap when he pressured Tyler Bray into an interception. Thomas played throughout the contest -- he, Reuben Foster, Ahkello Witherspoon and Lorenzo Jerome played the most snaps on defense among rookie -- including in the fourth quarter after third stringer Ronald Blair left with a groin injury. Thomas had a strong debut, played both defensive end and defensive tackle, and was credited with two tackles. During the fourth quarter he got some work from trainers on his neck and shoulder but said afterward it was not a big concern. Thomas played 28 snaps.
1B. LB Reuben Foster. He started the game and saw action at both weak-side and middle linebacker. Foster didn't make a big impact on the stat sheet -- two tackles -- but he broke up a pass in the end zone and had a tackle on the goal line. It should be noted that Foster has been playing with a sprained left ankle for the last week. With the regular-season opener less than a month away, the 49ers want him to play a lot of snaps both in practice and the preseason. Foster played 27 snaps.
3A. CB Ahkello Witherspoon. As has been the case in practice, Witherspoon entered the game with the second-team defense. A good sign: He had a quiet night and wasn’t targeted once. A better one: He was credited with a tackle. Witherspoon played 28 snaps.
3B. QB C.J. Beathard. He was the third quarterback to enter the game and he admitted his timing wasn't great initially. But he eventually got into a rhythm, especially with fellow rookie Kendrick Bourne. Bourne and Beathard didn't have a lot of time to develop chemistry in the offseason because Bourne was held out by the same rule that prevented Thomas and some other Pac 12 players from attending spring camp. But the quarterback and receiver made up for lost time, especially on a 46-yard touchdown early in the fourth quarter. Beathard also hit Bourne on the two-point conversion for good measure. Beathard also showed the toughness that prompted Kyle Shanahan to trade up into the third round for him as he threw strikes while absorbing big hits. Beathard played 41 snaps.
4. RB Joe Williams. He and Raheem Mostert were the 49ers' two most impressive running backs. Williams averaged 8.6 yards on seven carries and showed the burst -- especially on a couple of outside runs -- that convinced the 49ers he was worth taking in the fourth round of the draft. He played 25 snaps.
5A. TE George Kittle. He did not play due to a hamstring injury. Vance McDonald started at tight end.
5B. WR Trent Taylor. Jeremy Kerley was the team's top slot receiver. Taylor got most of his work in the second half but was as efficient as he's been in practice, catching all three of the passes that went his way for 33 yards. He also looked good on punt returns, including one he took back for 33 yards. (Kerley also was the first choice on punt returns; DeAndre Carter was second). Taylor played 28 snaps.
6A. NT D.J. Dones. He entered the game with the third-team defense and recorded a fumble recovery after linebacker Austin Calitro jarred the ball loose. Jones played 21 snaps.
6B. DE Pita Taumoepenu. Effort is not an issue with Taumoepenu. But he probably needs more experience and more time in the weight room before he will land on a 53-man roster. The practice squad seems like his best bet. Taumoepenu played 10 snaps on defense, 12 on special teams where he had a tackle.
7. CB/S Adrian Colbert. He did not play after suffering an ankle injury on Saturday.
Others of note: Lorenzo Jerome and Foster were the only 49ers rookies who started. Jerome had a strong hit that upended receiver Chris Conley and which nearly caused a fumble. (It was correctly ruled a reception upon review.) He finished with three tackles and played a team-high 33 snaps on defense. The Chiefs completed quite a few long passes when he was in the game, but they mostly were down the sidelines after the quarterback looked him off. “He did a solid job tackling,” Kyle Shanahan said. “He moves to the ball well and he’s got a knack for getting interceptions. I know he didn’t get any yesterday, but we were happy with how Lorenzo played.” … Matt Breida was the first running back in the game after Carlos Hyde and was used, comparatively speaking, as the workhorse back. He played 28 snaps, with most runs going up the middle or cooming on goal-line plays. On one sequence he had goal-line runs of: no gain, no gain and minus-three yards. He finished with 11 runs for 40 yards. He wasn’t as flashy as Williams, but was given more blue-collar carries. He also had two catches, something he rarely did at Georgia Southern but a skill he’s proven he could do well in practices... Tight end Cole Hikutini played with Blake Bell with the third-string offense. He was not targeted in the passing game and played 11 snaps.