Target service behavior without launching the full UI:
- Port check detects available and occupied ports.
- Ready check handles success, timeout, invalid response, and connection failure through
/v1/models. - Connection config copy produces stable OpenAI-compatible JSON and curl text.
- Process service state transitions are testable through protocol boundaries or fakes.
- Memory monitor handles missing process, running process, and permission failures.
- Log buffer trims old entries when it exceeds the configured maximum.
- Configure
mlx_lm.serverexecutable path in the UI. - Save settings, quit, relaunch, and confirm settings are restored.
- Start server from stopped state.
- Confirm ready state after
/v1/modelsresponds. - Confirm the managed pid is shown.
- Confirm memory usage updates while the server is running.
- Restart server after ready state and confirm a new pid is managed.
- Stop server from running state and confirm the port is released.
- Attempt start when the port is occupied by another process.
- Confirm logs display app actions and captured stdout/stderr.
- Press Clear Logs and confirm
[info] logs clearedremains. - Confirm copied OpenAI-compatible config works with an external client.
- Confirm copied curl examples are text only and the app does not send
/v1/chat/completions.
- With no managed server running, press
Run Diagnostics. - Confirm
Port availabilityispasswhen the selected host and port are free. - Confirm
Ready checkiswarningwhile the server is stopped. - Confirm Diagnostics UI and Logs both show the diagnostic results.
- With a valid executable path, confirm path
configured,exists, andexecutablechecks arepass. - With a missing executable path, confirm path
existsandexecutablechecks arefail. - With an empty executable path, confirm path
configured,exists, andexecutablechecks arefail. - Restore the valid executable path and confirm the summary returns to
0 failure(s). - Start the managed server and confirm it reaches Ready.
- Press
Run Diagnosticswhile the managed server is running. - Confirm
Port availabilityiswarning. - Confirm the port message is
Port is busy because the managed server is running. - Confirm the port detail includes the managed pid.
- Confirm
Ready checkispass. - Confirm Start, Stop, and Restart still work after running diagnostics.
- Confirm diagnostics do not send
/v1/chat/completions. - Confirm diagnostics do not run model inference.
- Confirm diagnostics do not launch
mlx_lm.server. - Confirm diagnostics do not stop external processes.
- Open
Edit Profilefrom the selected model detail area. - Change
displayName, clickSave Profile, and confirm Model detail updates. - Change
modelID, clickSave Profile, and confirm Model detail and Copy Model ID update. - Change
host, clickSave Profile, and confirm Base URL and copy actions update. - Change
serverPort, clickSave Profile, and confirm Base URL and copy actions update. - Toggle
enableThinkingon and off, clickSave Profile, and confirm Model detail updates. - Edit
notes, clickSave Profile, and confirm Model detail updates. - Leave
displayNameempty, save, and confirm it is filled withmodelID. - Leave
modelIDempty and confirm save fails with a UI message and Logs entry. - Leave
hostempty and confirm save fails with a UI message and Logs entry. - Set
serverPortto0,65536, andabc; confirm each save fails. - Change fields and click
Cancel; confirm changes are not saved. - Confirm saved edits persist after app restart.
- Confirm Connection Settings, Copy Config, Copy
curl /v1/models, and Copycurl /v1/chat/completionsreflect saved values. - Change
serverPort, save, and confirm Start launches the managed server on the new port. - Stop the managed server and restore the original port.
- While the managed server is running, confirm
modelID,host, andserverPortchanges are blocked. - While the managed server is running, confirm
displayName,enableThinking, andnotescan still be saved. - Confirm Start, Stop, and Restart still work after model profile edits.
- Confirm profile edits are saved to local
models.json. - Confirm
models.jsonis not included in Git status or commits. - Confirm profile editing does not send
/v1/chat/completions. - Confirm profile editing does not run model inference.
- Confirm profile editing does not launch
mlx_lm.server. - Confirm profile editing does not stop external processes.
- Confirm
pkill,killall, andpgrepare not used. - Confirm Direct Mode is maintained with no Proxy and no Chat UI.
- Confirm no user-specific fixed paths are added to Swift code or docs.
- Launch the app and confirm a macOS menu bar item appears.
- Confirm the initial menu bar title is
MLX: stopped. - Confirm the main window and menu bar show the same status.
- Open the menu bar item and confirm Base URL is visible.
- Open the menu bar item and confirm Model ID is visible.
- Click
Open Appand confirm the main window is shown and activated. - Click
Startfrom the menu bar and confirm the managed server starts. - Confirm the main window changes from starting to ready after Start.
- Confirm the menu bar title changes to
MLX: readyafter Start. - Click
Run Diagnosticsfrom the menu bar and confirm Diagnostics and Logs update in the main window. - Click
Restartfrom the menu bar and confirm Stop, port release, Start, and Ready still work. - Click
Stopfrom the menu bar and confirm only the managed process stops. - Confirm the main window returns to stopped after Stop.
- Confirm the menu bar title returns to
MLX: stoppedafter Stop. - Confirm Start, Stop, and Restart from the main window still work.
- Click
Quitfrom the menu bar and confirm the app exits normally. - Confirm menu bar actions reuse existing
AppViewModelactions. - Confirm there is no separate menu bar process management logic.
- Confirm menu bar actions do not send
/v1/chat/completions. - Confirm menu bar actions do not run model inference.
- Confirm menu bar status display does not start
mlx_lm.server. - Confirm menu bar actions do not enter the inference path.
- Confirm menu bar Stop does not stop external processes.
- Confirm Stop targets only the managed process.
- Confirm
pkill,killall, andpgrepare not used. - Confirm Direct Mode is maintained with no Proxy and no Chat UI.
- Confirm
settings.json,models.json, and model files are not included in Git status or commits. - Confirm no user-specific fixed paths are added to Swift code or docs.
- Confirm
git status --short --untracked-files=allis clean before building. - Run the Release
xcodebuildcommand with schemeMLXServerManager, configurationRelease, derived data path/tmp/MLXServerManagerReleaseDerivedData, andCODE_SIGNING_ALLOWED=NO. - Confirm the Release build ends with
BUILD SUCCEEDED. - Confirm the
.appoutput path exists under/tmp/MLXServerManagerReleaseDerivedData/Build/Products/Release/MLXServerManager.app. - Confirm the
.appsize withdu -sh; one verified local result was916K. - Launch the
.appwithopen -n. - Confirm
System Eventscan see theMLXServerManagerprocess after launch. - Confirm the app can quit normally.
- Confirm final
git status --short --untracked-files=allis clean. - Confirm
.appbundles and build artifacts are not tracked by Git. - Confirm
settings.json,models.json, and model files are not tracked by Git. - Treat
CODE_SIGNING_ALLOWED=NOas an unsigned personal-use local build check. - Confirm notarization, DMG creation, and GitHub Release asset creation are not part of v0.5.
- Treat xcodebuild multiple-destination notes, bitcode strip skip without signing, and App Intents metadata extraction skip as non-blocking when the build succeeds.
- Do not require
osascriptwindow-name inspection;open, process existence, and normal quit are sufficient for this checklist.
- Confirm the Add Profile button is visible near the model list.
- Click Add Profile and confirm the Add Profile UI opens.
- Click Cancel and confirm no profile is saved.
- Leave
modelIDempty and confirm save fails with a UI message and Logs entry. - Leave
hostempty and confirm save fails with a UI message and Logs entry. - Set
serverPortto0,65536, andabc; confirm each save fails. - Use a duplicate
modelIDand confirm save fails. - Leave
displayNameempty, save a valid profile, and confirm it is filled withmodelID. - Save a valid new
modelIDand confirm save succeeds. - Confirm the new profile is added to local
models.json. - While stopped, confirm the added profile is selected automatically.
- Confirm Model detail updates to the added profile.
- Confirm Connection Settings, Copy Config, Copy
curl /v1/models, and Copycurl /v1/chat/completionsreflect the added profile when selected. - While a managed server is running, add a valid profile and confirm it is not auto-selected.
- While a managed server is running, confirm Add Profile does not affect the existing running server.
- Confirm Logs show add success and add failures.
- Confirm the Delete Profile button is visible near selected model detail.
- Click Delete Profile and confirm a confirmation dialog appears.
- Confirm the dialog says only the saved profile is removed.
- Confirm the dialog says model files and Hugging Face cache are not deleted.
- Click Cancel and confirm no profile is deleted.
- Confirm Delete removes only the profile entry from
models.json. - Confirm model files are not deleted.
- Confirm Hugging Face cache is not deleted.
- Confirm the last remaining profile cannot be deleted.
- Confirm Delete Profile is blocked while a managed server is running.
- Delete the selected profile while stopped and confirm the first remaining profile is selected.
- Confirm Model detail updates to the fallback profile after delete.
- Confirm Connection Settings, Copy Config, Copy
curl /v1/models, and Copycurl /v1/chat/completionsupdate to the fallback profile after delete. - Confirm Logs show delete success, delete failures, and the fallback model ID.
- Confirm Edit Profile still works after Add/Delete Profile.
- Confirm Start, Stop, and Restart still work after Add/Delete Profile.
- Confirm Run Diagnostics still works after Add/Delete Profile.
- Confirm Menu bar quick actions still work after Add/Delete Profile.
- Confirm Release build instructions still produce a working build.
- Confirm Add/Delete Profile changes only saved profile data in
models.json. - Confirm Add/Delete Profile does not delete model files.
- Confirm Add/Delete Profile does not delete Hugging Face cache.
- Confirm Add/Delete Profile does not download models.
- Confirm Add/Delete Profile does not launch
mlx_lm.server. - Confirm Add/Delete Profile does not stop external processes.
- Confirm
pkill,killall, andpgrepare not used. - Confirm Add/Delete Profile does not run model inference.
- Confirm Add/Delete Profile does not send
/v1/chat/completions. - Confirm Direct Mode is maintained with no Proxy and no Chat UI.
- Confirm
settings.json,models.json, and model files are not included in Git status or commits. - Confirm no user-specific fixed paths are added to Swift code or docs.
- Confirm
Running ModelshowsNot runningwhile the managed server is stopped. - Confirm the selected model shows a
Selectedlabel in the model list. - Confirm
Restart requiredis not shown while stopped. - Select another profile and confirm Model detail updates.
- Confirm Connection Settings, Copy Config, Copy
curl /v1/models, and Copycurl /v1/chat/completionsfollow the selected model.
- Click Start and confirm the selected model starts as the managed server.
- Confirm Ready is reached through
/v1/models. - Confirm
Running Modelchanges to the launchedmodelID. - Confirm the running model shows a
Runninglabel in the model list. - Confirm
Restart requiredis not shown when selected model and running model match.
- While the managed server is running, select a different model profile.
- Confirm the selected model changes.
- Confirm the running model does not change.
- Confirm the running server does not switch immediately.
- Confirm a second server is not started.
- Confirm
Restart requiredis shown when selected model and running model differ. - Confirm Model list shows
Restart requiredon the selected profile. - Confirm Status panel shows
Restart required to apply selected model. - Confirm Model detail shows Selected Model, Running Model, and Restart-required state.
- If the menu bar title includes restart-required state, confirm it updates.
- Confirm Connection Settings, Copy Config, Copy
curl /v1/models, and Copycurl /v1/chat/completionsfollow the selected model.
- Click Restart and confirm the existing managed process is stopped.
- Confirm Restart starts the selected model.
- Confirm Ready is reached after Restart.
- Confirm
Running Modelupdates to the selected model. - Confirm
Restart requireddisappears after the selected and running models match. - Confirm Stop still targets only the managed process.
- Click Stop and confirm
Running Modelreturns toNot running. - Confirm
Restart requireddisappears. - Confirm the selected model is preserved.
- Confirm Add Profile still works after model switching.
- Confirm Edit Profile still works after model switching.
- Confirm Delete Profile still works after model switching.
- Confirm Start, Stop, and Restart still work after model switching.
- Confirm Run Diagnostics still works after model switching.
- Confirm Menu bar quick actions still work after model switching.
- Confirm Release build instructions still produce a working build.
- Confirm model switching does not add multiple simultaneous server management.
- Confirm model switching does not start multiple models at the same time.
- Confirm selecting a model does not start
mlx_lm.server. - Confirm model switching does not run model inference.
- Confirm the app does not send
/v1/chat/completions. - Confirm Restart and Stop target only the managed process.
- Confirm external processes are not stopped.
- Confirm
pkill,killall, andpgrepare not used. - Confirm model files are not deleted.
- Confirm Hugging Face cache is not deleted.
- Confirm models are not downloaded.
- Confirm Direct Mode is maintained with no Proxy and no Chat UI.
- Confirm
settings.json,models.json, and model files are not included in Git status or commits. - Confirm no user-specific fixed paths are added to Swift code or docs.
- Confirm Logs are displayed line by line.
- Confirm
[start],[stop],[restart],[diagnostics],[profile],[switching],[warning],[error], and[info]categories are easy to scan. - Confirm Start, Stop, and Restart logs still appear.
- Confirm Run Diagnostics logs still appear.
- Confirm Add, Edit, and Delete Profile logs still appear.
- Confirm Model switching and Restart-required logs still appear.
- Click
Clear Logsand confirm it still works. - Confirm
[info] logs clearedappears after Clear Logs. - Confirm the
Copy Logsbutton is visible. - Click
Copy Logsand confirm the current bounded log text is copied to the macOS clipboard. - Confirm
[info] copied logs to clipboardappears after Copy Logs succeeds. - Confirm Copy Logs does not break when logs are empty or immediately after Clear Logs.
- Before running diagnostics, confirm
No diagnostics run yet.is shown. - Before running diagnostics, click
Copy Diagnostics Summaryand confirm a warning is written to Logs. - Click
Run Diagnosticsand confirm Pass, Warning, and Failure counts are visible. - Confirm warnings and failures are visually easy to find.
- Confirm each check row clearly shows
PASS,WARNING, orFAIL. - Confirm the
Copy Diagnostics Summarybutton is visible. - Click
Copy Diagnostics Summaryand confirm the clipboard text includes the summary and each check name, status, and message. - Confirm
[info] copied diagnostics summary to clipboardappears after the copy succeeds. - Confirm Diagnostics still uses the existing checks.
- Confirm Diagnostics Ready Check remains limited to
/v1/models. - Confirm Diagnostics does not call
/v1/chat/completions.
- Confirm Start, Stop, and Restart still work.
- Confirm Add, Edit, and Delete Profile still work.
- Confirm Model switching and Restart-required behavior still work.
- Confirm Menu bar quick actions still work.
- Confirm Release build instructions still produce a working build.
- Confirm no file-persistent logs are created.
- Confirm there is no telemetry, analytics, crash reporting, or external log sending.
- Confirm Logs and Diagnostics improvements do not run model inference.
- Confirm the app does not send
/v1/chat/completions. - Confirm Diagnostics does not start
mlx_lm.server. - Confirm Diagnostics does not stop external processes.
- Confirm
pkill,killall, andpgrepare not used. - Confirm Direct Mode is maintained with no Proxy and no Chat UI.
- Confirm
settings.json,models.json, and model files are not included in Git status or commits. - Confirm no user-specific fixed paths are added to Swift code or docs.
- Confirm
git status --short --untracked-files=allis clean before packaging. - Run the documented Release
xcodebuildcommand withCODE_SIGNING_ALLOWED=NO. - Confirm the Release build ends with
BUILD SUCCEEDED. - Confirm
MLXServerManager.appexists under the Release build products directory. - Confirm
.app,.dSYM, derived data, and build artifacts are not tracked by Git.
- Create the unsigned zip with
ditto -c -k --norsrc --noextattr --keepParent. - Confirm the zip file is created in a temporary or release staging location outside Git.
- Confirm the zip size with
du -h. - For the verified v0.9 workflow, confirm
/tmp/MLXServerManager-v0.9.0-unsigned.zipis284K. - Confirm
.zipfiles are not tracked by Git.
- Inspect the zip with
unzip -l. - Confirm the zip contains
MLXServerManager.app/. - Confirm the zip does not contain
settings.json. - Confirm the zip does not contain
models.json. - Confirm the zip does not contain model files or model directories.
- Confirm the zip does not contain Hugging Face cache.
- Confirm the zip does not contain
.envorHF_TOKEN. - Confirm the zip does not contain
.dSYMor derived data. - Confirm the zip does not contain AppleDouble
._*metadata files. - For the verified v0.9 workflow, confirm the zip entries are all under
MLXServerManager.app/.
- Unzip the asset into a temporary location.
- Confirm
MLXServerManager.appexists after unzip. - Launch the app with
open -n. - Confirm the app starts.
- Confirm the menu bar item appears.
- Confirm the main window opens.
- Confirm the verification process can be quit or terminated after the launch check.
- Confirm no verification process remains running.
- Confirm runtime settings are not bundled.
- Configure
mlx_lm.server executable pathin the app UI if needed. - Run Setup Diagnostics if local runtime settings are available.
- Quit the app normally.
- Confirm the intended Release asset is the unsigned zip only.
- Confirm release notes state the app is unsigned and not notarized.
- Confirm release notes mention Gatekeeper and quarantine caveats.
- Confirm release notes state runtime settings, model profiles, model files, Hugging Face cache, logs, and secrets are not included.
- Confirm release notes state Direct Mode remains
OpenAI-compatible client -> mlx_lm.server. - Confirm release notes state Ready checks use
/v1/modelsand the app does not send/v1/chat/completions.
- Confirm packaging does not run model inference.
- Confirm packaging does not start
mlx_lm.server. - Confirm the app does not send
/v1/chat/completions. - Confirm external processes are not stopped.
- Confirm
pkill,killall, andpgrepare not used. - Confirm Direct Mode is maintained with no Proxy and no Chat UI.
- Confirm no notarization, Developer ID signing, DMG creation, CI/CD, GitHub Actions, App Store distribution, Homebrew cask, or installer creation is performed in v0.9.
- Confirm no model download, model file deletion, Hugging Face cache deletion, or multiple simultaneous server management is introduced.
- Confirm no personal fixed paths are added to docs or Swift code.
- Direct Mode must not proxy inference traffic.
- Polling intervals should be conservative enough to avoid meaningful inference slowdown.
- Log reading should avoid unbounded memory growth.
- Memory monitoring should target only the managed pid.
.envandHF_TOKENmust not be committed.settings.jsonandmodels.jsonmust not be committed.- Model directories and model artifact files must not be committed.
- Logs must not be committed.
- User-specific absolute paths must not appear in source or committed configuration.
- Local
127.0.0.1usage is recommended for v0.1. - Do not expose the local server directly to the internet.
Use this checklist before creating a v1.0.0 tag or publishing a release asset.
- Confirm
git status --short --untracked-files=allis clean before final verification. - Confirm
git diff --checkreports no whitespace or conflict-marker problems. - Confirm the
v1.0.0tag does not exist yet. - Confirm tags
v0.1.0throughv0.9.0exist. - Confirm forbidden files are not tracked:
.app.zip.dSYMsettings.jsonmodels.json- model files
.envHF_TOKEN- logs
- build artifacts
- Confirm README, docs, AGENTS, and Swift code do not contain personal fixed paths.
Use commands like these from the repository root. Replace <personal-path> with any local personal path pattern that must not appear in committed files.
git status --short --untracked-files=all
git log --oneline --decorate -60
git tag --list
git diff --check
git ls-files '*.app' '*.zip' '*.dSYM' settings.json models.json '*.safetensors' '*.gguf' '*.bin' '.env' HF_TOKEN models logs .venv
grep -R -n "<personal-path>" README.md docs AGENTS.md MLXServerManager || true
grep -R -n "pkill\\|killall\\|pgrep" MLXServerManager || true
grep -R -n "/v1/chat/completions" MLXServerManager || trueThe /v1/chat/completions grep should show only copy-related UI or log text. Ready and Diagnostics code should continue to use /v1/models.
- Confirm Debug build ends with
BUILD SUCCEEDED. - Confirm Release build ends with
BUILD SUCCEEDED. - Confirm build outputs remain outside Git.
Example Debug build:
xcodebuild \
-project MLXServerManager.xcodeproj \
-scheme MLXServerManager \
-configuration Debug \
-derivedDataPath /tmp/MLXServerManagerDerivedData \
CODE_SIGNING_ALLOWED=NO \
buildExample Release build:
xcodebuild \
-project MLXServerManager.xcodeproj \
-scheme MLXServerManager \
-configuration Release \
-derivedDataPath /tmp/MLXServerManagerReleaseDerivedData \
CODE_SIGNING_ALLOWED=NO \
build- Confirm Start launches the selected managed
mlx_lm.server. - Confirm Stop stops only the app-managed process.
- Confirm Restart uses Stop -> port release wait -> Start.
- Confirm Port Check works.
- Confirm Ready Check uses
/v1/models. - Confirm the app does not execute
/v1/chat/completions. - Confirm Stop and Restart do not stop external
mlx_lm.serverprocesses.
- Confirm
mlx_lm.server executable pathis saved and restored. - Confirm Add Profile works.
- Confirm Edit Profile works.
- Confirm Delete Profile works.
- Confirm last profile deletion is blocked.
- Confirm dangerous runtime-affecting profile changes are blocked while running.
- Confirm selected model and running model are displayed separately.
- Confirm Restart-required state appears when selected and running models differ.
- Confirm Restart applies the selected model.
- Confirm Copy Base URL works.
- Confirm Copy Model ID works.
- Confirm OpenAI-compatible config copy works.
- Confirm Copy
curl /v1/modelsworks. - Confirm Copy
curl /v1/chat/completionscopies text only and the app does not execute it. - Confirm Connection Settings follow the selected model.
- Confirm Run Diagnostics works.
- Confirm
No diagnostics run yet.appears before the first diagnostics run. - Confirm Diagnostics summary shows pass, warning, and failure counts.
- Confirm Copy Diagnostics Summary works.
- Confirm LogView remains readable.
- Confirm Copy Logs works.
- Confirm Clear Logs works.
- Confirm the bounded log buffer behavior remains intact.
- Confirm menu bar Start works.
- Confirm menu bar Stop works.
- Confirm menu bar Restart works.
- Confirm menu bar Run Diagnostics works.
- Confirm menu bar Open App brings the app window forward.
- Confirm menu bar Quit exits normally.
- Confirm menu bar title has minimal Restart-required display when selected and running models differ.
- Confirm unsigned Release zip asset creation uses
ditto -c -k --norsrc --noextattr --keepParent. - Confirm Release build
.appexists before zipping. - Confirm zip contents are limited to
MLXServerManager.app/. - Confirm zip does not contain runtime settings, model profiles, model files, Hugging Face cache, logs, secrets,
.dSYM, DerivedData, or AppleDouble._*metadata files. - Confirm unzip launch verification works from a temporary directory.
- Confirm the verification app process exits and no verification process remains.
- Confirm the GitHub Release asset is the unsigned zip.
- Confirm release notes state unsigned app, no notarization, and possible Gatekeeper warnings.
Example zip creation:
cd /tmp/MLXServerManagerReleaseDerivedData/Build/Products/Release
ditto -c -k --norsrc --noextattr --keepParent \
MLXServerManager.app \
/tmp/MLXServerManager-v1.9.0-unsigned.zipExample zip verification:
unzip -l /tmp/MLXServerManager-v1.9.0-unsigned.zip
du -h /tmp/MLXServerManager-v1.9.0-unsigned.zip
unzip -l /tmp/MLXServerManager-v1.9.0-unsigned.zip | grep -E 'settings.json|models.json|\\.safetensors|\\.gguf|\\.bin|\\.env|HF_TOKEN|\\.dSYM|DerivedData|logs|__MACOSX|/\\._' || true- Confirm Direct Mode is maintained.
- Confirm the app does not execute
/v1/chat/completions. - Confirm Diagnostics are limited to
/v1/modelsreadiness. - Confirm no Proxy, Chat UI, LAN Web UI, App Intents, Auto unload, model downloader, model deletion, Hugging Face cache deletion, multiple concurrent server management, RAG, embedding manager, tool-call translation, telemetry, analytics, crash reporting, external log sending, cloud logging, persistent file logging, notarization, Developer ID signing, DMG, CI/CD, GitHub Actions release automation, App Store distribution, Homebrew cask, or auto updater is introduced.
- Confirm Swift code does not use
pkill,killall, orpgrep.
Use this checklist after v1.0.0 is tagged and the GitHub Release asset is available.
- Download
MLXServerManager-v1.0.0-unsigned.zipfrom the GitHub Release in a browser. - Confirm the downloaded file name is
MLXServerManager-v1.0.0-unsigned.zip. - Inspect the zip with
unzip -l. - Confirm all zip entries are under
MLXServerManager.app/. - Confirm the zip does not include
settings.json,models.json, model files,.env,HF_TOKEN,.dSYM, DerivedData, logs, Hugging Face cache,__MACOSX, or AppleDouble._*metadata files. - Extract the zip to a temporary folder.
- Launch the extracted app with
open -n. - If macOS reports that
MLXServerManageris damaged and must be moved to the Trash, confirm docs explain this can be Gatekeeper quarantine for an unsigned, non-notarized app. - Before removing quarantine, confirm the asset name, zip contents, and checksum are verified.
- If appropriate for local verification, remove quarantine with
xattr -dr com.apple.quarantine /path/to/MLXServerManager.appand launch again withopen -n /path/to/MLXServerManager.app. - Quit the verification app process.
- Confirm no verification process remains.
- Confirm README has a short Quick Start near the top.
- Confirm the Quick Start covers Release asset download, zip extraction, Gatekeeper quarantine warning, app launch, Settings, Model Profile, Run Diagnostics, Start, and Connection Settings copy actions.
- Confirm README explains that users must provide
mlx-lm. - Confirm README explains where to configure
mlx_lm.server executable path. - Confirm README explains Model Profile fields.
- Confirm README points users to Setup Diagnostics before Start.
- Confirm Connection Settings copy actions are understandable.
- Confirm Direct Mode and "app is not in the inference request path" are understandable.
- Confirm known limitations are easy to find.
- Confirm the Gatekeeper quarantine warning and
xattrrecovery path are easy to find.
Use this checklist for README first-run quick start maintenance.
- Confirm v1.0.2 changes are README/docs only.
- Confirm no Swift code changes are included.
- Confirm no Xcode project setting changes are included.
- Confirm no app binary, zip, tag, or release artifact is created.
- Confirm README includes a short Quick Start near the top.
- Confirm the Quick Start starts with the GitHub Release asset download.
- Confirm it names
MLXServerManager-v1.0.0-unsigned.zip. - Confirm it explains zip extraction and app launch.
- Confirm it warns that the app is unsigned and not notarized.
- Confirm it explains the possible damaged-app Gatekeeper quarantine warning.
- Confirm it says to verify the Release asset, zip contents, and checksum before using
xattr. - Confirm the
xattrcommand uses/path/to/MLXServerManager.appas a placeholder. - Confirm it explains that users must provide
mlx-lm,mlx_lm.server, and model files or Hugging Face cache. - Confirm it covers Settings, Model Profile, Run Diagnostics, Start, and Connection Settings copy actions.
- Confirm Direct Mode is short and clear.
- Confirm details link to distribution and known limitations docs.
- Confirm first-run empty state explains required setup.
- Confirm missing
mlx_lm.server executable pathis actionable. - Confirm missing or invalid model profile fields are actionable.
- Confirm managed server Start reaches Ready through
/v1/models. - Confirm external server detection explains not-managed ownership.
- Confirm Adopt External Server explains connection context only.
- Confirm Connection Settings copy actions are easy to find.
- Confirm Hermes Agent setup guidance uses OpenAI-compatible client wording.
- Confirm chat-completions examples remain copy-only helper text.
- Confirm Stop and Restart remain scoped to app-managed processes.
- Confirm no new feature scope is introduced.
- Confirm Direct Mode is maintained.
- Confirm the app is not described as a proxy or Chat UI.
- Confirm the app does not execute
/v1/chat/completions. - Confirm model downloader, auto updater, notarization, DMG, CI/CD, GitHub Actions release automation, Xcode project changes, and new app binary creation remain out of scope.
- Confirm no personal fixed paths are added.
- Confirm
.app,.zip,.dSYM, build artifacts, settings, model profiles, model files,.env, andHF_TOKENare not tracked.
- Confirm Start works.
- Confirm Stop targets only the app-managed process.
- Confirm Restart works.
- Confirm Port Check works.
- Confirm Ready Check uses
/v1/models. - Confirm Run Diagnostics works.
- Confirm Logs remain readable.
- Confirm Copy Logs and Clear Logs work.
- Confirm Menu bar Start, Stop, Restart, Run Diagnostics, Open App, and Quit work.
- Confirm Connection Settings copy actions work.
- Confirm v1.0.1 changes are limited to README/docs clarifications, small wording fixes, small error-message fixes, obvious bug fixes, or build/zip documentation corrections.
- Confirm no new feature scope is introduced.
- Confirm Direct Mode is maintained.
- Confirm the app does not execute
/v1/chat/completions. - Confirm no Proxy, Chat UI, LAN Web UI, App Intents, Auto unload, model downloader, model deletion, Hugging Face cache deletion, multiple concurrent server management, automatic updates, DMG, notarization, CI/CD, GitHub Actions release automation, or App Store distribution is introduced.