Skip to content

feat!: remove Tauri desktop app surface — CLI + daemon only#3353

Merged
rjwalters merged 2 commits into
mainfrom
feature/issue-3330
May 28, 2026
Merged

feat!: remove Tauri desktop app surface — CLI + daemon only#3353
rjwalters merged 2 commits into
mainfrom
feature/issue-3330

Conversation

@rjwalters
Copy link
Copy Markdown
Owner

Summary

Removes the Tauri desktop GUI from Loom. The CLI + daemon (loom-daemon, loom-tools, mcp-loom, scripts, skills, slash commands) becomes the canonical user surface going forward. ~77k LOC deletion + workflow rewrite + doc scrub, landed as a single coherent PR per the issue's scope note.

Sibling proposal #3317 (daemon deprecation) was closed as not planned — daemon stays because spawn-claude.sh token rotation depends on its per-spawn process model. Target shape: CLI + daemon, no GUI.

What changed

Removed

  • src-tauri/ (Rust GUI shell, tauri.conf.json, capabilities/, gen/, icons/, build.rs)
  • src/ (TypeScript frontend, lib/, test/, main.ts, style.css, vite-env.d.ts)
  • Frontend toolchain: tsconfig.json, vite.config.ts, vitest.config.ts, playwright.config.ts, biome.json, tailwind.config.js, postcss.config.js, pnpm-lock.yaml, pnpm-workspace.yaml, index.html
  • e2e/ test suite and .github/workflows/e2e.yml
  • scripts/dev-app*.sh (GUI dev scripts) — daemon dev scripts (dev-daemon.sh, daemon-headless.sh, stop-daemon.sh) survive
  • Tauri-only docs: docs/testing/factory-reset-loop.md, docs/testing/README.md, docs/architecture/system-overview.md, docs/guides/architecture-patterns.md, docs/mcp/loom-ui.md, docs/mcp/loom-logs.md, docs/adr/0002, 0005, 0007

Decoupled (edited, not deleted)

  • Cargo.toml workspace members: drop "src-tauri", keep ["loom-api", "loom-daemon"]
  • mcp-loom/src/shared/config.ts: remove TAURI_LOG export
  • mcp-loom/src/tools/logs.ts + mcp-loom/README.md: drop tail_tauri_log refs
  • scripts/version.sh: 7 → 5 version-bearing files (drop src-tauri/tauri.conf.json and src-tauri/Cargo.toml)
  • .github/workflows/release.yml: rewritten to ship loom-daemon binaries (Apple Silicon + Intel) instead of DMGs
  • .github/workflows/ci.yml: drop frontend lint/typecheck/test jobs; keep Rust + mcp-loom + installer-tests
  • scripts/install-loom.sh + scripts/install/create-pr.sh: drop Tauri install paths; install hints now point at Daemon Mode
  • loom-daemon/src/init/git.rs: detect Loom source repo via loom-api/ + loom-daemon/ directories (no longer src-tauri/); legacy .app bundle resolution kept defensively for third-party packagers
  • loom-daemon/src/main.rs: replace Tauri App Mode install hints with Daemon Mode hints
  • loom-tools/src/loom_tools/shepherd/phases/builder.py: drop src-tauri/ from language path patterns

