Multi Platform Dev logo

Multi Platform Dev

Community
Omar-Obando
multi-platform-dev

Use when developing cross-platform applications that must work on Windows, Linux, and macOS. Covers shell command differences, path handling, line endings, file permissions, package managers, environment detection, platform-specific build tools, and testing strategies. Ensures code works everywhere without platform assumptions.

Overview

PublisherOmar-Obando
Repositoryqwen-orchestrator
Skill namemulti-platform-dev
Stars
53
Forks
13
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by Omar-Obando on GitHub. Read the source before you install it.

Installation

Install the Multi Platform Dev AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/Omar-Obando/qwen-orchestrator/tree/main/skills/multi-platform-dev
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Omar-Obando/qwen-orchestrator.git /tmp/qwen-orchestrator
mkdir -p .claude/skills
cp -r /tmp/qwen-orchestrator/skills/multi-platform-dev .claude/skills/multi-platform-dev
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Multi Platform Dev in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Multi Platform Dev on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Multi Platform Dev is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Multi-Platform Development Skill — Cross-Platform Compatibility

Overview

This skill provides comprehensive guidance for developing applications that work across Windows, Linux, and macOS. It covers shell command differences, path handling, line endings, file permissions, package managers, environment detection, platform-specific build tools, and testing strategies. Essential for avoiding the "works on my machine" problem.

When to Use

Use this skill when:

  • Writing shell scripts that must run on Windows, Linux, and macOS
  • Handling file paths across different operating systems
  • Managing line endings (CRLF vs LF) in cross-platform projects
  • Setting file permissions portably
  • Detecting the current platform in code
  • Configuring package managers for different OS
  • Building cross-platform CI/CD pipelines
  • Writing cross-platform test scripts
  • Handling environment variables across platforms
  • Managing process management differences
  • Configuring cross-platform development environments
  • Writing platform-conditional code
  • Handling cross-platform networking differences
  • Managing cross-platform logging and debugging
  • Creating cross-platform installer packages
  • Writing cross-platform configuration files
  • Handling cross-platform date/time formatting
  • Managing cross-platform locale and encoding
  • Writing cross-platform CLI tools
  • Configuring cross-platform Docker environments

Do NOT use this skill when:

  • Building native OS-specific applications (use platform-specific SDK)
  • Writing kernel-level code (use OS-specific documentation)
  • Developing mobile apps (use mobile-engineer skill)
  • Creating browser-only web apps (use frontend-developer skill)
  • Configuring cloud infrastructure (use terraform-iac or aws-serverless skill)
  • Writing database queries (use database-design skill)
  • Implementing machine learning models (use data-science skill)

Why avoid: Cross-platform concerns are irrelevant for platform-specific or browser-only applications. Focus on the target platform.

Core Concepts

Platform Detection

PlatformNode.jsPythonShellPowerShell
Windowsprocess.platform === 'win32'sys.platform == 'win32'N/A$true
Linuxprocess.platform === 'linux'sys.platform == 'linux'$true$false
macOSprocess.platform === 'darwin'sys.platform == 'darwin'$true$false

Shell Command Differences

OperationLinux/macOS (Bash)Windows (CMD)Windows (PowerShell)
List filesls -ladir /aGet-ChildItem -Force
Change directorycd /pathcd C:\pathSet-Location C:\path
Copy filecp src dstcopy src dstCopy-Item src dst
Copy directorycp -r src dstxcopy src dst /E /ICopy-Item src dst -Recurse
Delete filerm filedel fileRemove-Item file
Delete directoryrm -rf dirrmdir /s /q dirRemove-Item dir -Recurse -Force
Make directorymkdir -p dirmkdir dirNew-Item -ItemType Directory -Path dir
Show current dirpwdcdGet-Location
Search textgrep "pattern" filefindstr "pattern" fileSelect-String "pattern" file
Pipe outputcmd1 | cmd2cmd1 | cmd2cmd1 | cmd2
Redirect outputcmd > filecmd > filecmd > file
Environment var$VAR or ${VAR}%VAR%$env:VAR
Execute script./script.shscript.bat.\script.ps1
Clear screenclearclsClear-Host
Show processps auxtasklistGet-Process
Kill processkill PIDtaskkill /PID PID /FStop-Process -Id PID -Force

Path Handling

javascript
// ✅ GOOD: Cross-platform path handling (Node.js)
const path = require('path');

// Works on all platforms
const filePath = path.join('data', 'files', 'document.txt');
// Windows: data\files\document.txt
// Linux/macOS: data/files/document.txt

// ✅ GOOD: Path separator detection
const separator = path.sep; // '\\' on Windows, '/' on Linux/macOS

// ❌ BAD: Hardcoded paths
const badPath = '/home/user/data/file.txt'; // Fails on Windows
const badPath2 = 'C:\\Users\\user\\data\\file.txt'; // Fails on Linux/macOS
python
# ✅ GOOD: Cross-platform path handling (Python)
from pathlib import Path

