bao reader policy, responder units and docs for the per-surface grant
This commit is contained in:
parent
e7e3281098
commit
a73946102f
1 changed files with 103 additions and 63 deletions
|
|
@ -289,6 +289,8 @@ host access it has.
|
|||
| `execution` | the `bash` MCP server (`mcp__bash__run`/`status`/`kill`), rendered into the agent's MCP config only with it; a subagent gets Claude's own `Bash` instead. See `docs/tools/bash.md`. |
|
||||
| `web_tools` | the Claude built-ins `WebFetch`/`WebSearch` |
|
||||
| `manage_root_agent` | every agent's state (rw) bind-mounted into the holder's container, plus `/meta` (ro) |
|
||||
| `logs` | the log store: `swarm-logs` queries. Checked by `swarm-logs-auth` at the gateway, not by a tool list. Off by default. |
|
||||
| `metrics` | the metrics store: `swarm-metrics` queries. Checked by `swarm-metrics-agent-auth`, the same binary, for the metrics gateway. Off by default. |
|
||||
|
||||
**Always-on tools** — `Permission::ALWAYS_ON_TOOLS` exposes `set_status`,
|
||||
`compact`, and `mark_todos_done` to every agent regardless of its
|
||||
|
|
@ -311,6 +313,23 @@ the default (`Permission::DEFAULT`): `messaging`, `meta`, `inbox`,
|
|||
none. swarm-controller logs every refused `PUT` or `DELETE` on that route at `warn` as
|
||||
`agent permissions: request refused`, with the fields `op`, `agent`, `status` and `detail`.
|
||||
|
||||
**`logs` and `metrics`** — off for every agent until granted, and separate
|
||||
because logs are the more sensitive. Grant one with
|
||||
`swarmctl agent permissions set <agent>` (listing it with the others) or the
|
||||
create-agent screen. An agent without it gets a 403 from the store's gateway
|
||||
when `swarm-logs` or `swarm-metrics` queries; a bad secret is still a 401. The
|
||||
controller refuses the grant, with a 409 naming the hive, unless the agent's
|
||||
hive advertises `tolerant-permissions` in its status snapshot
|
||||
(`swarm_wire::hive_status`): a hive that predates the permission would fail to
|
||||
decode the record. It also mirrors the two grants to the store leaf
|
||||
`swarm/agents/<agent>/observability` (`swarm_secret_client::observability`),
|
||||
which the gateways read; the gateway denies when it can't read that leaf. A
|
||||
revoked grant stops working within `authVerdictTtl` (60 seconds by default) of
|
||||
the agent's last allowed query. Grant it only after the agent runs a harness
|
||||
that skips names it doesn't know (its next update after the release that adds
|
||||
these two); an older harness that reads such a record holds no permissions at
|
||||
its next start.
|
||||
|
||||
**Internet flag** — the record also carries `unrestricted_internet`, a
|
||||
boolean that isn't a `Permission`. An absent value means on, so every agent
|
||||
that existed before the field keeps the open access it had. `POST /api/agents`
|
||||
|
|
|
|||
Loading…
Reference in a new issue