Install
$ agentstack add skill-shikanime-labs-skills-system-migration-audit ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
System Migration Audit
Audit, plan, and execute system-level package manager migrations on macOS. Primary use case: migrating from Homebrew (x86_64 EOL) to MacPorts + mise.
Trigger
Use this skill when the user mentions:
- "migrate brew to port"
- "homebrew deprecated"
- "macports install"
- "package migration"
- "audit brew"
- "reinstall packages"
- "intel mac eol"
Phase 1: Inventory
# Top-level Homebrew packages (not dependencies)
brew leave 2>/dev/null
# Full formula + cask list
brew list --formula
brew list --casks
# Check what Homebrew itself needs
brew deps --tree $(brew leave 2>/dev/null) 2>/dev/null
# Optionally check MacPorts for available equivalents
port search --name --regex "^$" 2>/dev/null
Output Format
Produce a table:
| # | Brew formula | Category | MacPorts equiv. | Status | | --- | ------------ | -------- | --------------- | -------------- | | 1 | openssl | crypto | openssl3 | port available | | 2 | postgresql | db | postgresql16 | port available | | 3 | cmatrix | fun | -- | skip |
Phases:
- Audit -- map every top-level package
- Categorize -- system | dev | lang-runtime | skip
- Plan -- write the migration commands
- Execute -- run them in dependency order
- Verify -- check the replaced packages work
- Cleanup -- optionally remove Homebrew
Phase 2: Categorize
Sort every package into one of five buckets:
| Bucket | Action | Examples | | ----------- | ----------------------------------- | ---------------------- | | port-has | MacPorts provides it, install there | cmake, openssl, curl | | mise-has | Better managed by mise (asdf-style) | nodejs, python, ruby | | brew-only | Only available via Homebrew -- keep | mas, some GUI casks | | system | macOS or MacPorts built-in -- skip | perl, python3 (system) | | skip | Not needed on this host | fun/temporary packages |
Phase 3: Port Mapping
MacPorts naming conventions differ from Homebrew:
| Pattern | Example | | ------------------------------ | -------------------------------------- | | openssl -> openssl3 | Versioned port | | postgresql -> postgresql16 | Major version port | | node -> nodejs22 | Major version (or nodejs for latest) | | @version suffixes | ruby3.3 becomes ruby33 | | No equivalent | Accept the drop or keep via Homebrew |
# Verify a port exists before declaring it
port search --exact --name 2>/dev/null || echo "NOT FOUND"
# Check variants (macports equivalent of brew options)
port variants
Phase 4: Migration Order
Install in this exact order:
- First:
sudo port install curl openssl3(build toolchain foundation) - Then: core developer tools (
cmake,ninja,pkg-config,autoconf) - Then: languages via
mise(so they shadow system/port versions) - Then: services (
redis,postgresql, etc.) - Last: apps and casks
Phase 5: Cleanup
# Uninstall a brew package (leaves formula in place)
brew uninstall
# Remove ALL Homebrew (only after confirming every dependency is migrated)
/bin/bash -c "$(curl -fsSL \
https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
Pitfalls
- MacPorts builds from source by default. Large packages (LLVM, Chromium)
can take 30+ minutes. Use port install -b to attempt binary archives first.
- MacPorts names might not exist yet. A port can lag behind the latest
upstream release. Always verify with port search before declaring a mapping.
- PATH ordering matters. MacPorts lives in
/opt/local/bin; system tools
in /usr/bin. Ensure MacPorts is before system but after mise shims: mise > macports > homebrew > system.
- GPG signing on macOS.
pinentry-macrequires GUI. For headless
environments, switch to SSH commit signing: git config --global gpg.format ssh.
- mise vs. MacPorts for language runtimes. Prefer mise: it supports
.tool-versions files, per-project overrides, and is cross-platform. Only use MacPorts for system libraries (openssl, readline, sqlite).
- Do not mix Homebrew and MacPorts for the same library. Linker conflicts
will silently break builds. Pick one, stick to it, and unlink the other.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: shikanime-labs
- Source: shikanime-labs/skills
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.