Skip to content

A coworker created as Built in still cannot hand work on #399

Description

@jerelvelarde

Tracking the design question #317 deferred on purpose, so it survives the PR that half-answers it.

From that PR's description:

A coworker created as "Built in" through the wizard is stored as remote_ag_ui pointed at the
managed endpoint. Its tool callbacks work (the deployment-token path), but the handoff tool is
minted only inside this deployment's own run loop, so such a coworker can be asked but cannot
itself hand work on. […] Fixing it properly means either storing endpoint-less creates as
built_in type, or adding a server-minted hop endpoint to the callback surface — worth its own PR
either way.

What #331 covers

#331 takes the first option, because the interview it adds cannot end by asking somebody for a URL.
store.create writes a built_in coworker running on its role description where there is neither
an endpoint nor a managed Bot
— which on the one-container image the README recommends is every
coworker.

That buys back exactly what the note was about, in that case: agentRunsHere is
row.type === "built_in" (plugins/store.ts), and grantable on the handoff answer comes from it,
so a coworker created that way can be handed work on.

What is still open

Where the deployment does have a managed Bot, create still prefers managedConfiguration, the
row is still remote_ag_ui, and nothing changes: the coworker can be asked and cannot hand work on.
The wizard's "Built in" option is only offered on exactly those deployments, so the case #317
described is the case still outstanding.

Two ways out, both from the original note:

  1. Store endpoint-less creates as built_in even when a managed Bot exists. Smallest diff, and
    it makes "Built in" mean one thing everywhere rather than two things depending on configuration.
    The question is what happens to coworkers already stored the other way — they keep working, but
    the roster then holds both shapes with no way to tell them apart except the endpoint string.
  2. Mint a hop endpoint on the callback surface. Leaves storage alone and makes the handoff tool
    reachable from outside the run loop. Larger, and it puts a new server-minted address into a
    surface that currently only issues tokens.

Not proposing either — this is #317's question and the choice is its author's. Filing it so it does
not disappear when #331 merges and the no-managed-Bot half stops being visible.

Activity

  1. modelpath-dev commented on Sep 27, 2026

    @modelpath-dev

    Seems like the main issue is with the "Built in" option not functioning as expected when a managed Bot is present. I'd check how the create function is handling the coworker types in those scenarios.

  2. Chebaleomkar commented on Oct 1, 2026

    @Chebaleomkar
    Contributor

    Still reproducible on main (2e096d6). profile-store.ts:423-425 still falls back to managedConfiguration when no endpoint is given, so a "Built in" coworker on a deployment with a managed Bot is stored as remote_ag_ui, and agentRunsHere says no. #579 fixed the edit path for these coworkers and, as its description says, left this question open.

    I'm happy to take this on once you've picked a direction. Option 1 looks like the smaller diff: store endpoint-less creates as built_in even when a managed Bot exists. For the existing remote_ag_ui rows pointing at the managed endpoint, I'd propose a migration that converts the ones whose endpoint equals MANAGED_AGENT_AG_UI_URL. Without it the roster keeps both shapes, as the issue notes.

    Before I start: does #673 ("Bots work as coworkers") already change create or agentRunsHere? If so I'll stay out of its way.

  3. NathanTarbert commented on Oct 8, 2026

    @NathanTarbert
    Collaborator

    Thanks @jerelvelarde for tracking this so it survived the PR that half-answered it, and @Chebaleomkar for re-checking it against main and offering to take it on.

    The good news is that the part people actually hit should be fixed now. #673 merged the day after your comment. It lets any Bot hand work on, including one running at its own endpoint, by calling back through the signed tool callback. A coworker created as "Built in" on a deployment with a managed Bot is stored as remote_ag_ui, and it now gets message_bot and ask_person like everyone else. The old agentRunsHere check is gone. Its replacement is agentCanHandOn in server/src/plugins/store.ts, and server/tests/remote-coordination.test.ts covers the remote path.

    That leaves the storage question, and I'd suggest we don't do the migration. Storing these coworkers as built_in would do more than change a label. It would move them off the managed Bot onto the in-process runtime. That changes their model, how their prompt is assembled, and whether they get the person's standing instructions. A migration keyed on MANAGED_AGENT_AG_UI_URL would also miss rows written under an earlier value of that setting. Since handoff no longer depends on the storage shape, the cost doesn't seem worth it.

    So I think this can close. @Chebaleomkar, if you'd like to confirm on a deployment with a managed Bot that a wizard-created "Built in" coworker completes a hop, that would be the last check. If it doesn't, let's reopen and look at what it does. If you'd rather "Built in" always meant in-process, happy to talk that through as its own design question.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions