pmx 0.1.0

A CLI tool for managing AI agent profiles across different platforms (Claude, Codex)
Documentation
#compdef pmx

_pmx() {
    local -a commands
    
    # Get enabled commands dynamically, fallback to static list
    local enabled_commands
    enabled_commands=$(pmx internal-completion enabled-commands 2>/dev/null)
    
    if [[ -n "$enabled_commands" ]]; then
        # Build commands array from enabled commands
        commands=()
        while IFS= read -r cmd; do
            case "$cmd" in
                set-claude-profile)
                    commands+=('set-claude-profile:Set a Claude profile')
                    ;;
                reset-claude-profile)
                    commands+=('reset-claude-profile:Reset the current Claude profile')
                    ;;
                append-claude-profile)
                    commands+=('append-claude-profile:Append a Claude profile to existing configuration')
                    ;;
                set-codex-profile)
                    commands+=('set-codex-profile:Set a Codex profile')
                    ;;
                reset-codex-profile)
                    commands+=('reset-codex-profile:Reset the current Codex profile')
                    ;;
                append-codex-profile)
                    commands+=('append-codex-profile:Append a Codex profile to existing configuration')
                    ;;
                profile)
                    commands+=('profile:Profile management commands')
                    ;;
                completion)
                    commands+=('completion:Generate shell completions')
                    ;;
                mcp)
                    commands+=('mcp:Run MCP server to expose prompts')
                    ;;
            esac
        done <<< "$enabled_commands"
        commands+=('help:Print help message')
    else
        # Fallback to static command list
        commands=(
            'set-claude-profile:Set a Claude profile'
            'reset-claude-profile:Reset the current Claude profile'
            'append-claude-profile:Append a Claude profile to existing configuration'
            'set-codex-profile:Set a Codex profile'
            'reset-codex-profile:Reset the current Codex profile'
            'append-codex-profile:Append a Codex profile to existing configuration'
            'profile:Profile management commands'
            'completion:Generate shell completions'
            'mcp:Run MCP server to expose prompts'
            'help:Print help message'
        )
    fi
    
    if (( CURRENT == 2 )); then
        _describe 'command' commands
    elif (( CURRENT == 3 )); then
        case "$words[2]" in
            set-claude-profile|append-claude-profile)
                local -a claude_profiles
                claude_profiles=(${(f)"$(pmx internal-completion claude-profiles 2>/dev/null)"})
                if [[ ${#claude_profiles[@]} -eq 0 ]]; then
                    # Fallback to general list
                    claude_profiles=(${(f)"$(pmx profile list 2>/dev/null)"})
                fi
                _describe 'profile' claude_profiles
                ;;
            set-codex-profile|append-codex-profile)
                local -a codex_profiles
                codex_profiles=(${(f)"$(pmx internal-completion codex-profiles 2>/dev/null)"})
                if [[ ${#codex_profiles[@]} -eq 0 ]]; then
                    # Fallback to general list
                    codex_profiles=(${(f)"$(pmx profile list 2>/dev/null)"})
                fi
                _describe 'profile' codex_profiles
                ;;
            profile)
                local -a profile_commands
                profile_commands=(
                    'list:List all available profiles'
                    'edit:Edit an existing profile using $EDITOR'
                    'delete:Delete a profile (with confirmation)'
                    'create:Create a new profile using $EDITOR'
                    'show:Show profile content'
                    'copy:Copy profile contents to clipboard'
                )
                _describe 'subcommand' profile_commands
                ;;
            completion)
                _values 'shell' 'zsh'
                ;;
        esac
    elif (( CURRENT == 4 )); then
        case "$words[2]" in
            profile)
                case "$words[3]" in
                    edit|delete|show|copy)
                        local -a profiles
                        profiles=(${(f)"$(pmx internal-completion profile-names 2>/dev/null)"})
                        if [[ ${#profiles[@]} -eq 0 ]]; then
                            # Fallback to general list
                            profiles=(${(f)"$(pmx profile list 2>/dev/null)"})
                        fi
                        _describe 'profile' profiles
                        ;;
                    create)
                        # For create, we don't complete existing profiles since it's a new name
                        _message "profile name"
                        ;;
                esac
                ;;
        esac
    fi
}

compdef _pmx pmx