Reply to Jonas Lindqvist
Outlook · reply to Jonas Lindqvist (Northwind)
Pennant is one open-source agent that lives on your Mac. It runs your jobs on a schedule, remembers what you told it, uses your apps the way you do, writes and ships code, splits big jobs across workers and connects to the services you use, with any model you choose. Anything it would publish, send, delete or pay for waits for your OK.
LiveThe dashboard working through a night shift on its own. Press Review on any card to decide it yourself.
Watch
It drafts the launch post and waits for your yes, answers from what you told it last week, works in Safari until you reach for the mouse, and fixes the bug overnight.
Jobs and threads
Tell Pennant what to do and when, in plain words or cron. Each run happens in its own thread, so two jobs never land in the same conversation. A run with nothing to say closes itself; anything that needs you goes to the top of the list. Press a job's Run.
Pennant is the only one you talk to. Each job follows a skill, a folder of instructions and scripts you can read and change. Big jobs bring in workers on a cheaper model. Code changes go to Claude Code in your folder.
See it work
Pick one. These are the app's own screens and words, playing out with a fictional company; the buttons work.
Asks first
Whatever a skill says and whatever the model decides, the harness stops these at a card. You can edit the text, send it back with a note or reject it; approving runs exactly what the card shows.
A post on the company page, a reply to a customer, a video going public.
Outlook · reply to Jonas Lindqvist (Northwind)
Files, branches, records, emails, posts, cloud resources, whether through a connector or a command.
Coding · ~/code/harbor-web
Buying, subscribing, paying: a domain, a plan, a ticket.
shell
Built for failure
Demos stop at the happy path. Pennant was built around the unhappy ones, because every one of these happened to us first.
Publishing, sending email, deleting and spending always stop at a card, whatever the skill or the model says. Approving runs exactly what the card shows. You can also edit the text, send it back with a note, or reject it.
Tool calls fold into one line you can open. A run ends in a report card with a verdict, the numbers and a table, not a wall of text.
41 s On a 429, Pennant backs off, then pauses the task and resumes it on its own, even after a restart. When a provider goes down, that model rests for three minutes and the task moves to your next one.
resumes in 1:52Tokens and dollars for every run, job and model, with cache hits counted and big runs flagged. Prompts are built so providers can cache them: 82% of input tokens on our daily runs.
41k tokens · 82% cachedThe vault hands credentials to a skill's scripts as environment variables, never to the model, and scrubs them from everything the scripts print.
$PENNANT_VAULT_GITHUB_TOKEN → [redacted]Every run gets its own thread, so a job that fires while Pennant is busy never lands in the middle of another. A job whose last run is still going skips its turn and says why.
previous run still goingOne owner of the desktop at a time. Touch the mouse and the agent pauses; before its next click, it looks at the screen again.
agent pausedIf Pennant stops in the middle of an action, the action is marked uncertain, and the same call is refused until the agent has checked what actually happened.
checking before retryingEvery fact keeps where it came from and when. Something Pennant inferred never overwrites something you said, and a fact you forget stays forgotten.
by you · Sep 12Models and cost
Point Pennant at an API, a GPU box on your desk, a local model through Ollama, or Apple's on-device model. Give it a primary model, fallbacks and a cheaper one for workers, and it routes around rate limits, outages and spent quotas. Everything it knows stays in one folder on your Mac and moves to your next one with a single export.
Vision is tested, not guessed: Pennant shows the model a picture and checks the answer.


iPhone
The iPhone app signs in to your own Mac, with an email and password or Microsoft, Google or GitHub. No cloud of ours sits in between.
Compare
Straight answers as of September 2026, taken from each product’s own docs, linked below. If something here is out of date, open an issue and we’ll fix it.
| Capability | PennantOpen source · Mac + iPhone | OpenClawOpen-source gateway | Hermes AgentNous Research | Claude CoworkAnthropic | ChatGPT & CodexOpenAI | Perplexity ComputerPerplexity | GooseBlock · AAIF |
|---|---|---|---|---|---|---|---|
| Open source | ✓YesApache-2.0 (proposed) | ✓YesMIT | ✓YesMIT | ✕No | ~Codex CLI onlyApache-2.0 | ✕No | ✓YesApache-2.0 |
| Where it runs | ✓Your MacHost, Mac app, iPhone app | ✓Your machine or server | ✓Your machine or serverHosted option too | ~PartlyDesktop app; models and web version in Anthropic’s cloud | ~OpenAI’s cloudCodex also runs locally | ~Mostly cloudMac edition is hybrid | ✓Your machine |
| Choice of model | ✓Any, local tooFalls back on outages and rate limits | ✓Any, local tooWith failover | ✓Any, local too | ✕Claude only | ~OpenAILocal models through the Codex CLI | ~Hosted modelsLocal only in the on-device edition | ✓Any, local too15+ providers |
| Asks before acting on the outside world | ✓AlwaysPublishing, email, deleting and spending wait for a card, enforced by the harness | ~Shell commands onlyOff by default | ~Shell commands onlyAn LLM approves by default | ~Manual or auto mode | ~Automated reviewScheduled Codex runs skip approval | ~Opt-in, per tool | ~Acts without asking by defaultPer-tool permissions available |
| Approve from your phone | ✓iPhone appApprovals, reports, threads and the Mac's screen | ✓iPhone appSince June 2026 | ~Through chat apps | ✓Claude apps | ✓ChatGPT appsCodex Remote | ✓Perplexity apps | ✕NoMobile access removed |
| Schedules | ✓CronEach run in its own thread; an overrunning job skips its turn | ✓Cron, heartbeat | ✓Cron | ✓Recurring tasks | ✓Tasks, automations | ✓Schedules, triggers | ✓Cron recipes |
| What each run costs | ✓Per run, job and modelCache hits counted; big runs flagged | ~Usage commandNo spend cap | ~Estimates | ~Plan metersClaude Code shows dollars | ~Plan limits | ✓Per taskWith a spend cap | ~Estimates |
| Secrets | ✓VaultScripts get environment variables; output is scrubbed | ~Plaintext by default | ~.env file, vault references | ~No vault documented | ~Codex cloud: setup time only | ~Vendor holds OAuth tokens | ~KeychainPlaintext fallback |
| Price | ✓FreeYou pay for your models | ✓FreeYou pay for your models | ✓FreeHosted from $0.56/day | ✕From $20/mo | ~Free tierPlus from $20/mo | ✕$20/mo plus credits | ✓Free |
Pennant is about 61,000 lines of Swift: a host that runs the agent, a native Mac app, an iPhone app and a command line. No sign-up, no telemetry, no server of ours in the middle. Build it, read it, fork it.
$ git clone https://github.com/pennant-dev/pennant $ cd pennant && Scripts/build-release.sh --open # builds, signs and opens Pennant.app # no API key yet? start local $ ollama pull gemma4:e2b-it-qat # let it write code in your repository $ pennant coding folder ~/code/your-app