omo 中明确写到支持 tmux 集成,即会在启动多个子 agent 的时候自动在 tmux 中新开几个 pane,这样的好处是能让用户直观地看见后台任务是否已经完成。
但是一般启动情况下,tmux 的新 pane 会一片空白,没有任何内容。很多证据表明,是 omo 在 attach 的时候没有获取到 opencode 使用的端口导致传递出错,解决办法是启动 opencode 的时候显式指明使用的端口:
opencode --port xxxx然而这种启动方式比较麻烦,尤其是在多开 opencode 的情况下,因此我在终端配置中编辑了如下两个函数:
oc() {
local port=""
if [[ "${1:-}" == <-> ]]; then
port="$1"
shift
else
port="$({
python3 - <<'PY'
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.bind(("127.0.0.1", 0))
print(sock.getsockname()[1])
PY
})" || return 1
fi
if [[ -z "$port" ]]; then
printf 'Failed to choose a port\n' >&2
return 1
fi
printf '[oc] starting opencode on port %s\n' "$port" >&2
OPENCODE_PORT="$port" command opencode --port "$port" "$@"
}
ocp() {
if command -v lsof >/dev/null 2>&1; then
lsof -nP -iTCP -sTCP:LISTEN | awk 'NR==1 || /opencode/'
else
ss -ltnp | awk 'NR==1 || /opencode/'
fi
}输入 oc 自动启动一个指定端口的 opencode,输入 ocp 查看当前运行的所有指定端口的 opencode 实例。
