91³Ô¹ÏÍø

Watch CBS News

How to watch: WCCO Original "A January Night" shows Minneapolis ICE shooting aftermath

Since December, Operation Metro Surge brought thousands of federal agents to Minnesota. Agents killed two people and detained thousands.

In a WCCO Original, photojournalist Tom Aviles takes you through the moments after an Immigration and Customs Enforcement agent shot a Venezuelan national.

"A January Night" takes you to the middle of the chaos as agents and protesters clash, from flash bangs to tear gas. It also introduces you to the community members who feel it's important to stand up for your neighbors and to fight for what you believe in.

Warning: Some of the video can be hard to watch.

How to watch "A January Night"

You can watch "A January Night" in the video player above or on . 

Jan. 14 shooting prompted protests, false narrative from feds, calls for peace and more

An ICE officer shot a man in the leg on Jan. 14 near North Sixth Street and North 24th Avenue, inciting anger in a city where just a week before, an agent had shot and killed Renee Good.

While federal officials initially accused the man shot of assaulting ICE officers — Homeland Security Secretary Kristi Noem called it "attempted murder" — federal charges against him and another man were later dropped because of "newly discovered evidence" that was "materially inconsistent" with the allegations, a court filing said.

About a month after the shooting, acting ICE Director Todd Lyons said two officers were placed on administrative leave and were under investigation for lying under oath. 

After the shooting, a large crowd quickly formed at the scene, with demonstrators clashing with law enforcement into the early morning hours. 

During the protests, dozens of people smashed into two parked, unmarked FBI vehicles. A man from Inver Grove Heights, Minnesota, was later accused of stealing a rifle and suppressor from one of the vehicles. 

A Minneapolis family caught in the protest said ICE agents released tear gas under their vehicle while their six children, including an infant, were inside. Destiny and Shawn Jackson said the gas left their baby unconscious and foaming at the mouth, and that strangers and local law enforcement helped them while the feds stood in the way. While the family is physically OK, they say they were traumatized by the incident.

In a late-night news conference amid the protests, Minneapolis Mayor Jacob Frey and Police Chief Brian O'Hara asked the public to remain peaceful. Gov. Tim Walz issued a similar request on social media, while also asking President Trump to "turn the temperature down."

The day after the tumult, President Trump threatened to invoke the Insurrection Act and send troops into Minnesota, though nothing came of the threat.

It took nearly a month and a second killing by federal agents for officials to announce the end of Operation Metro Surge. Border czar Tom Homan says more than a thousand federal agents have already left Minnesota, though many community members remain distrustful and fearful.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });