Journalist/developer. Storytelling developer @ USA Today Network. Builder of @HomicideWatch. Sinophile for fun. Past: @frontlinepbs @WBUR, @NPR, @NewsHour.
2176 stories
·
45 followers

Glimpses of the Future: Speed & Swarms

1 Share

Happiness in Fast Tempo, by Walter Quirt

If you experiment with new tools and technologies, every so often you’ll catch a glimpse of the future. Most of the time, tinkering is just that — fiddly, half-working experiments. But occasionally, something clicks, and you can see the shift coming.

In the last two months, I’ve experienced this twice while coding with AI. Over the next year, I expect AI-assisted coding to get much faster and more concurrent.


Speed Changes How You Code

Last month, I embarked on an AI-assisted code safari. I tried different applications (Claude Code, Codex, Cursor, Cline, Amp, etc.) and different models (Opus, GPT-5, Qwen Coder, Kimi K2, etc.), trying to get a better lay of the land. I find it useful to take these macro views occasionally, time-boxing them explicitly, to build a mental model of the domain and to prevent me from getting rabbit-holed by tool selection during project work.

The takeaway from this safari was that we are undervaluing speed.

We talk constantly about model accuracy, their ability to reliably solve significant PRs, and their ability to solve bugs or dig themselves out of holes. Coupled with this conversation is the related discussion about what we do while an agent churns on a task. We sip coffee, catch up on our favorite shows, or make breakfast for our family all while the agent chugs away. Others spin up more agents and attack multiple tasks at once, across a grid of terminal windows. Still others go full async, handing off Github issues to OpenAI’s Codex, which works in the cloud by itself… often for hours.

Using the largest, slowest model is a good idea when tackling a particularly sticky problem or when you’re planning your initial approach, but a good chunk of coding can be handled by smaller, cheaper, faster models.

How much faster? Let’s take the extreme: Qwen 3 Coder 480B runs at 2,000 tokens/second on Cerebras. That’s 30 times faster than Claude 4.5 Sonnet and 45 times faster than Claude Opus 4.1. It Qwen 3 Coder takes 4 seconds to write 1,000 lines of JavaScript; Sonnet needs 2 minutes.

No one is arguing Qwen 3 Coder 480B is a more capable model than Sonnet 4.5 (except maybe Qwen and Cerebras… 🤔). But at this speed, your workflow radically changes. I found myself chunking problems into smaller steps, chatting in near real-time with the model as code just appeared and was tested. There was no time for leaning back or sipping coffee. My hands never left the keyboard.

At 30x speed, you experiment more. When the agent is slow there’s a fear that holds you back from trying random things. You experiment less because having to wait a couple of minutes isn’t worth the risk. But with Qwen 3, I found myself firing away with little hesitation, rolling back failures, and trying again.

After Qwen 3, Claude feels like molasses. I still use it for big chunks of work, where I’m fine letting it churn for a bit, but for scripting and frontend it’s hard to give up Qwen’s (or Kimi K2’s) speed. For tweaking UI –– editing HTML and CSS – speed coupled with a hot-reloader is incredible.

I recommend everyone give Qwen 3 Coder a try, especially the free-tier hosted on Cerebras and harnessed with Cline. If only to see how your behavior adjusts with immediate feedback.


Swarms Speed Up Slow Models (But Thrive with Conventions)

To mitigate slow models, many fire up more terminal windows.

Peter Steinberger recently wrote about his usual setup, which illustrates this well:

I’ve completely moved to codex cli as daily driver. I run between 3-8 in parallel in a 3x3 terminal grid, most of them in the same folder, some experiments go in separate folders. I experimented with worktrees, PRs but always revert back to this setup as it gets stuff done the fastest.

The main challenge with multi-agent coding is handling Git conflicts. Peter relies on atomic commits, while others go further. Chris Van Pelt at Weights & Biases built catnip, which uses containers to manage parallel agents. Tools like claude-flow and claude-swarm use context management tactics like RAG, tool loadout, and context quarantining to orchestrate “teams” of specialist agents.

Reading the previous list, we can see the appeal of Peter’s simple approach: nailing down atomic commit behaviors lets him drop into any project and start working. The swarm framework approach requires setup, which can be worth it for major projects.

However, what I’m excited about is when we can build swarm frameworks for common environments. This reduces swarm setup time to near zero, while yielding significantly more effective agents. It’s the agentic coding equivalent of “convention over configuration”, allowing us to pre-fill context for a swarm of agents.

This pattern — using conventions to standardize how agents collaborate — naturally aligns with frameworks that already prize convention over configuration. Which brings us to Ruby on Rails.

Obie Fernandez recently released a swarm framework for Rails, claude-on-rails. It’s a preconfigured claude-swarm setup, coupled with an MCP server loaded with documentation matching to your project’s dependencies.

It works extraordinarily well.

Like our experiments with the speedy Qwen 3, claude-on-rails changes how you prompt. Since the swarm is preloaded with Rails-specific agents and documentation, you can provide much less detail when prompting. There’s little need to specify implementation details or approaches. It just cracks on, assuming Rails conventions, and delivers an incredibly high batting average.

To handle the dreaded Git conflicts, claude-on-rails takes advantage of the standard Rails directory structure and isolates agents to specific folders.

Here’s a sample of how claude-on-rails defines the roles in its swarm:

