← Back to list

cross-platform
by mylee04
Cross-platform desktop notifications for Claude Code/Codex/Gemini - Get alerts when tasks complete
⭐ 57🍴 4📅 Jan 22, 2026
SKILL.md
name: cross-platform description: Cross-platform development patterns for macOS, Windows, and Linux
Cross-Platform Development
When to Use
- Adding new platform support
- Writing platform-specific code
- Testing across platforms
Platform Detection
Bash (macOS/Linux)
detect_os() {
case "$(uname -s)" in
Darwin*) echo "macos" ;;
Linux*)
# Check for WSL
if grep -qi microsoft /proc/version 2>/dev/null; then
echo "wsl"
else
echo "linux"
fi
;;
CYGWIN*|MINGW*|MSYS*) echo "windows" ;;
*) echo "unknown" ;;
esac
}
PowerShell (Windows)
function Get-Platform {
if ($IsWindows -or $env:OS -eq "Windows_NT") {
return "windows"
} elseif ($IsLinux) {
return "linux"
} elseif ($IsMacOS) {
return "macos"
}
return "unknown"
}
Notification Tools by Platform
| Platform | Primary | Fallback |
|---|---|---|
| macOS | terminal-notifier | osascript |
| Linux | notify-send | zenity, wall |
| Windows | BurntToast | System.Windows.Forms |
| WSL | wsl-notify-send | notify-send |
Platform-Specific Patterns
macOS
send_macos_notification() {
local title="$1"
local message="$2"
if command -v terminal-notifier &> /dev/null; then
terminal-notifier \
-title "$title" \
-message "$message" \
-sound "Glass"
else
osascript -e "display notification \"$message\" with title \"$title\""
fi
}
Linux
send_linux_notification() {
local title="$1"
local message="$2"
if command -v notify-send &> /dev/null; then
notify-send "$title" "$message" \
--urgency=normal \
--app-name="Code-Notify"
elif command -v zenity &> /dev/null; then
zenity --notification --text="$title\n$message"
else
echo "[$title] $message" | wall 2>/dev/null
fi
}
Windows (PowerShell)
function Send-WindowsNotification {
param(
[string]$Title,
[string]$Message
)
if (Get-Module -ListAvailable -Name BurntToast) {
New-BurntToastNotification -Text $Title, $Message
} else {
Add-Type -AssemblyName System.Windows.Forms
$notification = New-Object System.Windows.Forms.NotifyIcon
$notification.Icon = [System.Drawing.SystemIcons]::Information
$notification.BalloonTipTitle = $Title
$notification.BalloonTipText = $Message
$notification.Visible = $true
$notification.ShowBalloonTip(10000)
}
}
WSL
send_wsl_notification() {
local title="$1"
local message="$2"
if command -v wsl-notify-send.exe &> /dev/null; then
wsl-notify-send.exe --category "$title" "$message"
else
# Fall back to Linux notification
send_linux_notification "$title" "$message"
fi
}
Path Handling
Unix vs Windows Paths
# Convert Unix path to Windows path (in WSL)
to_windows_path() {
local unix_path="$1"
wslpath -w "$unix_path"
}
# Convert Windows path to Unix path (in WSL)
to_unix_path() {
local win_path="$1"
wslpath -u "$win_path"
}
Home Directory
# Bash
HOME_DIR="$HOME"
# PowerShell
$HomeDir = $env:USERPROFILE
Git Handling Across Platforms
Safe Git Commands
# Works on all platforms
get_project_name() {
local git_root
if git rev-parse --git-dir &> /dev/null; then
git_root=$(git rev-parse --show-toplevel 2>/dev/null)
if [[ -n "$git_root" ]]; then
basename "$git_root"
return 0
fi
fi
basename "$PWD"
}
PowerShell Git Handling
function Get-ProjectName {
try {
$gitRoot = & git rev-parse --show-toplevel 2>$null
if ($LASTEXITCODE -eq 0 -and $gitRoot) {
return Split-Path $gitRoot -Leaf
}
} catch {
# Not in git repo
}
return Split-Path (Get-Location) -Leaf
}
Testing Strategy
CI/CD Matrix
strategy:
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
Platform-Specific Tests
# test/test-platform.sh
test_current_platform() {
local os=$(detect_os)
case "$os" in
macos) test_macos_notification ;;
linux) test_linux_notification ;;
wsl) test_wsl_notification ;;
*) echo "Unknown platform: $os" ;;
esac
}
Common Pitfalls
-
Line Endings: Windows uses CRLF, Unix uses LF
- Use
.gitattributesto enforce line endings
- Use
-
Path Separators: Windows uses
\, Unix uses/- Use variables like
$HOMEinstead of hardcoded paths
- Use variables like
-
Case Sensitivity: Windows is case-insensitive
- Be consistent with file naming
-
Command Availability: Commands differ by platform
- Always check with
command -vbefore use
- Always check with
Success Metrics
- Works on macOS 10.14+
- Works on Ubuntu 20.04+
- Works on Windows 10+ (PowerShell 5.1+)
- Works on WSL2
- Graceful fallback when tools missing
Score
Total Score
65/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
✓最近の活動
1ヶ月以内に更新
+10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
✓タグ
1つ以上のタグが設定されている
+5
Reviews
💬
Reviews coming soon


