macOS Spm App Packaging
Dimillian/Skills
Scaffold, build, and package SwiftPM-based macOS apps without an Xcode project.
Kill the running termio dev app, rebuild it with SwiftPM, and relaunch it as a foreground app.
$ npx skills add termio-sh/termio --skill macos-rebuild-dev -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install termio-sh/termio macos-rebuild-dev --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/termio-sh/termio.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/macos-rebuild-dev .claude/skills/macos-rebuild-dev && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "macos-rebuild-dev" agent skill from https://github.com/termio-sh/termio/tree/main/skills/macos-rebuild-dev into .claude/skills/macos-rebuild-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "macos-rebuild-dev", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/termio-sh/termio/tree/main/skills/macos-rebuild-devType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add termio-sh/termio --skill macos-rebuild-dev -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install termio-sh/termio macos-rebuild-dev --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termio-sh/termio.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/macos-rebuild-dev .agents/skills/macos-rebuild-dev && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "macos-rebuild-dev" agent skill from https://github.com/termio-sh/termio/tree/main/skills/macos-rebuild-dev into .agents/skills/macos-rebuild-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "macos-rebuild-dev", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add termio-sh/termio --skill macos-rebuild-dev -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install termio-sh/termio macos-rebuild-dev --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termio-sh/termio.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/macos-rebuild-dev .cursor/skills/macos-rebuild-dev && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "macos-rebuild-dev" agent skill from https://github.com/termio-sh/termio/tree/main/skills/macos-rebuild-dev into .cursor/skills/macos-rebuild-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "macos-rebuild-dev", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/termio-sh/termio.git --path skills/macos-rebuild-dev--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add termio-sh/termio --skill macos-rebuild-dev -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install termio-sh/termio macos-rebuild-dev --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termio-sh/termio.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/macos-rebuild-dev .gemini/skills/macos-rebuild-dev && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "macos-rebuild-dev" agent skill from https://github.com/termio-sh/termio/tree/main/skills/macos-rebuild-dev into .gemini/skills/macos-rebuild-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "macos-rebuild-dev", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install termio-sh/termio macos-rebuild-devInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add termio-sh/termio --skill macos-rebuild-dev -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/termio-sh/termio.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/macos-rebuild-dev .github/skills/macos-rebuild-dev && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "macos-rebuild-dev" agent skill from https://github.com/termio-sh/termio/tree/main/skills/macos-rebuild-dev into .github/skills/macos-rebuild-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "macos-rebuild-dev", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add termio-sh/termio --skill macos-rebuild-dev -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install termio-sh/termio macos-rebuild-dev --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/termio-sh/termio.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/macos-rebuild-dev .opencode/skills/macos-rebuild-dev && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "macos-rebuild-dev" agent skill from https://github.com/termio-sh/termio/tree/main/skills/macos-rebuild-dev into .opencode/skills/macos-rebuild-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "macos-rebuild-dev", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
macos-rebuild-devKill the running termio dev app, rebuild it with SwiftPM, and relaunch it as a foreground app.
macOS Rebuild Dev is an agent skill from termio-sh/termio. Kill the running termio dev app, rebuild it with SwiftPM, and relaunch it as a foreground app. Invoke when the user says 'rebuild', 'rebuild app', 'restart app', 'relaunch', '重新编译', or '重启 app'.
Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Mobile. It works with macOS and Swift. The repository describes itself as: A terminal-first agentic development environment for agentic coding. Build for CLI/TUI agent. Runtime for Coding Agent, Tmux alternative. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit af3b35b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
swiftgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
macOS Rebuild Dev loads about 1.8k tokens when it runs. Until then it costs about 53 tokens; SKILL.md has 863 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from termio-sh/termio at commit af3b35b, republished under its MIT licence (© termio-sh). 863 words, ~1,839 tokens.
.claude/skills/macos-rebuild-dev/SKILL.md (or your agent's skills folder).Kill the running dev build, rebuild it as the isolated termio-dev.app bundle,
and relaunch — so every rebuild reflects the current Dock icon and, crucially, does
not disturb an installed release build you use daily.
termio ships a TERMIO_CHANNEL=dev build that is a fully separate app from the
release one, so both can run at the same time:
| release | dev (this skill) | |
|---|---|---|
| Bundle | termio.app (usually /Applications) | termio-dev.app (repo root) |
| Bundle id | sh.termio.app | sh.termio.app.dev |
| State + sockets | ~/Library/Application Support/termio | …/termio-dev |
| User config | ~/.termio | ~/.termio-dev |
| Daemon socket | $TMPDIR/termiod-<uid> | …-dev |
| Daemon launchd job | sh.termio.termiod | sh.termio.termiod.dev |
| Companion port | 8787 | 8788 |
| CLI on PATH | termio | termio-dev |
| Sparkle auto-update | on | no update feed (dev never self-updates) |
All of this falls out of the .dev bundle-id suffix via Sources/termio/Companion/AppChannel.swift
(paths + port) and scripts/build-app.sh (id, name, SUFeedURL deletion, CLI rebind).
Sparkle.framework itself is embedded on both channels — the binary links it either
way — so a dev bundle still carries it; it just has nothing to check.
termio is a plain SwiftPM executable (Package.swift → executableTarget named
termio); swift build alone produces a bare binary with no Dock icon. So this
skill builds the real bundle via scripts/build-app.sh. For a dev build the script
auto-picks a real codesigning identity from your own keychain (any "Apple
Development" / "Developer ID Application" cert — a free Apple ID gives you one) so the
dev app can post macOS notifications; usernoted rejects an ad-hoc signature outright,
so an unsigned dev build can never banner. A contributor with no signing cert
falls back to ad-hoc automatically — the build still succeeds, they just don't get
notifications. Set SIGN_IDENTITY=… to force a specific one. The app runs
unsandboxed with .exec PTYs — see CLAUDE.md. The icon is packaging/icon-static.svg,
rasterized to packaging/AppIcon.png by scripts/render-icon.sh (needs headless
Chrome). Note: dev and release currently share the same icon art and differ only by
name ("termio dev") — a tinted dev icon is a possible follow-up.
When invoked, execute these steps sequentially:
Kill only the running dev app + its tunnel. Both channels' inner binary is
named termio (CFBundleExecutable), so pkill -x termio would kill the release
app too. Match the dev bundle path instead. SIGKILL skips the app's
willTerminate cleanup, so also reap the companion tunnel it spawned on the dev
port (8788):
pkill -9 -f "termio-dev.app/Contents/MacOS/termio" || true
pkill -9 -f "cloudflared tunnel --url http://127.0.0.1:8788" || true
pkill -9 -f "tunelo port 8788" || trueBuild the dev bundle from the committed packaging/AppIcon.png — do not
re-render the icon (see "Icons" below). Show the tail of the output; if the
build fails, show the error and stop — do NOT relaunch:
TERMIO_CHANNEL=dev ./scripts/build-app.sh 2>&1 | tail -12Re-register the dev bundle with LaunchServices, then refresh the Dock cache.
macOS resolves an app's icon by its bundle id (sh.termio.app.dev); lsregister -f
forces our path to win and killall Dock drops the cached icon:
LSREG="/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister"
"$LSREG" -f "$PWD/termio-dev.app"
touch ./termio-dev.app
killall Dock 2>/dev/null || trueRelaunch via open (NOT nohup on the inner binary — that bypasses
LaunchServices). open's --stdout / --stderr still capture logs:
open ./termio-dev.app --stdout /tmp/termio-dev.log --stderr /tmp/termio-dev.log
echo "launched ./termio-dev.app (logs: /tmp/termio-dev.log)"Upgrade the running dev daemon. build-app.sh already rebuilt the
daemon into Resources/termiod, but a running dev daemon keeps its old
image: a dev app's launch-time reconcile deliberately refuses to stage
(its bundle stamp is a placeholder, and that guard is what keeps a dev
build from ever deploying itself over a release daemon). Without this
step, a termiod-side change gets "verified" against the previous daemon.
The deploy is idempotent — same version reports current and does
nothing, so it costs nothing on Swift-only rebuilds — and an execve
handoff keeps the pid and carries every live session. TERMIOD_SOCK must
be unset first: a shell inside a termio session carries it pointed at the
release daemon, and it overrides the channel.
unset TERMIOD_SOCK
TERMIO_CHANNEL=dev ./termio-dev.app/Contents/Resources/termiod deploy --json 2>&1 | tail -3A daemon that isn't running needs nothing: the first pane starts it from the new bundle.
Report the result: whether the build succeeded, the app relaunched, and
the daemon version the deploy reported. If the window doesn't appear, check
/tmp/termio-dev.log.
Sessions carried across the handoff keep the environment and shell their old daemon spawned them with — a change to session spawning (env, injection, PTY setup) is invisible in them by design. Open a new session to see it.
scripts/render-icon.sh rasterizes packaging/icon-static.svg into
packaging/AppIcon.png (and the iOS asset) through headless Chrome — and its
output is not reproducible: rendering the same SVG twice writes two different
files, neither matching the committed one. Running it on every rebuild therefore
dirtied the tree with two unreviewable binary diffs, cost a Chrome launch, and
risked overwriting hand-touched artwork. So it is not part of this loop.
Re-render only when the SVG actually changed, and commit the PNGs as their own change:
./scripts/render-icon.sh && git add packaging/AppIcon.png \
ios/Sources/Assets.xcassets/AppIcon.appiconset/AppIcon.pngbuild-app.sh) into the dev channel
bundle, so it's a few seconds slower than a bare swift build. For quick code-only
iteration without a bundle, run swift build and launch
"$(swift build --show-bin-path)/termio" directly — but that has no Dock icon and,
running unbundled, uses AppChannel.suffix == "" (i.e. the release state dir and
port 8787), so it is not isolated. Use the bundle when you need isolation..build lock can make a build emit
spurious errors mid-write; if that happens, just rerun.Package.swift or sources during a rebuild.app-screenshot-debug skill to
actually see the result.© termio-sh, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/macos-rebuild-dev of termio-sh/termio.
Open the folder on GitHubat commit af3b35b
macOS Rebuild Dev next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| macOS Rebuild Dev this skilltermio-sh/termio | 540 | — | ~1.8k | Automated safety check: Pass | MIT | |
| macOS Spm App PackagingDimillian/Skills | 4k | 5 repos | ~1.2k | Automated safety check: Pass | MIT | |
| macOS DevelopmentKartikLabhshetwar/better-shot | 2.4k | 2 repos | ~735 | Automated safety check: Pass | Custom licence | |
| Snapshot Testsmicrosoft/SwiftStreamingMarkdown | 378 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Write SwiftKartikLabhshetwar/better-shot | 2.4k | 4 repos | ~10k | Automated safety check: Pass | Custom licence | |
| Build Run Debugrobinebers/openusage | 4.3k | — | ~1.8k | Automated safety check: Pass | MIT |
Dimillian/Skills
Scaffold, build, and package SwiftPM-based macOS apps without an Xcode project.
KartikLabhshetwar/better-shot
Comprehensive macOS development guidance including Swift 6+, SwiftUI, SwiftData, architecture patterns, AppKit bridging, and macOS 26 Tahoe APIs.
microsoft/SwiftStreamingMarkdown
Record and validate swift-snapshot-testing snapshots in the SwiftStreamingMarkdown package: regenerate reference PNGs, run snapshot tests, and diff failed snapshots.
KartikLabhshetwar/better-shot
How to write modern Swift well — modeling with value types, Swift 6 data-race safety and approachable concurrency (@concurrent, main-actor-by-default, actors, task groups), protocols and generics…
robinebers/openusage
Build, run, and debug local macOS apps and desktop executables using shell-first Xcode and Swift workflows.
RayFernando1337/rayfernando-skills
Bootstrap agents for iOS, iPadOS, macOS, Swift, SwiftUI, SwiftData/Core Data, Swift Testing, Xcode build/test/debug, Simulator, App Intents, or XcodeBuildMCP work.
termio-sh/termio
Diagnose a termio hang, beachball, crash, or 'it froze again' from the evidence macOS and termio actually leave behind — live process samples, crash and CPU-burn reports, the unified log, the…
termio-sh/termio
Drive the running termio app via AppleScript / System Events to reach a UI state (focus the window, click a sidebar project, a terminal pane, a control), capture a pixel-accurate screenshot of just…
termio-sh/termio
Analyze / reverse-engineer the locally installed Dia Browser mac app (The Browser Company; bundle id company.thebrowser.dia; shares ArcCore with Arc).
termio-sh/termio
Drive App Store Connect from the terminal with the asc CLI — TestFlight builds, groups, testers and What to Test notes; App Store versions, metadata, keywords, screenshots and release notes…
termio-sh/termio
Turn vague customer or user feedback from pasted text, chat excerpts, or screenshots into a clear, evidence-backed GitHub issue without inventing requirements.
termio-sh/termio
Regenerate the landing site's OG/social card (web/landing/public/og.webp) by rendering a temporary in-app route with the real hero WebGL aurora and screenshotting it with headless Chrome.
Categories
Kill the running termio dev app, rebuild it with SwiftPM, and relaunch it as a foreground app. macOS Rebuild Dev is an agent skill from termio-sh/termio. Kill the running termio dev app, rebuild it with SwiftPM, and relaunch it as a foreground app.
macOS Rebuild Dev fits situations like: mobile work in your project.
Run `npx skills add termio-sh/termio --skill macos-rebuild-dev -a claude-code`. Or copy the skill folder (skills/macos-rebuild-dev in termio-sh/termio) into .claude/skills/macos-rebuild-dev in your project. Claude Code loads it when a task matches its description.
Run `npx skills add termio-sh/termio --skill macos-rebuild-dev -a codex`. Or copy the skill folder (skills/macos-rebuild-dev in termio-sh/termio) into .agents/skills/macos-rebuild-dev in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add termio-sh/termio --skill macos-rebuild-dev -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/macos-rebuild-dev, .gemini/skills/macos-rebuild-dev, .github/skills/macos-rebuild-dev and .opencode/skills/macos-rebuild-dev in your project.
Going by SKILL.md and its folder, macOS Rebuild Dev needs the command-line tools its instructions call (swift and git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
macOS Rebuild Dev is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with macOS Rebuild Dev: macOS Spm App Packaging (Dimillian/Skills, 4k stars), macOS Development (KartikLabhshetwar/better-shot, 2.4k stars), Snapshot Tests (microsoft/SwiftStreamingMarkdown, 378 stars) and Write Swift (KartikLabhshetwar/better-shot, 2.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
termio-sh (a GitHub organization) maintains it in termio-sh/termio, which has 540 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 7, 2026.
Source: termio-sh/termio on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.