One-shot execution
cmdop connect exec runs a single command on a machine and returns its output,
without opening an interactive terminal. It times out after 30 seconds unless you
raise it with -t, and it is scoped to this host today — it resolves targets
through the relay running here, so it is not a cross-host or CI execution API.
Run one command without opening an interactive terminal:
cmdop connect exec <machine> -- uptimeEverything after -- is the command for the target; the separator keeps its
flags from being read as Cmdop’s.
The timeout defaults to 30 seconds
cmdop connect exec <machine> -t 120 -- ./long-running-task.sh-t / --timeout takes a number of seconds and defaults to 30. Anything
that can run longer than half a minute needs an explicit value, or it will be
cut off.
Scope: this host
cmdop connect exec resolves its target through the relay running on this
host, using its local operator session. It has no path to another machine’s
public relay door, so a machine reachable only that way is not a valid target
for this command today. Do not build a cross-host or CI execution contract on
it.
Because it runs as a local operator session, an armed connection PIN on the target is not part of this path.
For work on another reachable machine, use
interactive attach; for a task you want
another machine’s agent to carry out, use cmdop fleet <machine> — see
CLI machine chat.
Common questions
Can I use cmdop connect exec as a remote CI runner?
No. cmdop connect exec is a local operator path scoped to this host’s relay
and a short command timeout. Do not build a cross-host CI contract on it. For
agent-operated remote work, use cmdop fleet <machine> or the MCP fleet tools.
How do I run one command through an AI assistant on another machine?
Register Cmdop’s MCP server with Claude Code or Codex, ask the assistant to
list machines, then target one online machine with a bounded command. The MCP
path uses fleet access; cmdop connect exec is not the same cross-host tool.
What if the command takes longer than 30 seconds?
Pass an explicit timeout with -t / --timeout, or use a different workflow
for long-running work. The default timeout is intentionally short so a one-shot
command does not turn into an unbounded terminal session.