architect:
  description: "Rails architect coordinating full-stack development for DspyRunner"
  directory: .
  model: opus
  connections: [models, controllers, views, stimulus, jobs, tests, devops]
  prompt_file: .claude-on-rails/prompts/architect.md
  vibe: true
models:
  description: "ActiveRecord models, migrations, and database optimization specialist"
  directory: ./app/models
  model: sonnet
  allowed_tools: [Read, Edit, Write, Bash, Grep, Glob, LS]
  prompt_file: .claude-on-rails/prompts/models.md
views:
  description: "Rails views, layouts, partials, and asset pipeline specialist"
  directory: ./app/views
  model: sonnet
  connections: [stimulus]
  allowed_tools: [Read, Edit, Write, Bash, Grep, Glob, LS]
  prompt_file: .claude-on-rails/prompts/views.md

The claude-swarm config lets you define each role’s tool loadout, model, available directories, which other roles it can communicate with, and provide a custom prompt. Defining a swarm is a significant amount of work, but the conventions of Rails lets claude-on-rails work effectively out-of-the-box. And since there’s multiple instances of Claude running, you have less time for coffee or cooking.

And installing claude-on-rails is simple. Add it to your Gemfile, run bundle, and set it up with rails generate claude_on_rails:swarm.

In the past I’ve worried that LLM-powered coding agents will lock in certain frameworks and tools. The amount of Python content in each model’s pre-training data and post-training tuning appeared an insurmountable advantage. How could a new web framework compete with React when every coding agent knows the React APIs by heart?

But with significant harnesses, like claude-on-rails, the playing field can get pretty even. I hope we see similar swarm projects for other frameworks, like Django, Next.js, or iOS.


The conversation around AI-assisted coding has focused on accuracy benchmarks. But speed — and what speed enables — will soon take center stage. Being able to chat without waiting or spin up multi-agent swarms will unlock a new era of coding with AI. One with a more natural cadence, where code arrives almost as fast as thought.


Read the whole story
chrisamico
5 hours ago
reply
Boston, MA
Share this story
Delete

This magical Mariners season wasn’t enough. Will it ever be?

1 Share

TORONTO — It came to this.

Finally, fatefully, after 49 years. After a nationally dismissed upstart in the Pacific Northwest went its first 14 seasons without a winning team. After Ken Griffey Jr. became iconic with a backwards cap and baseball’s sweetest swing. After Edgar Martinez drilled a double down the left field line, and Dave Niehaus’ call — “It just continues! My oh my!” — echoed for decades. After the Kingdome imploded on a sunny Sunday. After 116 wins, the greatest regular season this sport has ever seen. After a 21-year playoff drought inflicted devastating déjà vu. After Ichiro and Felix dragged an afflicted, oft-forgotten franchise through an endless abyss.   

After a 15-inning gauntlet and a go-ahead grand slam.

It came to this, to Toronto, to a deciding seventh game.

To the edge of immortality, and the plummet back to Earth.

alcs heartbreaker Mariners lose Game 7

Seattle Mariners catcher Cal Raleigh peeks out of the dugout in the 8th inning against the Toronto Blue Jays in game 7 of the American League Championship Series on Monday, Oct. 20, 2025 in Toronto.  (Jennifer Buchanan / The Seattle Times)

That plummet occurred in the seventh inning Monday, when Bryan Woo surrendered a leadoff walk to Addison Barger and a single to Isiah Kiner-Falefa. Rather than trusting closer Andrés Muñoz to protect a 3-1 lead, Mariners manager Dan Wilson turned to Eduard Bazardo.

Which is when disaster, and George Springer, struck.

Springer — a 36-year-old former Astro and Mariners foil — belted Bazardo’s 1-0 fastball into the left field seats, repeatedly pumping his fist while racing around the bases. That swing, that pitch, that decision, was the devastating difference in the Blue Jays’ 4-3 win. It was the kind of sequence that sinks a season.

In the aftermath, Wilson said: “Bazardo has been the guy that’s gotten us through those situations, those tight ones, especially in the pivot role, and that’s where we were going at that point.”

Fans can, and will, dwell on the details. Like Wilson’s decision, a mistake that will fester in franchise infamy. Like the seven runners stranded, bricks slowly sealing Seattle’s tomb. Like the leads — 2-0 in the series, 3-2 heading to Toronto, 3-1 in the seventh inning with a pennant on the line — that were successively, devastatingly lost.

Like the fact that this franchise should finally be making its World Series debut against the Dodgers Friday.

“I love every guy in this room. But ultimately, it’s not what we wanted,” said Mariners catcher Cal Raleigh, his historic season sadly complete, eyes red and watering. “I hate to use the word failure, but it’s a failure. That’s what we expected, to get to a World Series and win a World Series. That’s what the bar is and the standard is and that’s what we want to hold ourselves accountable to.”

Cal Raleigh and Julio Rodriguez watch at Toronto celebrates their World Series berth following a 4-3 win in Game 7 of the ALCS. The Seattle Mariners played the Toronto Blue Jays in the deciding Game 7 of the ALCS Monday, October. 20, 2025 at Rogers Centre, in Toronto, Canada. (Dean Rutz / The Seattle Times)

Cal Raleigh and Julio Rodriguez watch at Toronto celebrates their World Series berth following a 4-3 win in Game 7 of the ALCS.  The Seattle Mariners played the Toronto Blue Jays in the deciding Game 7 of the ALCS Monday, October. 20, 2025 at Rogers Centre, in Toronto, Canada. (Dean Rutz / The Seattle Times)

If that’s the standard, there have been 49 failures, none more excruciating than this — featuring a fumble feet from the goal line.

Because this season mattered. It mattered for fans who watched Hall of Famers and managers and too many falls come and go without a playoff win. For fathers and sons and mothers and daughters who bonded through baseball. For countless kids who recreated Raleigh’s swing in their backyard, who showed up to tee ball wearing No. 29. For the legion of soon-to-be lifelong Mariners fans who fell in love. For the honorary witches and dumpers and anyone in between. For all those who found community, who danced and hugged and dared to hope, at the corner of Edgar and Dave.

That hope led here. It came to this.

To an end you have to hope is the beginning.

“This is not the end,” said third baseman Eugenio Suárez, who went 1 for 4 in what could be the final game of his second Seattle stint. “I feel like the future for this organization is huge.”

Added center fielder Julio Rodríguez, who slashed a double and a solo homer but also struck out to end the game: “You can’t expect anything less for the team. After getting here, after knowing what we’re capable of, I feel like there’s no less than this for us.”

Right now, that’s empty, unsatisfying solace.

When it ended, cans of beer flew through the air, while the Blue Jays moshed amid the madness. Horns sounded and streams of smoke exploded from the center field fence. Raleigh sat and stared, devastation dawning on the possible MVP. Later, Suárez put both hands on Bazardo’s shoulders and whispered encouragement in a quiet clubhouse. Impending free agent Josh Naylor walked around the room, thanking every teammate. There were hugs and suitcases strewn on the floor, while loved ones waited in the tunnel outside.

Why does it hurt? Because seasons like this don’t happen here. That’s not hyperbole.

Until the Mariners drafted and developed one of baseball’s best starting rotations. Until Raleigh hit 65 home runs, the most in a regular and postseason in AL history. Until Woo lasted at least six innings in 25 consecutive starts. Until Seattle dealt for Naylor and Suárez at the trade deadline. Until Victor Robles soared to snag a liner and unseat the Astros. Until a million separate pieces all slid into place.

Even then, it’s not enough. Will it ever be?

It came to this, the same consuming question and a new plummet. A further fall than ever before. Another celebration at Seattle’s expense.

It had to be Springer. It had to happen in the most eternally tortuous way. It had to be the kind of devastating cruelty that leaves Raleigh — who had already homered — standing on deck.

Baseball, like life, isn’t fair.

But you already know that. You’re a Mariners fan.

Read the whole story
chrisamico
2 days ago
reply
Boston, MA
Share this story
Delete

A classified network of SpaceX satellites is emitting a mysterious signal

1 Share

A SpaceX Falcon 9 rocket launched from Vandenberg Space Force Base in March of this year, carrying multiple Starshield satellites into orbit. National Reconnaissance Office/NRO via X hide caption

toggle caption

National Reconnaissance Office/NRO via X

A constellation of classified defense satellites built by the commercial company SpaceX is emitting a mysterious signal that may violate international standards, NPR has learned.

Satellites associated with the Starshield satellite network appear to be transmitting to the Earth's surface on frequencies normally used for doing the exact opposite: sending commands from Earth to satellites in space. The use of those frequencies to "downlink" data runs counter to standards set by the International Telecommunication Union, a United Nations agency that seeks to coordinate the use of radio spectrum globally.

Starshield's unusual transmissions have the potential to interfere with other scientific and commercial satellites, warns Scott Tilley, an amateur satellite tracker in Canada who first spotted the signals.

"Nearby satellites could receive radio-frequency interference and could perhaps not respond properly to commands — or ignore commands — from Earth," he told NPR.

Outside experts agree there's the potential for radio interference. "I think it is definitely happening," said Kevin Gifford, a computer science professor at the University of Colorado, Boulder who specializes in radio interference from spacecraft. But he said the issue of whether the interference is truly disruptive remains unresolved.

SpaceX and the U.S. National Reconnaissance Office, which operates the satellites for the government, did not respond to NPR's request for comment.

Caught by the wrong antenna

The discovery of the signal happened purely by chance.

Tilley regularly monitors satellites from his home in British Columbia as a hobby. He was working on another project when he accidentally triggered a scan of radio frequencies that are normally quiet.

"It was just a clumsy move at the keyboard," he said. "I was resetting some stuff and then all of a sudden I'm looking at the wrong antenna, the wrong band."

The band of the radio spectrum he found himself looking at, between 2025-2110 MHz, is reserved for "uplinking" data to orbiting satellites. That means there shouldn't be any signals coming from space in that range.

But Tilley's experienced eye noticed there appeared to be a signal coming down from the sky. It was in a part of the band "that should have nothing there," he said. "I got a hold of my mouse and hit the record button and let it record for a few minutes."

Tilley then took the data and compared it to a catalog of observations made by other amateur satellite trackers. These amateurs, located around the world, use telescopes to track satellites as they move across the sky and then share their positions in a database.

"Bang, up came an unusual identification that I wasn't expecting at all," he said. "Starshield."

Starshield is a classified version of SpaceX's Starlink satellites, which provide internet service around the world. The U.S. has reportedly paid more than $1.8 billion so far for the network, though little is known about it. According to SpaceX, Starshield conducts both Earth observation and communications missions.

Since May of 2024, the National Reconnaissance Office has conducted 11 launches of Starshield satellites in what it describes as its "proliferated system."

So far, the National Reconnaissance Office says it has launched more than 200 satellites as part of its "proliferated architecture" system to facilitate military Earth observations and communications missions. National Reconnaissance Office handout hide caption

toggle caption

National Reconnaissance Office handout

"The NRO's proliferated system will increase timeliness of access, diversify communications pathways, and enhance resilience," the agency says of the system. "With hundreds of small satellites on orbit, data will be delivered in minutes or even seconds."

Tilley says he's detected signals from 170 of the Starshield satellites so far. All appear in the 2025-2110 MHz range, though the precise frequencies of the signals move around.

Signal's purpose in question

It's unclear what the satellite constellation is up to. Starlink, SpaceX's public satellite internet network, operates at much higher frequencies to enable the transmission of broadband data. Starshield, by contrast, is using a much lower frequency range that probably only allows for the transmission of data at rates closer to 3G cellular, Tilley says.

Tilley says he believes the decision to downlink in a band typically reserved for uplinking data could also be designed to hide Starshield's operations. The frequent shift in specific frequencies used could prevent outsiders from finding the signal.

Gifford says another possibility is that SpaceX was just taking advantage of a quiet part of the radio spectrum. Uplink transmissions from Earth to satellites are usually rare and brief, so these frequencies probably remain dark most of the time.

"SpaceX is smart and savvy," he says. It's possible they decided to just "do it and ask forgiveness later."

He notes it's unlikely the signals from Starshield have caused significant disruptions so far, otherwise other satellite operators would have complained.

Tilley told NPR he has decided to go public with his discovery because the world's satellite operators should be aware of what's happening.

"These are objects in classified orbits, which could potentially disturb other legitimate uses of space," he said.

Read the whole story
chrisamico
2 days ago
reply
Boston, MA
Share this story
Delete

The nitpicker's guide to Boston Blue

1 Share
Several things are wrong with this officer's attire

This screen capture alone is a nitpicker's delight.

Let's start with a confession: "Blue Bloods" was on for like ten years, and I never watched a single episode. But spin off a Wahlberg into a show about Boston? I'm there, riveted to the screen - along with a notepad and pen to jot things to tsk-tsk over.

And, yep, there was plenty of tskery going on last night, most of it perhaps insignificant (maybe all of it, given that, hey, it's a TV show, not real life), so let's get into it, starting with that uniform on the supposed BPD superintendent above:

Her patches are Wrong: BPD patches are not rectangular, they're more like trapezoids with a rounded top and say "Boston Police" at the top and "A.D. 1630" at the bottom. And while it's a bit hard to tell (we have an old TV), that doesn't look like City Hall and Faneuil Hall in the middle. Her badge is wrong, too, both in the shape at the top and the way "Boston" and "Police" are written. Here, take a look at a real BPD patch and badge.

An early scene introduces us to the district attorney, giving a press conference outside Boston Police Headquarters, which, minor thing here, is not actually Boston Police Headquarters. Compare the photo below with the actual entrance to Schroeder Plaza.

DA in front of supposed BPD HQ

Also, she's speaking into microphones that include ones from Channel 9 and WXDV, which don't, of course, exist around here.

But we're letting little nits get like that get in the way of a couple of Big Wrongs in the plot: The reason the DA is holding a press conference outside BPD HQ is to announce she is "filing an emergency ordinance" to ban police use of facial-recognition software because of potential racial biases. No, no, no. The DA doesn't file ordinances, emergency or otherwise - that's the job of the mayor and city councilors. More important, Boston actually banned the use of facial-recognition software because of potential racial biases in 2020. It was in all the papers (and on UHub).

But of course, there's more: Early on, Donnie Wahlberg, um, Danny Reagan (who will promptly try to get around that "emergency ordinance" because it's better to do the right thing than crossing his T's and dotting his I's, and, yes, of course, the superintendent and the DA will prove to be grateful he did) runs after a suspect in the murder/arson that starts the show, and passes a Boston ambulance with a blue stripe, not an orange one. 

Then, he and his impromptu "Beantown" partner (that's what he calls her after she called him "Brooklyn") find the suspect and tackle him outside a house that is really in Toronto, not Boston, in front of a green "Boston" garbage truck. Boston, of course, has yellow garbage trucks, and they don't say "Boston" or "Boston Municipal Services" on them since they're owned by a contractor and there's no such Boston department, but if there were, its trucks would have blue "municipal" plates, not red, white and blue ones.

Apologies again for the poor-quality screenshots, but that's no Boston neighborhood, and that's not a Boston garbage truck:

Not Boston

Green garbage truck with Boston written on it

Later, Danny has dinner with his partner's family, which includes the DA (his partner's mother), the police superintendent with the Wrong uniform (her sister) and Danny's son's BPD partner (the detective's brother). Before dinner, partner takes Danny and his sister Erin (up from New York for reasons that would give away the reason why Danny is in Boston) on a tour of mom's Beacon Hill digs and wistfully shows them a photo of her father, Ben, who was a "circuit judge" before he was murdered. Massachusetts doesn't have circuit judges.

Later, we see Danny and Beantown engaged in the sort of banter at BPD HQ you'd expect from two partners on a show like this. And then the scene cuts to an aerial view of BPD HQ showing a huge parking lot out back, with plenty of empty spaces, which would be news to anybody who's ever been there or even just strolled out back through the Southwest Corridor Park.

Another aerial shot establishes that the DA's office is in the Ames Building on Court Street at Washington, which is all impressive and historical, and would probably make a cool DA's office, but it's actually a Suffolk dorm. The real DA's office is in a more modern (and completely forgettable) office complex off Sudbury Street that it shares with WHDH (next to BPD District A-1) .

While looking for the real killer (the initially tackled guy was not the killer), the two detectives, plus Beantown's brother, uncover some key evidence that appears to involve the real suspect taking the Red Line home to Hyde Park, which, um, no (unless I misheard things, which is possible, but "Red Line" and "Hyde Park" were definitely uttered in the same breath). But props for showing his rap sheet, which showed a stay at Souza-Baranowski, which is a real prison, for real bad people. And props for the scene where they chase and take him down on the real Common, by the Brewer Fountain.

Topics: 
Neighborhoods: 
Free tagging: 
Read the whole story
chrisamico
3 days ago
reply
Boston, MA
Share this story
Delete

Claude Skills are awesome, maybe a bigger deal than MCP

1 Share

Anthropic this morning introduced Claude Skills, a new pattern for making new abilities available to their models:

Claude can now use Skills to improve how it performs specific tasks. Skills are folders that include instructions, scripts, and resources that Claude can load when needed.

Claude will only access a skill when it's relevant to the task at hand. When used, skills make Claude better at specialized tasks like working with Excel or following your organization's brand guidelines.

Their engineering blog has a more detailed explanation. There's also a new anthropic/skills GitHub repo.

(I inadvertently preempted their announcement of this feature when I reverse engineered and wrote about it last Friday!)

Skills are conceptually extremely simple: a skill is a Markdown file telling the model how to do something, optionally accompanied by extra documents and pre-written scripts that the model can run to help it accomplish the tasks described by the skill.

Claude's new document creation abilities, which accompanied their new code interpreter feature in September, turned out to be entirely implemented using skills. Those are now available Anthropic's repo covering .pdf, .docx, .xlsx, and .pptx files.

There's one extra detail that makes this a feature, not just a bunch of files in disk. At the start of a session Claude's various harnesses can scan all available skill files and read a short explanation for each one from the frontmatter YAML in the Markdown file. This is very token efficient: each skill only takes up a few dozen extra tokens, with the full details only loaded in should the user request a task that the skill can help solve.

Trying out the slack-gif-creator skill

Here's that metadata for an example slack-gif-creator skill that Anthropic published this morning:

Toolkit for creating animated GIFs optimized for Slack, with validators for size constraints and composable animation primitives. This skill applies when users request animated GIFs or emoji animations for Slack from descriptions like "make me a GIF for Slack of X doing Y".

I just tried this skill out in the Claude mobile web app, against Sonnet 4.5. First I enabled the slack-gif-creator skill in the settings, then I prompted:

Make me a gif for slack about how Skills are way cooler than MCPs

And Claude made me this GIF:

Click to hide the GIF

On the left static text: MCPS: basic tools, limited scope, OK I guess... On the right is animated text saying Skills with Pro features, Best practices, AMAZING! - the text flashes colors and the word Skills gets larger and smaller and there is a flashy circle for some reason. At the bottom the text Skills > MCPs in purple bounces up and down.


(OK, this particular GIF is terrible, but the great thing about skills is that they're very easy to iterate on to make them better.)

Here are some noteworthy snippets from the Python script it wrote, comments mine:

# Start by adding the skill's directory to the Python path
import sys
sys.path.insert(0, '/mnt/skills/examples/slack-gif-creator')

from PIL import Image, ImageDraw, ImageFont
# This class lives in the core/ directory for the skill
from core.gif_builder import GIFBuilder

# ... code that builds the GIF ...

# Save it to disk:
info = builder.save('/mnt/user-data/outputs/skills_vs_mcps.gif', 
                    num_colors=128, 
                    optimize_for_emoji=False)

print(f"GIF created successfully!")
print(f"Size: {info['size_kb']:.1f} KB ({info['size_mb']:.2f} MB)")
print(f"Frames: {info['frame_count']}")
print(f"Duration: {info['duration_seconds']:.1f}s")

# Use the check_slack_size() function to confirm it's small enough for Slack:
passes, check_info = check_slack_size('/mnt/user-data/outputs/skills_vs_mcps.gif', is_emoji=False)
if passes:
    print("✓ Ready for Slack!")
else:
    print(f"⚠ File size: {check_info['size_kb']:.1f} KB (limit: {check_info['limit_kb']} KB)")

This is pretty neat. Slack GIFs need to be a maximum of 2MB, so the skill includes a validation function which the model can use to check the file size. If it's too large the model can have another go at making it smaller.

Skills depend on a coding environment

The skills mechanism is entirely dependent on the model having access to a filesystem, tools to navigate it and the ability to execute commands in that environment.

This is a common pattern for LLM tooling these days - ChatGPT Code Interpreter was the first big example of this back in early 2023, and the pattern later extended to local machines via coding agent tools such as Cursor, Claude Code, Codex CLI and Gemini CLI.

This requirement is the biggest difference between skills and other previous attempts at expanding the abilities of LLMs, such as MCP and ChatGPT Plugins. It's a significant dependency, but it's somewhat bewildering how much new capability it unlocks.

The fact that skills are so powerful and simple to create is yet another argument in favor of making safe coding environments available to LLMs. The word safe there is doing a lot of work though! We really need to figure out how best to sandbox these environments such that attacks such as prompt injections are limited to an acceptable amount of damage.

Claude as a General Agent

Back in January I made some foolhardy predictions about AI/LLMs, including that "agents" would once again fail to happen:

I think we are going to see a lot more froth about agents in 2025, but I expect the results will be a great disappointment to most of the people who are excited about this term. I expect a lot of money will be lost chasing after several different poorly defined dreams that share that name.

I was entirely wrong about that. 2025 really has been the year of "agents", no matter which of the many conflicting definitions you decide to use (I eventually settled on "tools in a loop").

Claude Code is, with hindsight, poorly named. It's not purely a coding tool: it's a tool for general computer automation. Anything you can achieve by typing commands into a computer is something that can now be automated by Claude Code. It's best described as a general agent. Skills make this a whole lot more obvious and explicit.

I find the potential applications of this trick somewhat dizzying. Just thinking about this with my data journalism hat on: imagine a folder full of skills that covers tasks like the following:

  • Where to get US census data from and how to understand its structure
  • How to load data from different formats into SQLite or DuckDB using appropriate Python libraries
  • How to publish data online, as Parquet files in S3 or pushed as tables to Datasette Cloud
  • A skill defined by an experienced data reporter talking about how best to find the interesting stories in a new set of data
  • A skill that describes how to build clean, readable data visualizations using D3

Congratulations, you just built a "data journalism agent" that can discover and help publish stories against fresh drops of US census data. And you did it with a folder full of Markdown files and maybe a couple of example Python scripts.

Skills compared to MCP

Model Context Protocol has attracted an enormous amount of buzz since its initial release back in November last year. I like to joke that one of the reasons it took off is that every company knew they needed an "AI strategy", and building (or announcing) an MCP implementation was an easy way to tick that box.

Over time the limitations of MCP have started to emerge. The most significant is in terms of token usage: GitHub's official MCP on its own famously consumes tens of thousands of tokens of context, and once you've added a few more to that there's precious little space left for the LLM to actually do useful work.

My own interest in MCPs has waned ever since I started taking coding agents seriously. Almost everything I might achieve with an MCP can be handled by a CLI tool instead. LLMs know how to call cli-tool --help, which means you don't have to spend many tokens describing how to use them - the model can figure it out later when it needs to.

Skills have exactly the same advantage, only now I don't even need to implement a new CLI tool. I can drop a Markdown file in describing how to do a task instead, adding extra scripts only if they'll help make things more reliable or efficient.

Here come the Skills

One of the most exciting things about Skills is how easy they are to share. I expect many skills will be implemented as a single file - more sophisticated ones will be a folder with a few more.

Anthropic have Agent Skills documentation and a Claude Skills Cookbook. I'm already thinking through ideas of skills I might build myself, like one on how to build Datasette plugins.

Something else I love about the design of skills is there is nothing at all preventing them from being used with other models.

You can grab a skills folder right now, point Codex CLI or Gemini CLI at it and say "read pdf/SKILL.md and then create me a PDF describing this project" and it will work, despite those tools and models having no baked in knowledge of the skills system.

I expect we'll see a Cambrian explosion in Skills which will make this year's MCP rush look pedestrian by comparison.

You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.

Read the whole story
chrisamico
4 days ago
reply
Boston, MA
Share this story
Delete

More Than 170 U.S. Citizens Have Been Held by Immigration Agents. They’ve Been Kicked, Dragged and Detained for Days.

1 Share

ProPublica is a nonprofit newsroom that investigates abuses of power. Sign up to receive our biggest stories as soon as they’re published.

Reporting Highlights

  • Americans Detained: The government doesn’t track how many citizens are held by immigration agents. We found more than 170 cases this year where citizens were detained at raids and protests.
  • Held Incommunicado: More than 20 citizens have reported being held for over a day without being able to call their loved ones or a lawyer. In some cases their families couldn’t find them.
  • Cases Wilted: Agents have arrested about 130 Americans, including a dozen elected officials, for allegedly interfering with or assaulting officers, yet those cases were often dropped.

These highlights were written by the reporters and editors who worked on this story.

When the Supreme Court recently allowed immigration agents in the Los Angeles area to take race into consideration during sweeps, Justice Brett Kavanaugh said that citizens shouldn’t be concerned.

“If the officers learn that the individual they stopped is a U.S. citizen or otherwise lawfully in the United States,” Kavanaugh wrote, “they promptly let the individual go.”

But that is far from the reality many citizens have experienced. Americans have been dragged, tackled, beaten, tased and shot by immigration agents. They’ve had their necks kneeled on. They’ve been held outside in the rain while in their underwear. At least three citizens were pregnant when agents detained them. One of those women had already had the door of her home blown off while Department of Homeland Security Secretary Kristi Noem watched.

About two dozen Americans have said they were held for more than a day without being able to phone lawyers or loved ones.

Videos of U.S. citizens being mistreated by immigration agents have filled social media feeds, but there is little clarity on the overall picture. The government does not track how often immigration agents hold Americans.

So ProPublica created its own count.

We compiled and reviewed every case we could find of agents holding citizens against their will, whether during immigration raids or protests. While the tally is almost certainly incomplete, we found more than 170 such incidents during the first nine months of President Donald Trump’s second administration.

Among the citizens detained are nearly 20 children, including two with cancer. That includes four who were held for weeks with their undocumented mother and without access to the family’s attorney until a congresswoman intervened.

Immigration agents do have authority to detain Americans in limited circumstances. Agents can hold people whom they reasonably suspect are in the country illegally. We found more than 50 Americans who were held after agents questioned their citizenship. They were almost all Latino.

Immigration agents also can arrest citizens who allegedly interfered with or assaulted officers. We compiled cases of about 130 Americans, including a dozen elected officials, accused of assaulting or impeding officers.

These cases have often wilted under scrutiny. In nearly 50 instances that we have identified so far, charges have never been filed or the cases were dismissed. Our count found a handful of citizens have pleaded guilty, mostly to misdemeanors.

Among the detentions in which allegations have not stuck, masked agents pointed a gun at, pepper sprayed and punched a young man who had filmed them searching for his relative. In another, agents knocked over and then tackled a 79-year-old car wash owner, pressing their knees into his neck and back. His lawyer said he was held for 12 hours and wasn’t given medical attention despite having broken ribs in the incident and having recently had heart surgery. In a third case, agents grabbed and handcuffed a woman on her way to work who was caught up in a chaotic raid on street vendors. In a complaint filed against the government, she described being held for more than two days, without being allowed to contact the outside world for much of that time. (The Supreme Court has ruled that two days is generally the longest federal officials can hold Americans without charges.)

In response to questions from ProPublica, the Department of Homeland Security said agents do not racially profile or target Americans. “We don’t arrest US citizens for immigration enforcement,” wrote spokesperson Tricia McLaughlin.

A top immigration official recently acknowledged agents do consider someone’s looks. “How do they look compared to, say, you?” Border Patrol chief Gregory Bovino said to a white reporter in Chicago.

The White House told ProPublica that anyone who assaults federal immigration agents would be prosecuted. “Interfering with law enforcement and assaulting law enforcement is a crime and anyone, regardless of immigration status, will be held accountable,” said the Deputy Press Secretary Abigail Jackson. “Officers act heroically to enforce the law, arrest criminal illegal aliens, and protect American communities with the utmost professionalism.”

A spokesperson for Kavanaugh did not return an emailed request for comment.

Tallying the number of Americans detained by immigration agents is inherently messy and incomplete. The government has long ignored recommendations for it to track such cases, even as the U.S. has a history of detaining and even deporting citizens, including during the Obama administration and Trump’s first term.

We compiled cases by sifting through both English- and Spanish-language social media, lawsuits, court records and local media reports. We did not include arrests of protesters by local police or the National Guard. Nor did we count cases in which arrests were made at a later date after a judicial process. That included cases of some people charged with serious crimes, like throwing rocks or tossing a flare to start a fire.

Experts say that Americans appear to be getting picked up more now as a result of the government doing something that it hasn’t for decades: large-scale immigration sweeps across the country, often in communities that do not want them.

In earlier administrations, deportation agents used intelligence to target specific individuals, said Scott Shuchart, a top immigration official in the Biden, Obama and first Trump administrations. “The new idea is to use those resources unintelligently” — with officers targeting communities or workplaces where undocumented immigrants may be.

When federal officers roll through communities in the way the Supreme Court permitted, the constitutional rights of both citizens and noncitizens are inevitably violated, argued David Bier, the director of immigration studies at the libertarian Cato Institute. He recently analyzed how sweeps in Los Angeles have led to racial profiling. “If the government can grab someone because he’s a certain demographic group that’s correlated with some offense category, then they can do that in any context.”

Cody Wofsy, an attorney at the American Civil Liberties Union, put it even more starkly. “Any one of us could be next.”


When Kavanaugh issued his opinion that immigration agents can consider race and other factors, the Supreme Court’s three liberal justices strongly dissented. They warned that citizens risked being “grabbed, thrown to the ground, and handcuffed simply because of their looks, their accents, and the fact they make a living by doing manual labor.”

Leonardo Garcia Venegas appears to have been just such a case. He was working at a construction site in coastal Alabama when he saw masked immigration agents from Homeland Security Investigations hop a fence and run by a “No trespassing” sign. Garcia Venegas recalled that they moved toward the Latino workers, ignoring the white and Black workers.

Garcia Venegas began filming after his undocumented brother asked agents for a warrant. In response, the footage shows, agents yanked his brother to the ground, shoving his face into wet concrete. Garcia Venegas kept filming until officers grabbed him too and knocked his phone to the ground.

Other co-workers filmed what happened next, as immigration agents twisted the 25-year-old’s arms. They repeatedly tried to take him to the ground while he yelled, “I’m a citizen!”

Officers pulled out his REAL ID, which Alabama only issues to those legally in the U.S. But the agents dismissed it as fake. Officers held Garcia Venegas handcuffed for more than an hour. His brother was later deported.

Garcia Venegas was so shaken that he took two weeks off of work. Soon after he returned, he was working alone inside a nearly built house listening to music on his headphones when he sensed someone watching him. A masked immigration agent was standing in the bedroom doorway.

This time, agents didn’t tackle him. But they again dismissed his REAL ID. And then they held him to check his citizenship. Garcia Venegas says agents also held two other workers who had legal status.

DHS did not respond to ProPublica’s questions about Garcia Venegas’ detentions, or to a federal lawsuit he filed last month. The agency has previously defended the agents’ conduct, saying he “physically got in between agents and the subject” during the first incident. The footage does not show that, and Garcia Venegas was never charged with obstruction or any other crime.

Garcia Venegas’ lawyers at the nonprofit Institute for Justice hope others may join his suit. After all, the reverberations of the immigration sweeps are being felt widely. Garcia Venegas said he knows of 15 more raids on nearby construction sites, and the industry along his portion of the Gulf Coast is struggling for lack of workers.

Kavanaugh’s assurances hold little weight for Garcia Venegas. He’s a U.S. citizen of Mexican descent, who speaks little English and works in construction. Even with his REAL ID and Social Security card in his wallet, Garcia Venegas worries that immigration agents will keep harassing him.

“If they decide they want to detain you,” he said. “You’re not going to get out of it.”


George Retes was among the citizens arrested despite immigration agents appearing to know his legal status. He also disappeared into the system for days without being able to contact anyone on the outside.

The only clue Retes’ family had at first was a brief call he managed to make on his Apple Watch with his hands handcuffed behind his back. He quickly told his wife that “ICE” had arrested him during a massive raid and protest on the marijuana farm where he worked as a security guard.

Still, Retes’ family couldn’t find him. They called every law enforcement agency they could think of. No one gave them any answers.

Eventually, they spotted a TikTok video showing Retes driving to work and slowly trying to back up as he’s caught between agents and protestors. Through the tear gas and dust, his family recognized Retes’ car and the veteran decal on his window. The full video shows a man — Retes — splayed on the ground surrounded by agents.

Retes’ family went to the farm, where local TV reporters were interviewing families who couldn’t find their loved ones.

They broke his window, they pepper sprayed him, they grabbed him, threw him on the floor,” his sister told a reporter between sobs. “We don’t know what to do. We’re just asking to let my brother go. He didn’t do anything wrong. He’s a veteran, disabled citizen. It says it on his car.”

Retes was held for three days without being given an opportunity to make a call. His family only learned where he had been after his release. His leg had been cut from the broken glass, Retes told ProPublica, and lingering pepper spray burned his hands.He tried to soothe them by filling sandwich bags with water.

Retes recalled that agents knew he was a citizen. “They didn’t care.” He said one DHS official laughed at him, saying he shouldn’t have come to work that day. “They still sent me away to jail.” He added that cases like his show Kavanaugh was “wrong completely.”

DHS did not answer our questions about Retes. It did respond on X after Retes wrote an op-ed last month in the San Francisco Chronicle. An agency post asserted he was arrested for assault after he “became violent and refused to comply with law enforcement.” Yet Retes had been released without any charges. Indeed, he says he was never told why he was arrested.

The Department of Justice has encouraged agents to arrest anyone interfering with immigration operations, twice ordering law enforcement to prioritize cases of those suspected of obstructing, interfering with or assaulting immigration officials.

But the government’s claims in those cases have often not been borne out.

Daniel Montenegro was filming a raid at a Van Nuys, California, Home Depot with other day-laborer advocates this summer when, he told ProPublica, he was tackled by several officers who injured his back.

Bovino, the Border Patrol chief who oversaw the LA raids and has since taken similar operations to cities like Sacramento and Chicago, tweeted out the names and photos of Montenegro and three others, accusing them of using homemade tire spikes to disable vehicles.

“I had no idea where that story came from,” Montenegro told ProPublica. “I didn’t find out until we were released. People were like, ‘We saw you on Twitter and the news and you guys are terrorists, you were planning to slash tires.’ I never saw those spike tire-popper things.”

Officials have not charged Montenegro or the others with any crimes. (Bovino did not respond to a request for comment, while DHS defended him in a statement to ProPublica: “Chief Bovino’s success in getting the worst of the worst out of the country speaks for itself.”)

The government’s cases are sometimes so muddied that it’s unclear why agents actually arrested a citizen.

Andrea Velez was charged with assaulting an officer after she was accidentally dropped off for work during a raid on street vendors in downtown Los Angeles. She said in a federal complaint that officers repeatedly assumed she did not speak English. Federal officers later requested access to her phone in an attempt to prove she was colluding with another citizen arrested that day, who was charged with assault. She was one of the Americans held for more than two days.

DHS did not respond to our questions about Velez, but it has previously accused her of assaulting an officer. A federal judge has dismissed the charges.

Other citizens also said officers accused them of crimes and suddenly questioned their citizenship — including a man arrested after filming Border Patrol agents break a truck window, and a pregnant woman who tried to stop officers from taking her boyfriend.


The prospects for any significant reckoning over agents’ conduct, even against citizens, are dim. The paths for suing federal agents are even more limited than they are for local police. And that’s if agents can even be identified. What’s more, the administration has gutted the office that investigates allegations of abuse by agents.

“The often-inadequate guardrails that we have for state and local government — even those guardrails are nonexistent when you’re talking about federal overreach,” said Joanna Schwartz, a professor at UCLA School of Law.

More than 50 members of Congress have also written to the administration, demanding details about Americans who’ve been detained. One is Sen. Alex Padilla, a California Democrat. After trying to question Noem about detained citizens, federal agents grabbed Padilla, pulled him to the ground and handcuffed him. The department later defended the agents, saying they “acted appropriately.”


Do you have information or videos to share about the administration’s immigration crackdown? Contact Nicole Foy via email at nicole.foy@propublica.org or on Signal at nicolefoy.27.

Read the whole story
chrisamico
5 days ago
reply
Boston, MA
Share this story
Delete
Next Page of Stories