Skip to content

fix: sub-threads and scheduled tasks keep the reasoning you set for their model - #728

Merged
badcuban merged 2 commits into
mainfrom
fix/sub-thread-reasoning
Oct 31, 2026
Merged

badcuban merged 2 commits into
mainfrom
fix/sub-thread-reasoning

Conversation

@badcuban

Copy link
Copy Markdown
Collaborator

When an agent started a sub-thread on a named model, it sent no reasoning level, so the thread ran at the provider's default. That held even when the same model sat in the room at a level the user chose. It showed up most on another computer: GPT-6.1 Sol in the room at Extra High, its sub-thread on the linked PC at Sol's default. Scheduled tasks an agent set up on a named model had the same gap.

The rule. A thread's or task's reasoning is settled when it is asked for and saved with it (settleChildReasoning in childThreadAgents.ts), so replay and approval use exactly what was shown:

  1. A level the agent names in the new agent.reasoning (id or picker label, or "default" for the provider's own).
  2. Else a reasoning option it passed in agent.options.
  3. Else the level of the first agent on the same provider kind and model: the asking agent, then the room's other agents still in it, then the user's default for new threads. That agent decides. If it names no level, the provider picks.

Only the reasoning follows, never other options (a fast service tier stays the user's call). Claude's retired ultracode effort follows as Extra High. A level the model doesn't offer is refused with its levels instead of being quietly dropped.

Linked computers. peer.describe now shares each model's reasoning option and levels (optional field; older computers simply don't say). A model past the listed 12 borrows the same model's levels from this computer. The computer that runs a sub-thread re-checks the level before it starts and refuses one its model lacks, rather than letting a driver swap in another. Thread moves skip that check and keep their options as before.

What agents see. thread_agents lists each model's levels, yours with its reasoning, and room (the other agents with the reasoning the user set). The thread_start description steers the agent to its own model or one already in the room unless the user asked otherwise. thread_start, schedule_create and schedule_list report what each thread or task runs at. Outside agents' thread_start takes agent.reasoning too and follows the user's default.

What users see. The "agent wants to start threads" card shows the level beside the model ("GPT-6.1 Sol · Extra High · on Windows PC").

Docs: docs/design/child-threads.md (Reasoning), docs/design/fleet.md, and the app guide topics.

Checks: vp fmt, vp lint, vp run typecheck; server tests for the thread, schedule, link, room and outside-agent tools (240); full web unit suite and full browser suite. The plan and the diff were reviewed by another agent; its findings (receiver re-check, "default" escape, unlisted remote models, retired levels, card label on mismatched catalogs, refusing instead of dropping) are fixed and tested. Not tested live across two computers.

…heir model

An agent that started a sub-thread on a named model (most often on another
computer) sent no reasoning level, so the thread ran at the provider's
default even when that model sat in the room at a level the user chose.
Scheduled tasks an agent set up on a named model had the same gap.

The reasoning is now settled when the thread or task is asked for and saved
with it: a level the agent names (new `agent.reasoning`, or "default"), else
the level of the first agent on the same kind of provider and model among
the asking agent, the room's other agents, and the user's default for new
threads. Only the reasoning follows, never other options. A level the model
doesn't offer is refused with its levels instead of quietly dropped, and the
computer that runs a sub-thread checks it again before starting.

thread_agents lists each model's reasoning levels and the room's agents with
their levels; thread_start, schedule_create and schedule_list say what each
thread or task runs at. Linked computers share their models' levels in
peer.describe. The approval card shows the level beside the model.
@vercel

vercel Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
threadlines Ready Ready Preview Oct 31, 2026 6:42am UTC

Request Review

@badcuban
badcuban added this pull request to the merge queue Oct 31, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 31, 2026
# Conflicts:
#	apps/server/src/mcp/threadToolHandlers.ts
@badcuban
badcuban added this pull request to the merge queue Oct 31, 2026
Merged via the queue into main with commit d1a09bf Oct 31, 2026
@badcuban
badcuban deleted the fix/sub-thread-reasoning branch October 31, 2026 06:51

This branch was successfully deployed

1 active deployment
Preview — 9ccce845 Deployed Oct 31, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant