Repository navigation
fix(channel): admit stop and kill like ask, and hide @ace from blocked teammates - #521
Merged
Merged
Conversation
…d teammates With collaborator agent access off, a teammate could stop or kill the owner's run, and their composer still offered Ace mode and the @ace mention. Stop and kill now carry an author that gateways stamp from Tailscale, and the channel admits them like ask. A blocked teammate's composer shows only Chat mode; a saved Ace draft keeps its words without the mention until access returns. Why: packages/channel/src/channel.ts#class Channel | stop and kill go through #mayInvoke like ask; whoever can't start a run can't end one Why: apps/host/src/gateway.ts#function authored | stop and kill always get the verified author, even when an older client sent none, or the owner's own stop is refused
iamnbutler
force-pushed
the
agent-access
branch
from
October 19, 2026 20:57
1969e94 to
dfada07
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #497, fixes #498. Both cover what a collaborator can do when the owner has turned Collaborator agent access off.
#497: stop and kill are admitted like ask
@ace/channel/protocol:stopandkillnow carry anauthor.Channel#handlevalidates that author and runs it through#mayInvoke, the same admissionaskandansweruse. A collaborator who can't invoke gets "Only the owner can invoke agents here". The owner, agent authors, and anyone in a shared channel are still admitted.authoredinapps/host/src/gateway.ts):stopandkillalways get the verified Tailscale author, even when the client sent none. Peer relays work as they do forask, because the channel's own host stamps the relaying host's login.ace stop, and host-internal kill (archive, delete,ace kill) send an author. Host-internal kill uses the record's owner.#498: no @ace for blocked collaborators
shared === falseand the viewer isn't the owner, the composer offers only Chat mode, with the placeholder "Message the channel". It has no mode toggle and no@acemention suggestion. A typed "@ace" is sent as plain text withsayand never invokes the agent. The Stop button is hidden, since the channel would refuse it now.useInvocationare removed, because the composer can no longer reach that state.@acemention removed. The stored mode (ace:mode:/channels/<id>) is left alone. When access returns, the composer is back in Ace mode and adds the mention back in front of the same words. I chose this because it loses nothing, never sends anything unasked, and matches the issue's "keep it until access returns". Sending the draft as a message straight away would post text that was written for the agent. Messages withdrawn from the queue come back the same way, without@acewhile access is off.Older peers
author, so its behavior doesn't change. The fix applies once that host updates.@ace/channel. Until then they behave as before.Smoke tests (a real worker and
anthropic/claude-haiku-4-5, in a throwawayACE_HOME/project, using a loopbackace serveon port 4199; the channel was deleted afterwards)stop,kill, andaskwere each refused, and the run kept going. Aftershare on, the teammate'sstopended it.stop(as an older app sends it) was stamped with the owner and stopped the run.ace stopandace killas the owner still stop the run.Built in Ace
No — Claude Code subagent outside Ace, run by the lead during a batch of fixes.