One agent.Every surface.Your rules.

the agent that works while you don't
terminal · cron · CI · telegram · discord
any model · fully local if you want
asks before touching anything real

curl -fsSL https://github.com/lvndry/jazz/releases/latest/download/install.sh | bash

a real session, not a screenshot

It plays
unattended.

  ▞ jazz — tuesday, 07:00, unattended
» plan my morning: email, calendar, weather
gmail.search — 14 unread, 3 need you
calendar.today — 4 events, first at 09:30
weather.now — 18°C, rain after 14:00
Three emails matter: the contract redline,
  Ana's question, and the invoice. Your 09:30
  clashes with the dentist — want me to move it?
reschedule "design sync" → 11:00
approved — moved. Bring an umbrella.
idle
jazz wants to reschedule an event
calendar lvndry@example.com
event design sync — today 09:30
move to today 11:00 (CET)
attendees 3 people are notified
Attendees see the change immediately.
enter approveesc rejecta always allow

the five lanes count real concurrent work — mailbox, calendar and weather at once. and when jazz needs authority it stops and asks, wherever you are.

everywhere at once

Install once.
It's already there.

The same agent, the same tools, the same memory — behind every front door. When a job needs your permission it asks you wherever you are, rather than stopping.

▞ jazz — your terminal
» remind the team about standup
╺ sent — and scheduled daily, 08:55
Telegram · @your-jazz-bot
You: what did I miss today?
Jazz: 2 decisions, 1 PR merged — recap below.
Discord · #ops
@jazz summarize this thread
Jazz: 14 messages → 3 action items.
GitHub · pull request #384
on: pull_request
jazz reviewed: 2 comments, no blockers.
launchd · 07:00 every day
$ jazz workflow run morning-brief
ok — briefing delivered to Telegram

terminal · scripts · cron · CI · telegram · discord — the surface matrix

under the hood

The loop is twenty lines.
The guards are the product.

» promptany surfacecontextmemory · skillsmodel18 providers▐ approvalrisk tiersthe loop runs until the answer is earned —budget pressure and meltdown detection stand guard
0% of context
01

The context is earned, not dumped

Memory, skills and history are assembled per turn, then trimmed turn-aware — a message is never split in half. The window is a budget, and jazz counts it.

read the internals →
02

Any model. Including yours.

18 providers behind one loop — OpenAI, Anthropic, Google, Mistral, Groq, OpenRouter… or ollama and llama.cpp with no API key at all.

read the internals →
03

Tools run in two phases

Every call is classified by risk before it executes. Reading your calendar just runs; writing to it stops and asks — and the ask reaches whatever surface you're on.

read the internals →
04

Long runs survive on purpose

Budget pressure, meltdown detection, and compaction: warn at 70%, compact at 80%, trim at 95. Watch the meter — this is the ladder, animated.

read the internals →

the trust argument

It asks first.
Wherever you are.

A coding agent asks to edit a file you can revert. Jazz asks to send an email, move a meeting, post where other people read. There is no undo — so the approval card is the most consequential component in the product, and it travels to whatever surface you're on. Same facts, native dress: a band in the terminal, a message from a bot, a parked run in CI.

jazz wants to send an email
from lvndry@example.com
to team@example.com
subject Monday priorities
attachments none
enter sendesc rejecta always allow
Jazz bot

I'd like to send an email — approve?

from lvndry@example.com
to team@example.com
subject Monday priorities
attachments none
07:02 · your run is paused until you answer
jazzbotcommented · run parked

This scheduled run needs a human before it can continue:

action send an email
from lvndry@example.com
to team@example.com
subject Monday priorities

Approve from any connected surface — the run resumes where it stopped.

waiting for a human · nothing was sent

steal these

Workflows,
ready to copy.

Production-ready recipes with install steps and risk tiers. Hover one to watch a condensed run.

Inbox triage
╺ gmail.search — 41 unread
╺ archived 33, labeled 5
╶ 3 need you — summarized
read the recipe →
PR watchdog
╺ 4 PRs stale > 48h
╺ pinged owners on Discord
╶ escalation list posted
read the recipe →
Competitor watch
╺ 6 sources fetched
╺ 2 real changes found
╶ digest → your inbox
read the recipe →
Research digest
╺ 18 papers scanned
╺ 3 worth your time
╶ notes → Obsidian vault
read the recipe →
CI PR reviewer
╺ diff read — 12 files
╺ 2 inline comments
╶ no blockers, approved
read the recipe →
Release notes
╺ 23 commits since v0.14
╺ grouped by surface
╶ draft → CHANGELOG.md
read the recipe →
more in the cookbook →

Questions people actually ask

What is Jazz?

Jazz is a free, open-source AI agent harness. It runs a general-purpose AI agent on your own machine that can use a terminal, read and write files, search the web, send messages, and work on a schedule — asking for your approval before anything consequential.

Is Jazz free?

Yes. Jazz is MIT-licensed open source and costs nothing. You pay only your chosen LLM provider for tokens — or nothing at all if you run local models through Ollama or llama.cpp.

Does Jazz run locally or offline?

Yes. Jazz runs entirely on your machine and supports fully local models via Ollama and llama.cpp, so it works airgapped: no API keys, no telemetry leaving your disk, and an offline mode that disables every outbound request.

Which LLM providers does Jazz support?

Eighteen providers behind one interface, including Anthropic, OpenAI, Google, Mistral, Groq, OpenRouter, and fully local options like Ollama and llama.cpp. Switch models without changing anything else about your agent.

How is Jazz different from a chatbot CLI?

A chatbot answers one prompt and stops. Jazz is an agent runtime: the same agent works in your terminal, in Telegram or Discord, in CI pipelines, and on cron schedules — unattended, with per-run approval policies controlling what it may do on its own.

Is it safe to let an agent run on my machine?

Jazz treats safety as load-bearing: every tool declares an honest risk tier, mutating actions are gated behind explicit approval, external input is validated at the boundary, and scheduled runs get a per-workflow auto-approve policy you set.

read the docs — calm on purpose

Your move.

curl -fsSL https://github.com/lvndry/jazz/releases/latest/download/install.sh | bash

or npm install -g jazz-ai · free to run:OpenRouter's free router needs no card, and ollama runs on your own hardware

MIT licensed · built in the open · /llms.txt