@mmerterden/multi-agent-pipeline 20.2.0 → 20.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +923 -1
- package/README.md +104 -81
- package/README.tr.md +103 -62
- package/docs/FIGMA_PIPELINE.md +35 -35
- package/docs/adr/0006-skills-core-external-split.md +1 -1
- package/docs/adr/0007-multi-tool-adapter-framework.md +6 -0
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +7 -0
- package/docs/architecture.md +50 -14
- package/docs/best-practices.md +1 -1
- package/docs/ecosystem.md +56 -32
- package/docs/facts.json +10 -10
- package/docs/features.md +97 -5
- package/docs/recovery-guide.md +7 -14
- package/docs/server-readiness.md +31 -24
- package/index.js +1 -1
- package/install/_common.mjs +3 -5
- package/install/_platform-filter.mjs +23 -1
- package/install/_unattended-profile.mjs +321 -75
- package/install/claude.mjs +51 -10
- package/install/codex.mjs +2 -0
- package/install/copilot.mjs +2 -0
- package/install/index.mjs +30 -17
- package/install/templates/claude-hooks.json +16 -5
- package/install/templates/copilot-instructions.md +1 -1
- package/install/templates/multi-agent-autopilot-awake.plist.template +48 -0
- package/install/templates/multi-agent-autopilot.plist.template +12 -5
- package/install/unattended-profile-legacy.json +80 -0
- package/manifest.json +616 -483
- package/package.json +8 -3
- package/pipeline/agents/code-reviewer.md +10 -0
- package/pipeline/agents/plan-critic.md +98 -0
- package/pipeline/agents/security-auditor.md +10 -0
- package/pipeline/agents/task-clarifier.md +10 -0
- package/pipeline/commands/multi-agent/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/analysis/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +12 -1
- package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/autopilot/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/autopilot-off/SKILL.md +36 -6
- package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +77 -12
- package/pipeline/commands/multi-agent/autopilot-status/SKILL.md +29 -8
- package/pipeline/commands/multi-agent/build-optimize/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/channels/SKILL.md +9 -9
- package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/create-jira/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/design-check/SKILL.md +16 -11
- package/pipeline/commands/multi-agent/diff-explain/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/doctor/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/feedback/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/forget/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/graph/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/help/SKILL.md +37 -39
- package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/issue/SKILL.md +7 -1
- package/pipeline/commands/multi-agent/jira/SKILL.md +7 -1
- package/pipeline/commands/multi-agent/kill/SKILL.md +9 -3
- package/pipeline/commands/multi-agent/language/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/log/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/manual-test/SKILL.md +5 -0
- package/pipeline/commands/multi-agent/model/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/prune-logs/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/purge/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/refactor/SKILL.md +5 -0
- package/pipeline/commands/multi-agent/research/SKILL.md +49 -0
- package/pipeline/commands/multi-agent/resume/SKILL.md +29 -6
- package/pipeline/commands/multi-agent/review/SKILL.md +28 -9
- package/pipeline/commands/multi-agent/review-analysis/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/review-issue/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/review-jira/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/route-off/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/route-on/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/route-status/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/routines/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/save/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/scaffold/SKILL.md +47 -0
- package/pipeline/commands/multi-agent/scan/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/search/SKILL.md +12 -8
- package/pipeline/commands/multi-agent/security-review/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/serve/SKILL.md +62 -0
- package/pipeline/commands/multi-agent/setup/SKILL.md +27 -36
- package/pipeline/commands/multi-agent/stack/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/status/SKILL.md +10 -9
- package/pipeline/commands/multi-agent/steer/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/store-ready/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/sync/SKILL.md +13 -13
- package/pipeline/commands/multi-agent/test/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-accessibility/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-dark-mode/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-dynamic-type/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-screenshots/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/uninstall/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/update/SKILL.md +4 -0
- package/pipeline/contract/CHANGELOG.md +74 -0
- package/pipeline/contract/README.md +126 -0
- package/pipeline/contract/build.mjs +427 -0
- package/pipeline/contract/fixtures/answer-result.json +11 -0
- package/pipeline/contract/fixtures/error-invalid-request.json +8 -0
- package/pipeline/contract/fixtures/error-unauthorized.json +5 -0
- package/pipeline/contract/fixtures/error-unsigned.json +5 -0
- package/pipeline/contract/fixtures/issues-empty.json +18 -0
- package/pipeline/contract/fixtures/launch-plan.json +31 -0
- package/pipeline/contract/fixtures/runs-awaiting-question.json +70 -0
- package/pipeline/contract/fixtures/runs-empty.json +6 -0
- package/pipeline/contract/fixtures/runs-failed.json +84 -0
- package/pipeline/contract/fixtures/runs-old-schema.json +70 -0
- package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +101 -0
- package/pipeline/contract/fixtures/runs-pr-opened.json +106 -0
- package/pipeline/contract/fixtures/runs-running.json +84 -0
- package/pipeline/contract/fixtures/worktrees-empty.json +4 -0
- package/pipeline/contract/frozen/toolbox.json +107 -0
- package/pipeline/contract/manifest.json +263 -0
- package/pipeline/contract/types/index.d.ts +343 -0
- package/pipeline/lib/_jira-auth.sh +6 -2
- package/pipeline/lib/account-resolver.sh +1 -1
- package/pipeline/lib/autopilot-state.sh +19 -0
- package/pipeline/lib/context-link-extractor.sh +12 -5
- package/pipeline/lib/credential-inventory.sh +12 -5
- package/pipeline/lib/credential-store.sh +116 -185
- package/pipeline/lib/fetch-confluence.sh +44 -3
- package/pipeline/lib/fetch-document.sh +3 -4
- package/pipeline/lib/fetch-fortify.sh +1 -1
- package/pipeline/lib/figma-mcp-refresh.sh +2 -2
- package/pipeline/lib/figma-token.sh +5 -1
- package/pipeline/lib/issue-fetcher.sh +233 -16
- package/pipeline/lib/json-file-lock.mjs +172 -0
- package/pipeline/lib/model-dispatch.sh +21 -12
- package/pipeline/lib/model-rung.sh +6 -1
- package/pipeline/lib/multi-repo-pipeline.sh +1 -1
- package/pipeline/lib/outbound-gate.mjs +46 -16
- package/pipeline/lib/parse-complaints.sh +14 -7
- package/pipeline/lib/plan-todos.sh +3 -3
- package/pipeline/lib/post-pr-review.sh +9 -9
- package/pipeline/lib/pr-request-location.mjs +85 -0
- package/pipeline/lib/regular-file.mjs +153 -0
- package/pipeline/lib/repo-hygiene.sh +17 -0
- package/pipeline/lib/route-state.sh +5 -1
- package/pipeline/lib/run-paths.sh +3 -2
- package/pipeline/lib/stack-detect.sh +19 -1
- package/pipeline/lib/unattended-profile-check.mjs +178 -0
- package/pipeline/lib/unattended-settings-location.mjs +28 -0
- package/pipeline/lib/unattended.mjs +76 -0
- package/pipeline/lib/unattended.sh +32 -0
- package/pipeline/lib/untrusted.mjs +76 -0
- package/pipeline/lib/user-facing.mjs +82 -0
- package/pipeline/lib/user-facing.sh +58 -0
- package/pipeline/multi-agent-refs/_dev-context.md +1 -1
- package/pipeline/multi-agent-refs/analysis/evidence.md +4 -0
- package/pipeline/multi-agent-refs/analysis/locked.md +2 -2
- package/pipeline/multi-agent-refs/analysis/render.md +4 -3
- package/pipeline/multi-agent-refs/analysis/resolve.md +3 -1
- package/pipeline/multi-agent-refs/analysis/synthesis.md +4 -5
- package/pipeline/multi-agent-refs/analysis-template.md +10 -17
- package/pipeline/multi-agent-refs/channels/jira.md +1 -1
- package/pipeline/multi-agent-refs/component-dispatch.md +3 -3
- package/pipeline/multi-agent-refs/conventions-defaults.md +32 -32
- package/pipeline/multi-agent-refs/cross-cli-contract.md +10 -17
- package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +37 -9
- package/pipeline/multi-agent-refs/features/autopilot-operations.md +277 -0
- package/pipeline/multi-agent-refs/features/constitution.md +196 -0
- package/pipeline/multi-agent-refs/features/doctor.md +6 -3
- package/pipeline/multi-agent-refs/features/external-context-injection.md +6 -1
- package/pipeline/multi-agent-refs/features/jira-context.md +1 -1
- package/pipeline/multi-agent-refs/features/maturity-followup.md +43 -23
- package/pipeline/multi-agent-refs/features/model-fallback.md +9 -0
- package/pipeline/multi-agent-refs/features/phone-api.md +306 -0
- package/pipeline/multi-agent-refs/features/plan-critic.md +159 -0
- package/pipeline/multi-agent-refs/features/research.md +150 -0
- package/pipeline/multi-agent-refs/features/review-decision.md +185 -0
- package/pipeline/multi-agent-refs/features/scaffold.md +160 -0
- package/pipeline/multi-agent-refs/features/security-audit.md +6 -2
- package/pipeline/multi-agent-refs/features/skill-conformance.md +4 -1
- package/pipeline/multi-agent-refs/features/stack-adapters.md +116 -0
- package/pipeline/multi-agent-refs/features/unattended-gates.md +316 -0
- package/pipeline/multi-agent-refs/features/unattended-security.md +731 -0
- package/pipeline/multi-agent-refs/features/url-enrichment.md +2 -2
- package/pipeline/multi-agent-refs/features/usage-reporting.md +127 -31
- package/pipeline/multi-agent-refs/features/verify-by-test.md +1 -1
- package/pipeline/multi-agent-refs/features/visual-evidence.md +7 -7
- package/pipeline/multi-agent-refs/keychain.md +6 -11
- package/pipeline/multi-agent-refs/payload-contracts.md +2 -2
- package/pipeline/multi-agent-refs/phases/log-format.md +2 -3
- package/pipeline/multi-agent-refs/phases/modes.md +10 -12
- package/pipeline/multi-agent-refs/phases/operations.md +11 -5
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +73 -81
- package/pipeline/multi-agent-refs/phases/phase-1-plan.md +22 -22
- package/pipeline/multi-agent-refs/phases/phase-2-dev.md +42 -66
- package/pipeline/multi-agent-refs/phases/phase-3-review.md +45 -79
- package/pipeline/multi-agent-refs/phases/phase-4-commit.md +28 -38
- package/pipeline/multi-agent-refs/phases/phase-5-report.md +27 -25
- package/pipeline/multi-agent-refs/phases.md +1 -1
- package/pipeline/multi-agent-refs/picker-contract.md +1 -1
- package/pipeline/multi-agent-refs/progress-contract.md +13 -16
- package/pipeline/multi-agent-refs/readiness-review.md +1 -1
- package/pipeline/multi-agent-refs/research/engine.md +91 -0
- package/pipeline/multi-agent-refs/rules.md +6 -4
- package/pipeline/multi-agent-refs/setup/repo-discovery.md +2 -2
- package/pipeline/multi-agent-refs/tracker-contract.md +2 -2
- package/pipeline/multi-agent-refs/unattended-contract.md +68 -16
- package/pipeline/rules/figma-pipeline.md +12 -12
- package/pipeline/schemas/agent-state.schema.json +480 -18
- package/pipeline/schemas/analysis-spec.schema.json +4 -4
- package/pipeline/schemas/answer-request.schema.json +24 -0
- package/pipeline/schemas/answer-result.schema.json +28 -0
- package/pipeline/schemas/autopilot-config.schema.json +111 -13
- package/pipeline/schemas/command-parameters.schema.json +99 -0
- package/pipeline/schemas/constitution.schema.json +56 -0
- package/pipeline/schemas/contract-error.schema.json +52 -0
- package/pipeline/schemas/design-check-config.schema.json +5 -1
- package/pipeline/schemas/issues.schema.json +61 -0
- package/pipeline/schemas/launch-plan.schema.json +46 -0
- package/pipeline/schemas/launch-request.schema.json +45 -0
- package/pipeline/schemas/launch.json +61 -0
- package/pipeline/schemas/launch.schema.json +84 -0
- package/pipeline/schemas/phases.json +2 -2
- package/pipeline/schemas/phases.schema.json +68 -0
- package/pipeline/schemas/phone-devices.schema.json +61 -0
- package/pipeline/schemas/phone-signed-request.schema.json +67 -0
- package/pipeline/schemas/plan-critique.schema.json +99 -0
- package/pipeline/schemas/plan-todos.schema.json +7 -7
- package/pipeline/schemas/planning-output.schema.json +5 -0
- package/pipeline/schemas/pr-request.schema.json +46 -0
- package/pipeline/schemas/prefs.schema.json +82 -7
- package/pipeline/schemas/research-output.schema.json +118 -0
- package/pipeline/schemas/review-file-exclusions.schema.json +25 -0
- package/pipeline/schemas/reviewer-output.schema.json +40 -4
- package/pipeline/schemas/run-questions.json +392 -0
- package/pipeline/schemas/run-questions.schema.json +118 -0
- package/pipeline/schemas/runs-index.schema.json +189 -0
- package/pipeline/schemas/scaffold-manifest.schema.json +43 -0
- package/pipeline/schemas/secret-patterns.schema.json +28 -0
- package/pipeline/schemas/stack-adapters.json +527 -0
- package/pipeline/schemas/stack-adapters.schema.json +184 -0
- package/pipeline/schemas/token-budget.json +1 -1
- package/pipeline/schemas/token-budget.schema.json +26 -0
- package/pipeline/schemas/triage-output.schema.json +64 -3
- package/pipeline/schemas/unattended-policy.json +139 -0
- package/pipeline/schemas/unattended-policy.schema.json +73 -0
- package/pipeline/schemas/unattended-profile.json +248 -0
- package/pipeline/schemas/unattended-profile.schema.json +198 -0
- package/pipeline/schemas/worktrees.schema.json +51 -0
- package/pipeline/scripts/README.md +1 -0
- package/pipeline/scripts/_autopilot-config.mjs +130 -0
- package/pipeline/scripts/_autopilot-ops.mjs +567 -0
- package/pipeline/scripts/_autopilot-outcomes.mjs +174 -0
- package/pipeline/scripts/_command-contract.mjs +384 -0
- package/pipeline/scripts/_cost.mjs +40 -0
- package/pipeline/scripts/_notices.mjs +160 -0
- package/pipeline/scripts/_phone-auth.mjs +485 -0
- package/pipeline/scripts/_pre-existing.mjs +294 -0
- package/pipeline/scripts/_redact.mjs +77 -0
- package/pipeline/scripts/_run-paths.mjs +4 -2
- package/pipeline/scripts/_stack-adapter.mjs +678 -0
- package/pipeline/scripts/_stack-routing.mjs +1 -1
- package/pipeline/scripts/agent-guard.py +348 -37
- package/pipeline/scripts/agent-guard.sh +41 -13
- package/pipeline/scripts/analysis-story-tree.mjs +79 -3
- package/pipeline/scripts/answer-question.mjs +181 -0
- package/pipeline/scripts/audit-log-rotate.sh +1 -4
- package/pipeline/scripts/audit-log.sh +4 -4
- package/pipeline/scripts/autopilot-arming.mjs +389 -21
- package/pipeline/scripts/autopilot-awake.mjs +255 -0
- package/pipeline/scripts/autopilot-intake.mjs +137 -36
- package/pipeline/scripts/autopilot-menubar.swift +156 -44
- package/pipeline/scripts/autopilot-publish.mjs +1625 -0
- package/pipeline/scripts/autopilot-runner.mjs +1678 -222
- package/pipeline/scripts/autopilot-status.sh +198 -33
- package/pipeline/scripts/build-lock.sh +120 -0
- package/pipeline/scripts/build-references.mjs +4 -1
- package/pipeline/scripts/build-stack-plugins.mjs +59 -22
- package/pipeline/scripts/capture-flush.sh +1 -1
- package/pipeline/scripts/capture-resume.sh +13 -9
- package/pipeline/scripts/check-derived-drift.mjs +52 -11
- package/pipeline/scripts/commands.mjs +88 -0
- package/pipeline/scripts/constitution.mjs +362 -0
- package/pipeline/scripts/contract-server.mjs +776 -0
- package/pipeline/scripts/cost-analyze.mjs +89 -39
- package/pipeline/scripts/diff-explain.mjs +12 -1
- package/pipeline/scripts/doctor.mjs +77 -28
- package/pipeline/scripts/evidence-gate.mjs +192 -12
- package/pipeline/scripts/feedback-send.mjs +4 -2
- package/pipeline/scripts/gate-ledger.mjs +449 -0
- package/pipeline/scripts/gc-abandoned.sh +132 -13
- package/pipeline/scripts/gen-facts.mjs +31 -15
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
- package/pipeline/scripts/github-ssh-setup.sh +140 -29
- package/pipeline/scripts/graph-mermaid.mjs +4 -1
- package/pipeline/scripts/issues.mjs +236 -0
- package/pipeline/scripts/jira-attach.sh +6 -2
- package/pipeline/scripts/jira-search.sh +4 -3
- package/pipeline/scripts/keychain-save.sh +125 -24
- package/pipeline/scripts/keychain.py +63 -93
- package/pipeline/scripts/launch-request.mjs +747 -0
- package/pipeline/scripts/localize-commands.mjs +4 -10
- package/pipeline/scripts/log-metric.sh +6 -5
- package/pipeline/scripts/maturity-followup.mjs +13 -4
- package/pipeline/scripts/memory-save.sh +25 -0
- package/pipeline/scripts/migrate-prefs.mjs +4 -3
- package/pipeline/scripts/open-questions-gate.mjs +276 -0
- package/pipeline/scripts/phase-tracker.sh +41 -27
- package/pipeline/scripts/phase0-exit-gate.mjs +22 -4
- package/pipeline/scripts/phone-devices.mjs +224 -0
- package/pipeline/scripts/plan-coverage-gate.mjs +200 -66
- package/pipeline/scripts/plan-critique-gate.mjs +591 -0
- package/pipeline/scripts/pr-request.mjs +188 -0
- package/pipeline/scripts/pre-commit-check.sh +115 -4
- package/pipeline/scripts/probe-evidence-capability.sh +44 -5
- package/pipeline/scripts/record-phase.mjs +71 -0
- package/pipeline/scripts/render-agent-log-cost.sh +17 -2
- package/pipeline/scripts/render-cost-summary.sh +1 -1
- package/pipeline/scripts/render-work-summary.sh +1 -1
- package/pipeline/scripts/require-supported-version.sh +4 -1
- package/pipeline/scripts/research-gate.mjs +704 -0
- package/pipeline/scripts/review-decision-gate.mjs +403 -0
- package/pipeline/scripts/routine-registry.mjs +5 -2
- package/pipeline/scripts/runs-index.mjs +135 -27
- package/pipeline/scripts/scaffold-gate.mjs +393 -0
- package/pipeline/scripts/skill-conformance.mjs +25 -8
- package/pipeline/scripts/skill-siblings.mjs +2 -1
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +32 -6
- package/pipeline/scripts/smoke-schema-validation.sh +6 -2
- package/pipeline/scripts/spec-consistency-gate.mjs +469 -0
- package/pipeline/scripts/symbol-existence-gate.mjs +450 -0
- package/pipeline/scripts/test-gap-scan.mjs +40 -2
- package/pipeline/scripts/test-integrity-gate.mjs +20 -4
- package/pipeline/scripts/test-strength.mjs +484 -0
- package/pipeline/scripts/test-summary.mjs +651 -0
- package/pipeline/scripts/triage-memory.mjs +49 -9
- package/pipeline/scripts/unattended_policy.py +2786 -0
- package/pipeline/scripts/uninstall.mjs +10 -10
- package/pipeline/scripts/update-issue-progress.sh +1 -1
- package/pipeline/scripts/usage-identity.mjs +288 -0
- package/pipeline/scripts/usage-register.mjs +185 -63
- package/pipeline/scripts/usage-report.mjs +230 -66
- package/pipeline/scripts/validate-complaint-doc.mjs +28 -10
- package/pipeline/scripts/validate-planning.mjs +6 -0
- package/pipeline/scripts/verify-citations.mjs +151 -38
- package/pipeline/scripts/verify.mjs +58 -18
- package/pipeline/scripts/worktree-prepare.sh +126 -0
- package/pipeline/scripts/worktrees.mjs +124 -0
- package/pipeline/scripts/write-state.mjs +48 -17
- package/pipeline/skills/.skill-manifest.json +222 -226
- package/pipeline/skills/.skills-index.json +77 -88
- package/pipeline/skills/shared/README.md +44 -45
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +3 -2
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +10 -9
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +6 -5
- package/pipeline/skills/shared/core/multi-agent-analysis-jira/SKILL.md +11 -3
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +4 -3
- package/pipeline/skills/shared/core/multi-agent-autopilot-off/SKILL.md +32 -6
- package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +66 -8
- package/pipeline/skills/shared/core/multi-agent-autopilot-status/SKILL.md +27 -9
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +7 -4
- package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +7 -5
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-doctor/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-feedback/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +7 -4
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-research/SKILL.md +35 -0
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +7 -3
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +7 -5
- package/pipeline/skills/shared/core/multi-agent-review-analysis/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-route-off/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-route-status/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-scaffold/SKILL.md +30 -0
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +4 -3
- package/pipeline/skills/shared/core/multi-agent-security-review/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-serve/SKILL.md +60 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +8 -8
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +7 -8
- package/pipeline/skills/shared/core/multi-agent-steer/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +10 -10
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-accessibility/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-dark-mode/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-dynamic-type/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-screenshots/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +2 -1
- package/pipeline/skills/shared/external/NOTICE-avdlee-swiftui-agent-skill.md +46 -0
- package/pipeline/skills/shared/external/NOTICE-dimillian-skills.md +9 -3
- package/pipeline/skills/shared/external/NOTICE-paul-hudson-skills.md +54 -0
- package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +9 -11
- package/pipeline/skills/shared/external/NOTICE-vibeship-spawner-skills.md +203 -0
- package/pipeline/skills/shared/external/NOTICE-xcode-build-skills.md +10 -3
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +131 -25
- package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -3
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +2 -1
- package/pipeline/skills/shared/external/android-architecture/SKILL.md +85 -76
- package/pipeline/skills/shared/external/android-build-quality-gates/SKILL.md +51 -3
- package/pipeline/skills/shared/external/android-build-quality-gates/references/patterns.md +9 -0
- package/pipeline/skills/shared/external/android-datastore/SKILL.md +4 -3
- package/pipeline/skills/shared/external/android-design-tokens-codegen/SKILL.md +4 -3
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +106 -181
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/references/patterns.md +147 -0
- package/pipeline/skills/shared/external/android-mvi-viewmodel/SKILL.md +45 -4
- package/pipeline/skills/shared/external/android-performance/SKILL.md +27 -2
- package/pipeline/skills/shared/external/android-performance/references/patterns.md +37 -37
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +111 -67
- package/pipeline/skills/shared/external/api-patterns/references/contract-details.md +128 -0
- package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +136 -186
- package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md +140 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/identity-and-access.md +207 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/operations.md +66 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md +175 -0
- package/pipeline/skills/shared/external/app-clips/SKILL.md +2 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +2 -0
- package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +4 -3
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +2 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +2 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +2 -0
- package/pipeline/skills/shared/external/architecture/SKILL.md +106 -39
- package/pipeline/skills/shared/external/architecture/references/adr-and-review.md +76 -0
- package/pipeline/skills/shared/external/authentication/SKILL.md +2 -0
- package/pipeline/skills/shared/external/avkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/background-processing/SKILL.md +2 -1
- package/pipeline/skills/shared/external/backlog/SKILL.md +3 -2
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +2 -0
- package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +3 -2
- package/pipeline/skills/shared/external/clean-code/SKILL.md +192 -90
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +2 -1
- package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/compose-components/SKILL.md +4 -4
- package/pipeline/skills/shared/external/compose-navigation/SKILL.md +22 -22
- package/pipeline/skills/shared/external/compose-navigation/references/patterns.md +10 -10
- package/pipeline/skills/shared/external/compose-testing/SKILL.md +13 -6
- package/pipeline/skills/shared/external/compose-testing/references/patterns.md +59 -59
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +2 -0
- package/pipeline/skills/shared/external/context-compression/SKILL.md +118 -250
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +2 -0
- package/pipeline/skills/shared/external/core-data/SKILL.md +2 -0
- package/pipeline/skills/shared/external/core-motion/SKILL.md +2 -0
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +2 -0
- package/pipeline/skills/shared/external/coreml/SKILL.md +2 -1
- package/pipeline/skills/shared/external/council/SKILL.md +2 -1
- package/pipeline/skills/shared/external/cryptokit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +3 -2
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +3 -2
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +2 -0
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +130 -20
- package/pipeline/skills/shared/external/debugging-strategies/references/hard-cases.md +54 -0
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +2 -0
- package/pipeline/skills/shared/external/docker-expert/SKILL.md +137 -381
- package/pipeline/skills/shared/external/docker-expert/references/patterns.md +98 -0
- package/pipeline/skills/shared/external/energykit/SKILL.md +2 -1
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +3 -1
- package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +116 -185
- package/pipeline/skills/shared/external/fastapi-pro/references/app-structure.md +235 -0
- package/pipeline/skills/shared/external/fastapi-pro/references/testing-and-deployment.md +69 -0
- package/pipeline/skills/shared/external/firebase/SKILL.md +4 -3
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +151 -293
- package/pipeline/skills/shared/external/github-actions-templates/references/patterns.md +96 -0
- package/pipeline/skills/shared/external/healthkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +69 -72
- package/pipeline/skills/shared/external/hig-components-content/references/content-views.md +111 -0
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +77 -86
- package/pipeline/skills/shared/external/hig-components-layout/references/containers.md +98 -0
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +150 -78
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +76 -97
- package/pipeline/skills/shared/external/hig-components-system/references/surfaces.md +98 -0
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +48 -76
- package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +132 -0
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +147 -106
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +61 -77
- package/pipeline/skills/shared/external/hig-patterns/references/patterns.md +92 -0
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +147 -77
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +61 -121
- package/pipeline/skills/shared/external/hig-technologies/references/technologies.md +108 -0
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +2 -0
- package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +3 -2
- package/pipeline/skills/shared/external/humanizer/SKILL.md +2 -1
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +2 -0
- package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +2 -1
- package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +14 -2
- package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +2 -2
- package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +4 -3
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +8 -6
- package/pipeline/skills/shared/external/ios-localization/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +11 -11
- package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +2 -1
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +2 -0
- package/pipeline/skills/shared/external/ios-simulator/SKILL.md +2 -0
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +102 -193
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/references/patterns.md +103 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -2
- package/pipeline/skills/shared/external/live-activities/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +7 -9
- package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +3 -3
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +2 -2
- package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +4 -3
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +5 -3
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +2 -0
- package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +2 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +149 -46
- package/pipeline/skills/shared/external/monorepo-architect/references/patterns.md +70 -0
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +2 -0
- package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/natural-language/SKILL.md +2 -0
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +3 -2
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +91 -21
- package/pipeline/skills/shared/external/nodejs-backend-patterns/references/runtime-patterns.md +247 -0
- package/pipeline/skills/shared/external/nodejs-backend-patterns/references/testing-and-frameworks.md +57 -0
- package/pipeline/skills/shared/external/observability-engineer/SKILL.md +155 -232
- package/pipeline/skills/shared/external/observability-engineer/references/patterns.md +75 -0
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +2 -0
- package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +18 -18
- package/pipeline/skills/shared/external/pdfkit/SKILL.md +2 -1
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +2 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +2 -1
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +2 -0
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +3 -2
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +3 -2
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +2 -2
- package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +3 -2
- package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +7 -7
- package/pipeline/skills/shared/external/retrofit-networking/references/patterns.md +69 -69
- package/pipeline/skills/shared/external/room-database/references/patterns.md +126 -126
- package/pipeline/skills/shared/external/search-first/SKILL.md +2 -1
- package/pipeline/skills/shared/external/security-review/SKILL.md +4 -3
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +2 -2
- package/pipeline/skills/shared/external/signal-community/SKILL.md +1 -1
- package/pipeline/skills/shared/external/skill-creator/SKILL.md +2 -1
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +2 -1
- package/pipeline/skills/shared/external/spm-build-analysis/SKILL.md +2 -0
- package/pipeline/skills/shared/external/storekit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-architecture/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +5 -4
- package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swift-security/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +10 -0
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swiftlint/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +5 -4
- package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +5 -4
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +4 -3
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +3 -2
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +3 -2
- package/pipeline/skills/shared/external/tipkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +3 -2
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -0
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +3 -2
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +3 -2
- package/pipeline/skills/shared/external/web-performance/SKILL.md +3 -2
- package/pipeline/skills/shared/external/web-testing/SKILL.md +3 -2
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +1 -1
- package/pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/SKILL.md +2 -0
- package/pipeline/skills/skills-index.md +40 -41
- package/docs/token-budget-history.md +0 -24
- package/pipeline/skills/shared/external/agentflow/SKILL.md +0 -199
- package/pipeline/skills/shared/external/android-ui-verification/SKILL.md +0 -66
- package/pipeline/skills/shared/external/api-security-best-practices/references/auth.md +0 -299
- package/pipeline/skills/shared/external/api-security-best-practices/references/input-validation.md +0 -255
- package/pipeline/skills/shared/external/api-security-best-practices/references/rate-limiting.md +0 -167
- package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +0 -116
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +0 -216
|
@@ -1,94 +1,66 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hig-foundations
|
|
3
|
-
description: "Apple
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
description: "Apple HIG foundations mapped to SwiftUI: Dynamic Type, semantic color, contrast, safe areas, SF Symbols, materials and Liquid Glass, motion, icons, writing. Use when a design decision turns on Apple's foundations."
|
|
4
|
+
metadata:
|
|
5
|
+
risk: safe
|
|
6
|
+
source: multi-agent-pipeline
|
|
7
|
+
date_added: "2026-09-25"
|
|
7
8
|
---
|
|
8
9
|
|
|
9
|
-
#
|
|
10
|
+
# HIG Foundations
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
The foundations are the layer every other Apple design rule sits on: how text
|
|
13
|
+
scales, where color comes from, which icons to use, how content relates to the
|
|
14
|
+
edges of the screen, and how things move. Get these right and most component
|
|
15
|
+
decisions become easy; get them wrong and no component fixes the result.
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
This skill is written for someone building the UI, so each foundation comes
|
|
18
|
+
with the question to ask, the SwiftUI tool that answers it, and what a reviewer
|
|
19
|
+
should look for. The repository's design tokens win over anything here: if the
|
|
20
|
+
project maps `Color.Text.primary` to a semantic color, use the token.
|
|
14
21
|
|
|
15
|
-
|
|
22
|
+
## Order of review
|
|
16
23
|
|
|
17
|
-
|
|
24
|
+
When a screen feels off, check foundations in this order. Each step tends to
|
|
25
|
+
hide problems in the steps after it.
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
1. Text scales and stays readable at every size.
|
|
28
|
+
2. Colors come from semantic sources and hold up in both appearances.
|
|
29
|
+
3. Content respects safe areas and layout margins.
|
|
30
|
+
4. Icons are symbols with consistent weight and scale.
|
|
31
|
+
5. Materials and motion support the content instead of competing with it.
|
|
32
|
+
6. Copy is short, specific and written in the product's voice.
|
|
20
33
|
|
|
21
|
-
|
|
34
|
+
## Details on demand
|
|
22
35
|
|
|
23
|
-
|
|
36
|
+
Load `references/foundations-detail.md` for each review step above, with the SwiftUI APIs and code for it.
|
|
24
37
|
|
|
25
|
-
|
|
38
|
+
## Reporting findings
|
|
26
39
|
|
|
27
|
-
|
|
40
|
+
For each issue, give the foundation, what the user experiences, and the change:
|
|
28
41
|
|
|
29
|
-
|
|
42
|
+
```
|
|
43
|
+
[Typography] Order summary total truncates at accessibility sizes.
|
|
44
|
+
Fix: remove lineLimit(1); stack label and value vertically when
|
|
45
|
+
dynamicTypeSize.isAccessibilitySize.
|
|
46
|
+
```
|
|
30
47
|
|
|
31
|
-
##
|
|
48
|
+
## Related skills
|
|
32
49
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
| App Icons | Icon grid, platform-specific sizes, single focal point, no transparency |
|
|
37
|
-
| Branding | Integrating brand identity within Apple's design language, subtle branding, custom tints |
|
|
38
|
-
| Color | System colors, Dynamic Colors, semantic colors, custom palettes, contrast ratios |
|
|
39
|
-
| Dark Mode | Elevated surfaces, semantic colors, adapted palettes, vibrancy, testing in both modes |
|
|
40
|
-
| Icons | Glyph icons, SF Symbols integration, custom icon design, icon weights, optical alignment |
|
|
41
|
-
| Images | Image resolution, @2x/@3x assets, vector assets, image accessibility |
|
|
42
|
-
| Immersive Experiences | AR/VR design, spatial immersion, comfort zones, progressive immersion levels |
|
|
43
|
-
| Inclusion | Diverse representation, non-gendered language, cultural sensitivity, inclusive defaults |
|
|
44
|
-
| Layout | Margins, spacing, alignment, safe areas, adaptive layouts, readable content guides |
|
|
45
|
-
| Materials | Vibrancy, blur, translucency, system materials, material thickness |
|
|
46
|
-
| Motion | Animation curves, transitions, continuity, Reduce Motion support, physics-based motion |
|
|
47
|
-
| Privacy | Permission requests, usage descriptions, privacy nutrition labels, minimal data collection |
|
|
48
|
-
| Right-to-Left | RTL layout mirroring, bidirectional text, icons that flip, exceptions |
|
|
49
|
-
| SF Symbols | Symbol categories, rendering modes, variable color, custom symbols, weight matching |
|
|
50
|
-
| Spatial Layout | visionOS window placement, depth, ergonomic zones, Z-axis design |
|
|
51
|
-
| Typography | SF Pro, Dynamic Type sizes, text styles, custom fonts, font weight hierarchy, line spacing |
|
|
52
|
-
| Writing | UI copy guidelines, tone, capitalization rules, error messages, button labels, conciseness |
|
|
50
|
+
- `hig-platforms` for how these foundations shift per device.
|
|
51
|
+
- `hig-components-layout`, `hig-components-content` for specific containers.
|
|
52
|
+
- `swiftui-liquid-glass` for the iOS 26 glass APIs in depth.
|
|
53
53
|
|
|
54
|
-
##
|
|
54
|
+
## References
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
## Output Format
|
|
69
|
-
|
|
70
|
-
1. **Cite the specific HIG foundation** by topic and section.
|
|
71
|
-
2. **Note platform differences** for the user's target platforms.
|
|
72
|
-
3. **Provide concrete code patterns** (SwiftUI/UIKit/AppKit).
|
|
73
|
-
4. **Explain accessibility impact** (contrast ratios, Dynamic Type scaling, VoiceOver behavior).
|
|
74
|
-
|
|
75
|
-
## Questions to Ask
|
|
76
|
-
|
|
77
|
-
1. Which platforms are you targeting?
|
|
78
|
-
2. Do you have existing brand guidelines?
|
|
79
|
-
3. What accessibility level are you targeting? (WCAG AA, AAA, Apple baseline?)
|
|
80
|
-
4. System colors or custom?
|
|
81
|
-
|
|
82
|
-
## Related Skills
|
|
83
|
-
|
|
84
|
-
- **hig-platforms** -- How foundations apply per platform (e.g., type scale differences on watchOS vs macOS)
|
|
85
|
-
- **hig-patterns** -- Interaction patterns where foundations like writing and accessibility are critical
|
|
86
|
-
- **hig-components-layout** -- Structural components implementing layout principles
|
|
87
|
-
- **hig-components-content** -- Content display using color, typography, and images
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
*Built by [Raintree Technology](https://raintree.technology) · [More developer tools](https://raintree.technology)*
|
|
92
|
-
|
|
93
|
-
## When to Use
|
|
94
|
-
This skill is applicable to execute the workflow or actions described in the overview.
|
|
56
|
+
- https://developer.apple.com/design/human-interface-guidelines/foundations
|
|
57
|
+
- https://developer.apple.com/design/human-interface-guidelines/typography
|
|
58
|
+
- https://developer.apple.com/design/human-interface-guidelines/color
|
|
59
|
+
- https://developer.apple.com/design/human-interface-guidelines/dark-mode
|
|
60
|
+
- https://developer.apple.com/design/human-interface-guidelines/layout
|
|
61
|
+
- https://developer.apple.com/design/human-interface-guidelines/sf-symbols
|
|
62
|
+
- https://developer.apple.com/design/human-interface-guidelines/materials
|
|
63
|
+
- https://developer.apple.com/design/human-interface-guidelines/motion
|
|
64
|
+
- https://developer.apple.com/design/human-interface-guidelines/app-icons
|
|
65
|
+
- https://developer.apple.com/design/human-interface-guidelines/writing
|
|
66
|
+
- https://developer.apple.com/design/human-interface-guidelines/accessibility
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Foundations in detail
|
|
2
|
+
|
|
3
|
+
Companion to `../SKILL.md` for the `hig-foundations` skill.
|
|
4
|
+
|
|
5
|
+
## 1. Typography
|
|
6
|
+
|
|
7
|
+
Ask: if the user sets the largest accessibility text size, does every string
|
|
8
|
+
still fit, wrap or scroll?
|
|
9
|
+
|
|
10
|
+
- Use text styles (`.font(.body)`, `.headline`, `.caption`) rather than fixed
|
|
11
|
+
point sizes. Text styles track Dynamic Type automatically.
|
|
12
|
+
- For a custom font, pass `relativeTo:` so it scales with a text style:
|
|
13
|
+
`.font(.custom("Brand-Regular", size: 17, relativeTo: .body))`.
|
|
14
|
+
- Scale non-text measurements that sit next to text with `@ScaledMetric`, for
|
|
15
|
+
example an icon frame of 24 points that should grow with the label.
|
|
16
|
+
- Allow wrapping. Avoid `.lineLimit(1)` on primary content; where a single line
|
|
17
|
+
is required, add `.minimumScaleFactor` only as a last resort.
|
|
18
|
+
- At accessibility sizes, switch horizontal arrangements to vertical. Read
|
|
19
|
+
`@Environment(\.dynamicTypeSize)` and check `.isAccessibilitySize`, or use
|
|
20
|
+
`ViewThatFits` to let the layout choose.
|
|
21
|
+
- Keep a clear hierarchy with weight and style, not with many sizes. Two or
|
|
22
|
+
three styles per screen is usually enough.
|
|
23
|
+
|
|
24
|
+
Review signal: truncated order totals, overlapping labels, or buttons whose
|
|
25
|
+
titles are clipped at `accessibility3` and above.
|
|
26
|
+
|
|
27
|
+
## 2. Color
|
|
28
|
+
|
|
29
|
+
Ask: does this color mean something, and does it still mean it in dark mode,
|
|
30
|
+
with increased contrast, and to someone who cannot distinguish red from green?
|
|
31
|
+
|
|
32
|
+
- Prefer semantic colors: `.primary`, `.secondary`, `Color(.systemBackground)`,
|
|
33
|
+
`Color(.secondarySystemBackground)`, `.tint`. They adapt to appearance and
|
|
34
|
+
contrast settings for free.
|
|
35
|
+
- Define brand colors in the asset catalog with light, dark and high-contrast
|
|
36
|
+
variants instead of branching on `colorScheme` in code.
|
|
37
|
+
- Set the app accent once with `.tint(...)` near the root; controls pick it up.
|
|
38
|
+
- Never carry meaning by color alone. A failed payment shows an icon and a
|
|
39
|
+
word, not only a red row.
|
|
40
|
+
- Aim for at least 4.5:1 contrast for body text and 3:1 for large text and
|
|
41
|
+
essential glyphs.
|
|
42
|
+
|
|
43
|
+
Review signal: hard-coded hex values, `Color.white` text on a brand color that
|
|
44
|
+
fails contrast in dark mode, status conveyed only by hue.
|
|
45
|
+
|
|
46
|
+
## 3. Layout, margins and safe areas
|
|
47
|
+
|
|
48
|
+
Ask: is content kept clear of the status bar, Dynamic Island, home indicator,
|
|
49
|
+
rounded corners and the keyboard, while backgrounds still reach the edges?
|
|
50
|
+
|
|
51
|
+
- Leave safe areas alone for content; extend only backgrounds with
|
|
52
|
+
`.ignoresSafeArea()` or `.background(..., ignoresSafeAreaEdges: .all)`.
|
|
53
|
+
- Use `.safeAreaInset(edge:)` for a bottom bar that content should scroll
|
|
54
|
+
behind, instead of padding by a guessed height.
|
|
55
|
+
- Use `.contentMargins` on scroll views to keep reading width comfortable on
|
|
56
|
+
iPad and in landscape.
|
|
57
|
+
- Keep interactive targets at least 44 by 44 points on iOS and iPadOS; pad the
|
|
58
|
+
hit area with `.contentShape` if the visual is smaller.
|
|
59
|
+
- Group related items by proximity and alignment. Reach for a divider only when
|
|
60
|
+
spacing alone does not separate groups.
|
|
61
|
+
- Adapt to size classes (`@Environment(\.horizontalSizeClass)`) instead of
|
|
62
|
+
device checks.
|
|
63
|
+
|
|
64
|
+
## 4. Icons and SF Symbols
|
|
65
|
+
|
|
66
|
+
Ask: is there a system symbol for this, and does it match the weight of the
|
|
67
|
+
text beside it?
|
|
68
|
+
|
|
69
|
+
- Use `Image(systemName:)` and `Label` so symbols align with text baselines and
|
|
70
|
+
scale with Dynamic Type.
|
|
71
|
+
- Pick a rendering mode on purpose: `.symbolRenderingMode(.hierarchical)` for
|
|
72
|
+
depth, `.palette` for brand pairs, `.multicolor` where the symbol ships it.
|
|
73
|
+
- Use `.symbolVariant(.fill)` for selected states, as tab bars do.
|
|
74
|
+
- Animate state with `.symbolEffect` (bounce on add-to-cart, pulse while
|
|
75
|
+
syncing) and `.contentTransition(.symbolEffect(.replace))` between glyphs.
|
|
76
|
+
- Custom symbols belong in the asset catalog as symbol templates so they gain
|
|
77
|
+
weights and scales like system ones.
|
|
78
|
+
|
|
79
|
+
## 5. Materials, Liquid Glass and depth
|
|
80
|
+
|
|
81
|
+
Ask: does this layer float above content, and does the content stay legible
|
|
82
|
+
under it?
|
|
83
|
+
|
|
84
|
+
- On iOS 26 and later, system bars, tab bars, sheets and toolbars adopt Liquid
|
|
85
|
+
Glass automatically when built with standard SwiftUI containers. Avoid
|
|
86
|
+
painting opaque backgrounds on them; that removes the effect.
|
|
87
|
+
- For custom floating controls, apply `.glassEffect()` and group neighbors in a
|
|
88
|
+
`GlassEffectContainer` so shapes blend and morph together. Keep glass for the
|
|
89
|
+
navigation and control layer, not for content cards.
|
|
90
|
+
- Use `.buttonStyle(.glass)` or `.glassProminent` for floating actions that
|
|
91
|
+
should match system controls.
|
|
92
|
+
- Before iOS 26, use materials (`.regularMaterial`, `.thinMaterial`) for
|
|
93
|
+
overlays; gate newer APIs with `if #available(iOS 26, *)`.
|
|
94
|
+
- Respect Reduce Transparency: system materials handle it, custom blurs must
|
|
95
|
+
check `accessibilityReduceTransparency`.
|
|
96
|
+
|
|
97
|
+
## 6. Motion
|
|
98
|
+
|
|
99
|
+
Ask: does this animation explain a change, and what happens when Reduce Motion
|
|
100
|
+
is on?
|
|
101
|
+
|
|
102
|
+
- Animate to show cause and effect: an item moving into a list, a sheet coming
|
|
103
|
+
from where it was triggered. Use `matchedGeometryEffect` or
|
|
104
|
+
`.navigationTransition(.zoom(sourceID:in:))` for continuity.
|
|
105
|
+
- Prefer spring animations (`.smooth`, `.snappy`, `.bouncy`) that can be
|
|
106
|
+
interrupted.
|
|
107
|
+
- Read `@Environment(\.accessibilityReduceMotion)` and replace large movement
|
|
108
|
+
with cross-fades.
|
|
109
|
+
- Never block interaction until an animation finishes.
|
|
110
|
+
|
|
111
|
+
## 7. App icon
|
|
112
|
+
|
|
113
|
+
- Provide a single 1024 by 1024 source and let Xcode generate sizes; on iOS 18
|
|
114
|
+
and later supply dark and tinted variants. From iOS 26, author layered icons
|
|
115
|
+
in Icon Composer so the system can render the glass appearance.
|
|
116
|
+
- Keep the icon a simple, recognizable shape without text or screenshots.
|
|
117
|
+
|
|
118
|
+
## 8. Writing
|
|
119
|
+
|
|
120
|
+
- Use the words people use: "Save note", not "Persist entry".
|
|
121
|
+
- Buttons are verbs; alerts say what happened and what the person can do.
|
|
122
|
+
- Keep error text specific and blameless: "This coupon has expired" rather than
|
|
123
|
+
"Invalid input".
|
|
124
|
+
- Localize every user-facing string and leave room for text that grows by 30 to
|
|
125
|
+
40 percent in other languages.
|
|
126
|
+
|
|
127
|
+
## 9. Accessibility, as a foundation
|
|
128
|
+
|
|
129
|
+
Accessibility is a property of every item above, not a separate pass. A quick
|
|
130
|
+
screen test covers most of it: largest text size, VoiceOver swipe through the
|
|
131
|
+
screen, Increase Contrast, Reduce Motion, and right-to-left pseudo-language.
|
|
132
|
+
Deeper implementation guidance lives in the `ios-accessibility` skill.
|
|
@@ -1,110 +1,151 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hig-inputs
|
|
3
|
-
description: "Apple
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
description: "Apple HIG for input mapped to SwiftUI: touch gestures, keyboards, pointer, Apple Pencil, focus and game controllers, Digital Crown, eyes and hands, haptics. Use when designing or reviewing input on an Apple platform."
|
|
4
|
+
metadata:
|
|
5
|
+
risk: safe
|
|
6
|
+
source: multi-agent-pipeline
|
|
7
|
+
date_added: "2026-09-25"
|
|
7
8
|
---
|
|
8
9
|
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
##
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
##
|
|
100
|
-
|
|
101
|
-
-
|
|
102
|
-
|
|
103
|
-
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
10
|
+
# HIG Inputs
|
|
11
|
+
|
|
12
|
+
People reach the same app with fingers, a trackpad, a keyboard, a pencil, a
|
|
13
|
+
remote, a crown, or their eyes. The design goal is that every task can be done
|
|
14
|
+
with whichever input the person has, and that each input feels native rather
|
|
15
|
+
than emulated. This skill covers what each input expects and how SwiftUI
|
|
16
|
+
supports it.
|
|
17
|
+
|
|
18
|
+
## The baseline rule
|
|
19
|
+
|
|
20
|
+
Any action exposed only through a gesture must also be reachable some other
|
|
21
|
+
way: a button, a menu item, a context menu, or an accessibility action. Gestures
|
|
22
|
+
are shortcuts, not the only door.
|
|
23
|
+
|
|
24
|
+
Checklist for a new interactive element:
|
|
25
|
+
|
|
26
|
+
- Is there a visible control or menu entry for it?
|
|
27
|
+
- Does it respond to touch, pointer and keyboard where the platform has them?
|
|
28
|
+
- Does VoiceOver expose it (label, trait, and custom actions for swipes)?
|
|
29
|
+
- Is the hit area at least 44 by 44 points (about 60 on visionOS)?
|
|
30
|
+
- Is there feedback: a visual change, and a haptic where it adds meaning?
|
|
31
|
+
|
|
32
|
+
## Touch gestures
|
|
33
|
+
|
|
34
|
+
- Use standard gestures with their standard meanings: tap to activate, swipe to
|
|
35
|
+
reveal row actions, long press for a context menu, pinch to zoom, edge swipe
|
|
36
|
+
to go back. Do not repurpose them.
|
|
37
|
+
- Prefer built-in behavior over custom recognizers: `.swipeActions` on list
|
|
38
|
+
rows, `.contextMenu` for long press, `.refreshable` for pull to refresh.
|
|
39
|
+
- For custom gestures use `DragGesture`, `MagnifyGesture` and `RotateGesture`
|
|
40
|
+
and compose with `.simultaneously(with:)` or `.exclusively(before:)`.
|
|
41
|
+
- Do not fight the system: leave screen edges and the home indicator area to
|
|
42
|
+
system gestures.
|
|
43
|
+
- Give custom gestures an accessibility equivalent with
|
|
44
|
+
`.accessibilityAction(named:)`.
|
|
45
|
+
|
|
46
|
+
## Keyboards
|
|
47
|
+
|
|
48
|
+
On-screen keyboard:
|
|
49
|
+
|
|
50
|
+
- Choose the keyboard and content type so AutoFill and suggestions work:
|
|
51
|
+
`.keyboardType(.decimalPad)` for a quantity, `.textContentType(.oneTimeCode)`
|
|
52
|
+
for a verification code.
|
|
53
|
+
- Set `.submitLabel` and move focus with `@FocusState` so Return advances
|
|
54
|
+
through a form.
|
|
55
|
+
- Keep the focused field visible above the keyboard; SwiftUI's safe area
|
|
56
|
+
handles this if you do not disable keyboard avoidance.
|
|
57
|
+
- Dismiss with `.scrollDismissesKeyboard(.interactively)` on scrolling forms.
|
|
58
|
+
|
|
59
|
+
Hardware keyboard (iPad, Mac, visionOS):
|
|
60
|
+
|
|
61
|
+
- Add shortcuts with `.keyboardShortcut("n", modifiers: .command)` for common
|
|
62
|
+
commands such as a new note; list them in `.commands` so they appear in the
|
|
63
|
+
menu bar and the iPad shortcut overlay.
|
|
64
|
+
- Do not override system shortcuts (Command-C, Command-Q, Command-Tab).
|
|
65
|
+
- Support full keyboard navigation: focusable controls, visible focus rings,
|
|
66
|
+
`.onKeyPress` for arrow-key movement in custom views.
|
|
67
|
+
|
|
68
|
+
## Pointer and trackpad
|
|
69
|
+
|
|
70
|
+
- On iPad and Mac, controls should react to hover. Standard buttons do; custom
|
|
71
|
+
views use `.hoverEffect(.highlight)` or `.onHover`.
|
|
72
|
+
- Offer context menus on secondary click (the same `.contextMenu` serves long
|
|
73
|
+
press and right click).
|
|
74
|
+
- Support precise interactions the pointer enables: multi-select, drag to
|
|
75
|
+
reorder, resizing, tooltips via `.help`.
|
|
76
|
+
- Use `.pointerStyle` (iPadOS 18 and macOS 15 and later) to signal resize or
|
|
77
|
+
precision regions.
|
|
78
|
+
|
|
79
|
+
## Apple Pencil
|
|
80
|
+
|
|
81
|
+
- Pencil is for drawing, writing and precise marking; do not require it.
|
|
82
|
+
- Use PencilKit (`PKCanvasView`) for inking rather than a custom renderer.
|
|
83
|
+
- Scribble lets people handwrite into any standard text field; do not block it
|
|
84
|
+
with custom text input.
|
|
85
|
+
- Handle the double tap and squeeze gestures through
|
|
86
|
+
`.onPencilDoubleTap` and `.onPencilSqueeze`, respecting the preferred action
|
|
87
|
+
the person set in Settings.
|
|
88
|
+
- Show hover previews on supported iPads when the pencil approaches.
|
|
89
|
+
|
|
90
|
+
## Focus-driven input: Apple TV, keyboard navigation, game controllers
|
|
91
|
+
|
|
92
|
+
- Every interactive element must be focusable and show a clear focused state.
|
|
93
|
+
- Shape movement with `.focusSection()` so focus jumps between logical groups
|
|
94
|
+
rather than scanning element by element.
|
|
95
|
+
- Set a sensible starting focus with `.defaultFocus`.
|
|
96
|
+
- The Siri Remote touch surface swipes and clicks; Menu or Back always goes back.
|
|
97
|
+
- For games, use the Game Controller framework, support standard button
|
|
98
|
+
mappings, and show on-screen touch controls when no controller is attached.
|
|
99
|
+
|
|
100
|
+
## Digital Crown
|
|
101
|
+
|
|
102
|
+
- The crown scrolls by default. For value adjustment bind it with
|
|
103
|
+
`.digitalCrownRotation($value, from:through:by:sensitivity:)`.
|
|
104
|
+
- Pair crown changes with haptic detents so each step is felt.
|
|
105
|
+
- Keep crown use predictable: the same rotation direction increases values
|
|
106
|
+
throughout the app.
|
|
107
|
+
|
|
108
|
+
## Eyes and hands (visionOS)
|
|
109
|
+
|
|
110
|
+
- People look at an element to target it and pinch to activate. Standard
|
|
111
|
+
controls show the system hover effect automatically; custom views need
|
|
112
|
+
`.hoverEffect()` and a `.contentShape` matching their visual shape.
|
|
113
|
+
- Keep targets well separated and avoid placing them at the edges of vision.
|
|
114
|
+
- Direct touch works for content within reach; design for both.
|
|
115
|
+
- Avoid actions triggered by gaze alone; always require a pinch or tap.
|
|
116
|
+
|
|
117
|
+
## Haptics and motion input
|
|
118
|
+
|
|
119
|
+
- Use haptics to confirm meaningful events, not every tap:
|
|
120
|
+
`.sensoryFeedback(.selection, trigger: selectedSize)` in a picker,
|
|
121
|
+
`.success` when an order is placed.
|
|
122
|
+
- Shake is reserved for undo; avoid other shake gestures.
|
|
123
|
+
- Motion-based input (tilt) needs a non-motion alternative.
|
|
124
|
+
|
|
125
|
+
## Review output
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
[Gesture] Archiving a task is only possible by swiping.
|
|
129
|
+
Fix: add an Archive button to the row's context menu and an
|
|
130
|
+
accessibilityAction(named: "Archive").
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Related skills
|
|
134
|
+
|
|
135
|
+
- `hig-platforms` for which inputs each device has.
|
|
136
|
+
- `hig-components-system` for menus, controls and text fields.
|
|
137
|
+
- `swiftui-gestures` for gesture implementation detail.
|
|
138
|
+
- `pencilkit-drawing` for Apple Pencil canvases.
|
|
139
|
+
|
|
140
|
+
## References
|
|
141
|
+
|
|
142
|
+
- https://developer.apple.com/design/human-interface-guidelines/inputs
|
|
143
|
+
- https://developer.apple.com/design/human-interface-guidelines/gestures
|
|
144
|
+
- https://developer.apple.com/design/human-interface-guidelines/keyboards
|
|
145
|
+
- https://developer.apple.com/design/human-interface-guidelines/pointing-devices
|
|
146
|
+
- https://developer.apple.com/design/human-interface-guidelines/apple-pencil-and-scribble
|
|
147
|
+
- https://developer.apple.com/design/human-interface-guidelines/focus-and-selection
|
|
148
|
+
- https://developer.apple.com/design/human-interface-guidelines/digital-crown
|
|
149
|
+
- https://developer.apple.com/design/human-interface-guidelines/game-controls
|
|
150
|
+
- https://developer.apple.com/design/human-interface-guidelines/eyes
|
|
151
|
+
- https://developer.apple.com/design/human-interface-guidelines/playing-haptics
|