termtap


Nametermtap JSON
Version 0.9.2 PyPI version JSON
download
home_pageNone
SummaryProcess-native tmux session manager with MCP support
upload_time2025-09-19 06:36:51
maintainerNone
docs_urlNone
authorNone
requires_python>=3.12
licenseMIT
keywords mcp session-manager terminal tmux
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # termtap

Process-native tmux session manager with MCP support.

## ✨ Features

- 🎯 **Smart Detection** - Auto-detects Python, SSH, Claude processes
- 🍎 **macOS Support** - Works on systems without /proc filesystem
- 📝 **Handler System** - Process-specific output filtering and caching
- 🔌 **MCP Ready** - Tools and resources for Claude/LLMs
- 🚀 **Service Orchestration** - Run multi-service environments
- 🔍 **Fuzzy Search** - Filter sessions with patterns
- 🎨 **Rich Display** - Tables, boxes, and formatted output

## 📋 Prerequisites

Required system dependencies:
- **tmux** - Terminal multiplexer
- **gum** - Interactive terminal UI components

```bash
# macOS
brew install tmux gum

# Arch Linux
sudo pacman -S tmux gum

# Ubuntu/Debian
sudo apt install tmux
# For gum, see: https://github.com/charmbracelet/gum#installation

# Fedora
sudo dnf install tmux
# For gum, use: go install github.com/charmbracelet/gum@latest
```

## 📦 Installation

```bash
# Install via uv tool (recommended)
uv tool install termtap

# Or with pipx
pipx install termtap

# Update to latest
uv tool upgrade termtap

# Uninstall
uv tool uninstall termtap
```

## 🚀 Quick Start

```bash
# 1. Install termtap
uv tool install "git+https://github.com/angelsen/tap-tools.git#subdirectory=packages/termtap"

# 2. Add to Claude
claude mcp add termtap -- termtap --mcp

# 3. Run REPL
termtap
```

## 🔌 MCP Setup for Claude

```bash
# Quick setup with Claude CLI
claude mcp add termtap -- termtap --mcp
```

