A powerful command-line interface for controlling iTerm2
Project description
it2
A powerful command-line interface for controlling iTerm2 using its Python API.
Features
- Session Management: Send text, execute commands, split panes, manage sessions
- Window Control: Create, move, resize, and manage windows
- Tab Operations: Create and navigate between tabs
- Profile Management: List, create, and apply iTerm2 profiles
- Broadcasting: Send input to multiple sessions simultaneously
- Monitoring: Watch session output, keystrokes, and variables in real-time
- Configuration: Define custom profiles and aliases in YAML
- Shortcuts: Quick access to common commands
Requirements
- macOS with iTerm2 3.3.0 or later
- Python 3.8+
- iTerm2 Python API enabled (Preferences > General > Magic > Enable Python API)
Installation
Using pip
pip install it2
Using uvx (recommended)
uvx it2
Quick Start
# Send text to current session
it2 send "Hello, World!"
# Run a command
it2 run "ls -la"
# Split the current pane vertically
it2 vsplit
# Create a new window
it2 new
# List all sessions
it2 ls
Basic Usage
Session Operations
# Send text (without newline)
it2 session send "text"
it2 send "text" # shortcut
# Execute command (with newline)
it2 session run "command"
it2 run "command" # shortcut
# Target specific session or all sessions
it2 send "text" --session <id>
it2 send "text" --all
# Split panes
it2 session split # horizontal split
it2 session split -v # vertical split
it2 vsplit # shortcut for vertical split
# Session management
it2 session list # list all sessions
it2 session close # close current session
it2 session restart # restart session
it2 session clear # clear screen
Window Operations
# Window management
it2 window new # create new window
it2 window list # list all windows
it2 window close # close current window
it2 window focus <id> # focus specific window
# Window manipulation
it2 window move 100 200 # move to position
it2 window resize 800 600 # resize window
it2 window fullscreen on # enable fullscreen
# Window arrangements
it2 window arrange save "dev" # save arrangement
it2 window arrange restore "dev" # restore arrangement
Tab Operations
# Tab management
it2 tab new # create new tab
it2 tab list # list all tabs
it2 tab close # close current tab
it2 tab select <id> # select specific tab
# Tab navigation
it2 tab next # go to next tab
it2 tab prev # go to previous tab
it2 tab goto 2 # go to tab by index
Profile Operations
# Profile management
it2 profile list # list all profiles
it2 profile show "Default" # show profile details
it2 profile create "MyProfile" --base "Default"
it2 profile apply "MyProfile"
# Profile configuration
it2 profile set "MyProfile" font-size 14
it2 profile set "MyProfile" bg-color "#000000"
it2 profile set "MyProfile" transparency 0.9
Application Control
# App management
it2 app activate # bring iTerm2 to front
it2 app hide # hide iTerm2
it2 app theme dark # set theme
# Broadcasting
it2 app broadcast on # enable broadcasting
it2 app broadcast off # disable broadcasting
it2 app broadcast add session1 session2 # create broadcast group
Monitoring
# Monitor output
it2 monitor output -f # follow output
it2 monitor output -f -p "ERROR" # filter by pattern
# Monitor keystrokes
it2 monitor keystroke # all keystrokes
it2 monitor keystroke -p "^[a-z]+$" # filter by regex
# Monitor variables
it2 monitor variable lastCommand # session variable
it2 monitor variable buildNumber --app # app variable
# Monitor prompts (requires shell integration)
it2 monitor prompt
Configuration
Create ~/.it2rc.yaml to define custom profiles and aliases:
# Custom profiles
profiles:
dev:
- command: cd ~/project
- split: vertical
- pane1: npm run dev
- pane2: npm test --watch
servers:
- split: 2x2
- pane1: ssh server1
- pane2: ssh server2
- pane3: ssh server3
- pane4: ssh server4
# Command aliases
aliases:
deploy: session run "deploy.sh" --all
logs: monitor output -f -p "ERROR|WARN"
dev-setup: load dev
Use configurations:
# Load a profile
it2 load dev
# Execute an alias
it2 alias deploy
# Show config path
it2 config-path
# Reload configuration
it2 config-reload
Advanced Examples
Development Environment Setup
# Create a development workspace
it2 window new --profile "Development"
it2 split
it2 send "cd ~/project && npm run dev"
it2 session focus 2
it2 send "cd ~/project && npm test --watch"
Multi-Server Management
# SSH to multiple servers with broadcasting
it2 tab new
it2 split && it2 split && it2 split
it2 app broadcast on
it2 send "ssh production-server"
Automated Deployment
Create a deployment script:
#!/bin/bash
# deploy.sh
# Create deployment window
it2 window new --profile "Deploy"
# Split for monitoring
it2 split -v
# Start deployment in first pane
it2 send "cd ~/project && ./deploy-prod.sh"
# Monitor logs in second pane
it2 session focus 2
it2 run "tail -f /var/log/deploy.log"
# Watch for errors
it2 monitor output -f -p "ERROR|FAILED"
Environment Variables
IT2_DEFAULT_PROFILE: Default profile nameIT2_CONFIG_PATH: Path to configuration file (default:~/.it2rc.yaml)IT2_TIMEOUT: Command timeout in seconds
Error Codes
0: Success1: General error2: Connection error (iTerm2 not running or API not enabled)3: Target not found (session/window/tab not found)4: Invalid arguments
Development
Setup Development Environment
# Clone the repository
git clone https://github.com/mkusaka/it2.git
cd it2
# Create virtual environment
python -m venv venv
source venv/bin/activate
# Install in development mode
pip install -e ".[dev]"
# Run tests
pytest
# Run linting
ruff check .
black --check .
mypy .
Project Structure
it2/
├── src/
│ └── it2/
│ ├── __init__.py
│ ├── cli.py # Main CLI entry point
│ ├── commands/ # Command modules
│ │ ├── session.py
│ │ ├── window.py
│ │ ├── tab.py
│ │ ├── profile.py
│ │ ├── app.py
│ │ ├── monitor.py
│ │ ├── shortcuts.py
│ │ └── config_commands.py
│ ├── core/ # Core functionality
│ │ ├── connection.py
│ │ ├── session_handler.py
│ │ └── errors.py
│ └── utils/ # Utilities
│ └── config.py
├── tests/ # Test files
├── pyproject.toml # Project configuration
├── README.md # This file
└── example.it2rc.yaml # Example configuration
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
MIT License - see LICENSE for details.
Acknowledgments
- Built on the iTerm2 Python API
- Inspired by tmux and screen command-line interfaces
- Uses Click for CLI framework
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
it2-0.1.2.tar.gz
(83.6 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
it2-0.1.2-py3-none-any.whl
(5.0 kB
view details)
File details
Details for the file it2-0.1.2.tar.gz.
File metadata
- Download URL: it2-0.1.2.tar.gz
- Upload date:
- Size: 83.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2dd9e8b6f815cb1bcefd46e23742d4313e0b8d03ef3dc424af565f433320e381
|
|
| MD5 |
ca0bd04d5aa5a9ae41658db5ec554f68
|
|
| BLAKE2b-256 |
1c5233b41a2a67016db3299d25d9dad280a7895873b5821a002d77abb7f54bd2
|
File details
Details for the file it2-0.1.2-py3-none-any.whl.
File metadata
- Download URL: it2-0.1.2-py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d9c28c6c2778613289730f413f7f58a789a42e76ee4ac4ec094620d91a3c380
|
|
| MD5 |
b0286437072ffc8b498c85405a807c10
|
|
| BLAKE2b-256 |
8351c58af3b47935ec8d73d34fa36be69300c400e812837885b8be36aa269147
|