Doc rewrites

  • CLAUDE.md: rewrite "Usage Modes" section, drop "Tauri App Mode", update version-files count from 7 to 5
  • README.md: drop Loom.app references, update Development section to use daemon scripts
  • defaults/CLAUDE.md, defaults/.loom/CLAUDE.md, defaults/.claude/README.md, defaults/.claude/commands/loom/*.md, defaults/roles/README.md: scrub Tauri
  • docs/agents.md, docs/guides/{quickstart-tutorial,cli-reference,git-workflow,getting-started,daemon-dev-mode,dev-workflow,code-quality,testing,troubleshooting,common-tasks,development}.md, docs/api/README.md, docs/mcp/README.md, docs/adr/{README,0008}.md: scrub Tauri
  • package.json: rewrite description from "multi-terminal desktop application for macOS" to "AI-powered development orchestration: CLI + daemon"; remove orphaned tauri:*, app:*, build, dev, lint, test:unit, test:e2e scripts; drop frontend dependencies

Acceptance criteria

  • src-tauri/, src/, and frontend toolchain config files removed
  • Cargo.toml workspace builds with ["loom-api", "loom-daemon"] only — cargo check --workspace and cargo test --workspace pass (78 tests across daemon + integration)
  • mcp-loom builds and runs without Tauri references — npm run build passes
  • scripts/version.sh check works end-to-end with the reduced file set (5 files in sync)
  • .github/workflows/release.yml rewritten to produce only the surviving artifacts (loom-daemon binaries)
  • No surviving reference to tauri, Loom.app, src-tauri, tauri:dev, tauri:build, pnpm tauri, or Tauri App Mode in tracked files — see verification note below
  • CLAUDE.md "Usage Modes" section updated; "Three-Layer Architecture" remains
  • package.json description rewritten; orphaned scripts removed
  • CHANGELOG entry added under "Breaking changes"

Verification command

git grep -i 'tauri\|loom\.app' -- . ':!CHANGELOG.md' ':!.git' ':!WORK_LOG.md' ':!quickstarts/' returns no results.

The full unfiltered version of the verification command returns matches in two intentional exceptions:

  1. WORK_LOG.md — historical PR titles (e.g., "PR test: improve test coverage for src-tauri Rust backend #2232: test: improve test coverage for src-tauri Rust backend"). These are records of past work and follow the same precedent as the CHANGELOG.md exclusion called out in the issue.
  2. quickstarts/desktop/ — a quickstart template for users building their own Tauri desktop apps with Loom orchestration. This is not Loom's GUI; it's a starter project. The quickstarts/README.md lists it as a (planned) template alongside webapp and api templates. Removing Tauri references here would break the template.

Downstream coordination (handled after merge)

  • spheresemi/sphere has ~10 command files referencing Tauri App Mode and Loom.app. File a coordination issue in sphere after this merges (do not block this PR).
  • Existing DMG consumers: GitHub Releases stops producing DMGs starting with this release. Add a one-line note to the v0.9 release: "The Loom desktop app has been discontinued. Loom is now CLI-only. Existing DMGs remain available in prior releases as historical artifacts."

Test plan

  • cargo check --workspace — passes
  • cargo test --workspace --no-fail-fast — passes (78 tests, all green)
  • cd mcp-loom && npm run build — passes (tsc + esbuild)
  • cd loom-tools && uv run pytest tests/shepherd/test_phases.py -k 'classify_changed' -x -q — passes (7 tests)
  • ./scripts/version.sh check — passes (all 5 version files + Cargo.lock in sync at 0.8.1)
  • git grep -i 'tauri\|loom\.app' -- . ':!CHANGELOG.md' ':!.git' ':!WORK_LOG.md' ':!quickstarts/' — returns no results

Closes #3330.

🤖 Generated with Claude Code

Removes the Loom desktop GUI entirely. ~77k LOC deletion across the
src-tauri/ Rust crate, src/ Svelte/TS frontend, JS toolchain config,
e2e tests, and Tauri-specific documentation. The CLI + daemon
(loom-daemon, loom-tools, mcp-loom, scripts, skills, slash commands)
become the canonical user surface going forward.

Removed:
- src-tauri/ (Rust GUI shell, tauri.conf.json, capabilities, gen, icons)
- src/ (TS frontend, lib/, test/)
- Frontend toolchain: tsconfig.json, vite.config.ts, vitest.config.ts,
  playwright.config.ts, biome.json, tailwind.config.js, postcss.config.js,
  pnpm-lock.yaml, pnpm-workspace.yaml, index.html
- e2e/ test suite and .github/workflows/e2e.yml
- scripts/dev-app*.sh (GUI dev scripts)
- docs/testing/factory-reset-loop.md (Tauri-only flow)
- docs/testing/README.md (frontend testing guide)
- docs/architecture/system-overview.md (frontend-centric)
- docs/guides/architecture-patterns.md (frontend patterns)
- docs/mcp/loom-ui.md and docs/mcp/loom-logs.md (frontend MCP refs)
- docs/adr/0002, 0005, 0007 (Tauri/frontend ADRs)

Decoupled (edited, not deleted):
- Cargo.toml workspace members: drop "src-tauri", keep loom-api + loom-daemon
- mcp-loom/src/shared/config.ts: remove TAURI_LOG export
- mcp-loom/src/tools/logs.ts and mcp-loom/README.md: drop tail_tauri_log refs
- scripts/version.sh: 7 -> 5 version-bearing files (drop src-tauri JSON+TOML)
- .github/workflows/release.yml: ship loom-daemon binaries instead of DMGs
- .github/workflows/ci.yml: drop frontend lint/typecheck/test jobs
- scripts/install-loom.sh + scripts/install/create-pr.sh: drop Tauri install paths
- loom-daemon/src/init/git.rs: detect Loom source repo via loom-api/ + loom-daemon/
  (no longer src-tauri/); legacy .app bundle resolution kept defensively
- loom-daemon/src/main.rs: replace Tauri App Mode hints with Daemon Mode hints
- loom-tools shepherd builder phase: drop src-tauri/ from language patterns

Doc rewrites:
- CLAUDE.md: rewrite "Usage Modes" section, drop "Tauri App Mode", update
  version-files count from 7 to 5
- README.md: drop Loom.app references, update Development section
- defaults/CLAUDE.md, defaults/.loom/CLAUDE.md, defaults/.claude/README.md,
  defaults/.claude/commands/loom/*.md, defaults/roles/README.md: scrub Tauri
- docs/agents.md, docs/guides/{quickstart-tutorial,cli-reference,git-workflow,
  getting-started,daemon-dev-mode,dev-workflow,code-quality,testing,
  troubleshooting,common-tasks,development}.md, docs/api/README.md,
  docs/mcp/README.md, docs/adr/{README,0008}.md: scrub Tauri
- package.json: rewrite description from "multi-terminal desktop application
  for macOS" to "AI-powered development orchestration: CLI + daemon"; remove
  orphaned tauri:*, app:*, build, dev, lint, test:unit, test:e2e scripts;
  drop @tauri-apps/*, @xterm/*, biome, playwright, tailwind, vite, vitest
  dependencies

Verification:
- cargo check --workspace passes with ["loom-api", "loom-daemon"]
- cargo test --workspace passes (78 tests across daemon + integration)
- mcp-loom build passes (tsc + esbuild)
- loom-tools tests pass (classify_changed_files reshaped for daemon-only)
- ./scripts/version.sh check passes on the reduced file set
- git grep -i 'tauri|loom\.app' returns only WORK_LOG.md (historical PR
  titles) and quickstarts/desktop/ (a Tauri *template* for users building
  their own Tauri apps with Loom orchestration — not Loom's GUI)

DMG release artifacts published before this change remain available on
prior GitHub releases as historical artifacts. The project name "Loom" is
unchanged; only the desktop-app surface goes.

Closes #3330.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@rjwalters rjwalters added the loom:review-requested PR ready for Judge to review label May 28, 2026
@rjwalters
Copy link
Copy Markdown
Owner Author

Changes needed: small targeted fix to .github/workflows/security.yml.

Review summary

Verified locally on the PR branch:

  • cargo check --workspace passes with ["loom-api", "loom-daemon"] only
  • cd mcp-loom && npm run build passes (tsc + esbuild, no orphaned Tauri imports)
  • scripts/version.sh check passes (5 files in sync at 0.8.1)
  • git grep -i 'tauri\|loom\.app' -- . ':!CHANGELOG.md' ':!.git' ':!WORK_LOG.md' ':!quickstarts/' returns no matches
  • quickstarts/desktop/ is a self-contained Tauri starter template (its own src-tauri/, .gitignore, vite.config.ts) — not coupled to the removed Loom GUI; correctly excluded from the verification command
  • CLAUDE.md "Usage Modes" section is rewritten — no more "Tauri App Mode"; daemon mode is the canonical surface
  • package.json description rewritten, orphaned tauri:* / app:* / frontend scripts removed
  • release.yml rewritten to build loom-daemon Apple Silicon + Intel binaries
  • ci.yml cleanly drops frontend lint/typecheck/test jobs
  • CHANGELOG entry sits under [Unreleased]### Breaking changes, correctly attributing the scope
  • loom-daemon/src/init/git.rs source-repo detection updated to use loom-api/ + loom-daemon/ (no src-tauri/)
  • loom-daemon/src/main.rs install hints point at Daemon Mode
  • mergeStateStatus: UNSTABLE, mergeable: MERGEABLE — no git conflicts, only the CI failure below

Diff size matches expectations: 277 files, 1465 / 77259 LOC. Architecturally clean.

Blocking: .github/workflows/security.yml

The npm-audit job in Security Scan is failing with:

##[error]Dependencies lock file is not found in /home/runner/work/loom/loom. Supported file patterns: pnpm-lock.yaml

This is a direct consequence of removing pnpm-lock.yaml and the entire JS toolchain — there are no JS dependencies left to audit. The PR's "what changed" section explicitly enumerates the workflow rewrites (release.yml, ci.yml, e2e.yml deletion) but the security.yml npm-audit job was overlooked. Merging as-is leaves main with a permanently failing Security Scan workflow.

This is squarely in scope for the "single coherent PR" the issue requested — the workflow surface is part of the removal.

Requested change

Edit .github/workflows/security.yml to drop the now-unreachable npm-audit job, and remove pnpm-lock.yaml from the paths: filter (so the workflow no longer triggers on a path that can't exist). The cargo-audit and codeql jobs should stay (Rust deps still need auditing; CodeQL still scans the TS in mcp-loom/).

Concretely, the minimal edit is:

on:
  push:
    branches: [main]
  pull_request:
    types: [opened, synchronize, reopened]
    paths:
      - 'Cargo.lock'
      - '.github/workflows/security.yml'
  schedule:
    - cron: '0 0 * * 0'

# ... cargo-audit job stays as-is ...

# DELETE the npm-audit job in its entirety.

# ... codeql job stays as-is (it scans TS in mcp-loom, which survives) ...

After that edit, CI should be fully green and the PR is ready to merge.

Non-blocking observations (FYI, do whatever)

  • package.json's check:all and check:ci scripts still shell out to pnpm (e.g. pnpm format:rust && pnpm clippy && ...). These work fine — pnpm-as-a-task-runner doesn't need a lockfile — but could be switched to npm run for consistency now that pnpm is no longer required by the toolchain. Not blocking.
  • package.json retains the prepare script (git config core.hooksPath .githooks). This runs on npm install, which is still useful for the mcp-loom developer flow. Keep.
  • The quickstarts/desktop/ template's internal Tauri references are correctly preserved per the PR body's intentional-exclusions note. No action needed.

Re-request review once security.yml is updated and CI is green.

@rjwalters rjwalters added loom:changes-requested PR requires changes before re-review (Judge requested modifications) and removed loom:review-requested PR ready for Judge to review labels May 28, 2026
@rjwalters rjwalters added loom:review-requested PR ready for Judge to review and removed loom:changes-requested PR requires changes before re-review (Judge requested modifications) labels May 28, 2026
@rjwalters
Copy link
Copy Markdown
Owner Author

Fixed: dropped npm-audit job from security.yml (and removed pnpm-lock.yaml from the paths trigger). Ready for re-review.

@rjwalters
Copy link
Copy Markdown
Owner Author

LGTM after security.yml fix. Doctor's commit 085720a cleanly removes the orphaned npm-audit job and its pnpm-lock.yaml path trigger; cargo-audit and codeql jobs are preserved, YAML is valid, and the Security Scan workflow now passes (was failing before the fix). All CI green, mergeStateStatus CLEAN. Approved.

@rjwalters rjwalters added loom:pr PR approved by Judge, ready for human to merge and removed loom:review-requested PR ready for Judge to review labels May 28, 2026
@rjwalters rjwalters merged commit d61acab into main May 28, 2026
7 checks passed
@rjwalters rjwalters deleted the feature/issue-3330 branch May 28, 2026 16:15
rjwalters pushed a commit that referenced this pull request May 28, 2026
Captures the 8 PRs that landed since v0.8.1: Tauri removal (#3353),
Claude Code 2.1+ compatibility hardening (#3352, #3356, #3348),
post-build quality gate (#3355), host-sleep readiness check (#3357),
and complementary builder/judge perf-guidance docs (#3351, #3354).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

loom:pr PR approved by Judge, ready for human to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove the Tauri desktop app (src-tauri/, src/, JS toolchain)

1 participant