Or manually configure Claude Desktop (`~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
  "mcpServers": {
    "termtap": {
      "command": "termtap",
      "args": ["--mcp"]
    }
  }
}
```

## 🎮 Usage

### Interactive REPL
```bash
termtap                     # Start REPL
termtap --mcp               # Start as MCP server
```

### Commands
```python
>>> ls()                    # List all sessions with processes
>>> execute("python3")      # Start Python REPL in tmux
>>> pane()                  # Read output with caching and interaction hints
>>> interrupt()             # Send Ctrl+C to current pane
>>> run("demo")             # Run service group from config
```

### Command Reference

| Command | Description |
|---------|------------|
| `execute(command, target=None)` | Run command in tmux pane |
| `pane(target=None, page=None)` | Read output with pagination and interaction hints |
| `ls(filter=None)` | List sessions with optional filter |
| `interrupt(target=None)` | Send interrupt signal |
| `send_keys(keys, target=None)` | Send raw key sequences |
| `run(group)` | Run service configuration |
| `track(target=None, duration=10)` | Monitor pane state |

## 🛠️ Service Configuration

Define multi-service environments in `termtap.toml`:

```toml
[init.demo]
layout = "even-horizontal"

[init.demo.backend]
pane = 0
command = "uv run python -m backend"
path = "demo/backend"
ready_pattern = "Uvicorn running on"
timeout = 10

[init.demo.frontend]
pane = 1  
command = "npm run dev"
path = "demo/frontend"
ready_pattern = "Local:.*localhost"
depends_on = ["backend"]
```

Run with: `run("demo")`

## 📁 Examples

See `examples/` directory for:
- Basic usage patterns
- Service orchestration setups
- MCP integration examples

## 🏗️ Architecture

Built on [ReplKit2](https://github.com/angelsen/replkit2) for dual REPL/MCP functionality.

**Key Design:**
- **Pane-Centric** - Everything operates through `Pane` objects
- **Process-Native** - Uses `/proc` and tmux state directly
- **Handler System** - Process-specific capture and filtering
- **0-Based Pagination** - Navigate cached output efficiently

## 📚 Documentation

- [Architecture](docs/ARCHITECTURE.md) - System design
- [Handlers](src/termtap/process/handlers/) - Process-specific handlers
- [Commands](src/termtap/commands/) - Command implementations

## 🛠️ Development

```bash
# Clone repository
git clone https://github.com/angelsen/tap-tools
cd tap-tools

# Install for development
uv sync --package termtap

# Run development version
uv run --package termtap termtap

# Run tests and checks
make check-termtap  # Check build
make format         # Format code
make lint           # Fix linting
```

## 📄 License

MIT - see [LICENSE](../../LICENSE) for details.
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "termtap",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.12",
    "maintainer_email": null,
    "keywords": "mcp, session-manager, terminal, tmux",
    "author": null,
    "author_email": "Fredrik Angelsen <fredrikangelsen@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/b8/3a/a4e96d87cde52c76e73a17dd96310f0fa3ef8d9592a3aed588d5f10dc6fc/termtap-0.9.2.tar.gz",
    "platform": null,
    "description": "# termtap\n\nProcess-native tmux session manager with MCP support.\n\n## \u2728 Features\n\n- \ud83c\udfaf **Smart Detection** - Auto-detects Python, SSH, Claude processes\n- \ud83c\udf4e **macOS Support** - Works on systems without /proc filesystem\n- \ud83d\udcdd **Handler System** - Process-specific output filtering and caching\n- \ud83d\udd0c **MCP Ready** - Tools and resources for Claude/LLMs\n- \ud83d\ude80 **Service Orchestration** - Run multi-service environments\n- \ud83d\udd0d **Fuzzy Search** - Filter sessions with patterns\n- \ud83c\udfa8 **Rich Display** - Tables, boxes, and formatted output\n\n## \ud83d\udccb Prerequisites\n\nRequired system dependencies:\n- **tmux** - Terminal multiplexer\n- **gum** - Interactive terminal UI components\n\n```bash\n# macOS\nbrew install tmux gum\n\n# Arch Linux\nsudo pacman -S tmux gum\n\n# Ubuntu/Debian\nsudo apt install tmux\n# For gum, see: https://github.com/charmbracelet/gum#installation\n\n# Fedora\nsudo dnf install tmux\n# For gum, use: go install github.com/charmbracelet/gum@latest\n```\n\n## \ud83d\udce6 Installation\n\n```bash\n# Install via uv tool (recommended)\nuv tool install termtap\n\n# Or with pipx\npipx install termtap\n\n# Update to latest\nuv tool upgrade termtap\n\n# Uninstall\nuv tool uninstall termtap\n```\n\n## \ud83d\ude80 Quick Start\n\n```bash\n# 1. Install termtap\nuv tool install \"git+https://github.com/angelsen/tap-tools.git#subdirectory=packages/termtap\"\n\n# 2. Add to Claude\nclaude mcp add termtap -- termtap --mcp\n\n# 3. Run REPL\ntermtap\n```\n\n## \ud83d\udd0c MCP Setup for Claude\n\n```bash\n# Quick setup with Claude CLI\nclaude mcp add termtap -- termtap --mcp\n```\n\nOr manually configure Claude Desktop (`~/Library/Application Support/Claude/claude_desktop_config.json`):\n```json\n{\n  \"mcpServers\": {\n    \"termtap\": {\n      \"command\": \"termtap\",\n      \"args\": [\"--mcp\"]\n    }\n  }\n}\n```\n\n## \ud83c\udfae Usage\n\n### Interactive REPL\n```bash\ntermtap                     # Start REPL\ntermtap --mcp               # Start as MCP server\n```\n\n### Commands\n```python\n>>> ls()                    # List all sessions with processes\n>>> execute(\"python3\")      # Start Python REPL in tmux\n>>> pane()                  # Read output with caching and interaction hints\n>>> interrupt()             # Send Ctrl+C to current pane\n>>> run(\"demo\")             # Run service group from config\n```\n\n### Command Reference\n\n| Command | Description |\n|---------|------------|\n| `execute(command, target=None)` | Run command in tmux pane |\n| `pane(target=None, page=None)` | Read output with pagination and interaction hints |\n| `ls(filter=None)` | List sessions with optional filter |\n| `interrupt(target=None)` | Send interrupt signal |\n| `send_keys(keys, target=None)` | Send raw key sequences |\n| `run(group)` | Run service configuration |\n| `track(target=None, duration=10)` | Monitor pane state |\n\n## \ud83d\udee0\ufe0f Service Configuration\n\nDefine multi-service environments in `termtap.toml`:\n\n```toml\n[init.demo]\nlayout = \"even-horizontal\"\n\n[init.demo.backend]\npane = 0\ncommand = \"uv run python -m backend\"\npath = \"demo/backend\"\nready_pattern = \"Uvicorn running on\"\ntimeout = 10\n\n[init.demo.frontend]\npane = 1  \ncommand = \"npm run dev\"\npath = \"demo/frontend\"\nready_pattern = \"Local:.*localhost\"\ndepends_on = [\"backend\"]\n```\n\nRun with: `run(\"demo\")`\n\n## \ud83d\udcc1 Examples\n\nSee `examples/` directory for:\n- Basic usage patterns\n- Service orchestration setups\n- MCP integration examples\n\n## \ud83c\udfd7\ufe0f Architecture\n\nBuilt on [ReplKit2](https://github.com/angelsen/replkit2) for dual REPL/MCP functionality.\n\n**Key Design:**\n- **Pane-Centric** - Everything operates through `Pane` objects\n- **Process-Native** - Uses `/proc` and tmux state directly\n- **Handler System** - Process-specific capture and filtering\n- **0-Based Pagination** - Navigate cached output efficiently\n\n## \ud83d\udcda Documentation\n\n- [Architecture](docs/ARCHITECTURE.md) - System design\n- [Handlers](src/termtap/process/handlers/) - Process-specific handlers\n- [Commands](src/termtap/commands/) - Command implementations\n\n## \ud83d\udee0\ufe0f Development\n\n```bash\n# Clone repository\ngit clone https://github.com/angelsen/tap-tools\ncd tap-tools\n\n# Install for development\nuv sync --package termtap\n\n# Run development version\nuv run --package termtap termtap\n\n# Run tests and checks\nmake check-termtap  # Check build\nmake format         # Format code\nmake lint           # Fix linting\n```\n\n## \ud83d\udcc4 License\n\nMIT - see [LICENSE](../../LICENSE) for details.",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Process-native tmux session manager with MCP support",
    "version": "0.9.2",
    "project_urls": {
        "Repository": "https://github.com/angelsen/tap-tools"
    },
    "split_keywords": [
        "mcp",
        " session-manager",
        " terminal",
        " tmux"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "23ac71a43029a53b4f70cca39a8e961b9245090385f025ae1c8e98f67ca17994",
                "md5": "e13cb9286cf733824d9d95a814476972",
                "sha256": "2b0b790ee98a983451ec1764868e50b4ca1a79366d8da51a714e38b8f6b1cbae"
            },
            "downloads": -1,
            "filename": "termtap-0.9.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e13cb9286cf733824d9d95a814476972",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.12",
            "size": 70614,
            "upload_time": "2025-09-19T06:36:50",
            "upload_time_iso_8601": "2025-09-19T06:36:50.489325Z",
            "url": "https://files.pythonhosted.org/packages/23/ac/71a43029a53b4f70cca39a8e961b9245090385f025ae1c8e98f67ca17994/termtap-0.9.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b83aa4e96d87cde52c76e73a17dd96310f0fa3ef8d9592a3aed588d5f10dc6fc",
                "md5": "214fa467cbb3aea393af966a7ff65e5a",
                "sha256": "f12ff3d727e8a92e1f2454006fee6255b3b87a7ef2f6c82952b937e2514e13a3"
            },
            "downloads": -1,
            "filename": "termtap-0.9.2.tar.gz",
            "has_sig": false,
            "md5_digest": "214fa467cbb3aea393af966a7ff65e5a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.12",
            "size": 81043,
            "upload_time": "2025-09-19T06:36:51",
            "upload_time_iso_8601": "2025-09-19T06:36:51.747641Z",
            "url": "https://files.pythonhosted.org/packages/b8/3a/a4e96d87cde52c76e73a17dd96310f0fa3ef8d9592a3aed588d5f10dc6fc/termtap-0.9.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-19 06:36:51",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "angelsen",
    "github_project": "tap-tools",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "termtap"
}
        
Elapsed time: 0.76614s