ms-tau-sdk 2.0.18.dev68__tar.gz → 2.0.19.dev69__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/CHANGELOG.md +16 -0
  2. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/PKG-INFO +1 -1
  3. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/pyproject.toml +1 -1
  4. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/agent_skills/tau_project_customization/SKILL.md +4 -4
  5. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/agent_skills/tau_security_and_access/SKILL.md +31 -28
  6. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/backend/client.py +1 -1
  7. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/.gitignore +0 -0
  8. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/README.md +0 -0
  9. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/__init__.py +0 -0
  10. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/app.py +0 -0
  11. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/cli.py +0 -0
  12. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/config.py +0 -0
  13. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/env_file.py +0 -0
  14. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/logs.py +0 -0
  15. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/proxy.py +0 -0
  16. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/state.py +0 -0
  17. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/static/BULMA-LICENSE.txt +0 -0
  18. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/static/app.js +0 -0
  19. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/static/board.css +0 -0
  20. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/static/bulma.min.css +0 -0
  21. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/packages/tau-board/src/ms_tau_board/static/index.html +0 -0
  22. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/__init__.py +0 -0
  23. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/agent_skills/tau_a2a_runtime_adapter/SKILL.md +0 -0
  24. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/agent_skills/tau_local_development/SKILL.md +0 -0
  25. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/agent_skills/tau_repository_integration/SKILL.md +0 -0
  26. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/api/__init__.py +0 -0
  27. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/api/a2a.py +0 -0
  28. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/api/chat.py +0 -0
  29. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/api/conversations.py +0 -0
  30. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/api/dependencies.py +0 -0
  31. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/api/health.py +0 -0
  32. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/api/inspection.py +0 -0
  33. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/api/local_chat.py +0 -0
  34. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/api/models.py +0 -0
  35. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/api/request_identity.py +0 -0
  36. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/api/sessions.py +0 -0
  37. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/app.py +0 -0
  38. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/application.py +0 -0
  39. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/backend/__init__.py +0 -0
  40. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/backend/assertions.py +0 -0
  41. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/backend/auth.py +0 -0
  42. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/backend/local.py +0 -0
  43. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/backend/mcp.py +0 -0
  44. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/backend/models.py +0 -0
  45. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/backend/routes.py +0 -0
  46. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/backend/team_memberships.py +0 -0
  47. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/cli.py +0 -0
  48. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/errors.py +0 -0
  49. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/logging.py +0 -0
  50. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/protocols/__init__.py +0 -0
  51. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/protocols/a2a_failure.py +0 -0
  52. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/protocols/a2a_message.py +0 -0
  53. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/protocols/a2a_roles.py +0 -0
  54. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/protocols/assistant_ui.py +0 -0
  55. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/protocols/chat_history.py +0 -0
  56. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/protocols/strict_json.py +0 -0
  57. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/providers/__init__.py +0 -0
  58. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/providers/definitions.py +0 -0
  59. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/providers/factory.py +0 -0
  60. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/providers/tau_compat.py +0 -0
  61. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/resources/SYSTEM.md +0 -0
  62. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/resources/__init__.py +0 -0
  63. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/resources/loader.py +0 -0
  64. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/resources/prompts/review-code-repository.md +0 -0
  65. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/__init__.py +0 -0
  66. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/deployment_health.py +0 -0
  67. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/events.py +0 -0
  68. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/extensions.py +0 -0
  69. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/failures.py +0 -0
  70. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/live_turns.py +0 -0
  71. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/manager.py +0 -0
  72. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/observability.py +0 -0
  73. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/provenance.py +0 -0
  74. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/requester.py +0 -0
  75. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/session.py +0 -0
  76. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/snapshots.py +0 -0
  77. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/runtime/task_context.py +0 -0
  78. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/sessions/__init__.py +0 -0
  79. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/sessions/storage.py +0 -0
  80. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/settings.py +0 -0
  81. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/skills.py +0 -0
  82. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/tools/__init__.py +0 -0
  83. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/tools/mainsequence_mcp.py +0 -0
  84. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/tools/mcp_applications.py +0 -0
  85. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/tools/mcp_connection.py +0 -0
  86. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/tools/skill_read.py +0 -0
  87. {ms_tau_sdk-2.0.18.dev68 → ms_tau_sdk-2.0.19.dev69}/src/ms_tau_sdk/tools/task_control.py +0 -0
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.19 — 2026-10-19
4
+
5
+ - **The Security and access guide, the provider guide and the Tau skills describe access only by
6
+ policies.** The platform decides access to every shareable object by the policies on it. The
7
+ [guide](docs/reference/security-model.md#secrets) and the provider guide no longer say how earlier
8
+ shares became policies or that no membership or policy is protected, and
9
+ `tau_security_and_access` no longer says that a delegated call reaches what the person can view
10
+ and what others shared with them. The skill now says that the call reaches what the person's
11
+ policies allow, held directly or through a team; that whoever holds `editor` or `owner` on a
12
+ Secret sets its value; and that people other than Organization admins give a workload access
13
+ only when they manage it or can see its Job or release. The guide says that `editor` or `owner`
14
+ on a workload's repository, branch or Job lets an Agent change what that workload runs, and so
15
+ reach its Secrets. The provider guide's section is now
16
+ [Named providers and policies](docs/guides/project-configuration.md#named-providers-and-policies).
17
+ No SDK behavior changes.
18
+
3
19
  ## 2.0.18 — 2026-10-18
4
20
 
5
21
  - **The Security and access guide and the Tau security skill describe Agent policies.** The
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ms-tau-sdk
3
- Version: 2.0.18.dev68
3
+ Version: 2.0.19.dev69
4
4
  Summary: Workspace-bound Tau application primitives for Main Sequence projects
5
5
  Project-URL: Changelog, https://github.com/mainsequence-sdk/ms-tau-sdk/blob/development/CHANGELOG.md
6
6
  Project-URL: Documentation, https://github.com/mainsequence-sdk/ms-tau-sdk/tree/development/docs
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ms-tau-sdk"
7
- version = "2.0.18.dev68"
7
+ version = "2.0.19.dev69"
8
8
  description = "Workspace-bound Tau application primitives for Main Sequence projects"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -183,8 +183,8 @@ Rules for tools that act for the requester:
183
183
  credentials itself. A tool never reads, logs, stores, or forwards them, passes a path rather than
184
184
  a URL, and never sets `Authorization` or an `X-MainSequence-*` header.
185
185
  - A delegated call uses the person's ordinary permissions, including administrative ones; any other
186
- call uses the Agent's own. Each operation decides what it needs. Never infer write permission
187
- from read access.
186
+ call uses the Agent's own. Each operation decides what it needs: never infer that a call may
187
+ change an object because it may read it.
188
188
  - Return to the model only business results, such as rows, numbers, and names. Never return the
189
189
  response object, its headers, a token, a proof, or a raw error body.
190
190
  - Keep nothing for another turn or another person. The delegation ends with the turn, and a task
@@ -206,8 +206,8 @@ separate authority. Prompt injection can cause unintended changes, sharing, or d
206
206
  person's permissions, and completed writes can outlast the delegation. Only Organization admins
207
207
  enable this authority.
208
208
 
209
- For a complete example, a tool that uses a person's Secret without exposing it, and how sharing
210
- decides what a delegated call can reach, use `tau_security_and_access`.
209
+ For a complete example, a tool that uses a person's Secret without exposing it, and how policies
210
+ decide what a delegated call can reach, use `tau_security_and_access`.
211
211
 
212
212
  ## Validation
213
213
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: tau-security-and-access
3
- description: Build and review project tools that call the platform or other applications for the person a turn serves, including tools that use a person's Secret without exposing it, and explain how delegation and sharing decide what those tools can reach.
3
+ description: Build and review project tools that call the platform or other applications for the person a turn serves, including tools that use a person's Secret without exposing it, and explain how delegation and policies decide what those tools can reach.
4
4
  ---
5
5
 
6
6
  # TAU Security and Access
@@ -8,7 +8,7 @@ description: Build and review project tools that call the platform or other appl
8
8
  Use this skill when a project tool under `.tau/extensions/` calls the platform or another
9
9
  platform application, uses a Secret, or must answer each person with their own data. Extension
10
10
  mechanics are in `tau_project_customization`. The full model, with the administrator setup, is in
11
- the SDK's Security and access guide (`docs/reference/security-model.md`). Sharing itself is in
11
+ the SDK's Security and access guide (`docs/reference/security-model.md`). Managing policies is in
12
12
  `.agents/skills/mainsequence/platform_operations/access_control_and_sharing/SKILL.md`.
13
13
 
14
14
  ## Who a call acts as
@@ -26,7 +26,8 @@ Every call a tool makes through `platform_client()` follows one rule:
26
26
  enable it, with `acts_for_requester`), for work no person asked for, in local mode and outside a
27
27
  turn.
28
28
  - The operation or application that receives the call decides what it may do. No list says which
29
- operations accept a delegation. Read access never implies edit, run, share or delete.
29
+ operations accept a delegation. On the platform, each operation needs its own action: reading an
30
+ object never lets the call change, run or delete it, or decide who has access.
30
31
  - The call stays the Agent's call, made for the person. It is not impersonation: the platform
31
32
  checks it on every call, only while the turn or Task serving the person runs, for at most 24
32
33
  hours after their request, and only in the Agent's Environment.
@@ -175,40 +176,42 @@ What makes it safe:
175
176
  - The Agent's own workload holds no grant on these Secrets, so a call without the person reaches
176
177
  none of them.
177
178
 
178
- ## Sharing decides what a delegated call can reach
179
+ ## Policies decide what a delegated call can reach
179
180
 
180
- A delegated read returns anything the person can view in the Agent's Environment: what they
181
- created and what others shared with them, directly or through a team. This holds for Secrets and
182
- other shared resources. A team's members receive what is shared with it, and `in_teams()` answers
183
- membership. Who can see and manage a team is decided separately, by the `viewer`,
184
- `membership_manager`, `editor` and `owner` policies on it: any person can create a team and
185
- becomes its owner and first member, members can see the team and leave it, and Organization admins
186
- manage every team from their role, without being members. No membership is protected. See the SDK
187
- Security and access guide's **Teams and membership** section. The platform enforces sharing;
188
- which of those objects a tool uses is part of the tool's design. For Secrets, the naming
189
- convention states that design:
181
+ A delegated call reaches what the person's policies allow in the Agent's Environment: the policies
182
+ they hold directly, such as `owner` on what they created, and those given to a team they belong to.
183
+ This holds for Secrets and every other object the platform decides by policies. A team's members
184
+ receive the policies given to it, and `in_teams()` answers membership. Who can see and manage a
185
+ team is decided separately, by the `viewer`, `membership_manager`, `editor` and `owner` policies on
186
+ it: any person can create a team and becomes its owner and first member, members can see the team
187
+ and leave it, and Organization admins manage every team from their role, without being members.
188
+ See the SDK Security and access guide's **Teams and membership** section. The platform enforces
189
+ the policies; which of those objects a tool uses is part of the tool's design. For Secrets, the
190
+ naming convention states that design:
190
191
 
191
192
  - **A personal credential:** a name tied to the person, such as `QUOTES_API_KEY__<person uid>`.
192
- The person decides whether to share it.
193
+ The person owns it and decides whether anyone else gets a policy on it.
193
194
  - **A team credential:** a name the team agrees on, with `value_reader` attached to the team. The
194
195
  tool reads it for any member.
195
- - **Someone else's Secret shared with the person:** valid whenever the tool is meant to use it.
196
+ - **Someone else's Secret whose value the person may read:** valid whenever the tool is meant to
197
+ use it.
196
198
 
197
- Whoever can edit a Secret decides its value, so the tool uses whatever value they set. Granting or
198
- accepting edit on a Secret means trusting that person with what the tool does with it. That is a
199
- decision people make through sharing, not one the platform makes for them.
199
+ Whoever holds `editor` or `owner` on a Secret sets its value, so the tool uses whatever value they
200
+ set. Giving someone either policy on a Secret, or using a Secret whose editors or owners are other
201
+ people, means trusting them with what the tool does with it. That is a decision people make when
202
+ they give policies, not one the platform makes for them.
200
203
 
201
- How sharing works:
204
+ How Secret policies work:
202
205
 
203
206
  - Policies on a Secret decide access: `reader` sees that it exists and its name, never its value;
204
207
  `value_reader` also reads the current value; `editor` also reads earlier values, sets a new value,
205
208
  deletes it and sees who has access; `owner` also decides who has access. The creator becomes its
206
209
  owner, and Organization admins hold every policy on their Organization's Secrets from their role.
207
210
  - Owners attach and detach these policies for people, teams and workloads; whoever manages a
208
- workload can also give it a policy they hold, and anyone can remove their own. No policy is
209
- protected: an owner can remove the creator's. Nobody gives a policy with more than they hold, and
210
- people other than Organization admins give access only to people who share an active team with
211
- them, to teams they belong to and to workloads they can view.
211
+ workload can also give it a policy they hold, and anyone can remove their own. Nobody gives a
212
+ policy with more than they hold, and people other than Organization admins give access only to
213
+ people who share an active team with them, to teams they belong to, and to workloads they manage
214
+ or whose Job or release they can see (`jobs.read` or `resource-releases.read`).
212
215
  - `GET /api/v1/secrets/<uid>/access/` lists who holds which policy, for editors and owners, and
213
216
  `GET /api/v1/secrets/<uid>/access/me/` answers what the caller may do with it. A tool can use
214
217
  them when its design needs to, for example to refuse a team key where it expects a personal one.
@@ -265,9 +268,9 @@ platform checks it again on every call.
265
268
 
266
269
  ## Checking the person's teams
267
270
 
268
- A delegated call already reaches exactly what the person can, including what is shared with their
269
- teams, so a tool rarely checks teams itself. When the tool's own policy names teams, ask the
270
- platform with `in_teams()`:
271
+ A delegated call already reaches exactly what the person can, including what the policies given to
272
+ their teams allow, so a tool rarely checks teams itself. When the tool's own policy names teams,
273
+ ask the platform with `in_teams()`:
271
274
 
272
275
  ```python
273
276
  person = current_requester()
@@ -328,7 +331,7 @@ Patch the extension module's `current_requester` and `platform_client` with fake
328
331
  - No person's UID, Secret name or Secret value comes from tool arguments, the prompt or history.
329
332
  - No tool returns a credential or calls a platform path the model chooses.
330
333
  - Secret values stay inside one call, in headers, never in results, logs, errors, URLs or caches.
331
- - The naming convention says whose Secrets the tool uses, and the people sharing them know it.
334
+ - The naming convention says whose Secrets the tool uses, and the owners of those Secrets know it.
332
335
  - A refused delegated call is reported, never retried as the Agent.
333
336
  - The Agent's workload holds no grants it does not need, and none on people's Secrets; `user` is
334
337
  enough on an Agent it only sends work to.
@@ -870,7 +870,7 @@ class MainSequenceClient:
870
870
  custom_id: str | None = None,
871
871
  organization_environment_uid: str | None = None,
872
872
  ) -> ProviderExecutionEvidence:
873
- """Hydrate an owned or shared selection using the backend's access checks."""
873
+ """Hydrate a selection the user's policies allow, using the backend's access checks."""
874
874
  selection: dict[str, str] = {"provider": provider, "model": model}
875
875
  if thinking_level:
876
876
  selection["thinking_level"] = thinking_level