Open source · for Mac and iPhone

The AI agent that does the work.

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.

Dashboard3 approvals
Wednesday, September 30Good morning, Maya
All quiet3 need youNext run in 1 h 12 m
Needs you 3History
Working now 3
Coming up
Today
6tasks done
179knew tokens
$0.73spent

LiveThe dashboard working through a night shift on its own. Press Review on any card to decide it yourself.

Watch

Hand it the work. Keep the final say.

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

Give it jobs. Every run gets a thread of its own.

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.

Schedules 5 jobsNew job
Threads

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

Memory, your Mac, your code. Live.

Pick one. These are the app's own screens and words, playing out with a fictional company; the buttons work.

Harbor 2.0 launchExample run

Asks first

Three things always wait for you.

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.

Publishing or sending email

A post on the company page, a reply to a customer, a video going public.

Pennant· 8 hr. agoNeeds you
Reply to Jonas Lindqvist

Outlook · reply to Jonas Lindqvist (Northwind)

Hi Jonas, Shared views are live for every Northwind workspace from today. Priya's team can turn them on under Settings › Views; nothing to install.

Deleting

Files, branches, records, emails, posts, cloud resources, whether through a connector or a command.

Pennant· 6 min. agoNeeds you
Delete: run a command

Coding · ~/code/harbor-web

git push origin --delete fix/safari-popup-workaround
Tool
Bash

Spending money

Buying, subscribing, paying: a domain, a plan, a ticket.

Pennant· nowNeeds you
Spend money: Pennant wants to run a command

shell

aws route53domains register-domain --domain-name harbor-status.com --duration-in-years 1 …
Why
Pennant asks before anything it spends money. Approving runs exactly this.
Everything else just runs:readingsearchingdraftingresearchingbuilding and testingpushing a branch as its own GitHub Apptidying its own memory and schedules

Built for failure

Built for the ways agents actually fail.

Demos stop at the happy path. Pennant was built around the unhappy ones, because every one of these happened to us first.

Sends first, apologizes later

It asks before it acts.

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.

Approve & sendRequest changesReject
Forty tool calls in your face

Quiet while it works.

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.

Used 18 tools41 s
One 429 and the run is gone

Rate limits don't end the run.

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.

Rate limitedresumes in 1:52
The surprise bill

Every run has a price.

Tokens 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.

$0.0141k tokens · 82% cached
API keys pasted into prompts

Secrets stay out of the chat.

The 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]
Two jobs, one agent, chaos

Schedules that don't collide.

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.

Skippedprevious run still going
Keeps clicking after you grab the mouse

Hands off when you take over.

One owner of the desktop at a time. Touch the mouse and the agent pauses; before its next click, it looks at the screen again.

You took overagent paused
Retries the payment. Twice.

It never guesses twice.

If 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.

Uncertainchecking before retrying
Remembers wrong, confidently

Memory with receipts.

Every fact keeps where it came from and when. Something Pennant inferred never overwrites something you said, and a fact you forget stays forgotten.

Assertedby you · Sep 12

Models and cost

Any model. Your Mac. Every cent accounted for.

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.

Primary
DeepSeek V4.1 FlashAzure AI Foundry · vision tested
$0.04 in
$0.60 out
503 twice → that model rests 3 min, the task moves on
Fallback
Qwen on your own GPU boxvLLM or SGLang on your network
$0
local
429 with nowhere to go → pause, resume on its own
Workers
Gemma 4 · this MacOllama, for well-specified sub-tasks
$0
local

Vision is tested, not guessed: Pennant shows the model a picture and checks the answer.

Usage
Today7 days30 daysThis month
Cost$0.8023 runs
Input tokens1.2M79% from cache
Output tokens55k57 model calls
By job
Coding runs1 run · 88% cached$0.70633k
Inbox drafts2 runs · 75% cached$0.03158k
Harbor 2.0 launch3 runs · 73% cached$0.02135k
Service check10 runs · 75% cached$0.02126k
Product demo4 runs · 52% cached$0.01125k
Total23 runs · 79% cached$0.801.3M
OpenAIAnthropicGoogle AI StudioAzure AI FoundryxAIMistralDeepSeekMoonshotZ.aiAlibaba Model StudioOpenRouterGroqTogetherFireworksPerplexityOllamaLM StudiovLLMApple on-device
Pennant on iPhone: Good morning, Maya; three cards need you; what's working now and what's coming up
An approval card on iPhone: LinkedIn post: Harbor 2.0 is live, with Approve & post

iPhone

Everything that needs you, in your pocket.

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.

  • Approve, edit or send back any card. Your Mac does the rest.
  • Every thread and report, and a new thread from anywhere.
  • Watch the Mac's screen live, and take over by touch.
  • Search memory; a passage opens the conversation it came from.

Compare

How Pennant compares.

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.

CapabilityPennantOpen source · Mac + iPhoneOpenClawOpen-source gatewayHermes AgentNous ResearchClaude CoworkAnthropicChatGPT & CodexOpenAIPerplexity ComputerPerplexityGooseBlock · 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
Sources for the table
  1. OpenClaw license
  2. OpenClaw exec approvals
  3. OpenClaw iPhone app (9to5Mac)
  4. OpenClaw usage tracking
  5. OpenClaw secrets
  6. Hermes Agent repository
  7. Hermes Agent security
  8. Hermes Agent secrets
  9. Nous Portal hosting
  10. Claude Cowork: get started
  11. Claude Cowork on web and mobile
  12. Claude Code permission modes
  13. Claude pricing
  14. Codex repository
  15. ChatGPT agent approvals
  16. Codex Remote
  17. ChatGPT pricing
  18. Perplexity Computer
  19. Perplexity Computer for Mac
  20. How Perplexity credits work
  21. Goose repository
  22. Goose providers
  23. Goose permissions
  24. Goose mobile access

Free. Open source. Yours to change.

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.

macOS 15 or laterXcode 27iPhone app: iOS 18 or laterAny OpenAI-compatible endpoint, or Ollama
Terminal
$ 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