1 Why VibeTest
Every team knows it should test more. But automated tests are expensive to write and maintain, and manual testing doesn't scale. VibeTest takes a different path: describe the test in plain English on the Jira issue, and an AI agent runs it for real — on your own machine.
Tests anyone can write
Author tests in plain English or Given / When / Then — right on the issue. Product managers, QA, and analysts write tests without waiting on engineers or learning a framework.
Tests live where the work lives
Tests attach to the Jira issue they verify — not a separate tool. Requirement, test, and result sit together, so traceability is automatic and nothing drifts out of sync.
An AI agent does the running
The agent reads your scenario and drives the real app, adapting to the screen in front of it instead of replaying brittle, hand-recorded selectors that break on every redesign.
It runs on your machine
Execution happens on your Mac, with your AI agent. Your source code, logins, internal sites, and test runs never leave your laptop — Jira only ever receives the result.
How it compares
VibeTest sits between the worlds of manual QA and heavyweight test automation — and sidesteps the usual trade-offs of each.
| Approach | Who can write tests | Where tests live | Where it runs & your data |
|---|---|---|---|
| Manual QA | Anyone — but slow and repetitive | Docs or a test-management tool | A person re-clicks every release; nothing is automated |
| Coded automation Selenium · Cypress · Playwright |
Engineers only | A separate code repository | Your CI servers; brittle selectors need constant upkeep |
| Cloud AI test runners | Mixed | The vendor's dashboard | The vendor's cloud — your app and data leave your network |
| VibeTest this app | Anyone, in plain English | On the Jira issue itself | Your own Mac, your own agent — nothing leaves your machine |
Because an AI agent interprets each step against the live app, a button moving or a label changing usually doesn't break the test — the agent adapts. When something genuinely needs updating, you edit a plain-English sentence, not a page-object or a CSS selector.
VibeTest runs through the AI coding agent you choose — Claude Code by default, or any CLI agent you configure (see Use the desktop app). You control the model, the cost, and the environment; there are no per-run cloud-execution fees.
Who it's for
- QA & test engineers who want coverage without maintaining a fragile automation suite.
- Product managers & analysts who can finally write executable acceptance tests in the language they already use.
- Developers who want a fast, AI-run check attached to the issue — using the agent and machine they already trust.
- Security-conscious teams who can't send their code or data to a third-party testing cloud (see Security & privacy).
2 How VibeTest works
VibeTest has two halves that work together: a Jira app where you write and review tests, and a small desktop app on your Mac that actually runs them with an AI agent.
VibeTest (the Jira app)
A panel on every Jira issue. Write tests in Behaviour-Driven (Given / When / Then) format or plain English, press Run test, and watch results appear — pass or fail, step by step, with screenshots.
AppDash AI Link (the desktop app)
A free macOS app that you pair once with your Jira site. It picks up the tests you launch, runs them through an AI coding agent (Claude Code by default), and reports the verdict back to Jira.
The end-to-end flow
When you press Run test in Jira, here is what happens behind the scenes:
The test runs on your machine, using your AI agent and your local environment — so it can reach internal sites, use your logins, and keep credentials on your Mac instead of in the cloud. Jira only ever sees the result.
What you need
- A Jira Cloud site with the VibeTest by AppDash app installed (ask your Jira admin if you don't see the panel on issues).
- A Mac to install the desktop app on (macOS).
- An AI coding agent installed on that Mac. VibeTest uses Claude Code by default; you can point it at others (see Use the desktop app).
The rest of this guide walks through it in order: install the desktop app, pair it with Jira, then create, run, and review your first test.
3 Install the desktop app
Everything runs through AppDash AI Link, the free desktop companion. Install it first — you'll pair it with Jira in the next step.
-
Download the app.
Open appdash.ai/download and download the latest macOS build (a
.dmgfile). You'll also find this link inside Jira — in the VibeTest panel's empty state (Download →) and on the pairing page (Download now →). -
Install it.
Open the
.dmgand drag AppDash AI Link into your Applications folder, then launch it. On first launch macOS may ask you to confirm you want to open an app downloaded from the internet — choose Open. - Find it in your menu bar. AppDash AI Link lives in your Mac's menu bar and opens a single window with four tabs: Connections, Activity, Console, and Settings. It opens on the Connections tab.
VibeTest runs tests through an AI coding agent on your Mac. If you haven't already, install Claude Code (the default). The desktop app auto-detects it; you can check or change this under Settings → Agents (covered in section 9).
4 Pair your Mac with Jira
Pairing links one Jira site to your desktop app, so runs you launch in Jira reach your Mac. You do it once per site, across two windows — the VibeTest settings page in Jira and the desktop app — confirming a short code on both so nobody can pair without your approval. Jira walks you through four stages: Generate → Send to desktop → Confirm → Connected.
-
Open the Connections page in Jira.
In Jira, go to Project settings → Apps → VibeTest by AppDash. The Connections page lists any desktops already paired to this project, and is where you pair a new one.
Project settings → VibeTest by AppDash → Connections. Click Pair AppDash AI Link to begin. Don't have the app yet? There's a Download now → link right here. -
Generate the pairing link in Jira.
Click Pair AppDash AI Link. Jira advances to Send to desktop and shows a short user code (note it — you'll check it in step 4) and a Copy pair link button. Click Copy pair link.
Send to desktop. Jira generates a one-time link and a user code (here V44-FE8VQ). Copy the link — it's only valid for a few minutes. -
Paste the link into the desktop app.
Switch to AppDash AI Link. On the Connections tab, click + Add Connection, paste the link into the box, and click Pair this device.
Add a Connection in the desktop app — paste the link Jira gave you, then click Pair this device. -
Check that the codes match.
The desktop now shows "Pairing in progress" with the same user code plus an app fingerprint. Confirm the user code matches the one Jira showed in step 2 — this is the security check that proves you're pairing the right machine.
Pairing in progress. The desktop shows the matching code ( V44FE8VQ— same as Jira'sV44-FE8VQ) and asks you to confirm back in Jira. - Confirm in Jira — you're connected. Back on the Jira page, with the codes matching, click Confirm pairing. The tracker advances to Connected, and the desktop's Connections tab shows the new site under Sites with a green Polling dot. Your Mac is now listening for test runs from that site.
Pairing links expire after a few minutes. If you see "The pairing code expired" or "signature invalid," generate a fresh link in Jira and paste the new one. If a connection later shows Auth failed, just re-pair from Jira — see Troubleshooting.
5 Create a test in Jira
Tests live on Jira issues. Every issue gets a VibeTest panel where you write, run, and review tests.
Open the VibeTest panel on an issue
Once your Jira admin has installed the app, each issue gains a Tests section — that's the VibeTest panel. Open any Jira issue and scroll down, past the description and fields, to find it.
On an issue with no tests yet, the panel shows a welcome screen inviting you to create your first one.
Three ways to write a test
| Type | Best for | How you write it |
|---|---|---|
| BDD Scenario Recommended | Precise, reviewable tests with clear steps. | Structured Given / When / Then steps. Each step is checked individually, so results show exactly which step failed. |
| Free-Form Task | Quick checks where you'd rather just describe the goal. | A plain-English description of what to test and what success looks like. The AI decides how to carry it out. |
| Generate with AI | Drafting tests fast from a description of the issue. | Describe what to cover; AppDash AI Link (or, with no Mac paired, Rovo AI inside Jira) drafts BDD tests from this issue for you to review and edit. |
Writing a BDD scenario
Click BDD Scenario. The editor opens with your test as a list of steps — each a coloured keyword plus a plain-English sentence. The title you gave the test becomes the scenario name.
Anatomy of a step
Reading a step row from left to right:
- A status dot shows that step's result after a run, and a grip handle beside it lets you drag the step to reorder it (or focus it and use the arrow keys).
- The keyword — a coloured dropdown (Given / When / Then / And / But). Click it to change the keyword.
- The sentence — a plain-English text box describing the step; it grows as you type.
- Row actions on the right — add a data table, duplicate the step, or delete it.
Given, When, Then — what each step means
BDD describes behaviour as a short story: set the scene, take an action, then check the result. Each keyword has a job (and a colour), and every step is checked individually — so a run shows exactly which one failed.
| Keyword | What it's for | Example |
|---|---|---|
| Given | The starting context — set the scene before anything happens. | Given Alex is on the login page |
| When | The action under test — the one thing you're exercising. | When Alex signs in with valid credentials |
| Then | The expected outcome — what must be true for the test to pass. | Then Alex sees the dashboard |
| And / But | Continue the previous step. And adds another of the same kind; But adds a contrast or negation. | And the banner shows their name · But no error appears |
One idea per step. A focused Given → When → Then reads clearly, and when it fails the result points at a single sentence rather than a paragraph.
Adding steps
The blue + Add … step button adds the next step and suggests the natural keyword — after a Given it offers When, then Then, then And. To add a specific keyword instead, click the ▾ caret on the right of the button and pick one.
Press Enter at the end of a sentence to add the next step without reaching for the mouse; Shift+Enter inserts a line break within a step. Use the duplicate icon to copy a similar step, and the trash icon to remove one.
Reordering steps
Steps run top to bottom, so order matters. To move one, hover the step to reveal its drag handle (the grip on the left), then drag it up or down — a teal line shows where it will land. Prefer the keyboard? Tab to the handle and press ↑ / ↓.
Adding a data table to a step
A data table attaches a small grid of structured data to a step — handy for example inputs such as credentials, products, or parameters. Click the table icon in a step's row actions to add one.
{{secrets.STD_PW}}.- Edit any header or cell by clicking it.
- + Add row / + Add column grow the table; hover a row or column and click its ✕ to remove it.
- Remove table detaches the table from the step.
Save it
Click Save in the top bar. A "Saved" confirmation flashes and the test joins the list on the issue. Your edits are held locally until you save, so you won't clash with someone editing the same test at the same time.
Open Advanced (below the steps) to Import Gherkin by pasting a scenario to replace the steps, or preview the exact prompt sent to the agent. To keep a password out of the saved test, reference a stored secret with {{secrets.NAME}} in any step or table cell — see Use secrets in your tests.
Prefer free-form? Click Free-Form Task instead and describe the test in two boxes: the Task (what to do) and the optional Success criteria (how to tell it passed).
Generate tests with AI
Click Generate with AI (or choose it from the New Test menu) to let the AI draft a BDD test for you. Describe what to cover in the Requirements box and click Generate. The AI drafts a BDD scenario you can review, edit, and save. With a paired Mac your local agent produces the draft; with no Mac paired a confirm dialog offers Generate with Rovo AI to draft it inside Jira instead. Note the current MVP limit: one test per generation.
6 Manage your tests
Once an issue has tests, the panel shows them as a list. The top of the panel gives you an at-a-glance summary and a button to add more.
Reading the list
- Status tiles count tests by their latest run. Click a tile (e.g. failed) to filter the list to just those tests; a banner appears with a Clear filter link.
- Each row shows a status icon, the title, the type (
BDDorFree Form), a status pill (passed failed running queued), and the time of the last run. A failed test also shows a one-line summary of what went wrong. - A FLAKY chip appears when a test has been giving mixed results across its recent runs.
- Tests stay in the order you arrange them. Drag a row by its grip to reorder it (or focus a row and press ↑/↓); the order is saved. Reordering is available when no status filter is active.
Adding more tests
Click New Test (top-right) and pick BDD test, Free-Form test, or Generate with AI — the same flows from section 5.
Opening and editing a test
Click any row to expand it. The row and its editor fuse into a single teal-outlined focus card so the test you're working on stands out from the rest of the list.
- Edit the title or any step, then click Save. A "Saved" flash confirms it. Your edits are kept locally until you save, so you won't lose work if someone else changes the test at the same time.
- Duplicate (in the ⋯ menu) makes an identical copy to tweak — handy for testing variations.
- Delete (in the ⋯ menu) permanently removes a test and its run history after a confirmation — this can't be undone.
7 Run a test
Running a test sends it to your paired Mac, where the AI agent carries it out for real. You start it right from the panel.
- Open the test by clicking its row to expand the focus card.
- Click ▶ Run test in the editor's top bar. (Run test appears on any saved test — BDD or Free-Form; it's disabled only while a run is already in progress.)
- Confirm in the dialog. A short "Run this test with your AI agent?" panel names the device the run will go to; click Run test to dispatch (or Cancel to back out).
- Watch it go. A run card appears and moves through these states:
- Queued — sent to your Mac, waiting for it to pick up.
- Running — the agent is executing. For BDD tests the step checklist lights up step by step in real time, with a spinner on the current step.
- Passed / Failed — the final verdict (covered next).
A test can only run if your Mac is paired (section 4) and the desktop app is open and polling. If you click Run test with no paired Mac, VibeTest stops you with a "No AI Link connection to run this test" dialog asking you to pair first — nothing is sent until a Mac is connected.
If a run runs unusually long, a Stop Run button appears on the run card (a few seconds after it starts running). Click it to cancel; the run is marked Cancelled. Each run also has a built-in timeout that auto-stops a run that runs too long.
8 Review the results
When a run finishes, its card fills in with everything you need to understand what happened — the per-step outcome, evidence, screenshots, and an audit trail.
A passing run
A green Passed run shows every step with a checkmark and how long each took. The editor's run pill reads, for example, "Passed · 3/3 steps · 2m 58s." The first time a test ever passes, you'll get a little "Test passed for the first time!" celebration.
A failing run
A red Failed run pinpoints the exact step that failed and shows the evidence the agent gathered:
- Step checklist — steps before the failure are ticked; the failing step is marked with a red ✗; later steps are skipped (they were never reached).
- Expected vs Actual — what the test was looking for versus what actually happened.
- What to do — a suggested fix written by the agent.
- Screenshots — when the agent captured the screen, a screenshot of the moment of failure appears; click it to enlarge and step through any others.
- Audit footer — the run ID, which Agent/Model ran it, the agent's CLI version, and a failure category (e.g.
assertion_failed,timeout).
Errored means the run couldn't complete (a crash, timeout, or setup problem) rather than a test that genuinely failed — the card explains what to fix. Cancelled means someone pressed Stop Run.
Run history
Recent runs are kept (the panel shows the latest 10; your Mac keeps the full history under Activity). The most recent is shown expanded; click Show N more runs to review older ones.
Recording a result by hand
You can Record a result manually (Pass or Fail, with optional screenshots) from a test's run history without running on a Mac — useful when you have no paired Mac or are reviewing evidence gathered elsewhere. Manual runs are marked Manual to distinguish them from agent-executed runs.
9 Use the desktop app
Most of the time AppDash AI Link just runs quietly in your menu bar. When you want to check on it, its four tabs cover connections, run history, low-level logs, and settings.
Connections — your paired sites
The Connections tab (shown in section 3) lists every paired Jira site under Sites, each as a card with a live status dot. Expand a card for its actions:
- Test — run a quick connectivity check against that site.
- Jobs — jump to the Activity tab filtered to this site.
- Network log — jump to the Console tab filtered to this site.
- Pause / Resume — temporarily stop (or restart) listening for that site.
- Remove — unpair the site and delete its locally stored tokens (this can't be undone — you'd re-pair to reconnect).
Activity — your run history
The Activity tab is a searchable table of every test run this Mac has executed: when it started, its status, type, who triggered it, the issue, the verdict, and how long it took (a Source column also appears once you have more than one connection). Click a row for the full detail, including the step list and the agent's transcript. While a run is still in progress, open it and click Stop to cancel it — the run is stopped and recorded as cancelled in Jira. Use Clear Log to empty the table.
Console — the technical log
The Console tab is for diagnosing problems. It has three sub-views in a left list: Network log (the app's HTTP calls to Jira, agent subprocess launches, and pairing messages — colour-coded by success or error; routine background "heartbeat" polls are hidden by default, use the Show menu to reveal them; click a row to inspect the full request and response, or a run's launch to read its conversation), Audit log (the server-side security ledger for your Atlassian connections — pairings, token rotations, scope checks), and Events (a local record of actions on this Mac — pausing/resuming connections, settings changes, sleep/wake).
Settings — agents and preferences
The Settings tab opens on Agents, where you choose and configure the agent that runs your tests.
- Default agent — the agent used for any run that doesn't pin its own (Claude Code out of the box). Click Set as default agent on a healthy agent to switch.
- Profiles — each agent ships with a built-in Default profile and can have any number of named profiles. A test in Jira can pin a named profile by name; the Default runs otherwise.
- Add custom agent — point AppDash AI Link at any coding-agent CLI (name, command, output format, launch template).
- Open a profile (the › arrow) to configure it: its binary (auto-detected, Re-detect, or Browse), an optional working directory (blank = a fresh sandbox each run; a real path lets the agent touch project files), the launch command template, per-profile environment variables (which can be marked secret), advanced timeouts, a live command preview, and a Test connection button.
Other items in the Settings sidebar: Relay clients (pair an iPhone for read-only status checks — off by default), Project secrets (store credentials for your tests — see section 10), and About (version, update check, and the Forget me data-erasure wizard at the bottom).
10 Use secrets in your tests
Real tests often need a password, an API token, or an internal URL — and you don't want those typed into the test, which is stored in Jira. Secrets solve this: store the value once on your Mac, give it a name, and reference it in a step as {{secrets.NAME}}. Your Mac swaps in the real value at run time, so Jira only ever sees the name.
How a secret flows
A secret's value never leaves your Mac — only its name travels to Jira, so the editor can offer it as a suggestion:
STD_PW = the real password in the desktop app. It goes into the macOS Keychain.{{secrets.STD_PW}} in a step. That placeholder is what Jira stores.The secret value lives only in your Mac's keychain, and is used only in memory while a test runs. It is never written into the test, never sent to Jira or AppDash, and — as you'll see below — actively stripped out of the results that come back. Jira stores only the {{secrets.NAME}} placeholder and the secret's name.
Step 1 · Store the secret on your Mac
Secrets live in the desktop app, grouped by Jira project. Open AppDash AI Link, go to the Settings tab, and choose Project secrets from the sidebar (under AI).
- Open the Add-secret form. Click Add secret on a project's group, or Add secrets for another project… at the bottom to start a brand-new project.
-
Name it and paste the value.
Give the secret a name — letters, digits, hyphens, and underscores, e.g.
STD_PW— and paste its value into the masked field. Click Add. The value is written straight to your keychain.
Adding a secret. The value field is masked, and once saved it's write-only — stored in your keychain and never shown again, even to you. -
Match the project key.
A secret is scoped to one Jira project key — the prefix of your issue keys (the
ENGinENG-123). A test on anENGissue can only use secrets stored underENG, so when you add secrets for a new project, type that exact key in the Project key field.
For safety a stored value can never be read back — not by the app, not by you. To change it, add the secret again with the same name and the new value replaces the old. To remove it, click the trash icon and confirm; the value is erased from your keychain and can't be recovered.
Step 2 · Reference it in a Jira test
In the BDD editor, type {{ in any step body and an autocomplete list of your project's secret names appears. Pick one to insert a complete {{secrets.NAME}}. Secrets resolve in both test types — BDD steps and Free-Form Task fields (the Task and Success-criteria boxes).
{{ opens the names stored for this issue's project across your paired Macs. Type to filter; ↑↓ move, ↵ inserts, Esc dismisses.A step that references a secret is tagged with a small secret badge (a shield), so it's easy to see which steps depend on a stored value. The suggested names are the union from every Mac paired to this project — so you can reference a teammate's secret too; it simply resolves on whichever Mac runs the test.
{{secrets.NAME}} is tagged. Reference a name the project doesn't recognise and an advisory note appears — it won't block saving, but the run only succeeds if a paired Mac actually defines that secret.What happens when the test runs
The moment you press Run test, three things happen on your Mac — never in the cloud:
- Resolve. Just before launching the agent, your Mac looks up each
{{secrets.NAME}}in the keychain (for the issue's project) and swaps in the real value. The agent runs against the real credentials. - Fail closed. If a referenced secret isn't stored on the Mac running the test, the run doesn't proceed with a blank — it comes back Errored with a secret-resolution message naming what's missing. Add the secret and run again.
- Redact. The agent's output can echo a value back (say, printing a URL it fetched). Before any result leaves your Mac, every resolved value is replaced with its
{{secrets.NAME}}placeholder — across step messages, the verdict, and failure detail alike — so it can't surface in a Jira comment, the panel, or the run history.
Because both the resolve and the redact steps run on your Mac, a secret value exists in exactly one place — your keychain — plus briefly in memory during a run. Jira and AppDash never receive it. (One minor limit: very short values, under four characters, aren't masked in echoed output — no realistic password, token, or URL is that short.)
Manage your secrets
| Task | How |
|---|---|
| Update a value | Add the secret again with the same name — the new value replaces the old. (You can't view the old one.) |
| Delete a secret | Click the trash icon beside it and confirm. It's removed from your keychain permanently; tests that reference it will error until you re-add it. |
| See what's stored | The Project secrets panel lists every project and name you hold. Values are never shown — only that each is Stored. |
| Share across a team | Each teammate stores the same-named secret on their own Mac under the same project key. The test references the name; whoever runs it resolves it locally. |
Anywhere you'd otherwise type a password or token — a login step, a data-table cell, an API call — use {{secrets.NAME}} instead. The test stays shareable and reviewable in Jira, and the sensitive part lives only on the machine that runs it.
11 Security & privacy
VibeTest is built so that your most sensitive assets — source code, credentials, and customer data — never leave your control. This section summarises the architecture and controls a corporate security review typically asks about.
Where your data lives
There are only two places VibeTest keeps anything, and you own both of them:
In the configuration described in this guide, your test data flows only between your Jira site and your paired Mac. The vendor (AppDash) operates no backend that receives your code, credentials, or test data — so there is no third-party copy of your information to breach, subpoena, or mishandle.
Security controls at a glance
A reviewer-friendly summary of how VibeTest handles the questions that come up most often:
| Control area | How VibeTest handles it |
|---|---|
| Data residency | Test definitions and results are stored in Atlassian Cloud storage inside your own Jira Cloud tenant. Execution data (transcripts, screenshots) is produced and kept on your Mac. |
| Data in transit | HTTPS/TLS everywhere. The Jira app's endpoints are TLS-only; the desktop app reaches them over HTTPS. |
| Data at rest | Atlassian encrypts the stored app data at rest. On the desktop, access tokens and secrets are held in the macOS Keychain (OS-encrypted), not in plain files. |
| Third-party backend | None in this configuration. The Jira app declares no external-fetch permission, so it cannot send your data to any outside server. |
| Authentication | Each connection has its own scoped tokens. Pairing is a mutual challenge–response with a time-limited code and an app fingerprint that you confirm on both Jira and the desktop, so a connection is created only with your explicit approval on each side. |
| Least privilege | The app requests a small, standard set of Jira scopes (listed below) and nothing more. The authoritative scope list is shown to your admin at install/consent. |
| Network exposure | For the test-running workflow, the desktop app is outbound-only — it polls your Jira site over HTTPS. It needs no inbound ports, port-forwarding, or firewall changes. |
| Source & credential isolation | Your repository, logins, internal URLs, and secrets are used by the local agent and are never sent to Jira or AppDash. Jira receives only the verdict, step outcomes, and the evidence you see in the panel. |
| Auditability | Atlassian keeps an audit trail of bridge activity; the desktop app records every run (Activity) and every network and subprocess call (Console). |
| Revocation & erasure | Unpair a site to delete its local tokens, revoke a connection from Jira, or use Settings → About → Forget me to wipe all locally stored data at once. |
| Software integrity | The macOS app is code-signed and notarised by Apple, and updates are delivered through a signed auto-update feed. A minimum-version gate retires outdated clients from the bridge. |
Jira permissions (scopes) the app requests
VibeTest asks for only what it needs to read issues, post results, and store its own data — five Jira scopes in total:
| Scope | Why it's needed |
|---|---|
read:jira-work | Read the issue a test belongs to, for context during a run. |
write:jira-work | Post test results and evidence back onto the issue. |
storage:app | Store the app's own data (tests, runs, connection records) in Atlassian Cloud storage. |
read:jira-user | Resolve the display name of whoever last saved a test, for attribution. |
report:personal-data | Report the account IDs the app stores to Atlassian's privacy service, so personal-data deletion requests are honoured (a Marketplace GDPR requirement). It enables no external network access. |
The Jira side runs on Atlassian's hosted runtime
The Jira side of VibeTest runs entirely inside Atlassian's hosted, sandboxed runtime, with per-tenant data isolation and Atlassian-managed encryption — there is no separate AppDash-hosted cloud to assess. (The test-execution agent runs on your own Mac, not on Atlassian — so the product as a whole is not an Atlassian "Runs on Atlassian" app; this section describes only the Jira-hosted half.) For Atlassian's platform certifications, sub-processors, and data-residency options, point your reviewers to the Atlassian Trust Center and the app's Marketplace listing.
Most reviews are satisfied by four facts from this page: (1) the data-flow diagram above — data stays between your Jira tenant and your Mac; (2) the app requests only the five Jira scopes listed; (3) there is no third-party backend and no external-fetch permission; and (4) tokens and secrets are held in the macOS Keychain and can be erased at any time. Pair that with the Atlassian Trust Center for the underlying platform.
Your responsibilities
Because tests run on your machine with your agent, a few things stay in your hands:
- Protect the Mac. Anyone with access to the paired Mac can run tests against the connected site. Use full-disk encryption (FileVault) and a screen lock.
- Mind what a test can reach. The agent runs with your local permissions and logins. Review scenarios that touch production systems, and prefer non-production accounts where you can.
- Use secrets, not plain text. Reference credentials with
{{secrets.NAME}}(see Use secrets in your tests) so they aren't written into the test definition stored in Jira.
12 Troubleshooting
Most issues come down to a connection that needs attention or the desktop app not running. Start with the status dot on the Connections tab.
Connection statuses and what to do
| Status | What it means | What to do |
|---|---|---|
| Polling | Healthy — listening to Jira for test runs. | Nothing. This is the normal state. |
| Idle | Registered but not actively polling right now. | Nothing; runs still arrive within seconds. |
| Running | A test is executing on your Mac right now. | Wait for it to finish. |
| Retrying | A temporary network or server hiccup; it will retry automatically. | Usually self-heals. If it persists, check your internet. |
| Auth failed | The stored access tokens expired or were revoked. | Re-pair the site from Jira (use the Re-pair button on the card). |
| Paused | You paused polling for this site. | Click Resume on the card. |
| Update required | The desktop app is too old for the current bridge. | Update AppDash AI Link (Settings → About → Check for updates). |
Check the wiring: Test connection
To confirm your Mac can reach the AI agent, open Settings → Agents, select your agent environment, and click Test connection. It runs a tiny PONG prompt through the agent's full launch path. A "Ready ✓" result (with the round-trip time) means the desktop-to-agent link works; a "Failed" result points at an agent that isn't installed or configured — re-check the environment's command and binary path on the same screen.
Common problems
| Symptom | Likely cause & fix |
|---|---|
| Run comes back "No paired desktop device" | Your Mac isn't paired, or the app isn't running. Open AppDash AI Link and confirm the site shows Polling; pair it if it's missing (section 4). |
| Runs never start (stay Queued) | The desktop app may be fully quit, or the connection is paused. Open AppDash AI Link (it keeps polling in the tray even when the window is closed, but not after you Quit it), and check the site isn't Paused — click Resume if it is. |
| Card shows Auth failed or "token missing" | Re-pair the site from Jira. Tokens expire over time; re-pairing issues fresh ones. |
| A test failed with a "site blocked" message | The browser extension limits which sites the agent may visit. Add the target site to the allowlist as the run card suggests. |
| Pairing won't complete | The link expired (they're valid only a few minutes) — generate a new one in Jira. Confirm the code/fingerprint match on both sides. |
For a deeper look, the Console tab shows the exact requests and errors, and its Pair history sub-view records why past pairings succeeded or failed.
Privacy: erase everything
Everything VibeTest stores on your Mac — connections, tokens, activity, and logs — lives there, not in the cloud. To wipe it all, open Settings → About → Forget me and confirm. This permanently deletes the local data and unpairs your sites.
Confirm all four are true: the desktop app is open, the site shows Polling, the Test connection check passes, and your AI agent is installed. That covers the large majority of issues. If a problem persists, the Console tab and Settings → About (for the version) are the details to share when you report it.