Architecture

Where your ticket and code actually go.

Fleeter is three independent codebases talking to each other and to your tools — not one black box you have to trust blindly. This page walks through exactly what touches your code, what never does, and why it’s built that way.

The three pieces

Desktop does the work. Api only holds the keys.

Fleeter isn’t one server you hand your code to — it’s three independent codebases with their own git history, each doing one narrow job. This is the whole map: solid boxes are ours, dashed boxes are third parties we talk to.

JiraYour tickets
BitbucketYour repository
Direct API calls, your own OAuth token — Api is never in this path
Fleeter DesktopRuns on your machine. One isolated git worktree per ticket.
Ticket text, code & diffs — for this session only
AnthropicPlans and writes the code
Sign-in, OAuth tokens, anonymous usage events
Fleeter ApiAuth, integration tokens, telemetry — never ticket or code content.
One ticket, end to end

Follow a single ticket through the system.

Not an abstract diagram — the actual sequence of calls behind one ticket going from “assigned to you” to “pull request open”.

    1

    Connect once, from your browser

    Api: runs the OAuth handshake

    You click “Connect Jira” on your Fleeter account page. Fleeter's Api starts the OAuth handshake, but Atlassian's own consent screen does the actual authorization — your Jira password never touches Fleeter, and the resulting token is stored encrypted.

    2

    Desktop asks for a working token

    Api: hands back a token, nothing else

    Before every Jira or Bitbucket call, the desktop app asks the Api for the current access token tied to your account. The Api decrypts what it stored and hands back the raw provider token — nothing about the ticket itself.

    3

    Desktop talks to Jira directly

    Direct — bypasses the Api

    The ticket's title, description, comments and transitions are fetched straight from Atlassian's API into the desktop app, using that token. The Api is out of the loop entirely for this call.

    4

    Claude reads the ticket and plans

    Sent to Anthropic — session only

    The desktop app hands the ticket to a local Node process wrapping the Claude Agent SDK, which streams the ticket content straight to Anthropic and proposes a plan before touching a single file.

    5

    Work happens in a local git worktree

    Stays on your machine

    Once you approve the plan, code changes land in an isolated worktree on your disk. The conversation, activity log and file diffs are streamed to Anthropic and snapshotted to a plain JSON file under %LOCALAPPDATA%\Fleeter — no database, no upload.

    6

    Opening the pull request

    Direct — bypasses the Api

    Desktop pushes the branch and calls Bitbucket directly with the title and description Claude wrote — again without routing through the Api.

    7

    What the Api actually logs, the whole time

    Api: anonymous usage event

    A handful of anonymous product events — “session started”, “pull request opened” — tagged with your account and an install id, so we can see the workflow funnel. No ticket text, no code, no diffs are ever included.

What actually reaches us

Five categories of data. One of them never lands on our servers.

This is the same list as our Privacy Policy, laid out so it’s easy to see which rows the Api actually stores.

Account information

Email, name, password — or your identity from a social login provider.

Encrypted

Integration OAuth tokens

The Jira / Bitbucket access & refresh tokens issued when you connect an integration.

Encrypted at rest

Session cookies

httpOnly cookies that keep your web account signed in.

httpOnly

Product usage events

“App launched”, “pull request opened” — tagged with an install id, never with ticket text.

Anonymized

Ticket text, code & diffs

What Claude actually reads and writes while working your ticket.

Local + Claude only
Design decision

Why the Api brokers OAuth instead of Desktop.

The Api’s only job in your integrations is holding the OAuth connection — never proxying your tickets or code. Here’s why that one piece is centralized rather than kept entirely on your machine.

A secret only a server can keep

Jira and Bitbucket's OAuth apps require a client secret at the token exchange. A desktop binary can be decompiled by anyone who installs it — shipping that secret inside Fleeter would hand it to every user. Keeping it only on our server is the only way to keep it secret.

One fixed callback URL

Atlassian and Bitbucket redirect back to a single, pre-registered address after you authorize the connection. That has to be a stable web address, not a listener on whichever laptop happens to be running Fleeter that day.

One place to revoke

The connection lives on your Fleeter account, not on one machine. Disconnect Jira once from your account settings and every install loses access immediately — no per-device cleanup, no orphaned tokens.

Get Fleeter on your desktop.

Install the app, sign in, and connect your ticket tracker. Your first agent session can be running in minutes.