AI support that sees what went wrong.

Jun answers from your docs and brings browser errors into support conversations. Your team gets the context when a person needs to step in. All from a small pill that stays out of the way.

Jun answers from your docs and brings browser errors into support conversations. Your team gets the context when a person needs to step in. All from a small pill that stays out of the way.

Free, open-source software. Runs in your Cloudflare account.
Hosting and AI usage are billed separately.

Acme

Assistant

Why are CSV exports failing today?
  • Asked for
    text: csv export, since: yesterday
    Found6 chats
  • Asked for
    conversationId: cv_nora
    FoundPOST /api/reports/export 500 · TypeError (reading 'rows')
  • Asked for
    days: 7
    FoundReports & exports: 6 chats, 3 handed off
  • Asked for
    text: export
    Found0 issues

Every failing export hits the same bug: POST /api/reports/export returns 500, then the page throws TypeError (reading 'rows') on /reports/q3. It started yesterday at 4:12pm, and only Q3 reports fail.

3 customers ran into it: Nora Bell, Visitor #2207 and Theo Park. The AI flagged it in Nora's chat and handed it to the team; she's waiting on you. Nothing is filed yet, so I can draft an issue from her chat.

Draft an issue from this chat?

Draft a GitHub issue from Nora Bell's chat: “CSV export of Q3 reports fails with a 500”, with the masked debug context of the 3 chats.

Example desk · Sample data

Try it live

Trigger an error. See how Jun helps.

Click Export CSV, then ask Jun why it failed. When you send your message, Jun can include the recent error and failed request.

Acme Analytics

Q3 revenue report

Jul 1 – Sep 30 · 4 accounts

Revenue$32,550
Seats85
vs Q2+18%
AccountPlanSeatsRevenue
NorthwindTeam12$4,320
GlobexBusiness40$15,600
InitechTeam8$2,880
UmbrellaBusiness25$9,750
All systems normal. Press Export CSV to start.

Press Export CSV or Refresh chart. Both fail for real, in your browser.

Ask why the export failed. Jun can use the captured error and failed request alongside your message.

Ask Jun to export the report another way. Review the page action it proposes.

The chat loads at the bottom of the page. If it doesn't show, an ad blocker may be hiding it.

Bring this context to your own app.

Deploy Jun

How it works

  1. Add the island

    One script tag. A small pill sits at the bottom of every page and stays out of the way until someone needs it.

    Install

  2. The AI answers and sees errors

    The pill opens into an answer from your docs, already knowing the failed request or error the customer just hit, then folds back.

    Try it live

  3. Your team gets the real bugs

    What the AI can't fix goes to your inbox with the error, the page and what it already tried.

    See the handoff

Support that sees the bug

See what your customer saw. Decide what happens next.

Your widget records what the browser saw. The AI answers from your docs, takes the actions you allow, and hands the rest to your team with a brief.

Recent browser errors, failed requests, and page URLs can accompany a visitor’s message, with masking applied.

See it on the demo app

Page control

From answers to actions on your site.

Jun can read masked page content during a chat, point to the right control, and take supported actions. Page control is enabled by default and asks for confirmation by default. You can configure approvals or turn it off.

  1. 01

    Reads the page, never secrets

    Password, payment and one-time-code fields, and anything marked data-jun-private, stay hidden from the AI.

  2. 02

    Asks first by default

    The default page-control policy asks the customer to confirm. Approval settings can be changed.

  3. 03

    Clicks, then checks

    A pointer shows what it presses. Each click is a step the customer can open.

Yours to switch off: one switch in the desk, or data-page-control="off" on a site’s snippet.

Analytics

See what AI resolves. Know when your team steps in.

Reports count every conversation: how many the AI resolved, why it handed off, how fast people replied, and what customers asked about.

AI resolved
68%
Closed by the AI, no person needed
Handed off
21%
Passed to your team with a brief
First reply
1m 12s
Median, from a person after a handoff
CSAT
4.6
Average rating out of 5

Why it handed off

Share of handoffs

  • Asked for a person38%
  • Billing changes29%
  • Reported a bug19%

Top topics

Labelled by the AI

  • Billing31%
  • Exports22%
  • Invites18%
  • SSO12%
Read how analytics works

Self-hosted

Your desk. Your Cloudflare.

Jun runs in your Cloudflare account, with no per-seat fee from Jun. Desk data is stored there; your chosen AI provider and connected services process the information needed for their jobs.

  1. 01

    Deploy to your account

    The deployment flow copies Jun to your GitHub account and creates the Cloudflare app, database, and storage. Then create your owner account, connect your knowledge, and install the widget.

  2. 02

    Passkeys and invite links

    Your team signs in with passkeys (Face ID, Touch ID or a security key) and joins from an invite link. No passwords.

  3. 03

    Your keys stay yours

    API keys and tracker tokens stay in your account and are never shown again once saved, not even to admins.

What you pay

  • Cloudflare Workers PaidOne plan for your whole accountFrom $5/account/month + usage
  • AIWorkers AI usage in your account, or your own OpenAI keyat cost
  • JunNo per-seat, per-answer or per-outcome fee$0

$5 is the Cloudflare plan minimum, not the total running cost. Jun recommends Workers Paid for reliable AI replies. AI usage, storage, and connected services can add costs.

For comparison, Fin charges $0.99 per outcome (fin.ai/pricing, Oct 2026).

Have Cloudflare and GitHub accounts, product docs, access to install a website snippet, and someone able to configure and maintain Jun. Jun is currently a v1 release candidate.

For developers

Your agent is files, the model is your choice, and the code is open.

MCP server and CLI

Build your support agent where you already work.

Your agent is a folder of files. Change it in the desk, in git with the jun CLI, or ask Claude Code or Cursor through Jun’s MCP server.

acme-support — claude

✻ Welcome to Claude Code

cwd: ~/acme-support

> add a task for refunds that checks the order first

⏺jun - get_agent (MCP)

⎿instructions.md, 2 tasks, 3 actions (lookup_order, refund_order, update_email), 1 widget, 3 tests

⏺jun - create_task (MCP)(name: "refunds", description: "The customer asks for a refund or their money back.")

⎿Saved version 15. tasks/refunds.md uses @lookup_order and @refund_order.

⏺jun - add_test_case (MCP)(file: "refunds", name: "checks the order before refunding")

⎿Saved version 16.

⏺jun - run_tests (MCP)

⎿4 passed, 0 failed

⏺Added tasks/refunds.md. The agent looks the order up with @lookup_order, says exactly what will be refunded and waits for a clear yes before @refund_order. All 4 tests pass.

>
acme-support — claude

✻ Welcome to Claude Code

cwd: ~/acme-support

> add a task for refunds that checks the order first

⏺jun - get_agent (MCP)

⎿instructions.md, 2 tasks, 3 actions (lookup_order, refund_order, update_email), 1 widget, 3 tests

⏺jun - create_task (MCP)(name: "refunds", description: "The customer asks for a refund or their money back.")

⎿Saved version 15. tasks/refunds.md uses @lookup_order and @refund_order.

⏺jun - add_test_case (MCP)(file: "refunds", name: "checks the order before refunding")

⎿Saved version 16.

⏺jun - run_tests (MCP)

⎿4 passed, 0 failed

⏺Added tasks/refunds.md. The agent looks the order up with @lookup_order, says exactly what will be refunded and waits for a clear yes before @refund_order. All 4 tests pass.

>

Instructions, tasks, actions, cards and tests, as files you review and roll back.

Read the MCP docs

Models

Choose your model. Keep your keys.

Start on Workers AI in your own account, or bring an OpenAI key. Every AI call names its job, so you can pick a model per job.

  1. 01

    Workers AI by default

    Fresh installs answer with Workers AI in your own Cloudflare account. No AI key needed to start.

  2. 02

    Bring an OpenAI key

    Add OPENAI_API_KEY as a Worker secret, then switch the provider in Settings. Your instructions, tasks, actions and tests stay as they are.

  3. 03

    A model for each job

    Replies, follow-up questions, topics and the agent editor can each use their own model, set in Settings or desk.yaml.

AI modelsTwo providers

Job

Model for agent editor

