Skip to content

JevFish: double-click Mac app and in-app setup - #2

Merged
markiewee merged 15 commits into
mainfrom
feat/jevfish-one-click
Sep 18, 2026
Merged

markiewee merged 15 commits into
mainfrom
feat/jevfish-one-click

Conversation

@markiewee

Copy link
Copy Markdown
Owner

Summary

  • JevFish.app at the repo root. Double-click it and it installs uv and the Python packages on first start (no admin password, no Xcode, no Node), starts JevFish on a free port or reuses a running one, and opens the browser. Errors come up as a macOS alert with a "Show log" button. The package install is retried three times, because one PyPI timeout should not end setup.
  • macOS does not let an app read Desktop, Documents or Downloads. From there the app hands the same script to Terminal, which explains itself in the window. Everywhere else it starts with no window at all.
  • Setup screen in the app. It takes the Jev key and a Gemini or any OpenAI-compatible model, then "Save and check" writes jevfish/.env (mode 600) and applies it without a restart. It checks both keys with free calls. The screen also has test mode and a Stop button. First load without keys lands there.
  • "Fill in the example" on the new-prediction form.
  • The API now only answers requests addressed to this computer, and refuses changing requests from other websites. serve --host beyond loopback turns this off and warns.
  • The built web app is committed, and a workflow fails if it goes stale.

Tests

  • uv run pytest -q: 84 tests, including new env-file, key-check, setup API, guard, launcher (fake uv, a fake server, a failing first install) and bundle tests.
  • Fresh install on this Mac from a blank home folder with uv hidden: uv, Python 3.12 and 1 GB of packages installed and the server was up in 30 seconds.
  • Real double-click both ways: silent from an unprotected folder, Terminal handover from the Desktop copy.
  • Real keys saved and checked through the new API, wrong keys rejected, .env written mode 600.
  • A real prediction on the fresh install: 108 Jev requests, US$0.0052, about two minutes on OASIS Reddit.
  • Browser QA at 375, 768 and 1280 in light and dark: 19 checks, no console errors, no sideways scroll.

Known limit: ZIP downloads are quarantined by macOS, so the first open needs Privacy & Security, Open Anyway. Signing would need a paid Apple account.

Plan, PRD and verification notes: jevfish/docs/superpowers/plans/2026-09-17-one-click-mac-app.md.

🤖 Generated with Claude Code

markiewee and others added 15 commits September 17, 2026 19:06
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…nly guard

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…he banner

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
macOS 26 refuses to let an app read Desktop, Documents or Downloads, and an
ad-hoc signed app cannot even ask. The app now detects that and runs the same
script in Terminal, which has the permissions the user already granted.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@markiewee
markiewee merged commit 77bbedc into main Sep 18, 2026
1 check passed
@markiewee
markiewee deleted the feat/jevfish-one-click branch September 18, 2026 02:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant