Back to Explorer
Beginner Friendly Open-Source Swift

Good First Issues in Swift

Explore curated starter issues in high-scoring Swift repositories. Every listed issue belongs to a welcoming repository scored by C-Rank™ on PR merge rates, review responsiveness, and first-timer acceptance.

Updated: Thu, 15 Oct 2026 UTC (Live GitHub Sync)
Real-Time Radar

Arm Issue Sniper for fresh Swift beginner issues

Beginner issues in welcoming S/A-Tier repositories get snatched within 15 minutes. Receive instant alerts on Discord, Telegram, or Email the minute a maintainer opens a new task.

Live Good First Issues (30)

Real-Time Open GitHub Issues
nikgrbn/finder-menu376 Tier B · 49 pts
#29Opened 2 days ago
Context menu items missing inside OneDrive folder on macOS

Finder Menu works in my Downloads folder, but its menu items do not appear inside my OneDrive folder. Environment: macOS 27.0.1 (build 26A434) Finder Menu 1.5.2, installed through Homebrew OneDrive folder located under ~/Library/CloudStorage/ Steps to reproduce: Open Downloads in Finder and right-click a file or folder. Finder Menu items appear as expected. Open the OneDrive root folder and right-click an item in its contents, rather than the sidebar. Finder Menu items are missing, while OneDrive’s own context menu items appear. Expected behavior: Finder Menu items should appear inside the OneDrive folder, as they do in Downloads. Troubleshooting: Confirmed that the Finder Menu extension is enabled and its process is running. Confirmed that menu items are not hidden in Finder Menu settings. Tested a locally modified build that explicitly adds the OneDrive root URL to FIFinderSyncController.directoryURLs. This did not resolve the issue. iBoysoft MagicMenu is also enabled on this

help wanted
1
nikgrbn/finder-menu376 Tier B · 49 pts
#14Opened 3 days ago
Drives show Finder Menu's icon in Finder's sidebar

Since v1.4.0, Finder Menu's right-click menu works on external drives, disk images and network shares (#2). The catch: Finder's sidebar shows Finder Menu's app icon for those drives instead of their own icons. Screenshot from #2. This is how Finder treats Finder extensions, not something Finder Menu does to the drives, and nothing on the drives changes. Finder only shows an extension's menu inside the folders the extension registers, and each drive has to be registered on its own. Finder then gives every registered drive except the startup disk the extension's app icon in its sidebar. Apple describes the sidebar icon in its Finder Sync documentation, and other apps that add menus to drives have the same problem (Keka, Service Station). Workaround: to keep the drive icons, untick Also on external and network drives in Finder Menu's settings (open Finder Menu from Spotlight, or run finder-menu settings). The menu then only appears on your Mac's own disk. Help wanted: I couldn't find a w

help wanted
mlemgroup/mlem251 Tier S · 75 pts
#3059Opened 4 days ago
While editing a comment or a post you cannot collapse the editor

Requirements There are no existing issues for this bug report. Description Unlike when creating a post or comment, you cannot collapse the input window. Mlem Version Mlem 2.6 (913)

easy
mlemgroup/mlem251 Tier S · 75 pts
#3057Opened 5 days ago
When using the select text feature, include URL and image link in the copyable text

Requirements There are no existing issues for this feature. This is a request for a single feature (create multiple issues for multiple feature requests). Description Currently if I tap the select text icon while replying to a post that was created with an image the selectable text starts with the post title, then skips to the first line, if any of the post. The url for the image is not provided. Any images in the post itself are included however. The same is true for a post created with a non image link.

easy
1
scholay/rimes1,062 Tier B · 42 pts
#83Opened 8 days ago
[Bug] Windows: state.json 丢失后 Uninstall.ps1 抛未处理异常,TSF 注册残留导致输入法无法卸载

RIMES 版本或 commit 1.1.0(安装包 RIMES-Windows-1.1.0-Setup.exe,commit 26635fc90ee5) 平台 Windows 10 19045 x64 / Windows 11 x64。下面的模板字段按 macOS 设计,本问题属 Windows 安装器,按 N/A 填写。 宿主应用与版本 N/A(安装器问题,与宿主无关) 输入方案与并击扩展状态 N/A Buffer / 剪贴板状态 N/A Spaces、全屏与显示器 N/A 最短复现步骤 用 1.1.0 的 EXE 正常安装 RIMES(C:\Program Files\RIMES\versions\1.1.0-<commit12>-<hash12>)。 删除或改名 C:\Program Files\RIMES\state.json(模拟被手工清理、被安全软件隔离,或安装中断)。 以管理员身份运行该版本的 Uninstall.ps1。 预期结果 给出可执行的错误提示,或者仍然能够完成注销。 实际结果 platforms/windows/installer/Uninstall.ps1 第 5 行 $state=Get-Content -LiteralPath "$InstallRoot\state.json" -Raw | ConvertFrom-Json 抛未捕获异常,脚本在任何注销动作之前退出。后果: x

