claude-relay

TotalClaw 作者 totalclaw

通过跨多个项目的 tmux 进行 Claude Code 的中继操作。当用户想要启动/继续 Claude Code 终端会话、发送提示、读取输出或按项目名称/路径管理后台 Claude 会话时使用。

安装 / 下载方式

TotalClaw CLI推荐
totalclaw skills install shop:totalclaw:totalclaw~artwalker-claude-relay
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~artwalker-claude-relay/file -o artwalker-claude-relay.md
# Claude Relay

Operate Claude Code as a persistent terminal copilot through tmux.

## Script

All actions go through `scripts/relay.sh`. Run with no args for usage help.

```bash
scripts/relay.sh <action> [project] [args...]
```

**Actions**: `start`, `send`, `tail`, `stop`, `status`, `session`

## Workflow

1. Start session: `scripts/relay.sh start <project>`
2. Send instruction: `scripts/relay.sh send <project> "<text>"`
3. Read output: `scripts/relay.sh tail <project> [lines]`
4. Repeat send/tail as needed.
5. Stop when done: `scripts/relay.sh stop <project>`

## Project resolution

The script resolves `<project>` in order:

1. Absolute path (if directory exists)
2. Alias from `projects.map` (`name=/abs/path`)
3. `$CLAUDE_RELAY_ROOT/<name>` exact match
4. Find under `$CLAUDE_RELAY_ROOT` (maxdepth=2) by folder name
5. If omitted, re-use last project

Multiple matches → script exits with candidates; ask user to clarify.

## Session naming

Deterministic: `cc_<basename_sanitized>`. One project = one tmux session.

## Error handling

- **tmux not installed**: script exits with code 2 and "missing dependency" message.
- **Claude binary not found**: same exit code 2. Verify `CLAUDE_BIN` env or default path.
- **Session not running** (send/tail on stopped session): exits code 6. Start first.
- **Project not found**: exits code 4. Check `projects.map` or project path.
- **Claude process hung**: `tail` still works — check output. If stuck, `stop` and `start` fresh.

## Environment variables

| Variable | Default | Description |
|----------|---------|-------------|
| `CLAUDE_RELAY_ROOT` | `$HOME/projects` | Root directory for project discovery |
| `CLAUDE_RELAY_MAP` | `<skill-dir>/projects.map` | Path to project alias map file |
| `CLAUDE_BIN` | `claude` (from PATH) | Path to Claude Code CLI binary |
| `RELAY_WAIT` | `6` | Seconds to wait after send before tailing output |

## Setup

1. Install this skill
2. Create a `projects.map` file in the skill directory (see `projects.map.example`)
3. Ensure `tmux` and `claude` are installed and in your PATH

## Notes

- Transport-focused skill (relay/orchestration), not deep code reasoning.

---

## 中文说明

# Claude Relay

通过 tmux 将 Claude Code 作为一个持久的终端副驾驶来操作。

## 脚本

所有操作都通过 `scripts/relay.sh` 进行。不带参数运行可获取用法帮助。

```bash
scripts/relay.sh <action> [project] [args...]
```

**操作**:`start`、`send`、`tail`、`stop`、`status`、`session`

## 工作流程

1. 启动会话:`scripts/relay.sh start <project>`
2. 发送指令:`scripts/relay.sh send <project> "<text>"`
3. 读取输出:`scripts/relay.sh tail <project> [lines]`
4. 根据需要重复 send/tail。
5. 完成后停止:`scripts/relay.sh stop <project>`

## 项目解析

脚本按以下顺序解析 `<project>`:

1. 绝对路径(如果目录存在)
2. 来自 `projects.map` 的别名(`name=/abs/path`)
3. `$CLAUDE_RELAY_ROOT/<name>` 精确匹配
4. 在 `$CLAUDE_RELAY_ROOT` 下按文件夹名查找(maxdepth=2)
5. 如果省略,则重用上一个项目

多个匹配 → 脚本退出并列出候选项;请用户澄清。

## 会话命名

确定性的:`cc_<basename_sanitized>`。一个项目 = 一个 tmux 会话。

## 错误处理

- **未安装 tmux**:脚本以代码 2 退出并显示 "missing dependency" 消息。
- **未找到 Claude 二进制文件**:同样以代码 2 退出。请验证 `CLAUDE_BIN` 环境变量或默认路径。
- **会话未运行**(在已停止的会话上执行 send/tail):以代码 6 退出。请先启动。
- **未找到项目**:以代码 4 退出。请检查 `projects.map` 或项目路径。
- **Claude 进程挂起**:`tail` 仍然可用 —— 检查输出。如果卡住,`stop` 后重新 `start`。

## 环境变量

| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `CLAUDE_RELAY_ROOT` | `$HOME/projects` | 项目发现的根目录 |
| `CLAUDE_RELAY_MAP` | `<skill-dir>/projects.map` | 项目别名映射文件的路径 |
| `CLAUDE_BIN` | `claude`(来自 PATH) | Claude Code CLI 二进制文件的路径 |
| `RELAY_WAIT` | `6` | send 后在 tail 输出前等待的秒数 |

## 设置

1. 安装此技能
2. 在技能目录中创建一个 `projects.map` 文件(参见 `projects.map.example`)
3. 确保 `tmux` 和 `claude` 已安装并在你的 PATH 中

## 注意事项

- 这是一个专注于传输的技能(中继/编排),而非深度代码推理。