Repository navigation
How are teams enforcing tool permissions across an org? #12570
Replies: 3 comments
|
Per user, in the current code. Tool permission levels are written to Identity: goose has no notion of its own. A stdio extension is a process started on the engineer's machine with |
|
The current code-level answer above is right; for an org rollout I would not treat the client-side permission file as the security boundary. The pattern that has worked best for MCP-style deployments is:
For remote MCP specifically, the newer MCP auth model makes this cleaner because the authorization server can issue credentials to the user/client rather than relying on a credential embedded in the extension. The server should still enforce its own authorization; authentication in the client is not enough. So for a large team I would think of Goose's local permission system as one layer: The awkward part is exactly what you called out: once a stdio extension inherits local environment variables, org-wide policy becomes difficult to prove. If centralized enforcement matters, I would prefer remote MCP for sensitive integrations and keep stdio tools limited to low-risk local operations. Useful MCP auth references: |
|
Thanks both, this is the clearest answer I've had. @yaohuangguan, have you run the gateway-at-the-tool-boundary pattern for a team, or is it the design you'd choose? If you've run it, what was hardest: identity exchange, policy authoring, or proving afterwards who authorised a call? @CedricConday, is anyone you know relying on the PreToolUse hook as an org-wide control? Happy to do 20 minutes if that's easier. |
Uh oh!
There was an error while loading. Please reload this page.
The allowlist controls which extensions can be installed, and tool permissions (Always Allow / Ask Before / Never Allow) control how each tool is used. For teams running goose across many engineers: are tool permission levels enforced centrally, or set per user? And for extensions that hold credentials (GitHub, cloud, databases), what identity do they act as — the engineer's own token, a shared service account, or something scoped per session? Interested in what's worked in practice and where it's still awkward.
All reactions