# t-pane MCP Server
An MCP (Model Context Protocol) server that enables Claude to execute commands in tmux panes, providing a shared terminal experience between Claude and users.
## Features
- **Directory-Aware Pane Management**: Creates separate panes for each directory/project
- **Command Execution**: Run commands in tmux panes with captured output
- **Smart Output Capture**: Uses unique markers to capture exactly the command output, regardless of buffer size
- **Multiple Session Support**: Each Claude instance gets its own pane based on working directory
- **Session Persistence**: Commands remain visible in tmux for user interaction
- **Interactive Prompt Detection**: Automatically detects when commands require user input (passwords, confirmations, etc.)
- **Directory-Specific Logging**: Commands are logged to `.t-pane/logs/` in the current directory
- **Background Tasks**: Launch Claude instances in background panes for research/analysis tasks
## Installation
```bash
cd /Users/rumen.d/github/mcp-servers/t-pane
npm install
npm run build
```
## Configuration
Add to your Claude configuration file (`~/Library/Application Support/Claude/config.json`):
```json
{
"mcpServers": {
"t-pane": {
"command": "node",
"args": ["/Users/rumen.d/github/mcp-servers/t-pane/dist/index.js"]
}
}
}
```
## Usage
Once configured, Claude can use the following tools:
### 1. Execute Command
Executes a command in a tmux pane and captures the output.
```typescript
execute_command({
command: "ls -la",
pane: "claude-terminal", // optional, defaults to "claude-terminal"
captureOutput: true // optional, defaults to true
})
```
### 2. Create Pane
Creates a new tmux pane with a specific name.
```typescript
create_pane({
name: "my-pane", // optional, defaults to "claude-terminal"
split: "horizontal" // optional: "horizontal" or "vertical"
})
```
### 3. Capture Output
Captures recent output from a tmux pane.
```typescript
capture_output({
pane: "claude-terminal", // optional
lines: 100 // optional, number of lines to capture
})
```
### 4. List Panes
Lists all available tmux panes.
```typescript
list_panes()
```
### 5. Send Keys
Send text to a tmux pane without executing it (useful for pre-filling commands).
```typescript
send_keys({
text: "git push origin main",
pane: "claude-terminal", // optional, defaults to directory-specific pane
enter: false // optional, set to true to also send Enter
})
```
### 6. Launch Background Task
Create a background pane for running Claude with a specific research/analysis task.
```typescript
launch_background_task({
task: "Research TypeScript 5.x features and create a summary",
outputFile: "typescript-features.md", // saved to .t-pane/tasks/
timeout: 300000 // optional, default 5 minutes
})
```
### 7. Check Background Tasks
Check the status of all background tasks.
```typescript
check_background_tasks()
```
## How It Works
1. **Command Execution**: When Claude executes a command, it's wrapped with unique markers:
```bash
echo '===CMD_${commandId}_START==='; <your-command>; echo '===CMD_${commandId}_END==='
```
2. **Output Capture**: The server:
- Finds the START marker in the tmux buffer
- Calculates how many lines from the end to capture
- Extracts only the output between markers
- Returns clean output to Claude
3. **Interactive Prompt Detection**: When a command requires user input:
- Detects common prompt patterns (password, username, yes/no, etc.)
- Returns a special response alerting Claude that user interaction is needed
- Claude will inform you to switch to the tmux pane and provide input
4. **Command Logging**: All commands and outputs are logged to:
- Primary location: `.t-pane/logs/` in the current working directory
- Fallback location: `~/.t-pane/logs/{directory-hash}/` if local directory is not writable
- Format: JSON Lines (one JSON object per line)
- Includes: timestamp, command, output (truncated if >2KB), exit code, duration, directory
- Disable with: `export T_PANE_DISABLE_LOGGING=true`
5. **Efficiency**: This approach handles commands with any output size (even 100k+ lines) efficiently by:
- Using unique IDs to avoid collision
- Capturing from the end of the buffer
- Only extracting the relevant portion
## Example Session
When Claude uses this server, you'll see:
- A new tmux pane with directory-specific naming (e.g., `claude-t-pane` for the t-pane directory)
- Each directory gets its own dedicated pane
- Multiple Claude instances working in different directories won't interfere
- All commands Claude executes appear in the appropriate pane
- You can interact with the same terminal
- Command history is preserved per directory
## Development
```bash
# Watch mode for development
npm run watch
# Build for production
npm run build
```
## Requirements
- tmux installed and available in PATH
- Must be run inside a tmux session for full functionality
- Node.js 18+
## Troubleshooting
1. **"tmux is not installed"**: Install tmux using your package manager
2. **"Not running inside a tmux session"**: Start tmux first with `tmux new-session`
3. **Commands not appearing**: Check that the pane name matches what Claude is using
## Directory-Aware Sessions
The t-pane server creates separate tmux panes for each directory:
- Pane names are based on the last 2 directory components (e.g., `claude-mcp-servers-t-pane`)
- Each Claude instance working in a different directory gets its own pane
- Logs are stored locally in each project directory
- Multiple Claude instances can work simultaneously without interference
## Interactive Prompts
When a command requires user input (like `git push` asking for credentials), the server will:
1. Detect the interactive prompt
2. Pre-fill the command in the tmux pane (without pressing Enter)
3. Return a message to Claude indicating user interaction is needed
4. You'll see a message like: "⚠️ User interaction required in tmux pane"
5. Switch to the tmux pane where the command is pre-filled and ready for you to review/execute
## Command Logging
By default, all commands are logged to `.t-pane/logs/` in the current directory:
```json
{"timestamp":"2024-06-27T10:30:00Z","command":"git status","output":"...","exitCode":0,"duration":150,"directory":"/path/to/project"}
```
To disable logging:
```bash
export T_PANE_DISABLE_LOGGING=true
```
## Background Tasks (Experimental)
The t-pane server can launch Claude instances in background panes for research or analysis:
1. **Launch a task**: Creates a new pane with task instructions
2. **Manual execution**: Switch to the pane and run `claude` to start the task
3. **Output location**: Results are saved to `.t-pane/tasks/`
4. **Status tracking**: Use `check_background_tasks()` to monitor progress
This feature is experimental and requires manual Claude invocation in the created pane.
## Future Enhancements
- [x] Interactive prompt detection
- [x] Command logging
- [x] Background task execution (experimental)
- [ ] Automatic Claude invocation for background tasks
- [ ] Support for multiple concurrent commands
- [ ] Progress indicators for long-running commands
- [ ] Integration with `/resume` for session continuity
### 8. Read File
Read file contents using cat/head commands in the tmux pane.
### 9. Edit File
Edit files using sed in the tmux pane (visible to user).