Issue 01 · April 2026  ·  The local agent issuePLaunching on Product Hunt · April 20

Finally, an AI agent that's yours.

OpenSair is a private, local AI agent for macOS. Multi-agent, autonomous, voice-first. It installs like an app — and stays on your machine. No cloud, no vendor lock, no compromises.

macOS 13+Apple Silicon onlyShips as .dmgFrom $20/mo · bring your own keys
opensair · agent live · local
>
The ten-second read

Every other AI agent lives on someone else's server. OpenSair lives on your Mac.

Your files don't leave. Your prompts don't leave. Your API keys never touch anyone else's disk.

Give it a goal. Go for a walk. It'll work while you're gone and show you the receipts when you're back.

Six things your Mac can now do.

A condensed read of fifty-plus built-in skills. Every one of them runs with your permission, on your machine, and is reversible from the journal.

Local by default.

Transcription runs on-device with Whisper. Speech runs on-device with Kokoro. Your API keys are encrypted at rest. Nothing is phoned home — ever.

Whisper · Kokoro · Fernet · Ollama

Many agents, one you.

Spawn sub-agents. Delegate in parallel. Each gets its own model, skills, and permissions. Drill into any child’s full transcript when you want to know what happened.

Multi-agent · Delegation · Directory routing

Background goals.

Give it a goal and a priority. It works while you sleep, adjusts its own wake cadence, pauses itself on failure, and pings you only when it matters.

Autonomous · Cron · Priority 1–10

Reaches the whole Mac.

Files. Terminal. Browser. Spotlight. Gmail. Calendar. Drive. Docs. Discord. Obsidian. Instagram, Threads, Messenger, SMS. HTTP, clipboard, processes, system prefs. It’s not a tab — it’s an agent.

System · Browser · Google · Social · Obsidian

It remembers.

Cross-session memory that survives every chat. Your docs indexed with semantic search and source attribution. Per-agent scope, importance scores, duplicate-detection — without leaking a word to a vendor.

Memory · Knowledge · Semantic · Per-agent

Any model. Or none.

OpenAI, Anthropic, OpenRouter, Ollama. Mix providers across agents. Pay your provider directly — we take zero cut — or go fully offline with local Ollama models.

OpenAI · Anthropic · OpenRouter · Ollama

Three pillars. One agent.

The shape of OpenSair in a glance.

01 · Voice·

Talk. Hands-free.

Hold a real back-and-forth with your agent. Whisper transcribes locally, Kokoro speaks locally. Zero API cost.

Full-duplex · on-device
02 · Browser·

Drives the web.

Persistent Chrome profile. Logins survive. Click, fill, scrape, screenshot. The web without the API gatekeepers.

Persistent profile · multi-tab
03 · Goals·

Works while you sleep.

Autonomous background goals with priorities. It wakes itself, adjusts cadence, and pings only when it matters.

Cron · priority · concurrent

An agent that hires other agents.

Your primary agent plans. Sub-agents execute in parallel — each with its own model and permissions. You see every conversation.

you
research
bookkeeping
inbox
social
voice
browser
✦ Parallel

Dispatch many at once. Wait for all.

Spawn five sub-agents, hand each a slice of the problem, and get a single answer back. No round-robin, no babysitting.

✦ Drillable

Parent-child transcripts.

Every sub-agent keeps its own conversation. Click any one to see the full trace — reasoning, tool calls, results.

✦ Sovereign

Each agent picks its own brain.

Route reasoning to Claude, heavy lifting to GPT, quiet work to local Ollama. Cost and latency, your call.

Give it a goal. Go make coffee.

Not a cron. Not a schedule you set and forget. You give it a goal; it decides when to wake next — every 30 seconds when things are hot, every few hours when they're not. It paces itself.

Running now · 3 concurrentUp to 3 concurrent · automatic back-off on failure
  • Mon 09:00Weekly digest → team@cron
  • every 30mWatch Acme inbox for replygoal · ongoing
  • Apr 20 18:00Post launch update → Threadscron
  • daily 22:00Consolidate memories from todaygoal
  • every 2hDraft replies in unified inboxgoal · priority 4
✦ Completable

One-off goals with a finish line.

“Find everything in my drive about project Helios and summarize it.” It runs, ends, shows its work.

✦ Self-pacing

