Apple-platform settings design for signalbox - which control shape fits which problem, what status text should say, and the anti-patterns this project keeps rediscovering. Use when adding or changing anything in the macOS Settings window, the iOS Settings tab, or any pane that pairs a control with live state.
68
81%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Covers macOS and iOS. Most of it is macOS because that is where signalbox's settings window lives; the iOS notes are marked.
Read this before adding a control. The recurring failure in this project is not bad copy, it is reaching for a checkbox plus a paragraph when the problem wanted a different shape entirely.
A settings pane is controls, not prose. If a control needs a paragraph to explain it, the paragraph is a symptom: either the label is wrong, the shape is wrong, or the explanation belongs in the docs. Apple's own guidance is blunt about it:
Minimize the number of settings you offer. Although people appreciate having control over an app, too many settings can make the experience feel less approachable, while also making it hard to find a particular setting.
Corollary that decides a surprising number of arguments:
When possible, prefer letting people modify task-specific options without going to your settings area.
If the option only matters while looking at a particular view, it belongs in that view. This is why signalbox's jumplist filter does not belong in Settings.
| The problem | The shape | Precedent |
|---|---|---|
| A binary that needs no explanation | Checkbox, label says it all, no caption | Any macOS app |
| A binary with one non-obvious consequence | Checkbox plus ONE caption line | System Settings throughout |
| A choice between 2-4 exclusive modes | Radio buttons, one caption line each | Little Snitch operation mode |
| A choice between many peers | List or table, not radios | Sharing pane |
| A background job with progress and results | Toggle in Settings; progress in the surface that uses it | Spotlight, Photos, iCloud Drive, Alfred |
| Something needing verification before use | Field plus an explicit Test button | WireGuard, Zotero sync |
| Diagnostics | Help menu, or a separated button group. Never an inline hyperlink | ~10 of 10 apps surveyed |
The row this project keeps getting wrong is the background job, and the answer is less UI than it looks. Apple does not put index progress in Settings at all:
The split is consistent: Settings holds the switch and the expensive action. The surface that uses the index holds the progress. That is also where progress is load-bearing - a search run against a half-built index silently misses things, and the person needs to know that at the moment they search, not in a pane they are not looking at.
So a checkbox with a status caption is wrong twice over: wrong shape, and wrong place.
From this project's own research (six independent agents, integration/remote-hub/scratch/synthesis.md):
Form sections with a footer per section; the footer is the one
place a sentence of explanation is idiomatic, and it is still one sentence.The feature is a local transcript index: a toggle, a long first build, a size on disk, and a rebuild. Four wrong answers were tried before the right one, and each is a pattern above.
indexing 62%. That is the moment the state changes what the user should
believe, because a search against a half-built index silently under-reports.The general lesson: ask where the state changes a decision, and put it there. Settings is where you change the setting, not where you watch the work.
components/specs/settings.html? The mock IS the spec, and
its status-string table is exhaustive - an unlisted string is a spec bug.integration/remote-hub/scratch/ holds a six-agent research fleet on this
exact question: synthesis.md (start here), research-r3-claude.md (HIG rules
and per-app conventions, the most reusable), research-r1-*.md (Tailscale,
WireGuard, Mullvad, Docker Desktop mode-and-status patterns), research-r4-kimi.md
(where diagnostics belong). synthesis.md also carries a copy bank of the best
strings found.
75945e8
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.