PORTLAND, Ore. — Sign-waving, chanting into bullhorns and marching down the city’s wide, clean streets are all intrinsically Portland, so common that it has earned this Pacific Northwest city its progressive reputation and “Little Beirut” nickname.

So when Attorney General Jeff Sessions made a last-minute appearance here this week, it was no surprise that protesters were busily readying signs for his arrival, the first visit to this true-blue city by a member of President Trump’s Cabinet. After several local scuffles between alt-right and antifa groups earlier this year, it was a moment that drew people into the streets after a few months of relative calm.

Local protest leaders organized quickly and efficiently so that when Sessions arrived to speak at a U.S. Citizenship and Immigration Services field office in a bulky SUV on Tuesday, he was greeted the Portland way: a sea of middle fingers and hundreds of angry voices shouting, “Go to hell, Jeff Sessions!”

During an eight-month tenure, Trump and Sessions have rolled out a series of immigration policies that have roiled the left and sparked protests and legal challenges. The administration has been vocally opposed to sanctuary cities — localities that won’t cooperate with federal immigration authorities — and Session has repeatedly recounted the case of Sergio Martinez as an example of why sanctuary cities don’t work. Martinez, a man who had been deported a dozen times, allegedly assaulted two Portland women after being released from jail here.

Portland is a sanctuary city in a sanctuary state — a place where officials have scoffed at threats from the Trump administration, where court employees have shuffled illegal immigrants out through employee entrances when Immigration and Customs Enforcement personnel conducted raids, and where local law enforcement officials have argued that enforcing federal immigration policies is not their job.

Sessions’s appearance here Tuesday was brief. He spoke to a group of federal employees — ICE, FBI, Drug Enforcement Administration, and Bureau of Alcohol, Tobacco, Firearms and Explosives — for 18 minutes in the “oath room” of a Pearl District building, the place where people recite the Oath of Allegiance before they are granted U.S. citizenship. Sessions railed against sanctuary cities, places he called a “trafficker’s, a smuggler’s or gang member’s best friend.”

But outside, the protest against Sessions lasted for hours. A group of a dozen protesters leaned on a metal barricade just before 11 a.m. — hours before Sessions even touched down in Portland. And they were ready.

Juan Rogel, 26, is a leader of Milenio.org, a group that helps engage Latinos in political action and was one of several groups that organized protesters Tuesday.

“We want to send a clear message that he is not allowed to come here,” Rogel said of Sessions. “We’re pissed off.”

Rogel said it’s essential for Latinos to organize and for Sessions to see, if only for a moment, that people here aren’t welcoming of him.

“My dad used to say, ‘If you knock on the door for opportunity and they don’t open it, you have to break it down,’ ” Rogel said. “We haven’t been heard. We are young people working on a legacy for tomorrow.”

Protesters flooded toward the intersection of Northwest 15th Avenue and Overton Street, a block away from where Sessions would speak, carrying signs written on cardboard and on the backs of shopping bags. One featured a drawing of Sessions’s face over a Soviet hammer and sickle. “Peace, love and legal weed,” read another. “Jeff S — your policies smell like a fart!” another said.

Some protesters arrived on bikes, locked them to a chain-link fence and then walked into the crowd still wearing their helmets. The demonstrators huddled in a tight group in a “Community Gathering Area,” barricaded off by a metal barrier and pushed under a freeway overpass. A steady stream of cars clanged overhead. Rain fell in heavy drops and dripped from the corners of the group’s signs, held aloft. Hoods went up. A few people, dressed in black, stayed at the back of the crowd, quiet.

Mitzi Yates, a 52-year-old health-care professional, was standing at the front of the demonstration with a sign thrust above her head: “Jeff Boy, God Will Damn You for Doing This.” She is originally from Tennessee and considers herself a “political refugee” who moved to Portland 2½ years ago to be among like-minded people, “to go to a place where I belonged.”

“Jeff Sessions has been a real work of art since his days in Alabama,” Yates said. “His values are about money, greed and power.”

Yates said she hasn’t seen the violence that some news outlets say defines demonstrations here. “I very seldom see it get aggressive,” she said. If things heat up at a protest, it’s because of a “bunch of kids,” she said. “But at least they care.”

Lisa Pfost, 57, sat on her walker, a plastic-wrapped sign leaning against her legs featuring Sessions’s face and the message, “More Dangerous Than Weed.”

“He stands for everything we’re against,” she said. She moved here from Kansas City five years ago, but her first protest was the Women’s March in Washington this year. “It’s nice to be with my people,” she said.

Pfost said she protests because she feels it is the only thing she can do to make a difference.

“I vote, I talk to my congressmen and senators, but I feel helpless,” she said. Protesting allows her to feel like she’s a part of a movement: “To add my body, to make the crowds bigger, to be known, to be here.”

Pfost said that was her takeaway from the Women’s March: that such protests matter. “It’s our way of speaking. Yeah, sometimes it does feel silly,” she said. “But it does matter.”

Nearby, Daniel Cortez, 44, wore a rain-slicked blue plastic poncho. He is a member of the American Postal Workers Union and has been protesting regularly since Trump was elected — most recently at a pair of DACA demonstrations in Portland.

Is protesting in Portland, though, simply preaching to the converted? Maybe, he said. But he and others keep protesting “to show other people across the country that they’re not alone,” he said. “If Portland can’t turn out for protests and stand in solidarity . . . how can we expect people in states where senators aren’t on the same page to stand up? . . . If we let a visit by a Cabinet member go unnoticed, we’re missing an opportunity to show there’s still a struggle.”

There were a couple of notable elements missing from Tuesday’s protest: counterprotesters and riot police. Since Trump’s election in November, most demonstrations here have brought out at least some contingent of dissenters — and very often have ended with police throwing flash grenades into the crowd.

On Jan. 20, dissent took the form of a few ranting street-preacher types. And as the months have gone by, Portland protests have become a stage for opposing factions to face off — often with the smallest counterprotesting groups surrounded by police clad in riot gear.

A late April “free speech rally” led by Patriot Prayer’s Joey Gibson — a conservative YouTube personality who organizes counterprotests to liberal demonstrations on the West Coast — was punctuated by a string of racial epithets and Nazi salutes coming from Jeremy Christian. Christian, a white supremacist, allegedly stabbed and killed two men the next month on a commuter train; he reportedly had been shouting racial epithets at two teenage girls, and the men had come to their defense. Gibson has been adamant that Christian wasn’t welcome at his protest.

The deaths sent the city into a tailspin — especially when Gibson refused to cancel an alt-right rally organized in a downtown park, scheduled days after the train slayings. On June 4, that rally was surrounded on all sides by thousands of liberal protesters. Between them stood a buffer of hundreds of police officers, who ultimately scattered a group of protesters with tear gas and rubber bullets. The June rally seemed to inflame the conflict, launching a series of clashes in local parks between Gibson’s contingent and antifa groups.

Gibson said he has no problem with protesters like the ones who showed up to yell at Sessions on Tuesday. He defends their right to do so.

“I’m not going to protest people who are peacefully protesting. What’s the point?” he said. “I’m fighting for people’s right to be able to protest. A lot of these normal liberals, they’re not causing any problems. My issue is liberals who team up with antifa.”

Gibson said he takes issue with groups who physically try to stop people from exercising their First Amendment right to free speech. And he said that he has learned there isn’t much good that comes from his group screaming at another group.

“The problem with some of the stuff I was doing before was if we have two huge groups yelling at each other, it creates mass hysteria,” he said, adding that he realizes now that not all Portland protesters want to suppress others’ free speech. “You have protesters who just care. There’s just a certain percentage of the crowd that’s extremely hateful and agitated. But they don’t represent all the protesters.”

So in his mind, there was no reason to show up on Tuesday as a counterprotest to the Sessions protest: “My presence always just agitates people.”

Aside from harsh words, there was no clash here Tuesday. The crowd had thinned by the time Sessions emerged for a moment after his speech before ducking into another SUV. But when the crowd that remained saw him, they rushed toward the metal barrier, red flags waving, fists and fingers thrust in the air, booing, pounding drums.

They said they do it because they feel like they have to. They said they do it because, right now, many of them feel like it’s all they can do.