bughelp wantedplatform: windowsneeds validation
6
#963Opened 10 days ago
Include a JSON body with the supported content type when returning a 406

Include a JSON body with the supported content type when returning a 406. Right now we only return the code, but figuring out what code (and thus content type) we were actually trying to return requires the user to dig into the OpenAPI doc/server codebase more: https://github.com/apple/swift-openapi-runtime/blob/49689c749c36542443e91c1bff4da2e2a5f28dc3/Sources/OpenAPIRuntime/Errors/RuntimeError.swift#L168

area/runtimekind/usabilitygood first issue
4
#17287Opened 11 days ago
cmux-tui client busy-loops (input thread 100% CPU) and ignores SIGTERM after its pty is deleted

Summary A cmux-tui client whose controlling terminal (pty) has disappeared does not exit. Its input thread spins at 100% of one CPU core indefinitely, and the process ignores SIGTERM. In my case it ran unnoticed for ~3 days (~24 h of CPU time) and kept the machine's fans at full speed. Environment Linux x86_64 (Ubuntu-based, kernel 7.0.0-38-generic), X11 npm package cmux 0.13.4 (cmux-tui-linux-x64); cmux --version prints cmux 0.1.0 (ec4cbd4fdd16526d5653d7a1f76496ef785f2a2a; ghostty abd40f6e472d57f2d4bb182004bb5f3fac8df961) Client was the process that auto-started the headless session server (--headless --session main), i.e. the headless server was its child. What I observed Client cmux-tui (non-headless), started 3 days earlier, TTY column ?. ls -l /proc/<pid>/fd/0 /proc/<pid>/fd/1 -> both /dev/pts/1 (deleted). So the terminal it was launched in went away at some point (I don't know exactly how it was closed). top -H -p <pid>: one thread named input at ~100% CPU (state R), all other

bughelp wantedS2: majorarea: terminal
4
manaflow-ai/cmux28,154 Tier A · 67 pts
#17144Opened 12 days ago
Initial-command SSH surfaces lack TTY metadata: native image paste inserts Mac-local path instead of uploading

Bug: initial-command SSH surfaces silently fall back to Mac-local image paths Related: #1660 (SSH image paste). This is a narrowed, reproducible missing-TTY-metadata case, not a request to add a new upload mechanism. cmux version 0.64.25 macOS version 27.0.1 Mac chip Apple Silicon (arm64) Installation method Native /Applications/cmux.app; exact original install method unknown (no Homebrew Caskroom entry). Can you reproduce this on cmux NIGHTLY? I could not test NIGHTLY: this is an interactive user's machine; changing their installed app was out of scope. Which part of cmux is this about? input / remote / terminal shell integration Environment cmux v0.64.25, macOS client, Linux OpenSSH server. Reproduced with a plain remote shell, a remote PTY-attached coding-agent TUI, and that TUI viewed through a terminal multiplexer. No multiplexer-specific change is necessary. Minimal anonymized repro Create a cmux terminal surface using initial_command: "ssh -t example-host bash --noprofile --nor

help wantedS3: minorarea: inputarea: remote
2
#17128Opened 12 days ago
Dark mode renders darker workspace colors brighter, so a dark row fill can't be set

