githubnext/ace2Public

Ace: a collaborative coding environment on the team's own machines

Show and change collaborator agent invocation in the app

IA

Collaborator agent invocation exists only in the channel and CLI. `SettingsDoc.shared` defaults to true, and the owner-only `share` request persists it (`ace share <channel> on|off`), but `apps/app` never reads `shared` and no UI sends `share`. Teammates find out only when an invocation fails, and the owner can't change the switch from the app.

The tailnet stays the only access boundary. This is the existing single switch for all agent tools, not per-person or per-tool grants. Turning it off blocks new teammate invocations only. It doesn't hide channel content, and it doesn't stop active work: Stop and Kill behave as before.

## Acceptance criteria

- [x] The channel owner sees **Allow teammates to invoke agents** in the channel details sidebar and can toggle it. The text explains that turning it off blocks new teammate invocations, leaves the channel visible with Chat available, and doesn't stop active work. - [x] Teammates see the current state read-only in the same sidebar. - [x] A change reaches every open client immediately through the runtime-neutral channel protocol and the generic host transport, with no polling. The initial watch carries the current state, as does a reconnect or a replay to a new watcher. - [x] The protocol change is additive and backward compatible: older clients ignore it, and newer clients fall back to `info` for older hosts. A later `info` response can't overwrite a newer live state. - [x] While the switch is off, a teammate's composer holds Ace-mode and explicit `@ace` Chat-mode drafts before submit and explains why. Drafts and attachments stay intact. Human Chat messages still post. - [x] The channel still enforces the switch: a teammate `ask` is refused and a teammate `share` is refused. The owner can always invoke. - [x] The `SettingsDoc` schema is unchanged, and existing channels keep their default `shared: true`. - [ ] Validated with real runtimes and a real provider: owner and teammate enforcement, human chat while off, live changes seen by two clients, and the owner UI through Ace's native desktop tools.

## Status (Oct 6)

Implemented in draft #161. Solo evidence is partial: real-runtime enforcement and persistence, plus headless React checks of the owner toggle, teammate view and composer holds. Remaining: the native owner UI check, a real second person on another machine, and a real-provider teammate run across hosts, on current main (which now includes #157 and #159) together with the relevant #160 peer-messaging work.

Tracked by #5.

  1. iamnbutlerparent-issue-addedlast month on GitHub

  2. iamnbutlerreferenced this in feat(app): add channel header agent and desktop access toggles #161last month on GitHub

  3. IA
    Author

    Progress: #161, a draft PR.

    Done: - Owner checkbox and read-only teammate state in the details sidebar. - The optional `shared` field on the existing metadata watch event, sent on watch and on commit. The `SettingsDoc` schema is unchanged. - The `info` fallback for older hosts. - The teammate composer holds invoking drafts before submit.

    Validated in an isolated real-runtime smoke with Anthropic Haiku: owner and teammate enforcement, human chat while off, a live change seen by two clients in about 4 ms, the active run continuing, and replay and persistence after a worker restart.

    Still open: interactive native UI verification. The signed source-dev Ace-dev build launched and native inventory found its window, but capture failed because the macOS GUI session was locked. That acceptance criterion stays unchecked until the UI is exercised through Ace's native desktop tools.

  4. IA
    Author

    Solo validation for #161 is complete at head `b30e9f6`. Native and two-person checks remain.

    **Headless React:** this used the real built app assets, two isolated loopback gateways with distinct `ACE_USER` identities, and one real worker. It ran under an external Playwright 1.63.0 driver with `chromium_headless_shell-1243`, because Ace has no browser inspection tools (#50). - The owner toggle updated two owner clients and one teammate client live, in 5–31 ms. The worker handled exactly one `share` per click. - The teammate saw the state read-only. - Ace-mode drafts, `@ace` mention drafts (the composer switches these to Ace mode), and literal `@ace` text were all held. Enter sent no `ask` frame, and the worker's per-run `ask` count stayed at 0. - Text and image drafts survived switching sharing off, on, and off again. - Switch to Chat removed the mode marker and posted the draft with its image. The owner saw it live. - A real socket drop reconnected, re-watched, and kept live updates and composer gating. - Reloads preserved the state and kept streaming.

    **Fixed:** the composer's attachment tray covered and intercepted status notices placed above it. Notices now render below the composer.

    **Baseline, not changed here:** without a page reload, a worker restart misses live events until reload. That is #153, fixed by #159.

    **Remaining for tomorrow:** - [ ] Native owner UI in Ace with an unlocked session: toggle, sidebar copy, and the notice layout with an attachment. - [ ] A real second person on another tailnet machine: their view updates live, their composer holds invoking drafts, and plain chat posts. - [ ] Teammate invocation with a real provider while sharing is on, then switching off mid-run across hosts. - [ ] A combined branch with #157, #159 and #160 (being run by the transport-parity integration).

  5. IA
    Author

    Update: Codex independently reviewed the final head `b30e9f6` outside Ace (#9), with no actionable findings. GitHub checks pass.

    The solo evidence above is complete: real-runtime enforcement and persistence, plus headless React checks of the owner toggle, the teammate view, and composer holds. That includes literal `@ace` text, which the composer leaves in Chat mode. Draft and attachment retention, Switch to Chat, notice clickability, reconnect, and reload were also checked.

    Tomorrow's checklist above is unchanged: native owner UI, a real second person on the tailnet, a real-provider teammate run across hosts, and the combined #157/#159/#160 branch.

  6. iamnbutlerreferenced this in [Meta] Dogfood Ace end to end #5last month on GitHub

  7. iamnbutlerreferenced this in [Meta] Extend work across hosts and devices #58last month on GitHub

  8. iamnbutlerreferenced this in feat(app): put agent and desktop access toggles in the channel header #169last month on GitHub

  9. IA
    Author

    User-requested UI revision is implemented in #169, stacked on #161: two owner-editable toggle buttons immediately left of the channel-header + (collaborator agent invocation, independent channel-wide native desktop tools), replacing the sidebar checkbox. Desktop gating covers owner/collaborator runs and subagents, not shell tools. SettingsDoc v2 preserves existing sharing and defaults desktop enabled. Native signed-dev owner checks now passed: placement, all four combinations, restart persistence, and no sidebar checkbox; real-provider dispatch/persistence and backup migration checks also passed. Collaborator native view, split panes, older/disconnected hosts and a second tailnet person/machine remain unverified. This revises the original sidebar/unchanged-schema acceptance criteria at the user’s request; #169 documents the versioned migration.

  10. IA
    Author

    PR consolidation: the header and desktop-toggle revision e3bb405 now lives directly in #161, whose title/body have been updated. #169 is no longer open (GitHub automatically marked the stacked PR merged when its base acquired the commit). #161 is the sole open PR for this work; nothing was merged into main.

  11. iamnbutlerclosedlast month on GitHub