Skip to content

Thread roles: five standard roles, role icons, and native vs child subagents #18

Closed

Description

@tannerpolley

Goal

Give every thread a visible role with an icon, cut the roles down to five, and make the difference between kinds of subagents obvious.

Owner request (2026-10-12):

  • Role icons for each thread.
  • Standard roles: Orchestrator, Implementor, Reviewer, Investigator, Checker.
  • An easy way to tell native subagents (which "run on their own, open parent") apart from real threads you can type into.
  • Split subagents into two groups:
    • native subagents working in the same place as their orchestrator;
    • child threads working in their own worktree, which are essentially issue agents.

What exists today

  • Two unrelated role lists, neither stored on threads.
    • Model-role ids in settings (DEFAULT_MODEL_ROLES, settings.ts ~1248–1327): orchestrator, fast-builder, checker, thorough-builder, bounded-worker, evidence-gatherer, quick-claude, strong-reviewer. These only feed agent prompts.
    • delegate_task's role: implementation, research, review, design, test, general (orchestratorMcp.ts ~145). It only prefixes the prompt and picks the default workspace.
    • Neither is saved on the child thread (OrchestrationV2AppThread has no role field), and sidebar rows show no role.
  • Issue-work roots and workers are inferred from repositoryOrchestration and linkedIssue.
  • Native versus app-owned.
    • isProviderNativeSubagentThread (relationshipToParent === "subagent" && creationSource === "provider") is used by ProviderSubagentBar.tsx ("Runs on its own" / "Open parent").
    • The sidebar nesting, the timeline divider and the header breadcrumb treat both kinds the same.
  • Own worktree versus shared. This is known only by comparing worktreePath with the parent's (childWorktreeLabel).

Proposed

  1. Five roles. Make the five roles the one list used for both model roles and delegate_task's role, with a mapping from the old ids so saved settings keep working.
  2. Store the role on the thread when it is created: delegated children from delegate_task, issue roots as Orchestrator, issue workers as Implementor. Top-level user threads have no role, or Orchestrator if they delegate.
  3. Show a role icon in the sidebar row, as a column (Sidebar rows in fixed columns: location, role, provider, model, effort, name, time, work, usage #19), and in the chat header.
  4. Mark the two subagent kinds clearly:
    • Native subagents: read-only, same workspace, "runs on its own". A distinct icon or style, no input affordance.
    • Child threads: own thread you can type into, usually its own worktree, often issue agents. They look like normal threads, nested under their orchestrator.

Mobile is out of scope. Related: #12 (roles ranked by usage), #8 (issue agents).

Activity

  1. tannerpolley commented on Oct 13, 2026

    @tannerpolley
    OwnerAuthor

    Owner decisions (2026-10-13):

    • Builders: one Implementor role with explicit Fast and Thorough profiles, each with its own model list ranked by usage left.
    • A thread the owner creates shows no role until it starts child work; then it is Orchestrator.
  2. tannerpolley commented on Oct 14, 2026

    @tannerpolley
    OwnerAuthor

    Merged to main in 10b8b90 (branch t3/18-20-role-location-icons, 5 commits).

    • Roles: the standard roles are Orchestrator, Implementor (Fast and Thorough profiles), Reviewer, Investigator and Checker. Saved model roles migrate with no loss: checked read-only against the owner's real settings, and running the migration twice changes nothing. A thread you create becomes Orchestrator only when it first delegates; a thread that already has a role keeps it.
    • Icons: location icons (main checkout, worktree, or remote/cloud) and role icons appear on Projects rows, Activity cards, child rows, lineage rows, search rows, the legacy sidebar and the thread header. Native subagents get their own icon.
    • Workspaces: only Implementor defaults to a new worktree. Reviewer, Investigator and Checker stay in the caller's checkout.
    • Review: an independent Opus review and a second verification pass. Fixed: role overwrite, render cost of the icons and header, a lock mismatch, limits, and weak tests. The final fix keeps every model-role choice in agent instructions while the whole list fits.
    • Tests: 412 focused tests; tsc-rs is clean for contracts, server, web, provider-core, client-runtime and shared.
    • Known, not fixed: threads that delegated before this change show no role (no backfill). Six ProviderEventIngestor test failures existed before this branch.

    Ships in v2.12.1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementRequested improvement or new capability.

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions