cd /news/ai-agents/openai-shipped-dots-on-tuesday-by-we… · home › topics › ai-agents › article
[ARTICLE · art-142848] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

OpenAI shipped Dots on Tuesday. By Wednesday night my terminal had its own, running 100% locally

A developer built Sparks, a local always-on agent feature for the open-source Flash CLI, roughly 24 hours and 17 commits after OpenAI launched its Dots background agents. Sparks run on user-supplied models via Ollama, persist as plain JSON files in ~/.flash/sparks, and stay alive after the terminal closes through systemd, launchd, or Windows Scheduled Tasks. The developer reports a concurrency bug in which the background keeper, the CLI, and the web UI can all attempt to run the same scheduled shift, and says Sparks should ship in version 0.6.12.

by read3 min views1 publishedSep 30, 2026

On Tuesday, OpenAI launched Dots: little bubbly agents with a name and an avatar that keep working in the background and come back when they have something for you.

I read the announcement and had one thought:

Why does my always-on agent have to live on someone else's computer?

So I opened my editor. About 24 hours and 17 commits later, Flash, my open-source local agent CLI, has its own version. They're called Sparks.

They run on your models through Ollama, on your machine, and they keep working after you close Flash.

This is the story of day one: what I built, what broke, and the one bug that froze everything.

A sub-agent does one job and disappears. A spark keeps a job.

Every spark gets:

Scout becomes @scout-spark. qwen3:8b, llama3.1, whatever you've pulled. Each spark can run a different one. You can make one with a command, or just ask for it:

> make a spark that checks my repo every morning and tells me which new
  issues look like bugs. never comment on anything.

Flash calls its make_spark tool and asks you first. After that, the spark lives in ~/.flash/sparks as one plain JSON file. There's no database and no account.

Every shift, it reads its goal, the notes it left itself last time, its last report, and every lesson you've taught it. It works with real tools. Then it files a report, or a quiet one if nothing is new, so you only hear from it when something happened.

● Scout has news · /sparks scout

In the web UI, each spark is a little bubble with a face, and I went way too far with this:

It isn't only decoration. Glance at the sidebar and you know which spark is working, which is stuck, and which has news, without reading a word.

Open a spark and press Chat, and it answers as itself, from its own goal, notes and reports. It knows its current status: whether it's mid-shift, waiting on you, or d.

Tell it to do its job differently and it keeps that as a lesson that every later shift reads. Tell it a new goal and it changes it.

And my favorite feature, added this afternoon:

you:   Actually, can you check whether the login page still loads?
scout: On it. I've taken that on, and a shift is starting now.
       I'll report back here.

The spark calls a take_on tool, a shift starts immediately, it does your job first, and the report lands back in the chat you asked in.

Mid-chat with Flash about something else? Type @scout and the spark joins the conversation. It sees the last dozen messages as a transcript, answers under its own name, and Flash sees afterwards that Scout was called and what it said. The next message without a mention picks up right where the spark left off.

It feels like having coworkers in a group chat. Except the coworkers are on your GPU.

This was the part I cared about most. An always-on agent that dies when you close the terminal isn't always on.

/sparks always on installs a tiny background keeper using whatever your OS already has:

OS How it stays alive
Linux a systemd --user service (with an autostart fallback)
macOS a launchd agent
Windows a Scheduled Task

Now the problem: what happens when the keeper is running and you open Flash and you have the web UI up in another terminal? Three processes all think it's their job to run Scout's 9am shift.

I'll post updates as they come out and Sparks should be shipping in 0.6.12

── more in #ai-agents 4 stories · sorted by recency
── more on @openai 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/openai-shipped-dots-…] indexed:0 read:3min 2026-09-30 · —