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, show, 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.9+
- 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 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 version # show iTerm2 version
it2 app theme # show current theme
it2 app theme dark # set theme (light, dark, light-hc, dark-hc, automatic, minimal)
# 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 effectiveTheme --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
GPLv2+ 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
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
File details
Details for the file it2-0.2.2.tar.gz.
File metadata
- Download URL: it2-0.2.2.tar.gz
- Upload date:
- Size: 30.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62170a248729efc34d050d41fc428fb9beb3b5426fffdecf72c583c9d9263390
|
|
| MD5 |
9ff2aa5bac5e9e6d516d15d12c269514
|
|
| BLAKE2b-256 |
e3210395bfc1b64de463a20c4f9eb0d45284a234108efe6bfa19e9737e587b79
|
Provenance
The following attestation bundles were made for it2-0.2.2.tar.gz:
Publisher:
ci.yml on mkusaka/it2
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
it2-0.2.2.tar.gz -
Subject digest:
62170a248729efc34d050d41fc428fb9beb3b5426fffdecf72c583c9d9263390 - Sigstore transparency entry: 928741621
- Sigstore integration time:
-
Permalink:
mkusaka/it2@c1616264011f53503f8e0e6eb9285e42227ae74c -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/mkusaka
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@c1616264011f53503f8e0e6eb9285e42227ae74c -
Trigger Event:
push
-
Statement type:
File details
Details for the file it2-0.2.2-py3-none-any.whl.
File metadata
- Download URL: it2-0.2.2-py3-none-any.whl
- Upload date:
- Size: 37.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
117c119375c90c1371c1c798c5540a0e416744a24c7b972bd9a091a6ecd1c615
|
|
| MD5 |
1dd97fe9dfb50c5a65d7e3f633ec7001
|
|
| BLAKE2b-256 |
9898321dcc6e92a23fc45a1fdcfc729de09ed260275939275e813de754d25f06
|
Provenance
The following attestation bundles were made for it2-0.2.2-py3-none-any.whl:
Publisher:
ci.yml on mkusaka/it2
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
it2-0.2.2-py3-none-any.whl -
Subject digest:
117c119375c90c1371c1c798c5540a0e416744a24c7b972bd9a091a6ecd1c615 - Sigstore transparency entry: 928741622
- Sigstore integration time:
-
Permalink:
mkusaka/it2@c1616264011f53503f8e0e6eb9285e42227ae74c -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/mkusaka
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@c1616264011f53503f8e0e6eb9285e42227ae74c -
Trigger Event:
push
-
Statement type: