{"id":"b84451e3-e34e-4ed5-b148-2b2d911c9768","shortId":"pKQwNQ","kind":"skill","title":"macos-menubar-tuist-app","tagline":"Build, refactor, or review SwiftUI macOS menubar apps that use Tuist.","description":"# macos-menubar-tuist-app\n\nBuild and maintain macOS menubar apps with a Tuist-first workflow and stable launch scripts. Preserve strict architecture boundaries so networking, state, and UI remain testable and predictable.\n\n## When to Use\n- When working on LSUIElement menubar utilities built with Tuist and SwiftUI.\n- When you need Tuist manifests, launch scripts, or architecture guidance for a menubar app.\n\n## Core Rules\n\n- Keep the app menubar-only unless explicitly told otherwise. Use `LSUIElement = true` by default.\n- Keep transport and decoding logic outside views. Do not call networking from SwiftUI view bodies.\n- Keep state transitions in a store layer (`@Observable` or equivalent), not in row/view presentation code.\n- Keep model decoding resilient to API drift: optional fields, safe fallbacks, and defensive parsing.\n- Treat Tuist manifests as the source of truth. Do not rely on hand-edited generated Xcode artifacts.\n- Prefer script-based launch for local iteration when `tuist run` is unreliable for macOS target/device resolution.\n- Prefer `tuist xcodebuild build` over raw `xcodebuild` in local run scripts when building generated projects.\n\n## Expected File Shape\n\nUse this placement by default:\n\n- `Project.swift`: app target, settings, resources, `Info.plist` keys\n- `Sources/*Model*.swift`: API/domain models and decoding\n- `Sources/*Client*.swift`: requests, response mapping, transport concerns\n- `Sources/*Store*.swift`: observable state, refresh policy, filtering, caching\n- `Sources/*Menu*View*.swift`: menu composition and top-level UI state\n- `Sources/*Row*View*.swift`: row rendering and lightweight interactions\n- `run-menubar.sh`: canonical local restart/build/launch path\n- `stop-menubar.sh`: explicit stop helper when needed\n\n## Workflow\n\n1. Confirm Tuist ownership\n- Verify `Tuist.swift` and `Project.swift` (or workspace manifests) exist.\n- Read existing run scripts before changing launch behavior.\n\n2. Probe backend behavior before coding assumptions\n- Use `curl` to verify endpoint shape, auth requirements, and pagination behavior.\n- If endpoint ignores `limit/page`, implement full-list handling with local trimming in the store.\n\n3. Implement layers from bottom to top\n- Define/adjust models first.\n- Add or update client request/decoding logic.\n- Update store refresh, filtering, and cache policy.\n- Wire views last.\n\n4. Keep app wiring minimal\n- Keep app entry focused on scene/menu wiring and dependency injection.\n- Avoid embedding business logic in `App` or menu scene declarations.\n\n5. Standardize launch ergonomics\n- Ensure run script restarts an existing instance before relaunching.\n- Ensure run script does not open Xcode as a side effect.\n- Use `tuist generate --no-open` when generation is required.\n- When the run script builds the generated project, prefer `TUIST_SKIP_UPDATE_CHECK=1 tuist xcodebuild build ...` instead of invoking raw `xcodebuild` directly.\n\n## Validation Matrix\n\nRun validations after edits:\n\n```bash\nTUIST_SKIP_UPDATE_CHECK=1 tuist xcodebuild build -scheme <TargetName> -configuration Debug\n```\n\nIf launch workflow changed:\n\n```bash\n./run-menubar.sh\n```\n\nIf shell scripts changed:\n\n```bash\nbash -n run-menubar.sh\nbash -n stop-menubar.sh\n./run-menubar.sh\n```\n\n## Failure Patterns and Fix Direction\n\n- `tuist run` cannot resolve the macOS destination:\nUse run/stop scripts as canonical local run path.\n\n- Menu UI is laggy or inconsistent after refresh:\nMove derived state and filtering into the store; keep views render-only.\n\n- API payload changes break decode:\nRelax model decoding with optional fields and defaults, then surface missing data safely in UI.\n\n- Feature asks for quick UI patch:\nTrace root cause in model/client/store before changing row/menu presentation.\n\n## Completion Checklist\n\n- Preserve menubar-only behavior unless explicitly changed.\n- Keep network and state logic out of SwiftUI view bodies.\n- Keep Tuist manifests and run scripts aligned with actual build/run flow.\n- Run the validation matrix for touched areas.\n- Report concrete commands run and outcomes.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["macos","menubar","tuist","app","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents"],"capabilities":["skill","source-sickn33","skill-macos-menubar-tuist-app","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/macos-menubar-tuist-app","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34726 github stars · SKILL.md body (4,381 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T12:51:11.875Z","embedding":null,"createdAt":"2026-04-18T21:40:16.625Z","updatedAt":"2026-04-23T12:51:11.875Z","lastSeenAt":"2026-04-23T12:51:11.875Z","tsv":"'/run-menubar.sh':446,458 '1':262,413,434 '2':282 '3':315 '4':341 '5':366 'actual':563 'add':325 'align':561 'api':131,500 'api/domain':208 'app':5,13,21,27,78,83,199,343,347,361 'architectur':40,73 'area':572 'artifact':157 'ask':521,612 'assumpt':288 'auth':295 'avoid':356 'backend':284 'base':161 'bash':429,445,451,452,455 'behavior':281,285,299,541 'bodi':110,554 'bottom':319 'boundari':41,620 'break':503 'build':6,22,178,187,404,416,437 'build/run':564 'built':60 'busi':358 'cach':228,336 'call':105 'cannot':466 'canon':251,475 'caus':528 'chang':279,444,450,502,532,544 'check':412,433 'checklist':536 'clarif':614 'clear':587 'client':213,328 'code':125,287 'command':575 'complet':535 'composit':234 'concern':219 'concret':574 'configur':439 'confirm':263 'core':79 'criteria':623 'curl':290 'data':516 'debug':440 'declar':365 'decod':99,128,211,504,507 'default':95,197,512 'defens':138 'define/adjust':322 'depend':354 'deriv':488 'describ':591 'destin':470 'direct':422,463 'drift':132 'edit':154,428 'effect':389 'embed':357 'endpoint':293,301 'ensur':370,379 'entri':348 'environ':603 'environment-specif':602 'equival':120 'ergonom':369 'exist':273,275,375 'expect':190 'expert':608 'explicit':88,256,543 'failur':459 'fallback':136 'featur':520 'field':134,510 'file':191 'filter':227,334,491 'first':32,324 'fix':462 'flow':565 'focus':349 'full':306 'full-list':305 'generat':155,188,392,397,406 'guidanc':74 'hand':153 'hand-edit':152 'handl':308 'helper':258 'ignor':302 'implement':304,316 'inconsist':484 'info.plist':203 'inject':355 'input':617 'instanc':376 'instead':417 'interact':249 'invok':419 'iter':165 'keep':81,96,111,126,342,346,495,545,555 'key':204 'laggi':482 'last':340 'launch':36,70,162,280,368,442 'layer':117,317 'level':238 'lightweight':248 'limit':579 'limit/page':303 'list':307 'local':164,183,252,310,476 'logic':100,330,359,549 'lsuielement':57,92 'maco':2,11,18,25,172,469 'macos-menubar-tuist-app':1,17 'maintain':24 'manifest':69,142,272,557 'map':217 'match':588 'matrix':424,569 'menu':230,233,363,479 'menubar':3,12,19,26,58,77,85,539 'menubar-on':84,538 'minim':345 'miss':515,625 'model':127,206,209,323,506 'model/client/store':530 'move':487 'n':453,456 'need':67,260 'network':43,106,546 'no-open':393 'observ':118,223 'open':384,395 'option':133,509 'otherwis':90 'outcom':578 'output':597 'outsid':101 'ownership':265 'pagin':298 'pars':139 'patch':525 'path':254,478 'pattern':460 'payload':501 'permiss':618 'placement':195 'polici':226,337 'predict':50 'prefer':158,175,408 'present':124,534 'preserv':38,537 'probe':283 'project':189,407 'project.swift':198,269 'quick':523 'raw':180,420 'read':274 'refactor':7 'refresh':225,333,486 'relaunch':378 'relax':505 'reli':150 'remain':47 'render':246,498 'render-on':497 'report':573 'request':215 'request/decoding':329 'requir':296,399,616 'resili':129 'resolut':174 'resolv':467 'resourc':202 'respons':216 'restart':373 'restart/build/launch':253 'review':9,609 'root':527 'row':242,245 'row/menu':533 'row/view':123 'rule':80 'run':168,184,276,371,380,402,425,465,477,559,566,576 'run-menubar.sh':250,454 'run/stop':472 'safe':135,517 'safeti':619 'scene':364 'scene/menu':351 'scheme':438 'scope':590 'script':37,71,160,185,277,372,381,403,449,473,560 'script-bas':159 'set':201 'shape':192,294 'shell':448 'side':388 'skill':582 'skill-macos-menubar-tuist-app' 'skip':410,431 'sourc':145,205,212,220,229,241 'source-sickn33' 'specif':604 'stabl':35 'standard':367 'state':44,112,224,240,489,548 'stop':257,610 'stop-menubar.sh':255,457 'store':116,221,314,332,494 'strict':39 'substitut':600 'success':622 'surfac':514 'swift':207,214,222,232,244 'swiftui':10,64,108,552 'target':200 'target/device':173 'task':586 'test':606 'testabl':48 'told':89 'top':237,321 'top-level':236 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'touch':571 'trace':526 'transit':113 'transport':97,218 'treat':140,595 'trim':311 'true':93 'truth':147 'tuist':4,16,20,31,62,68,141,167,176,264,391,409,414,430,435,464,556 'tuist-first':30 'tuist.swift':267 'ui':46,239,480,519,524 'unless':87,542 'unreli':170 'updat':327,331,411,432 'use':15,53,91,193,289,390,471,580 'util':59 'valid':423,426,568,605 'verifi':266,292 'view':102,109,231,243,339,496,553 'wire':338,344,352 'work':55 'workflow':33,261,443 'workspac':271 'xcode':156,385 'xcodebuild':177,181,415,421,436","prices":[{"id":"64da262b-79e3-48b0-a47a-fdb6c488d114","listingId":"b84451e3-e34e-4ed5-b148-2b2d911c9768","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:40:16.625Z"}],"sources":[{"listingId":"b84451e3-e34e-4ed5-b148-2b2d911c9768","source":"github","sourceId":"sickn33/antigravity-awesome-skills/macos-menubar-tuist-app","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/macos-menubar-tuist-app","isPrimary":false,"firstSeenAt":"2026-04-18T21:40:16.625Z","lastSeenAt":"2026-04-23T12:51:11.875Z"}],"details":{"listingId":"b84451e3-e34e-4ed5-b148-2b2d911c9768","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"macos-menubar-tuist-app","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34726,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-23T06:41:03Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"81d91350fdc924bf15fd71b18a15747ee4c452e8","skill_md_path":"skills/macos-menubar-tuist-app/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/macos-menubar-tuist-app"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"macos-menubar-tuist-app","description":"Build, refactor, or review SwiftUI macOS menubar apps that use Tuist."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/macos-menubar-tuist-app"},"updatedAt":"2026-04-23T12:51:11.875Z"}}