Overview
omp-rpc is a persistent second agent you can drive from the shell. You
(the driving agent) send it scoped tasks with omp-rpc send, read the streamed
result, and iterate — its session remembers earlier turns, so a delegation is
a conversation, not a series of cold prompts. Mechanics of each command live in
the using-omp-rpc skill; this skill is about when and how to delegate well.
When to use
- A sub-task is self-contained and you'd rather not spend your own context on it (bulk edits, a focused investigation, boilerplate, a first-draft).
- You want a second opinion or a different model's take in parallel.
- You want work done under a separate accumulating context (e.g. iterating on one file over several turns) without polluting yours.
Not for: tasks needing your live conversation context (the sub-agent can't see it — you must put everything it needs in the task text), or trivial one-liners you can just do.
The delegation loop
omp-rpc status # running? busy?
omp-rpc models --json # discover exact selectors (never guess them)
omp-rpc start --models "<sel>,<sel>" --model <sel> --cwd /path/to/repo # scope + active
omp-rpc send "Task 1 — <clear, self-contained instruction>"
omp-rpc send "Task 2 — builds on task 1" # context carries over
# ...review each streamed reply, correct course as needed...
omp-rpc stop # when the whole job is done
Doing it well
- Point
--cwdat the repo the sub-agent should work in, so its file tools operate on the right tree. - Make each task self-contained. The sub-agent has no access to your conversation — restate the goal, name the files, include constraints.
- One task at a time. The session is single-flight; wait for a
sendto return before the next.omp-rpc statusshowsbusy. - Steer instead of waiting when a running turn is going the wrong way:
omp-rpc steer "actually, skip the tests dir"injects mid-turn;omp-rpc abortcancels it outright. - Discover models, don't recall them. Selectors live in omp's catalog and
change over time — run
omp-rpc models --jsonand copy exact selectors; never invent a selector from memory. - Match the model to the task, live. Scope the session to a few models at
start(--models), then switch among them per turn — a big-context model for a sprawling session, a coding-tuned one for a focused turn — withomp-rpc model <sel>. No restart; the accumulated context is preserved. Switches are limited to the session's scope. - Capture cleanly when you'll parse the output:
omp-rpc send -q "..."sends the answer to stdout and thoughts/tools to stderr.--jsongives{stopReason, usage}. - Review before trusting. It runs a different (often smaller) model with auto-approved tools; read its diffs/output rather than assuming success.
Safety when delegating
Destructive shell commands are auto-denied and stop won't discard in-flight
work — but the guard is a net, not a sandbox. For untrusted or high-risk tasks,
start the session with --cwd inside a throwaway checkout or container. Details
in the using-omp-rpc safety reference.
Common mistakes
- Assuming shared context. It sees only the task text you send. Missing context → wrong output.
- Firing a second task while busy. Returns a busy error; serialize your sends
(or
steerinto the running one). - Leaving a session running on the wrong repo. Its
--cwdis fixed atstart; to work elsewhere,stopandstartagain there.