Workspace model
Mistral Small 3.1 24B
Llama 3.3 70B
Llama 4 Scout 17B
gpt-oss-120b
gpt-oss-20b
GLM 4.7 Flash

How Jun compares

See if Jun fits your team.

For software teams that want browser context in support and can run their own Cloudflare deployment. Jun supports web chat and email replies.

FeatureJunFin (Intercom)ChatwootChatbase
Open sourceAGPL desk, MIT widgetMIT core; AI in the paid edition
Where it runsYour own Cloudflare accountTheir cloudYour server (4 GB RAM, Postgres, Redis) or their cloudTheir cloud
AI pricingYour Workers AI usage or your OpenAI key. No per-answer fee$0.99 per outcomeCredits in the paid edition$40–$500 a month in message credits
HostingWorkers Paid, from $5 a monthIncludedA VPS and its upkeepIncluded
How the chat sits on your siteAn island: a pill that grows only when needed, then folds backA launcher in the corner that opens a windowA bubble in the corner that opens a windowA bubble in the corner that opens a window
Sees the customer's browser errors and failed requests
AI clicks on your site, with the customer's OK
Agent in git, tested in CI, editable over MCPjun eval, MCP server
Other channelsWeb chat and email replies. No Slack Connect, WhatsApp or voice yetEmail, messaging apps and voiceMany channelsSeveral integrations

Prices from each vendor's pricing page, October 2026.

Ready to run Jun in your own account?

Deploy Jun

Open source

Built in the open

A daily workflow opens each update as a pull request. The widget loader is plain JS, under 6 KB.

Licence

AGPL-3.0 for the desk. MIT for the widget, the React hook and the agent file format.

AGPL-3.0
the server and the dashboard
MIT
the widget, SDKs and agent format

Read the code

CLI and MCP

Your agent is files in git: jun pull, jun push, and jun eval in CI. Or edit it from Claude Code, Cursor or Codex through Jun’s MCP server, and each change is saved as a new version.

jun eval
runs your agent’s tests in CI
MCP
for Claude Code, Cursor and Codex

Read the docs

View on GitHub

FAQ

Before you deploy.

What it costs, what you need, and how Jun works. For anything else, ask Jun on this page or read the docs.

What's the island?

Jun's chat, without the window. It's one pill at the bottom centre of your app. Ask it something and it opens into the answer, shows a card when it needs a yes or a detail, and folds back to the pill when you're done. While the AI works through steps on your site, it stays one line. It takes its colours from the page under it and never changes your page. If you'd rather have the classic corner button and window, that's one setting.

What does it cost?

Jun’s software is free. Cloudflare Workers Paid starts at $5 per account per month plus usage and is recommended for reliable AI replies. AI usage is billed separately; storage and connected services can add costs.

Do I need a server or a database?

You do not need to manage a separate server or database machine. The deployment flow creates the Cloudflare resources in your account. You still need to configure Jun, connect knowledge, install the widget, and maintain the deployment.

What does the widget capture?

Errors, failed requests (URL, status and timing), clicks that did nothing, and the pages visited. Never request bodies, typed values, storage or page text. Data is masked in the browser and again on the server.

Can the AI do things, not just answer?

Yes. It can call actions you define as HTTP requests, use website actions your page registers over WebMCP, and click on the page with the customer's OK. Anything that changes something asks first.

How do I hand off to people?

A person is always one click away for the customer. When the AI hands over, it writes your team a brief. The inbox has notes, mentions, assignment and push notifications.

Which models does it use?

Workers AI by default, or OpenAI with your own key. Each job (replies, topics, briefs, the agent editor) can use its own model.

How do updates work?

A daily GitHub workflow in your copy opens each new release as a pull request. You read it and merge when you're ready.

Is there a hosted version?

A hosted cloud is planned. Self-hosting stays free and complete.

Still wondering?

See what your favorite LLM has to say about us,
then make an informed decision.

Your desk, your Cloudflare

Put your support desk
on your own Cloudflare.

Deploy Jun in your Cloudflare account, connect your docs, and test the widget on your app.

Free Jun software. Separate hosting and AI usage. Self-hosted setup required.