Bug description In dark appearance, a workspace color's row fill gets brighter as the configured color gets darker. Picking a near-black custom color produces a lighter fill than a mid-tone one, so there's no way to get a dark, low-contrast row fill with indicatorStyle: "solidFill". Measured on screen (solidFill, sidebar tint #000000 at 0.88, center of the row fill): Configured color HSB brightness Rendered fill #0E151B 0.11 #53759A #67879E 0.62 #536C82 The darker input renders lighter, and more saturated. The cause is brightenedForDarkAppearance in Sources/WorkspaceTabColorSettings.swift: let boostedBrightness = min(1, max(brightness, 0.62) + ((1 - brightness) * 0.28)) The (1 - brightness) * 0.28 term is added on top of the 0.62 floor, so brightness 0.11 maps to 0.87 while 0.62 maps to 0.73. The output is lowest at an input of 0.62 and rises on both sides. displayNSColor applies this to every color whenever colorScheme == .dark, and there's no setting to opt out. Expected

help wantedS3: minorarea: workspacesarea: appearance
2
#16939Opened 12 days ago
Remote paste/drop types an escaped \~/ path that agent CLIs don't recognise as a file

cmux version 0.64.25-nightly.3701906366 macOS version 26.6.2 Mac chip Apple Silicon (M1/M2/M3/M4) Installation method Direct download (DMG) Can you reproduce this on cmux NIGHTLY? Yes, it still reproduces on NIGHTLY Bug description Since #16523, a file pasted or dropped onto a remote pane (cmux ssh-tmux mirror) is uploaded to ~/.cache/cmux/paste//cmux-paste-.. Making it private is a good change. But the pane now receives ~/.cache/cmux/paste/…/cmux-paste-….png, with the leading ~ backslash-escaped. A shell treats ~ as a literal ~, so the path doesn't resolve, and Claude Code no longer recognises the paste as an image. Before #16523, the /tmp/cmux-drop-….png path was attached as [Image #1]. Expected behavior The pane receives a path that resolves on the remote host: the absolute path (e.g. /home/u/.cache/cmux/paste/…/cmux-paste-….png), so agent CLIs attach it as an image the way they did with /tmp. The upload's maintenance script already runs on the host and could report $HOME.

bughelp wantedS2: majorarea: remote
4
#16921Opened 12 days ago
Add an always-confirm option for closing workspaces

Feature request Please add an option to always ask for confirmation before closing a workspace, even when cmux does not detect a running foreground process or other state that currently triggers the close warning. Why I accidentally closed a long-lived iOS migrations workspace containing many panes and ongoing project context. These workspaces are durable project environments that I keep around over time; whether a process happens to be running at the moment is not a good measure of whether the workspace is safe to close. Rebuilding the layout and recovering sessions took extra work, and I do not want an idle-looking workspace to disappear from one mistaken close action. Requested behavior Add a preference to always confirm workspace closure, independent of process/activity detection. Apply it consistently to workspace close actions such as the sidebar close action and the close-workspace shortcut. Keep the existing conditional behavior available for users who prefer it. A per-worksp

help wantedarea: workspaces
2
apple/swift-temporal-sdk317 Tier A · 58 pts
#190Opened 13 days ago
Migrate to the InMemoryLogHandler, InMemoryTracer and StreamMetricsFactory

Since the Temporal SDK was first introduce, swift-log, swift-distributed-tracing and swift-metrics all introduced in-memory instruments out of the box. The Temporal SDK currently maintains custom versions of these in the SDK code base. We should replace them with the upstream ones.

good first issue
1
#164Opened 13 days ago
Decision: authorize multi-user Cloud staging and rollout gates

Decision requested Draft PR #163 is source-complete and exact-head green at e27c171eddaa179565fd3544ffad081ffcbcac2e, but it is deliberately non-deployable. The end-to-end completion audit is in apps/cloud/docs/production-readiness-audit.md; proposed ADR-0008 is in docs/architecture/adr-0008-multi-user-healthmd-cloud-production.md. The source verifier passes only in the fail-closed sense: 13 rollout gates remain unchecked and five owner roles are unassigned. No production or staging resource should be provisioned until this issue records the decisions below. Do not post credentials, resource IDs, email addresses, device identifiers, production identifiers, or health information here. Owner response Product owner: <name> Security owner: <name> Privacy/legal owner: <name> Operations owner: <name> Mobile owner(s): <name(s)> ADR-0008: approve / request changes Region and data residency: <decision> Retention and backup-expiry disclosure: <decision> RPO/RTO and deletion SLA: <decision> Iden

help wantedquestion
lab421/forel789 Tier B · 51 pts
#60Opened 13 days ago
All file names to lower case

As I haven't found a Get Started with examples, I place my question here. On macOS, how can establish a rule which automatically renames all files to lower case and replaces spaces with underscores? I have seen for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done in https://stackoverflow.com/a/7787159/20002111 and, hence, have thought [ Run script ] [ for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]" tr " " "_"`"; done ] would be all I need, but it looks suspect. Does Forel pass files or file names? A single one or all at once? Anyways, thank you very much for sharing this promosing tool with us!

help wanted
1
#16494Opened 13 days ago
Setting to hide only the native claude_code sidebar pill

Some of us drive the sidebar from our own tooling through cmux set-status, for example a per-workspace "waiting for you" or "server up" pill. In that setup the native claude_code pill (Running / Idle / Needs input) repeats information or contradicts it. Today the only switch is sidebar.showCustomMetadata. It hides every status pill, including those set by integrations. automation.claudeCodeIntegration goes further and turns off the hooks themselves, which also disables notifications, session restore and the agent lifecycle that hibernation relies on. Ask: a setting that hides only the native claude_code pill and leaves the following unchanged: the Claude hooks and the session store (claude-hook-sessions.json), hibernation and notifications; every other status pill. Possible shapes: sidebar.showAgentStatusPill: false, or a more general sidebar.hiddenStatusKeys: ["claude_code"] that would work for any key.

enhancementhelp wantedarea: sidebararea: settings
3
#16415Opened 13 days ago
OMX HUD detection classifies unrelated command text as a HUD

Class: Unbounded HUD command detection Surfaced by codex-review round 4 on #16063, pre-existing on upstream/main (not introduced by that PR; the touched files were reverted verbatim to upstream, which still has this bug). Sites: CLI/CMUXCLI+TmuxCompatHUDSupport.swift:134, :138 Packages/macOS/CmuxWorkspaces/Sources/CmuxWorkspaces/Session/WorkspaceHermesAgentCommandBootstrapper.swift:326 Evidence: after matching the word hud, the split classifier accepts any command launched through the OMX shim (CLI/CMUXCLI+TmuxCompatHUDSupport.swift:127, :134), so echo hud takes the HUD branch and skips normal pane tracking and equalization (CLI/cmux.swift:27164, :27258, :27276). The substring check also treats text like echo 'notomx hud' as a HUD (CLI/CMUXCLI+TmuxCompatHUDSupport.swift:138). The restore classifier accepts incidental omx/hud text without requiring --watch (WorkspaceHermesAgentCommandBootstrapper.swift:326); restore then passes the accepted command to a one-shot launcher (Sources/Dock

help wantedS3: minorneeds-triage
2
scinfu/SwiftSoup5,125 Tier B · 51 pts
#463Opened 14 days ago
Stack overflow in .html() serialization on deeply nested HTML (outerHtmlFast recursion - same pattern as #393, not covered by #396)

Summary PR #396 fixed recursive deinit stack overflow for deeply nested HTML (#393). The same recursive pattern exists in the serialization path (outerHtmlFast / .html()) and was not covered by that fix. Calling .html() on a document with ~2500+ nested elements overflows the stack on both background threads (512 KB) and the main thread (8 MB). Environment SwiftSoup 2.13.9 (via SPM) iOS 26, Swift 6.x, Xcode 26.x Reproduction import SwiftSoup func makeDeepHTML(depth: Int) -> String { var s = "<html><body>" for _ in 0..<depth { s += "<div>" } s += "Hello" for _ in 0..<depth { s += "</div>" } s += "</body></html>" return s } let html = makeDeepHTML(depth: 3000) let doc = try! SwiftSoup.parse(html) let _ = try! doc.body()!.html() // ← EXC_BAD_ACCESS (code=2) On a 512 KB background thread, depths as low as ~300 can overflow. Real-world trigger Some desktop email clients wrap each reply in a new <div>. After enough back-and-forth in a business email thread, the

bughelp wanted
4
tddworks/ClaudeBar1,535 Tier A · 57 pts
#342Opened 14 days ago
Migrate Kiro to a JSON definition

Part of #331. Move Kiro (kiro) from its hand-written provider and probe to a JSON definition run by the generic Provider and DataSource, as #329 did for Claude and Codex. What it does today kiro-cli with input /usage\n/quit\n as a plain process (not a PTY), timeout 30s Bonus credits: used/total → weekly, expires in N days → reset now + N days Credits (used of total → Monthly, resets on MM/DD → this year's date, next year if past No match → parseFailed("No quota data found in Kiro CLI output") What the definition will need a non-PTY CLI fetch (also Oh My Pi) text mapping: left = capture ÷ capture, relative "in N days" and MM/DD resets — or a script with humanDate() Each ability goes into Modules/DataSources generically, test-first, and gets a row in TARGET_ARCHITECTURE §8.1 — never vendor-named Swift, never a Probe name. Shared needs are tracked in the epic. Must keep working providers.kiro.isEnabled the UI, unchanged Done when Modules/Providers/Resources/Provide

enhancementgood first issueprovider-migration
tddworks/ClaudeBar1,535 Tier A · 57 pts
#341Opened 14 days ago
Migrate Amp to a JSON definition

Part of #331. Move Amp (ampcode) from its hand-written provider and probe to a JSON definition run by the generic Provider and DataSource, as #329 did for Claude and Codex. What it does today amp usage --no-color (PTY), timeout 8s; non-zero exit → executionFailed Email from Signed in as (\S+) ( Credit line <label>: $x / $y remaining → model quota, left = x / y; balance line <label>: $x remaining → 100% with dollarRemaining Labels: "amp free" → Free, "individual credits" → Individual No lines → parseFailed("No valid credit lines found in amp usage output") What the definition will need text mapping: left = capture ÷ capture, money rows, label renames — or a small script honour the CLI's exit code a balance with no ceiling (Left law) Each ability goes into Modules/DataSources generically, test-first, and gets a row in TARGET_ARCHITECTURE §8.1 — never vendor-named Swift, never a Probe name. Shared needs are tracked in the epic. Must keep working providers.ampcode.is

enhancementgood first issueprovider-migration
#335Opened 14 days ago
Migrate Vercel AI Gateway to a JSON definition

Part of #331. Move Vercel AI Gateway (vercel-gateway) from its hand-written provider and probe to a JSON definition run by the generic Provider and DataSource, as #329 did for Claude and Codex. What it does today GET https://ai-gateway.vercel.sh/v1/credits, Bearer, timeout 30s Key: env var from vercel.authEnvVar (default AI_GATEWAY_API_KEY), then ClaudeBar Keychain vercel-ai-gateway-api-key balance (number or numeric string) → AI Gateway Credits quota with dollarRemaining; percentRemaining always 100 401/403: "Vercel rejected the API key. New keys may take a moment to activate." Config card: env var name, save/delete key What the definition will need setting credential + env var name from a setting a balance with no ceiling (Left law, slice 4) Each ability goes into Modules/DataSources generically, test-first, and gets a row in TARGET_ARCHITECTURE §8.1 — never vendor-named Swift, never a Probe name. Shared needs are tracked in the epic. Must keep working vercel.authEnvVar Key

enhancementgood first issueprovider-migration
tddworks/ClaudeBar1,535 Tier A · 57 pts
#332Opened 14 days ago
Migrate DeepSeek to a JSON definition

Part of #331. Move DeepSeek (deepseek) from its hand-written provider and probe to a JSON definition run by the generic Provider and DataSource, as #329 did for Claude and Codex. What it does today GET https://api.deepseek.com/user/balance, Authorization: Bearer <key>, timeout 30s Key: env var named by deepseek.authEnvVar (default DEEPSEEK_API_KEY), then ClaudeBar's saved key (com.claudebar.credentials.deepseek-api-key) Maps balance_infos[0].total_balance (decimal string, billing currency) to a Balance quota; percentRemaining 100, or 0 when is_available is false; subtitle Paid: ¥x · Granted: ¥y Empty balance_infos → noData; bad amount → parseFailed Config card: env var name, save/delete key What the definition will need setting credential (key saved by ClaudeBar) and env var name from a setting a balance with no ceiling and a currency from the response — waits on the Left law (slice 4) or keeps today's 100% until then the 0-when-unavailable rule and the paid/granted subtitl

enhancementgood first issueprovider-migration
#16401Opened 14 days ago
⇧⌘←/→ doesn't select to line start/end in the command palette rename field

cmux version 0.64.25 (106) macOS version macOS 27.0 (26A428) Mac chip Apple Silicon (M1/M2/M3/M4) Installation method Direct download (DMG) Can you reproduce this on cmux NIGHTLY? I could not test NIGHTLY Bug description In the command palette's rename field, ⇧⌘← and ⇧⌘→ do nothing. They should select to the start or end of the line. This affects Rename Tab (⌘R, or Rename Tab in a surface tab's context menu) and Rename Workspace (⇧⌘R). Without Shift, ⌘← and ⌘→ move the caret as expected, and ⌥⇧← and ⌥⇧→ select by word as expected. The sidebar's inline workspace rename and the workspace context-menu rename dialog don't have this problem, because they aren't in the palette. The cause is shouldConsumeShortcutWhileCommandPaletteVisible in Sources/App/ShortcutRoutingSupport.swift. While the palette is open, cmux's app-level shortcut handler swallows every ⌘ key equivalent except a short list of text-editing keys. The arrow keys (123 and 124) are only

help wantedS3: minorarea: command-palette
4
manaflow-ai/cmux28,154 Tier A · 67 pts
#16379Opened 14 days ago
Cloud browser readiness probe ignores its timeout when proxy headers stall

Problem CloudBrowserRouting.desktopIsReachable advertises a bounded readiness probe, but a Cloud browser proxy that accepts CONNECT and never sends response headers can block the entire caller past the configured deadline. A hung desktop probe is used before Cloud Desktop healing, so a pane can remain in .connecting instead of reaching the documented rebind/failure path. Source evidence (origin/main) Current source revision: 70c83fd8423fca978cd4c4d53b61c701f39c0da2. CloudBrowserRouting.swift:14-18 accepts a caller timeout (default 2s). CloudBrowserRouting.swift:29-36 puts CONNECT/HEAD reads inside withDeadline. CloudBrowserRouting.swift:46-59 cancels the losing task but must await the task group's child before returning. CloudBrowserRouting.swift:62-76 awaits receiveChunk for headers. NWConnection+Async.swift:54-65 wraps NWConnection.receive in a plain checked continuation with no cancellation handler. NWConnection+Async.swift:86-97 does the same for sendAll. withDeadline therefore c

bughelp wantedS2: majorarea: cloud
1
#16351Opened 14 days ago
tmux_hud_test.go: mirror split recorder races on its mode flag

TestTmuxSplitWindowMirrorRoutedPlainSplitSkipsLocalWork sets recorder.acceptSplits after startHudSplitRecorder has already started the listener goroutine, which reads the same field for every surface.split it answers. A race-enabled go test run can report a data race between the write in the test and the read in the recorder; the request log is mutex-guarded, the flag is not. Introduced by #16102, which added the recorder's mirror-route mode. The fix is to set the flag before the listener starts (a constructor option on startHudSplitRecorder) instead of writing it afterwards. Evidence: daemon/remote/cmd/cmuxd-remote/tmux_hud_test.go:191 (read in the recorder), :330 (write in the test).

bughelp wantedS3: minorarea: layout
2
#16349Opened 14 days ago
OpenCode V2: plugins run in the shared background service, so CMUX_SURFACE_ID points at the wrong surface

Summary #14509 moved the generated OpenCode plugins to the V2 { id, setup } shape, so they now load. They are still server plugins, though. In OpenCode V2, server plugins run inside one shared background service (opencode serve --service). Every TUI connects to that service. The service is not a child of the TUI's terminal. Result: on current main, both plugins read CMUX_SURFACE_ID and CMUX_WORKSPACE_ID from process.env. That env belongs to whichever cmux terminal first started the service, not to the terminal that shows the session. Session-restore records and Feed events go to the wrong surface, and you see no error. Environment cmux 0.64.25 (106) [b685a27]. Source checked on main after #14509 (d2bc43e7). OpenCode v2.0.21, shared background service (default) macOS, Apple Silicon Evidence One service process, launched by launchd, hosts the sessions of two TUIs: 98351 1 /Users/me/.opencode/bin/opencode serve --service 6135 6101 opencode # TUI A 4073 89129 opencode

bughelp wantedS2: majorarea: agents
2
manaflow-ai/cmux28,154 Tier A · 67 pts
#16325Opened 14 days ago
Workspace switching degrades to 2.5–4 s after ~1 day uptime; main thread stuck in _CFXNotificationRegistrarRemoveObservers (0.64.25)

cmux version 0.64.25 (106), auto-updated via Sparkle on 2026-09-21. Previous version on this machine was 0.64.22, which ran for ~6 weeks without this problem. macOS version macOS 27.0 (26A428) Mac chip Apple M1 Max, 64 GB RAM, 10 cores. External 5K Studio Display + built-in display. Installation method DMG, auto-updated via Sparkle (stable channel) Can you reproduce this on cmux NIGHTLY? Not tried. The problem needs ~24h+ of continuous uptime with agent workspaces to become severe, so a nightly test would take a day. Bug description After cmux has been running continuously for about a day while hosting Claude Code / Codex workspaces, workspace switching degrades from ~70 ms to 2.5–4 s, the whole app feels sluggish, and RSS grows to ~2.3 GB. Quitting and relaunching cmux fully restores performance. Closing idle workspaces/agents while cmux stays running does not help — the slowness is inside the cmux process itself. Likely related to #9231 (regression since 0.64.18/0.64.20) and #573

bughelp wantedS2: majorarea: workspaces
6
#16321Opened 14 days ago
Localization checker rejects valid numbered printf argument reordering

The localization checker rejects valid translations that change argument order with numbered printf placeholders. Contributors must retain English word order or fail the catalog gate even though the translated format refers to the same arguments and types. At current origin/main 4e9d779888279b178a98c492b6efb350a459649c, scripts/localization_catalog.py:110-130 returns placeholders in text order, and validate_localization at lines 264-266 compares those lists directly. For example: English: Move %@ to %@ Japanese: %2$@ に %1$@ を移動 Expected signature: [(1, '@'), (2, '@')] Actual signature: [(2, '@'), (1, '@')] The Japanese format still consumes argument 1 as an object and argument 2 as an object. Its order is valid numbered printf syntax. The checker reports a mismatch solely because their textual order differs. The same problem occurs for a mixed-type format: Count %d; name %@ and 名前 %2$@、件数 %1$d. Reproduced with a disposable catalog containing only the English/Japane

bughelp wantedS3: minorarea: localization
2
#16311Opened 14 days ago
CLI automation verbs silently ignore trailing arguments and unknown flags

Summary The cmux automation CLI silently accepts trailing positionals and unknown flags for several verbs, then executes the requested action as if the command were valid. Current-main evidence CLI/CMUXCLI+Automation.swift:10-42 parses rest but: list sends automation.list without validating rest. show, enable, and disable validate only rest.first; extra tokens such as extra or --typo are ignored. test delegates to parseAutomationEvent, which searches for --event but does not reject unrelated tokens before/after it. logs delegates to automationLimit, so its acceptance of unrelated flags/positionals should be made explicit and tested alongside the other verbs. Examples that currently reach the socket path instead of failing locally: cmux automation list --typo cmux automation show rule-id unexpected cmux automation enable rule-id --typo cmux automation disable rule-id unexpected Impact Typos can report or mutate automation state while the user believes the command was rejected. This i

bughelp wantedS2: majorarea: cli
1
altic-dev/FluidVoice12,055 Tier A · 65 pts
#1038Opened 14 days ago
Accidental cancel recovery

Problem I accidentally just dictated for 30 minutes and pressed my cancel shortcut (for example esc) and lost my whole transcription sadly. Proposed solution Make sure that dictation cancel shortcut doesn't fully delete transcription but moves it to a "trash section" that auto delete's after 10 minutes or some time interval set by the user. Alternatives considered No response

enhancementhelp wantedkeep-open
1

Top Swift Repositories with Beginner Issues (20)

Updated Daily via GitHub GraphQL
iliyami
MacSai
iliyami/MacSai
S•Elite
1.8k·Swift

Mac Sai: the open-source Mac cleaner, optimizer, and malware scanner. A free, Apple-notarized alternative to CleanMyMac, built with Swift 6 and SwiftUI.

#appkit#cleanmymac#cleanmymac-alternative
84%
Merge Rate
8h
Review Time
100%
1st-Timers
3 GFI
Scorecard
mlemgroup
mlem
mlemgroup/mlem
S•Elite
251·Swift

Mlem for Lemmy

#activitypub#ios#lemmy
95%
Merge Rate
9h
Review Time
100%
1st-Timers
17 GFI
Scorecard
swiftlang
swift
swiftlang/swift
S•Elite
70.5k·Swift

The Swift Programming Language

73%
Merge Rate
8h
Review Time
53%
1st-Timers
12 GFI
Scorecard
swiftlang
swift-java
swiftlang/swift-java
S•Elite
1.3k·Swift

Java interopability support for Swift

87%
Merge Rate
11h
Review Time
92%
1st-Timers
1 GFI
Scorecard
mozilla-mobile
firefox-ios
mozilla-mobile/firefox-ios
S•Elite
13.1k·Swift

Firefox for iOS

#browser#firefox#ios-app
82%
Merge Rate
-
Review Time
81%
1st-Timers
6 GFI
Scorecard
Clash-FX
ClashFX
Clash-FX/ClashFX
S•Elite
275·Swift

ClashFX — macOS proxy tool with Enhanced Mode (TUN)

#clash#macos#mihomo
93%
Merge Rate
7h
Review Time
100%
1st-Timers
1 GFI
Scorecard
pluk-inc
markdown-preview
pluk-inc/markdown-preview
S•Elite
2.5k·Swift

A simple Markdown viewer for reading .md files

#macos#markdown
85%
Merge Rate
2d
Review Time
75%
1st-Timers
2 GFI
Scorecard
TypeWhisper
typewhisper-mac
TypeWhisper/typewhisper-mac
S•Elite
1.8k·Swift

Local speech-to-text for macOS on-device AI, fully private, optional cloud

#apple-silicon#dictation#macos
88%
Merge Rate
-
Review Time
64%
1st-Timers
1 GFI
Scorecard
element-hq
element-x-ios
element-hq/element-x-ios
S•Elite
951·Swift

Next generation Matrix client for iOS built with SwiftUI on top of matrix-rust-sdk.

#matrix
82%
Merge Rate
-
Review Time
50%
1st-Timers
1 GFI
Scorecard
chattymin
PokeTokenBar
chattymin/PokeTokenBar
A•Welcoming
515·Swift

Use your tokens to raise, evolve, and collect Pokémon! 🥚

#ai-coding#claude-code#codex
64%
Merge Rate
11h
Review Time
64%
1st-Timers
2 GFI
Scorecard
awaseem
foqos
awaseem/foqos
A•Welcoming
871·Swift

Foqos allows you to lock apps behind the tap of a NFC tag or scan of a QR code. Free and open source alternative to Brick, Opal, ScreenZen, Unpluq, Scrolly, Blok and more!

#ios-app#productivity#swiftui
77%
Merge Rate
11h
Review Time
33%
1st-Timers
3 GFI
Scorecard
Tahul
space-rabbit
Tahul/space-rabbit
A•Welcoming
460·Swift

Space Rabbit removes animations when switching macOS Spaces. Reclaim hours of your time every month!

70%
Merge Rate
1h
Review Time
100%
1st-Timers
3 GFI
Scorecard
meshtastic
Meshtastic-Apple
meshtastic/Meshtastic-Apple
A•Welcoming
945·Swift

Apple iOS, iPadOS, macOS, watchOS and visionOS Clients For Meshtastic

82%
Merge Rate
2d
Review Time
45%
1st-Timers
1 GFI
Scorecard
manaflow-ai
cmux
manaflow-ai/cmux
A•Welcoming
28.2k·Swift

Open source Ghostty-based macOS terminal with vertical tabs and notifications for AI coding agents. Built for multitasking, organization, and programmability.

#amp#claude-code#cli
43%
Merge Rate
-
Review Time
15%
1st-Timers
214 GFI
Scorecard
0xCUB3
wBlock
0xCUB3/wBlock
A•Welcoming
3.0k·Swift

The next-generation ad blocker for Safari. Free and open source on macOS, iOS, iPadOS, and visionOS, with 750,000 rules, userscripts, userstyles, and an element zapper.

#ad-blocker#adblock#adblocker
68%
Merge Rate
-
Review Time
75%
1st-Timers
1 GFI
Scorecard
getsentry
sentry-cocoa
getsentry/sentry-cocoa
A•Welcoming
1.1k·Swift

The official Sentry SDK for iOS, tvOS, macOS, watchOS, iPadOS and visionOS.

#crash-reporting#crash-reports#error-handler
79%
Merge Rate
3d
Review Time
67%
1st-Timers
1 GFI
Scorecard
darrylmorley
whatcable
darrylmorley/whatcable
A•Welcoming
8.9k·Swift

macOS menu bar app that tells you, in plain English, what each USB-C cable plugged into your Mac can actually do

#apple-silicon#hardware-info#iokit
79%
Merge Rate
2d
Review Time
44%
1st-Timers
1 GFI
Scorecard
altic-dev
FluidVoice
altic-dev/FluidVoice
A•Welcoming
12.1k·Swift

Fastest and only macOS Dictation app with on-device STT and custom trained AI enhancement model. Windows pre-build available! A local Wispr Flow alternative. DM us on X exclusive model access! 😉 - https://x.com/fluidvoiceapp

#ai#dictation#ios
47%
Merge Rate
-
Review Time
33%
1st-Timers
3 GFI
Scorecard
swiftlang
sourcekit-lsp
swiftlang/sourcekit-lsp
A•Welcoming
3.9k·Swift

Language Server Protocol implementation for Swift and C-based languages

72%
Merge Rate
16h
Review Time
77%
1st-Timers
3 GFI
Scorecard
moreSwift
swift-cross-ui
moreSwift/swift-cross-ui
A•Welcoming
1.8k·Swift

A cross-platform declarative UI framework, inspired by SwiftUI.

#appkit#declarative-ui#gtk
75%
Merge Rate
2d
Review Time
50%
1st-Timers
2 GFI
Scorecard

How to make your first Swift open-source pull request

Finding approachable Good First Issues in Swift allows you to build real-world software engineering experience. Instead of submitting PRs to abandoned repositories, GetMerged verifies maintainer review speeds and first-timer acceptance rates before you write a single line of code.

Select any issue above to claim it directly on GitHub, or click a repository to inspect full maintainer review turnaround metrics and triage guidance!

Get this week's top welcoming repos + fresh Good First Issues for Swift

Free weekly email, scoped to Swift. No account needed - confirm once and unsubscribe anytime.