It picks its own wake time.

A cron fires on your schedule. A goal wakes on its schedule. Tight loop while work is active. Long loop when the world's quiet. No tuning required from you.

✦ Recoverable

Crash today, resume tomorrow.

Every cycle is checkpointed. Restart the app and a half-finished goal picks up where it left off — cleanly.

It gets smarter about you.

You don't train it — you use it. Every night a learning pass runs across the day's conversations, extracting what matters, consolidating what's redundant, tagging the entities that keep coming up. No fine-tuning. No uploads. No vendor.

memory graph20 nodes · 29 connections
factinstructioneventrelationship
learning pass · tonight 04:0047 memories · +4 today · idle
recent pass · 6 hours ago · sample4 of today's entries
factdistilled from 14 conversations

You prefer JetBrains Mono for code blocks and tight markdown spacing.

#preferences#typography
instructionset explicitly by you

Never auto-send replies to clients without approval. Draft only.

#work#client-comms
eventderived from calendar changes

Demo call with Acme was moved from Apr 15 to Apr 20 at 14:00.

#acme#meetings
relationshipinferred across email threads

Maya is a frontend engineer at Acme. She reports to Sam. Works in SF.

#maya#acme#sam
✦ Four kinds

Facts, instructions, events, relationships. Each with importance scores and entity tags, so the agent knows what to surface and when.

✦ Semantic search

Ask about something from three weeks ago without the exact words. If the meaning is close, the memory surfaces.

✦ Undo anywhere

Every memory write is reversible from the Activity Journal. Nothing sticks unless you want it to.

Did it actually run?

Did the cron trigger. Did the agent email who it said. Did it — uh — delete the right folder. Every action is logged. Most of them can be undone.

Your agent takes actions. You keep the receipts. Every skill call — what it was, what arguments it passed, what it got back — goes into the journal. Filter by agent, status, or text. Reverse what's reversible. Power and control, in that order.

TimeActionAgentStatusUndo
09:00:12Posted #general weekly pulsemarketingok
08:57:03Drafted reply to acme@inboxok
08:44:51Ingested 14 invoices · knowledgebookkeepingok
08:12:09Wrote memory · march_invoice_totalsbookkeepingok
07:48:22Scheduled friday pulse cronmarketingok
07:21:40Deleted 32 files · ~/Downloadsprimaryreverted
06:55:17Sent broadcast → Threadssocialwarn
✦ Scheduled worry

Every Friday at 9am, a cron is supposed to run. Did it? Open the journal. It did, and here's the result.

✦ The oops button

Agent wrote to a memory you didn't want. Ingested the wrong folder. Hit revert. It unwinds cleanly.

✦ Full trace

Click any row to see arguments, return value, and which agent (or sub-agent) called it.

Just ask. It shares.

Tell the agent to share a report, a chart, a carousel, a draft. It packages the artifact, generates a persistent public link, hands you the URL. No export dance. No cloud-storage app. No “download then upload” shuffle.

opensair · agent public · persistent
>share the launch carousel with the team
IMG
Artifact generated. Here's your link:
launch-carousel.png
6-slide carousel · generated for tomorrow’s Instagram post
https://opensair.ai/s/k7x2m3n
persistent · lives until you revoke47 views · 1.2 MB
other artifacts it has shared
✦ Conversational

“Share the deck with Sam.” “Give me a public link for that CSV.” “Post this markdown somewhere.” The agent packages, uploads, returns the URL.

✦ Persistent

Links don't expire. They're live until you (or the agent, if you ask) revoke them. Send once, reference forever.

✦ Renders inline

PDFs, images, markdown, HTML, spreadsheets, code — the link viewer opens them inline. No “download to see” friction for the recipient.

Three tiers. Per agent.

The agent asks before it touches anything that matters. Approve once. Approve for the session. Or lock it down per agent — marketing shouldn't be running shell commands.

Safe

Just go.

Reads, searches, listings, passive observation. Runs without interrupting you.

  • read files · list dirs
  • search drive · gmail list
  • page.html · page.text
Sensitive

Asks the first time.

Writes, sends, drafts. Accept once or accept for this agent forever.

  • write file · send email
  • post to social · discord msg
  • memory.write · knowledge.ingest
Dangerous

Always asks. Always.

