QA Scribe is a local-first desktop testing notepad for capturing testing Sessions and turning raw testing material into structured Testware.
During a Session, testers capture Entries such as Notes, Observations, API Responses, Logs, possible Findings, screenshots, and managed attachments in a chronological Session Timeline. QA Scribe can then help review a Generation Context and create editable Session Report Drafts.
QA Scribe has been rebuilt as a Rust/Tauri application with a fresh SQLite schema. The previous Electrobun/Bun MVP remains historical product reference only; existing MVP data, Drizzle artifacts, Bun SQLite migrations, and Electrobun app-data layouts are not migration targets.
Implemented capabilities include:
- Session Library create/reopen/delete flows.
- Session Context and Objective Notes.
- Session Timeline Entry capture with include/exclude controls for generation.
- Findings linked to Entry Evidence and managed attachment Evidence, with Finding deletion.
- Managed attachment import by local path and pasted clipboard image data.
- Attachment preview data URLs and local Markdown/JSON Session export.
- Editable Testware Drafts persisted in local SQLite, with Draft deletion.
- Explicit user-triggered AI generation through already-authenticated local Claude Code, Codex CLI, or GitHub Copilot CLI commands when available.
- Local app settings for the generation system prompt.
- Desktop shell: Tauri 2
- Core: Rust Cargo workspace
- UI: React, TypeScript, and Vite
- Storage: fresh Rust-owned SQLite schema through
rusqlite - Bridge: typed Tauri commands and serde DTOs
- AI: local CLI process execution only; QA Scribe does not store provider API keys
Download desktop builds from GitHub Releases.
macOS:
- Download the
.dmgfor your Mac. - Use
aarch64for Apple Silicon andx64for Intel. - Open the DMG and drag QA Scribe into Applications.
Linux:
- Download the
.AppImage,.deb, or.rpmfrom the latest release. - Debian/Ubuntu users can enable the signed APT repository:
bash <(curl -fsSL https://ddv1982.github.io/qa-scribe/install-apt-repo.sh)
sudo apt update
sudo apt install qa-scribeAfter the repository is enabled, normal sudo apt update and sudo apt upgrade runs handle updates.
The APT bootstrap downloads the repository setup package and verifies it with the pinned QA Scribe APT signing key before installing the repository configuration.
Requirements:
- Rust stable
- Node.js 22.13 or newer
- Bun 1.3.5 or newer
- Platform toolchain for the local Tauri target
- Optional authenticated local AI CLIs:
claude,codex, orcopilot
Install frontend dependencies:
bun install --cwd frontendRun the desktop app in development mode:
bun run devBuild the Rust workspace and frontend:
bun run buildRun the broad verification gate:
bun run verifyRun the non-GUI smoke harness:
bun run smokeValidate package metadata JSON:
bun run package:checkAI generation is optional. Capture, persistence, manual review, Draft editing, attachment handling, and export work without AI configuration.
QA Scribe does not manage API keys. It checks local CLI readiness and only starts generation when the user explicitly chooses a ready provider and runs generation.
- Claude Code: checks
claude --versionandclaude auth status --json, detects model aliases fromclaude --help, then runsclaude -pwith the prompt on stdin. When a non-default model is selected, qa-scribe passes--model <model>. AI action jobs use--output-format stream-json --include-partial-messagesso the UI can show progress and partial output. - Codex CLI: checks
codex --versionandcodex login status, detects selectable models fromcodex debug models, then runscodex exec --skip-git-repo-check -. When a non-default model is selected, qa-scribe passes--model <model>. AI action jobs use--jsonso the UI can show progress and partial output. - GitHub Copilot CLI: checks the real
copilot versioncommand. If the standalone CLI is not present, qa-scribe only treatsgh copilotas ready whengh copilot -- --helpconfirms the Copilot CLI bridge is installed. Plaingh copilot --helpdoes not mark Copilot ready.
Provider status can be ready, auth required, install required, or error. Provider model and reasoning choices are recorded on each AI Run, included in the provider prompt, and passed to provider CLIs where supported. Provider authentication remains the responsibility of the local CLI.
- Storage is local SQLite under the Tauri app-data directory.
- Managed attachment files are stored under
attachments/<session-id>/in the app-data directory. - SQLite stores attachment metadata, ownership, hashes, and relative paths.
- Deleting a Session through the Tauri app removes its managed attachment files and cascades database rows.
- Deleting a Finding removes its Evidence links; deleting a Draft removes only that Draft row and preserves AI Run history.
- AI calls send only the selected Generation Context text and attachment metadata, not raw attachment binaries.
- Existing Electrobun/Bun databases are intentionally not read or migrated.
crates/qa-scribe-core/ Domain, SQLite storage, attachments, export, generation, tests
crates/qa-scribe-app/ Non-GUI smoke harness
src-tauri/ Tauri 2 shell and command modules
frontend/ React/Vite renderer and typed Tauri bridge
docs/ Rebuild plan and architecture decisions
- Rust rebuild plan
- Rebuild ADR
- Project language
- Quality scenarios
- Code size guidelines
- Architecture decisions
- Release workflow
- Historical planning docs remain in
docs/for reference.