Outcome
Threads started by another thread (Model Router jobs, send) are real T3 threads that stay out of the sidebar, appear in the parent thread's Agents panel, open on click, and can be messaged there. This is the production version of spike #3 / draft PR #4, and the fork capability Model Router's send (toolboxmd/model-router#92) and T3-thread jobs build on.
Acceptance criteria
- A real parent link on threads: prefer an optional
parentThreadId on thread.create carried to the thread shell over the spike's sub.<parent>.<suffix> id convention; if the contract change is too invasive for a thin fork, keep the id convention and say why.
- Child threads are hidden from the sidebar (no extra section).
- The parent's Agents panel lists its child threads with status, and a row opens the child thread; the normal composer messages it.
- The
threads MCP toolkit from the spike (create, message, read) ships, with its safety rule: no message to a child that has not finished starting.
- Upstream edits minimal and listed with files and lines in the PR body; new code in new files.
- Upstream checks pass:
vp run -r typecheck, vp lint, vp run -r test, vp fmt --check.
- Proven live on an isolated T3 instance (never the user's instance on port 3773 or
~/.t3/userdata) with at least a Codex and an OpenCode child.
Non-goals
A back-link UI from child to parent (Model Router puts the parent link in the child's first message), mobile, OpenBot.
Blockers
None.
Objective contribution
Second completion criterion of the fork Objective: Model Router jobs run as T3 threads.
Outcome
Threads started by another thread (Model Router jobs,
send) are real T3 threads that stay out of the sidebar, appear in the parent thread's Agents panel, open on click, and can be messaged there. This is the production version of spike #3 / draft PR #4, and the fork capability Model Router'ssend(toolboxmd/model-router#92) and T3-thread jobs build on.Acceptance criteria
parentThreadIdonthread.createcarried to the thread shell over the spike'ssub.<parent>.<suffix>id convention; if the contract change is too invasive for a thin fork, keep the id convention and say why.threadsMCP toolkit from the spike (create, message, read) ships, with its safety rule: no message to a child that has not finished starting.vp run -r typecheck,vp lint,vp run -r test,vp fmt --check.~/.t3/userdata) with at least a Codex and an OpenCode child.Non-goals
A back-link UI from child to parent (Model Router puts the parent link in the child's first message), mobile, OpenBot.
Blockers
None.
Objective contribution
Second completion criterion of the fork Objective: Model Router jobs run as T3 threads.