A flexible terminal-based interface for working with any command-line AI assistant (Claude, OpenAI CLI, or custom LLMs). Multipass provides isolated workspaces called "AI Offices" with multiple "cubicles" for experimenting with AI-assisted development.
- LLM Agnostic: Works with any terminal-based AI assistant
- AI Office: Create isolated workspaces with multiple cubicles for each project
- Project Management: Organize different projects with their own terminal sessions
- Remote Sessions: Access your AI sessions from anywhere via web browser
- Session Persistence: Terminal sessions persist across connections
- Quick Commands: Customizable buttons for common commands
- Multi-Terminal View: Work with multiple AI sessions simultaneously
Edit src/utils/constants.js and find the LLM_CONFIG section to configure your AI assistant:
LLM_CONFIG: {
default: 'custom', // Change this to match your AI assistant key below
llms: {
custom: {
name: 'Your AI Assistant', // Display name in the UI
command: 'your-ai-command', // Terminal command to launch your AI
sessionPrefix: 'ai-', // Prefix for session names
exitSequence: '\x03', // Key sequence to exit (e.g., '\x03' = Ctrl+C)
exitDelay: 50 // Delay in ms after sending exit sequence
},
// Example configurations included:
// - claude: Uses 'claude' command, requires Ctrl+C twice to exit
// - openai: Uses 'openai' command
// - ollama: Uses 'ollama run llama2' command
}
}- Add a new entry in the
llmsobject - Set
commandto whatever terminal command launches your AI - Set
exitSequencebased on how your AI exits:'\x03'= Ctrl+C (most common)'\x03\x03'= Ctrl+C twice (for Claude)'\x04'= Ctrl+D'exit\n'= types "exit" and Enter
- Change
defaultto your AI's key name
Edit config/buttons.config.js to customize the quick command buttons that appear below the terminal:
module.exports = {
// AI Assistant buttons
ai: {
start: {
label: 'AI Assistant', // Button text
mobileLabel: '🤖 AI', // Mobile button text
className: 'bg-blue-600', // Tailwind CSS classes
title: 'Start AI Assistant' // Tooltip
},
exit: {
label: 'Exit AI',
mobileLabel: '🛑 Exit',
className: 'bg-red-600',
title: 'Exit AI Assistant'
}
},
// Quick command buttons
quickCommands: [
{
label: 'git status',
command: 'git status\n', // Command to send to terminal
className: 'bg-gray-600',
title: 'Show git status'
},
// Add your own commands here...
]
}- label: Text displayed on the button
- command: The exact command sent to the terminal (include
\nfor Enter) - className: Tailwind CSS classes for styling
- title: Tooltip text shown on hover
- mobileLabel: Alternative text for mobile view (optional)
- Node.js (v16 or higher)
- npm or yarn
- tmux (required for session persistence)
- git (required for AI Office functionality)
- Unix-like operating system (Linux, macOS, WSL on Windows)
-
Clone the repository:
git clone https://github.com/SvetimFM/multipass-ai-terminal.git cd multipass-ai-terminal -
Install dependencies:
npm install
-
Copy the environment example and configure:
cp env.example .env
-
Edit
.envto set your preferences:PORT=3000 # Server port HOST=127.0.0.1 # Use 127.0.0.1 for local only SHELL=/bin/bash # Your preferred shell DEFAULT_WORKSPACE=$HOME/projects # Where to store projects
-
Start the server:
npm start # Production mode # or npm run dev # Development mode with hot reload
-
Open http://localhost:3000 in your browser
- Click "Add Project Folder" to add a new project
- Each project can have its own AI Office with multiple cubicles
- Create isolated workspaces for AI experimentation
- Each cubicle is an independent copy of your project
- Changes in cubicles don't affect the main project
- Sync cubicles with parent project when needed
- Create new terminal sessions for any project
- Sessions persist even if you close the browser
- Access sessions from multiple devices
Create a .env file in the root directory with these variables:
# Server Configuration
PORT=3000 # Port to run the server on
HOST=127.0.0.1 # Host to bind to (127.0.0.1 for local only)
SHELL=/bin/bash # Shell to use for terminal sessions
# Workspace Configuration
DEFAULT_WORKSPACE=$HOME/projects # Default directory for new projects
# Optional: AI Assistant Configuration
DEFAULT_LLM=claude # Default LLM to use (claude, openai, etc.)
# Session Configuration (optional)
SESSION_TIMEOUT=86400 # Session timeout in seconds (default: 24 hours)
MAX_SESSIONS=50 # Maximum concurrent sessions- No Authentication: This application provides unrestricted terminal access to anyone who can reach the web interface
- Full System Access: Users have the same permissions as the process running the server
- Session Persistence: Terminal sessions remain active even after disconnection
# In your .env file
HOST=127.0.0.1 # Only accessible from localhost
PORT=3000- Install Tailscale: https://tailscale.com/download
- Set up your Tailscale network
- Configure Multipass to listen on your Tailscale IP:
# In your .env file HOST=0.0.0.0 # Listen on all interfaces PORT=3000
- Access via your Tailscale network:
http://your-machine-name:3000
- Deploy behind a corporate VPN or WireGuard
- Ensure the VPN is properly configured and secured
- ❌ Don't expose to the public internet
- ❌ Don't run with root/sudo privileges
- ❌ Don't use on shared/multi-user systems without proper isolation
-
"tmux: command not found"
- Install tmux:
sudo apt install tmux(Ubuntu/Debian) orbrew install tmux(macOS)
- Install tmux:
-
"Permission denied" errors
- Ensure the user running the server has write permissions to the workspace directory
- Check that the shell specified in
.envis executable
-
WebSocket connection failures
- Check that the PORT specified in
.envis not already in use - Ensure your firewall allows WebSocket connections
- Check that the PORT specified in
-
Sessions not persisting
- Verify tmux is installed and running
- Check that
multipass-sessions.jsonis writable
- Check existing issues: https://github.com/SvetimFM/multipass-ai-terminal/issues
- Join discussions: https://github.com/SvetimFM/multipass-ai-terminal/discussions
We welcome contributions! Please see our Contributing Guidelines for details.
- Fork the repository
- Clone your fork
- Install dependencies:
npm install - Create a feature branch:
git checkout -b feature/your-feature - Make your changes
- Run in dev mode:
npm run dev - Submit a pull request
If you find Multipass Terminal useful, consider supporting its development:
Your support helps maintain and improve Multipass Terminal for the community!
- Built with xterm.js for terminal emulation
- Uses node-pty for pseudo-terminal support
- Inspired by the need for better AI-assisted development workflows
MIT - See LICENSE file for details