Destructive or irreversible. Shell, delete, mass-send. No “remember my answer” option.

  • shell.exec · process.kill
  • file.delete · broadcast
  • system.prefs.write
✦ Per-agent override

Agents are not equal. Your research agent never needs shell. Your bookkeeping agent doesn't touch social. Lock each one down to the exact skills it needs. Everything else is denied — silently, permanently.

research · 12 skills bookkeeping · 8 skills primary · 42 skills social · 6 skills

Save an agent. Share the file.

Configure an agent — prompt, model, provider, skills, knowledge base, reasoning, permissions — then export the whole thing as a single file. Send it. Commit it. Publish it. They drop the file in; their OpenSair has the exact agent you built.

M
Marcus
Research

Deep dives, cross-references, drafts briefs. Remembers sources.

Provider
anthropic
Model
claude opus
Reasoning
high
Context
summarize
Skills
4 groups
Knowledge
research-vault
Permissions
dangerous denied
Wake
on demand
marcus-research.jsonexport · import
marcus-research.jsonportable · plain text
what's insideeverything the agent needs
identity
nameroledescription
mind
system promptprovidermodelreasoning effortcontext mode
capabilities
skillsknowledge base
rules
permission tiersper-skill overrides
cadence
wake intervalgoal bindings
drop into any OpenSair install·permissions reviewed on import
✦ Export anything

Prompt, model, provider, skills, knowledge scope, reasoning defaults, permissions, wake cadence. Everything that defines the agent.

✦ Import from anyone

Drop the file into OpenSair. Review the permissions, confirm. Agent ready. Dangerous skills always require your explicit nod.

✦ Just a file

Edit it in your editor. Commit it to git. Diff two versions. Version-control your agents like code.

Any model. Or none.

Bring the keys you already have. Mix providers across agents. Or run the whole thing offline with Ollama — we'll default to it for summarization when it's installed.

Agents5 active routesProviders
primary
research
bookkeeping
social
inbox
AnthropicClaude Opus 4.7
OpenAIGPT-5.1
OpenRouter200+ models
Ollamalocal only
OpenAI
GPT-5.1 · 4o · o1 · o3
Anthropic
Opus · Sonnet · Haiku
OpenRouter
200+ models · image gen
Ollama
Local · offline · free
✦ fully offline
✦ Zero markup

You pay your provider.

We never proxy your calls. We don't see your tokens. No seats, no lock-in.

✦ Reasoning control

Effort, per agent.

Low for quick calls, high for the hard thinking. Toggle per agent to manage cost.

✦ Vision aware

Auto-detected.

If a model can see, images flow through. If it can't, we don't waste tokens trying.

Your tokens, stretched.

Older context gets smart-summarized. Skill definitions lazy-load. Redundant tool calls dedupe. When Ollama is installed, summarization runs on-device for free. You pay your provider for what you actually need — nothing more.

Tokens before
127,483
Tokens after
31,240
Saved
75.5%
live · compaction events running continuously
COMPACTmerged 8 older messages · code + paths preserved-34,210 tok
LAZYheld back 12 skill schemas this turn-12,480 tok
DEDUPEcollapsed 2 identical read_file calls-640 tok
OLLAMAsummarization ran locally · no API hit$0.00
COMPACTfolded 14 older messages into 1 summary block-54,800 tok
LAZYwithheld image-gen schema · not needed this turn-2,100 tok
✦ Three modes

Full for short chats. Summarize for long ones — preserves code, paths, and decisions. Truncate for cheap runs. Per-agent override.

✦ Ollama first

When a local model is available, compaction and summarization run on-device. Zero API cost. Zero data shared.

✦ Flat mode

Small Ollama models get a curated skill set so they don't choke on tool schemas. Local power without the token bloat.

What never leaves.

The easy test for “local”: yank the wifi. If it breaks, it wasn't local. OpenSair keeps working — your keys, your files, your agent.

WhatOpenSairTypical hosted agent
Chat messages & filesStays on your MacSent to their cloud
Voice transcriptionWhisper · on-deviceUploaded to API
Speech synthesisKokoro · on-deviceUploaded to API
API keysEncrypted · never leaveStored on servers
Browser cookies & sessionsYour disk onlyRemote profile
Memory & knowledgeYour disk onlyVector DB you don’t own
TelemetryNoneStandard practice
Works offlineYes (with local models)Never

We don't love saying this — but someone should.

Every other “open” AI agent is the same piece of software with a new logo. A few receipts from this quarter, for the record.

OpenSair is not a fork, not a wrapper, and not a hosted service. Built from scratch around a single idea: the agent lives with you, not on a vendor's disk.

We're not naming names. You've read the news.

  • Jan · ’26Third-party skill marketplace seeded with 340+ malicious packages. Nine thousand installs before takedown.
  • Jan · ’26Public-facing deployment leaks 35k emails and 1.5M API tokens.
  • Feb · ’26135k instances exposed to the internet. 93% bypass auth by default.
  • Feb · ’26CVE-2026-25253 · CVSS 8.8 · WebSocket auth bypass.
  • audit512 issues reported over the quarter. Eight critical. Regulator warnings follow.

The agent is running its own socials.

Remember the Goals feature from earlier? We gave it one goal: reach 1,000 followers on @open.sair. It's been running on its own ever since — researching, drafting, art-directing, publishing, and replying.

✦ Proof, not pitch

This isn't a demo. It's how we ship.

One autonomous Goal. No team. No agency. Every post on the feed, every reply, every A/B test — the agent. The only human in the loop is the one clicking approve when it asks.

active goal · ongoingpriority 6 / 10 · day 47
reach 1,000 followers
Handles
@open.sair · instagram + threads
Cadence
wakes every 30m · adjusts itself
Skills
research · image-gen · social.post · social.reply
Running
day 47 · no pause · no human intervention
1
autonomous goal, running
47d
without a human intervening
0
humans on the marketing team
opensair · social ops live
THanalyzing engagement · 14 posts sampled · top theme: sovereigntynow
IGdrafting reply · comment by a founder · tone: warm, brief1m
THscheduling post · "why local agents matter" · tomorrow 18:002m
IGgenerated image · split-brain concept · variant 4 selected3m
IGreplied to 3 DMs · follow-ups queued for 24h4m

The honest number.

One flat price. No per-seat. No “pro” tier hiding the good features. Bring your own keys, or go offline with Ollama. Done.

Monthly
$25/mo
Cancel anytime

We don't take a cut.

One flat price for the app. Your AI usage goes directly to OpenAI, Anthropic, or OpenRouter — or nothing at all if you run locally with Ollama.

  • Zero markup on model usage
  • Your keys, encrypted on disk, never transmitted
  • Works offline with Ollama & Whisper & Kokoro
  • Every feature, every tier
  • Cancel anytime · auto-updates included

Things you might actually wonder.

Short answers, no hedging.

Is OpenSair really fully local?
Yes, in the only sense that matters: the app, the transcripts, the keys, the memory, the knowledge base, the browser profile — all live on your disk. The only time data leaves your Mac is when you explicitly use a cloud model provider, and even then you’re talking to them directly (we never proxy). Use Ollama and you can unplug the wifi.
Do I need to be technical to set this up?
No. Download the .dmg, drag to Applications, open. You’ll paste in an API key (or skip that and use Ollama), and you’re talking to an agent in a minute. No terminal, no Docker, no YAML.
Can I actually reverse what the agent does?
Reversible actions — memory writes, knowledge-base ingests, goal creations, broadcasts — have a revert button in the journal. Writes to your filesystem are logged with what changed so you can restore. Shell commands and sends are noted with full arguments, but obviously can’t be unsent (that’s why they’re in the dangerous tier).
Which models does it work with?
OpenAI (GPT-5.1, 4o, o1, o3), Anthropic (Claude Opus/Sonnet/Haiku with extended thinking), OpenRouter (hundreds of models including image-gen), and Ollama for fully local. Each agent you create can use a different provider and model.
What about the OpenClaw stuff?
We’re built from scratch — no shared code, different priorities. You can use OpenClaw. We think you shouldn’t. The receipts section upstream is not a marketing stunt; it’s there because we don’t want you to confuse us with them.
Are you a fork?
No. We are not a fork of OpenClaw, not a fork of anything else. OpenSair was designed from day one around local-first, multi-agent, and reversibility.
The agent that lives on your Mac

Take it home.

Get Started Follow on Product Hunt
macOS 13+ · Apple Silicon only · ~180 MB · from $20/mo