DEV Community

Cover image for My local AI agent now has coworkers, a wake word, and takes my meeting notes
Nathan C.
Nathan C.

Posted on

My local AI agent now has coworkers, a wake word, and takes my meeting notes

When I get an idea away from my computer, I tap a button on my Apple Watch's home screen and say it out loud. It lands in my Apple Notes. My agents are watching my notes, and by the time I'm back at my desk, they've already started building it.

That's Flash, an open source AI agent I've been building for the terminal and the browser. It runs on Ollama models you pick, with no API keys and no account, and nothing leaves your computer unless you tell it to. The dev branch is 173 commits ahead of main now. Here's what's in it, starting with the two pieces that make the Watch trick work.

It keeps working after you close the chat

Most agents stop the moment you stop typing. Flash has sparks: small agents you give a name, a standing goal and a schedule, and they just keep going. "Watch the issues on my repo and tell me about new bugs every morning." "Check the price of this every hour." Each run is a shift, and each shift ends with a report you can thumbs up or down. A spark reads every piece of feedback you've ever given it before every shift, so you only have to say "only tell me about the ones labelled bug" once.

Turn on sparks always on and they keep working with Flash closed. The OS starts them at login.

Then it got out of hand, in a good way. Sparks can be on teams now. Teams have leads, an org chart that comes alive while they work, budgets by the hour, day, week or month, and an audit log of every tool call. A lead can propose hiring a new spark, and you approve it like a pull request. Every team has a group chat where you and the sparks talk in one room, with @mentions, replies, emoji reactions and read ticks. A spark can decide to stay quiet when it has nothing to add, which is more than I can say for most group chats.

Connectors (MCP)

Flash speaks the Model Context Protocol now. /mcp add github npx -y @modelcontextprotocol/server-github and GitHub's tools join Flash's own. Same for Notion, Postgres, your filesystem, anything with an MCP server, local or remote. It reads the usual mcpServers config, so you can paste one in from wherever you already have it. Read-only tools run straight away. Anything that changes something asks you first, unless you've put Flash in autonomous mode.

The Watch trick is just this. I added sweetrb/apple-notes-mcp as a connector, which gives my sparks tools to read my Apple Notes, then gave a spark the goal of watching for new ideas there and getting them started. The Watch button is just a fast way to get a note written. Flash does the rest.

"Hey Flash"

Voice mode got a wake word. Say "Hey Flash" with the page open, or flip on the background service and it works with no tab open at all. A slider sets how eager it is, so a YouTube video in the background doesn't set it off.

Everything you hear and say stays on your machine:

  • Listening is Vosk, or Moonshine if you want it to actually get your words right. Moonshine streams, so the words on screen while you talk are already the right ones.
  • Speaking is Piper, or Kokoro, which sounds startlingly human for something running on a laptop CPU.
  • Point your camera at something mid-conversation and ask about it.
  • Say "interrupt" to cut it off mid-sentence. It can also end the conversation itself when you say bye, so you're not stuck talking to a dial tone.

It takes your meeting notes

Hit + then Record a meeting. Flash writes down what's said as it's said, live, on your computer. When you stop, the transcript lands in a new chat and the model writes up the summary, what got decided, who's doing what by when, and what's still open.

There's no bot joining your call, no upload and no "this meeting is being recorded by". It's the same idea as recording your screen to teach Flash a procedure, which you can also do now.

It can pause your music

Off by default. Turn it on and "stop the music", "turn it down" and "open Spotify" just happen. It plays and pauses anything (a YouTube tab, a call, any app) through the media keys. It also opens and quits apps, sets the volume, locks the screen and flips dark mode. It doesn't click around your screen. Yet.

The stuff I use every day

  • Replies aren't just text anymore. Flash answers with charts, calculators, forms and buttons when those say it better.
  • It writes music and plays it in its own player. It builds 3D models and textures them. It drafts designs you can comment on.
  • System One: in autonomous mode, a small fast model looks over every command and edit before it runs, and stops the sketchy ones.
  • Steer it while it works ("actually use the other file"), or queue the next thing without waiting.
  • Edit a message you already sent and keep every version.
  • /btw asks a side question without derailing the task.
  • Email, across as many accounts as you have, plus an Inbox spark that sorts it every 30 minutes and drafts replies you approve.
  • When it needs a package, it shows an Install button and lets you watch the logs.
  • If it misread your typo and titled the chat something dumb, it retypes the title in front of you once it figures out what you meant.

One thing I learned

Models love em dashes. You can ask nicely in the system prompt and they'll keep doing it. So Flash pulls them out in code, a token at a time as the reply streams in, except inside code where a dash means something. This week I found out sparks were sneaking them through one specific tool in the team chat. That's fixed now. If you build on local models, enforce style in code. Prompts are suggestions.

Try it

It's MIT and on GitHub. To get everything above, install from dev:

pipx install "git+https://github.com/Natuworkguy/Flash@dev"
flash --web
Enter fullscreen mode Exit fullscreen mode

You'll need Ollama and a model that can call tools. The repo has a recommended one.

So, what would you have a spark watch? Tell me in the comments. And if you try it, tell me what breaks.

If this looks useful, a star on GitHub helps more people find it.

Top comments (0)