Files
openwork/apps/app/pr/openwork-10x-audit.md
Omar McAdam 2b91b4d777 refactor: repo folder structure (#1038)
* refactor(repo): move OpenWork apps into apps and ee layout

Rebase the monorepo layout migration onto the latest dev changes so the moved app, desktop, share, and cloud surfaces keep working from their new paths. Carry the latest deeplink, token persistence, build, Vercel, and docs updates forward to avoid stale references and broken deploy tooling.

* chore(repo): drop generated desktop artifacts

Ignore the moved Tauri target and sidecar paths so local cargo checks do not pollute the branch. Remove the accidentally committed outputs from the repo while keeping the layout migration intact.

* fix(release): drop built server cli artifact

Stop tracking the locally built apps/server/cli binary so generated server outputs do not leak into commits. Also update the release workflow to check the published scoped package name for @openwork/server before deciding whether npm publish is needed.

* fix(workspace): add stable CLI bin wrappers

Point the server and router package bins at committed wrapper scripts so workspace installs can create shims before dist outputs exist. Keep the wrappers compatible with built binaries and source checkouts to avoid Vercel install warnings without changing runtime behavior.
2026-03-19 11:41:38 -07:00

4.2 KiB

OpenWork 10x Audit Research

Date: 2026-02-03 Scope: App UI, session/workspace state, background polling


Context

OpenWork is an open-source alternative to Claude Cowork. It is mobile-first, premium-feeling, and a thin UI layer on top of OpenCode primitives. Target users include:

  • Bob (IT/power user) who already uses OpenCode and wants to share workflows.
  • Susan (non-technical) who wants a polished experience that just works.

Audit summary

The core experience is strong, but several stale-data issues, debug artifacts, and UI inconsistencies prevent the app from feeling "10x" premium and trustworthy. Most fixes are localized and can be split into atomic worktrees.


Findings and opportunities

1) Dashboard tab refresh runs only once per tab

  • Evidence: packages/app/src/app/pages/dashboard.tsx:295-421
  • Impact: Skills, plugins, MCP, and scheduled tasks can go stale after the first visit.
  • Potential fix: Track per-tab refresh timestamps and refresh on tab revisit after a TTL; add an explicit refresh action.

2) Debug logging left in production UI flows

  • Evidence: packages/app/src/app/pages/dashboard.tsx:537 (debug pointer log), packages/app/src/app/context/workspace.ts:667-671, packages/app/src/app/context/session.ts:349-365
  • Impact: Noise in console, potential leakage of workspace info in production logs.
  • Potential fix: Gate logging behind developerMode() or remove entirely.
  • Evidence: packages/app/src/app/components/session/message-list.tsx:99-113
  • Impact: "Hide steps" behaves inconsistently for clustered step groups.
  • Potential fix: When collapsing, add related step IDs to the collapsed set instead of removing them.

4) Session sidebar truncates sessions without a "show more"

  • Evidence: packages/app/src/app/components/session/sidebar.tsx:348-394
  • Impact: Users cannot access older sessions from the sidebar.
  • Potential fix: Add "Show all" or "View more" with a count; link to Sessions tab.

5) Session context menu placement is hard-coded

  • Evidence: packages/app/src/app/components/session/sidebar.tsx:174-188
  • Impact: Menu can overflow or mis-position with localization or font changes.
  • Potential fix: Measure actual menu size and clamp to viewport at render time.

6) Background polling is always on

  • Evidence: packages/app/src/app/app.tsx:340-510, packages/app/src/app/components/status-bar.tsx:160-174
  • Impact: Unnecessary network work and battery drain, especially when hidden.
  • Potential fix: Use document.visibilityState to pause intervals; consolidate polling with backoff when disconnected.

7) Blocking browser prompts in primary flows

  • Evidence: packages/app/src/app/app.tsx:1231-1243 (model variant), packages/app/src/app/pages/session.tsx:739-756 (delete confirm), packages/app/src/app/pages/session.tsx:1016-1039 (agent prompt)
  • Impact: Inconsistent UI, poor mobile behavior, breaks flow.
  • Potential fix: Replace with in-app modals or inline confirmations.

8) Mention search results can race

  • Evidence: packages/app/src/app/components/session/composer.tsx:736-750
  • Impact: Stale results can surface if earlier search resolves after a newer query.
  • Potential fix: Add request tokens or abort controllers to discard stale results.

9) Stale sessions for inactive workspaces

  • Evidence: packages/app/src/app/pages/session.tsx:673-685
  • Impact: Sidebar workspace groups show outdated sessions until the workspace is re-activated.
  • Potential fix: Refresh sessions per workspace on demand or group from a global session list keyed by directory.

10) OpenWork server checks have no disconnect backoff

  • Evidence: packages/app/src/app/app.tsx:340-370
  • Impact: Repeated failures while disconnected; noisy and wasteful.
  • Potential fix: Apply exponential backoff or suspend checks until the user changes connection settings.

Notes

  • ISSUES.md was not found in the repo; no centralized issue list to reference.

Proposed 10x themes

  • Freshness: fix stale data and refresh behavior.
  • Trust: remove debug artifacts and avoid blocking prompts.
  • Performance: pause background polling when hidden.
  • Discoverability: surface older sessions and state changes clearly.