
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
CLI tool for managing AI coding assistant configurations - easily switch between providers (Claude Code, Codex, Continue) with Anthropic, Ollama, or custom APIs
Make AI coding tools effortlessly switchable
A lightweight CLI tool that makes it easy to switch between AI providers for Claude Code, Codex, Continue, and other AI coding assistants.
Working with AI coding tools shouldn't be complicated. Swixter lets you:
r, ls, sw) for maximum productivitynpm install -g swixter
npx swixter --help
| Platform | Status | Notes |
|---|---|---|
| Linux | ✅ Full | Full support |
| macOS | ✅ Full | Full support |
| Windows 10/11 | ✅ Full | Requires Node.js 18+; Docker Desktop + WSL2 for E2E tests |
Config stored at:
~/.config/swixter/~/swixter/ (e.g., C:\Users\YourName\swixter\)See docs/WINDOWS.md for detailed Windows guide.
# Interactive mode - guided setup
swixter
# Or use commands directly
swixter claude create # Create profile
swixter claude list # List profiles
swixter claude switch my-profile # Switch profile
swixter claude apply # Apply to Claude Code
# Launch Web UI (browser-based management)
swixter ui
| Provider | API Type | Description |
|---|---|---|
| Anthropic | responses | Official Claude API |
| Ollama | chat | Run Qwen, Llama, and other models locally |
| OpenAI | chat | OpenAI API |
| OpenRouter | chat | Unified access to 100+ models |
| Custom | chat | Add any OpenAI-compatible API |
Launch swixter ui to open a browser-based interface for managing profiles.
# Default port (3141)
swixter ui
# Custom port
swixter ui --port 8080
The UI auto-opens in your browser at http://localhost:3141.
The Dashboard shows:
swixter claude create # Create new profile (alias: new)
swixter claude list # List all profiles (alias: ls)
swixter claude switch <name> # Switch active profile (alias: sw)
swixter claude apply # Apply to Claude Code
swixter claude run # Run Claude Code with current profile (alias: r)
swixter claude edit <name> # Edit existing profile (alias: update)
swixter claude current # Show current active profile
swixter claude delete <name> # Delete profile (alias: rm)
swixter claude install # Install Claude Code CLI
swixter claude update-cli # Update Claude Code CLI (alias: upgrade)
swixter codex create # Create new profile
swixter codex list # List all profiles (alias: ls)
swixter codex switch <name> # Switch active profile (alias: sw)
swixter codex apply # Apply to Codex (writes ~/.codex/config.toml)
swixter codex run # Apply + set env + run codex (alias: r)
swixter codex edit <name> # Edit existing profile (alias: update)
swixter codex current # Show current active profile
swixter codex delete <name> # Delete profile (alias: rm)
swixter codex install # Install Codex CLI
swixter codex update-cli # Update Codex CLI (alias: upgrade)
Two ways to use Codex profiles:
Quick way (recommended): swixter codex r
Manual way: swixter codex apply → set env vars → codex
swixter qwen create # Create new profile
swixter qwen list # List all profiles (alias: ls)
swixter qwen switch <name> # Switch active profile (alias: sw)
swixter qwen apply # Apply to Continue
swixter qwen run # Run Qwen Code with current profile (alias: r)
swixter qwen edit <name> # Edit existing profile (alias: update)
swixter qwen current # Show current active profile
swixter qwen delete <name> # Delete profile (alias: rm)
swixter qwen install # Install Qwen Code CLI
swixter qwen update-cli # Update Qwen Code CLI (alias: upgrade)
swixter providers list # List available providers
swixter providers add # Add custom provider
swixter providers remove <id> # Remove provider
swixter providers show <id> # Show provider details
swixter ui # Launch Web UI
swixter ui --port <port> # Launch Web UI on custom port
swixter export <file> # Export configs
swixter export <file> --sanitize # Export without API keys
swixter import <file> # Import configs
swixter import <file> --overwrite # Overwrite existing profiles
swixter completion bash # Bash completion
swixter completion zsh # Zsh completion
swixter completion fish # Fish completion
Set specific models per profile:
swixter claude create \
--name production \
--provider anthropic \
--api-key sk-ant-xxx \
--anthropic-model claude-sonnet-4-20250514 \
--default-haiku-model claude-haiku-4-20250506 \
--default-opus-model claude-opus-4-20250514 \
--default-sonnet-model claude-sonnet-4-20250514
| Flag | Environment Variable | Description |
|---|---|---|
--anthropic-model | ANTHROPIC_MODEL | Default model |
--default-haiku-model | ANTHROPIC_DEFAULT_HAIKU_MODEL | Haiku model |
--default-opus-model | ANTHROPIC_DEFAULT_OPUS_MODEL | Opus model |
--default-sonnet-model | ANTHROPIC_DEFAULT_SONNET_MODEL | Sonnet model |
swixter codex create \
--name local-ollama \
--provider ollama \
--base-url http://localhost:11434 \
--model qwen3:32b
Configs are stored at:
~/.config/swixter/config.json~/swixter/config.json{
"profiles": {
"my-profile": {
"name": "my-profile",
"providerId": "anthropic",
"apiKey": "sk-ant-xxx",
"authToken": "sk-ant-auth-xxx",
"baseURL": "https://api.anthropic.com",
"models": {
"anthropicModel": "claude-sonnet-4-20250514",
"defaultHaikuModel": "claude-haiku-4-20250506",
"defaultOpusModel": "claude-opus-4-20250514",
"defaultSonnetModel": "claude-sonnet-4-20250514"
},
"envKey": "CUSTOM_API_KEY",
"headers": {
"X-Custom-Header": "value"
},
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
},
"ollama-local": {
"name": "ollama-local",
"providerId": "ollama",
"apiKey": "",
"baseURL": "http://localhost:11434",
"model": "qwen3:32b"
}
},
"coders": {
"claude": {
"activeProfile": "my-profile"
},
"codex": {
"activeProfile": "ollama-local"
},
"qwen": {
"activeProfile": ""
}
}
}
# Interactive setup
swixter providers add
# With flags
swixter providers add \
--id openrouter \
--name "OpenRouter" \
--display-name "OpenRouter" \
--base-url "https://openrouter.ai/api/v1" \
--auth-type bearer
# Then create a profile using it
swixter claude create --provider openrouter --api-key sk-or-xxx
# Setup work profile
swixter claude create --name work --provider anthropic --api-key sk-ant-work-xxx
# Setup personal profile
swixter claude create --name personal --provider anthropic --api-key sk-ant-personal-xxx
# Switch to work
swixter claude sw work && swixter claude apply
# Quick run
swixter claude r
# Switch to personal
swixter claude sw personal && swixter claude apply
swixter claude r
# Add Ollama profile
swixter qwen create \
--name local \
--provider ollama \
--base-url http://localhost:11434
# Switch and run
swixter qwen sw local
swixter qwen r
# Create Codex profile for Ollama
swixter codex create \
--name ollama-local \
--provider ollama \
--base-url http://localhost:11434
# Quick way: All-in-one
swixter codex r
# Manual way
swixter codex apply
export OLLAMA_API_KEY=""
codex
# Launch Web UI
swixter ui
# In browser:
# 1. Go to Profiles → Create a new profile
# 2. Go to Dashboard → Select profile from dropdown
# 3. Click APPLY to write config
Enable auto-completion for faster typing:
# Install
swixter completion bash > ~/.local/share/bash-completion/completions/swixter
# Reload
source ~/.bashrc
# Install
swixter completion zsh > ~/.zfunc/_swixter
# Reload
autoload -U compinit && compinit
# Install
swixter completion fish > ~/.config/fish/completions/swixter.fish
# Reload
fish
Save keystrokes with short aliases:
| Alias | Full Command | Description |
|---|---|---|
r | run | Execute the AI coder |
ls | list | List all profiles |
sw | switch | Switch profiles |
rm | delete | Delete profiles |
new | create | Create new profile |
update | edit | Edit existing profile |
upgrade | update-cli | Update CLI tool |
swixter/
├── src/
│ ├── cli/ # CLI command handlers
│ ├── config/ # Config file management
│ ├── adapters/ # Coder-specific adapters (Claude, Codex, Continue)
│ ├── providers/ # Provider presets
│ ├── server/ # Web UI API server
│ └── utils/ # Shared utilities
├── ui/ # Web UI (React + Vite)
└── tests/ # Unit tests
Data Flow:
swixter create/switch → Updates ~/.config/swixter/config.jsonswixter apply → Writes to coder config (~/.claude/settings.json, etc.)swixter run → Sets env vars + spawns coder CLIBuilt with modern tools:
# Clone repo
git clone https://github.com/dawnswwwww/swixter.git
cd swixter
# Install dependencies
bun install
# Run CLI in dev mode (with hot reload)
bun run cli:dev
# Run tests
bun test
# Run specific test
bun test tests/adapters/claude.test.ts
# E2E tests (requires Docker)
bun run test:e2e
# Build
bun run build
| Layer | Technology |
|---|---|
| Runtime | Bun |
| Language | TypeScript |
| CLI UI | @clack/prompts |
| Validation | Zod |
| Version | semver |
| Web UI | React + Vite + Tailwind CSS |
| Testing | Bun test, Docker E2E |
See CHANGELOG.md for version history.
Contributions welcome!
git clone https://github.com/dawnswwwww/swixter.git
cd swixter
bun install
bun run cli:dev
bun test
bun run build
CHANGELOG.md under [Unreleased]bun run release:patch # Bug fixes (0.0.10 → 0.0.11)
bun run release:minor # Features (0.0.10 → 0.1.0)
bun run release:major # Breaking changes
See CLAUDE.md for detailed development documentation.
MIT License - see LICENSE
Made with ❤️ to make AI coding tools more accessible
FAQs
CLI tool for managing AI coding assistant configurations - easily switch between providers (Claude Code, Codex, Continue) with Anthropic, Ollama, or custom APIs
The npm package swixter receives a total of 3 weekly downloads. As such, swixter popularity was classified as not popular.
We found that swixter demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.