# Works on all platforms
file_path = Path('data') / 'files' / 'document.txt'

# ✅ GOOD: Platform detection
import sys
if sys.platform == 'win32':
    print("Windows-specific logic")
elif sys.platform == 'darwin':
    print("macOS-specific logic")
else:
    print("Linux/Unix-specific logic")

# ❌ BAD: Hardcoded paths
bad_path = '/home/user/data/file.txt'  # Fails on Windows

Line Endings

PlatformLine EndingBytesGit Config
WindowsCRLF\r\n (0x0D 0x0A)core.autocrlf=true
Linux/macOSLF\n (0x0A)core.autocrlf=input
git
# .gitconfig (Global settings)
[core]
    autocrlf = input  # Convert CRLF to LF on commit, keep LF on checkout

# .gitattributes (Project settings - commit to repo)
# Text files - normalize to LF
* text=auto

# Specific text files
*.js text
*.ts text
*.py text
*.md text
*.json text
*.yaml text
*.yml text

# Binary files - no conversion
*.png binary
*.jpg binary
*.gif binary
*.woff binary
*.woff2 binary
*.ttf binary

File Permissions

bash
# Linux/macOS: chmod for permissions
chmod 755 script.sh    # rwxr-xr-x (executable)
chmod 644 file.txt     # rw-r--r-- (read/write owner, read others)
chmod 600 secrets.env  # rw------- (read/write owner only)

# Windows: No direct equivalent - use ACLs
# PowerShell: Set-Acl for permissions
icacls file.txt /grant:r "Users:(R)"  # Read for all users
icacls file.txt /grant:r "Administrators:(F)"  # Full control for admins

# Cross-platform solution: Use package manager or installer
# npm: Files in bin/ are marked executable on Linux/macOS
# Python: Use setuptools with scripts= or entry_points=

Cross-Platform Shell Scripts

Bash with Windows Support (Git Bash/WSL)

bash
#!/usr/bin/env bash
set -euo pipefail

# Platform detection
OS="$(uname -s)"
case "${OS}" in
    Linux*)     MACHINE=Linux;;
    Darwin*)    MACHINE=Mac;;
    CYGWIN*)    MACHINE=Cygwin;;
    MINGW*)     MACHINE=MinGW;;
    *)          MACHINE="UNKNOWN:${OS}"
esac

echo "Detected platform: ${MACHINE}"

# Cross-platform path handling
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# Cross-platform find
if [[ "${MACHINE}" == "Linux" || "${MACHINE}" == "Mac" ]]; then
    find "${PROJECT_ROOT}/src" -name "*.ts" -type f
else
    # Windows (Git Bash/MinGW)
    find "${PROJECT_ROOT}/src" -name "*.ts" -type f
fi

# Cross-platform process killing
kill_process() {
    local pid=$1
    if [[ "${MACHINE}" == "MinGW" || "${MACHINE}" == "Cygwin" ]]; then
        taskkill //PID "${pid}" //F >/dev/null 2>&1
    else
        kill "${pid}" 2>/dev/null
    fi
}

PowerShell Cross-Platform

powershell
# Cross-platform PowerShell (works on Windows, Linux, macOS)

# Platform detection
$isWindows = $true
$isLinux = $false
$isMacOS = $false

if ($PSVersionTable.PSVersion.Major -ge 6) {
    # PowerShell Core (cross-platform)
    $platform = [System.Runtime.InteropServices.RuntimeInformation]::OSDescription
    $isWindows = $platform -match "Windows"
    $isLinux = $platform -match "Linux"
    $isMacOS = $platform -match "Darwin"
}

# Cross-platform path handling
$projectRoot = $PSScriptRoot
$filePath = Join-Path $projectRoot "data\file.txt"

# Cross-platform file operations
Copy-Item -Path "src\file.txt" -Destination "dst\file.txt" -Force
Remove-Item -Path "temp\*" -Recurse -Force
New-Item -ItemType Directory -Path "new\dir" -Force

# Cross-platform process management
Get-Process -Name "node" | Stop-Process -Force

Node.js Cross-Platform Scripts

javascript
// ✅ GOOD: Cross-platform script (package.json)
{
  "scripts": {
    "dev": "cross-env NODE_ENV=development nodemon src/index.ts",
    "build": "tsc && electron-builder",
    "test": "cross-env NODE_ENV=test jest",
    "start": "node dist/index.js"
  },
  "dependencies": {
    "cross-env": "^7.0.3",
    "cross-spawn": "^7.0.3"
  }
}

// ✅ GOOD: Using cross-spawn for child processes
const spawn = require('cross-spawn');

// Works on all platforms (handles path.exe on Windows)
const child = spawn('npm', ['run', 'build'], { stdio: 'inherit' });

// ❌ BAD: Platform-specific commands
const { exec } = require('child_process');
exec('ls -la');  // Fails on Windows without Git Bash/WSL

Package Managers

Cross-Platform Package Management

Tasknpm/yarn/pnpmpipapt (Debian/Ubuntu)brew (macOS)chocolatey (Windows)
Install packagenpm install pkgpip install pkgsudo apt install pkgbrew install pkgchoco install pkg
Update packagenpm update pkgpip install --upgrade pkgsudo apt update && sudo apt upgrade pkgbrew upgrade pkgchoco upgrade pkg
Remove packagenpm uninstall pkgpip uninstall pkgsudo apt remove pkgbrew uninstall pkgchoco uninstall pkg
List packagesnpm listpip listdpkg --listbrew listchoco list --local-only
Search packagesnpm search querypip search queryapt search querybrew search querychoco search query

Development Environment Setup

bash
# Linux (Ubuntu/Debian)
sudo apt update
sudo apt install -y nodejs npm python3 python3-pip git curl
nvm install --lts

# macOS (Homebrew)
brew install node python git curl
nvm install --lts

# Windows (Chocolatey)
choco install nodejs-lts python git curl
nvm install --lts

# Windows (Scoop)
scoop install nodejs-lts python git curl

Cross-Platform CI/CD

GitHub Actions Matrix

yaml
name: Cross-Platform CI

on: [push, pull_request]

jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        node-version: [18, 20, 22]
    runs-on: ${{ matrix.os }}

    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test

      - name: Build
        run: npm run build

      - name: Platform-specific tests
        if: matrix.os == 'windows-latest'
        run: npm run test:windows

      - name: Platform-specific tests
        if: matrix.os == 'ubuntu-latest'
        run: npm run test:linux

Cross-Platform Testing Strategy

Platform Detection in Tests

javascript
// Jest test with platform detection
describe('File operations', () => {
  const isWindows = process.platform === 'win32';

  test('should handle paths correctly', () => {
    const path = require('path');
    const testPath = path.join('data', 'test.txt');

    if (isWindows) {
      expect(testPath).toMatch(/\\/);
    } else {
      expect(testPath).toMatch(/\//);
    }
  });

  // Skip tests that don't work on Windows
  test.skipIf(isWindows)('should set file permissions', () => {
    // chmod tests only on Linux/macOS
  });
});

// Python test with platform detection
import unittest
import sys

class TestCrossPlatform(unittest.TestCase):
    def test_path_handling(self):
        from pathlib import Path
        path = Path('data') / 'test.txt'
        self.assertTrue(isinstance(path, Path))

    @unittest.skipIf(sys.platform == 'win32', "Linux/macOS only")
    def test_file_permissions(self):
        # chmod tests only on Linux/macOS
        import os
        os.chmod('test.txt', 0o755)

Production Checklist

Before deploying cross-platform applications:

  • Platform detection implemented
  • Path handling uses platform-agnostic methods
  • Line endings normalized (LF in Git)
  • Shell commands work on all target platforms
  • File permissions handled portably
  • Environment variables accessed correctly
  • Package managers documented for each platform
  • CI/CD tests run on all platforms
  • Platform-specific tests skipped appropriately
  • Documentation includes platform-specific instructions
  • Error messages are platform-agnostic
  • Logging works across platforms
  • Build artifacts are platform-specific when needed
  • Installation scripts work on all platforms
  • Configuration files are platform-agnostic

Real-World Impact

Before this skill:

  • "Works on my machine" bugs
  • Shell scripts failing on Windows
  • Path errors in production
  • Line ending conflicts in Git
  • Platform-specific assumptions in code

After this skill:

  • Cross-platform compatibility from day one
  • Shell scripts working on all platforms
  • Path handling that never fails
  • Clean Git history with normalized line endings
  • Platform-aware code with proper fallbacks

Cross-References

  • docker-containerization - For containerized cross-platform deployment
  • github-actions-cicd - For cross-platform CI/CD pipelines
  • devops-pipeline - For deployment automation
  • testing-strategy - For cross-platform test coverage

References

Frequently asked questions

What does the Multi Platform Dev AI skill do?

Use when developing cross-platform applications that must work on Windows, Linux, and macOS. Covers shell command differences, path handling, line endings, file permissions, package managers, environment detection, platform-specific build tools, and testing strategies. Ensures code works everywhere without platform assumptions.

Why use Multi Platform Dev on TypingMind?

Because you install it once and use it with any model. Multi Platform Dev is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Multi Platform Dev in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Omar-Obando/qwen-orchestrator/tree/main/skills/multi-platform-dev. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Multi Platform Dev?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Multi Platform Dev?

As many as you like. As long as a model supports skills, you can use Multi Platform Dev with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Multi Platform Dev AI skill free?

Yes. It is published on GitHub by Omar-Obando under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